ET6000系列MCU片上存储详解与应用指南

cathy的头像
cathy 发布于:周二, 09/10/2024 - 10:46 ,关键词:

ET6000系列芯片采用ARM 高性能32位微控制器内核Cortex-M7。相较于M3/M4的内存,TCM(紧耦合内存)是Cortex-M7的一项重要特性,它允许设计者配置高速、低延迟的内存区域,通常用于存储关键的,时间敏感的程序代码或数据,以减少对外部RAM的访问延迟,提高系统响应速度。

同时ET6000系列芯片配备了高速指令缓存(I-Cache)和数据缓存(D-Cache)以及超大容量的SRAM。高效的内存访问机制、优化的指令执行和灵活的存储资源配置,能够满足高性能嵌入式应用的需求。在此篇文章中,我们将对 ET6000系列MCU 片上存储资源使用和配置进行详细说明。

ET6000 各类存储类型介绍

  • TCM

    • TCM 在物理上是非常靠近CPU核的, 与CPU直接连接
    • TCM包含ITCM和DTCM
    • DTCM 通常用于存储关键变量和经常更新的变量
    • ITCM 通常用于访问关键函数、异常向量表和中断服务程序
    • ITCM和DTCM之间可以相互借用
    • TCM的访问速度远高于SRAM
  • Cache

    • 作为CPU和SRAM/eFlash之间的桥梁,缓存应用程序的部分指令和部分数据
    • 对于应用程序程序员来说,Cache内容是不可见的
    • Cache包含ICache和DCache
    • 开启Cache可以显著提升指令在eFlash中执行的速度
    • 多核或DMA访问场景,需要注意cache一致性
  • SRAM

    • 物理上与CPU核距离较远,通过总线与CPU连接
    • 存储应用程序指令
    • 存储和更新应用程序数据
    • 访问速度高于Flash, 低于 TCM
    • 使用时,建议开启cache
  • eFlash

    • 存储应用程序指令
    • 访问速度最慢
    • 使用时,建议开启cache

TCMSRAMeFlash
容量大小⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
访问速度⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
应用场景中断服务函数或实时任务,栈, 算法存储应用程序指令
存储和更新应用程序数据
存储和执行应用程序指令
掉电可以保存

C2000 vs ET6000

C2000ET6000相同点差异点
M0/M1 RAMTCM与CPU紧耦合 ,带ECCC2000: 只有CPU可以访问
ET6001: 单核:CPU和DMA都可以访问
双核:每个核只能访问自己的TCM;DMA可访问2个核的TCM
LSx RAMSRAM带ECCC2000: 默认只有CPU可以访问,配置后可以与CLA共享或CLA独享
ET6001: CPU和DMA都可以访问
GSx RAMSRAM带ECCC2000: CPU,DMA,HIC共享
ET6001: CPU和DMA都可以访问

TCM 应用示例

针对一些对执行时间有严格要求的代码段,应用开发者在优化性能时,可优先考虑将此部分代码段重定位到TCM区域中。

ET6000 SDK提供了标准的宏,用户声明函数将重映射到ITCM中(默认在eFlash中),如下示例:

1)在代码中将需要重映射的函数 增加宏定义声明__ITCM_FUNC

/* SDK 头文件已定义 */
#define __ITCM_FUNC    __attribute__((section(".ITCMFunc")))
__RAM_FUNC void Pfc_Isr(void)  /* 只需要增加 __ITCM_FUNC 即可 */
{ 
    register float dCorrOut; 
    register float dLineVoltageV; 
    register float dAdPfcVolt; 
    register float dRmsOrderA; 
    static float dLineVoltageVReg = 0; 
    ....
}

2)编译程序,编译前选择SDK默认的链接脚本link_flash.sct

3)编译成功后查看map文件,已重映射成功

Memory Map of the image
Image Entry point : 0x08000801
Load Region LR_PFLASH_CODE (Base: 0x08000400, Size: 0x0000e6f0, Max: 0x00080000, ABSOLUTE, COMPRESSED[0x0000e168])
Execution Region ITCM_RAMCODE (Exec base: 0x00000000, Load base: 0x0800a274, Size: 0x000039c0, Max: 0x00008000)
Exec Addr    Load Addr    Size         Type   Attr      Idx    E Section Name        Object
0x00000490   0x0800a704   0x00000e70   Code   RO         6377    RAMCODE             et6001acdc_isr.o

来源:翌创微

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 24