ET6000系列MCU 片上存储类型说明

文档编号:AN0006

​ 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包含ICache和DCache

    • 开启Cache可以显著提升指令在eFlash中执行的速度

  • SRAM

    • 物理上与CPU核距离较远,通过总线与CPU连接

    • 存储应用程序指令

    • 存储和更新应用程序数据

    • 访问速度高于Flash, 低于 TCM

    • 使用时,建议开启cache

  • eFlash

    • 存储应用程序指令

    • 访问速度最慢

    • 使用时,建议开启cache

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

C2000 vs ET6000

C2000 ET6000 相同点 差异点
M0/M1 RAM TCM 与CPU紧耦合 ,带ECC C2000: 只有CPU可以访问
ET6001: 单核:CPU和DMA都可以访问
双核:每个核只能访问自己的TCM
LSx RAM SRAM 带ECC C2000: 默认只有CPU可以访问,配置后可以与CLA共享或CLA独享
ET6001: CPU和DMA都可以访问
GSx RAM SRAM 带ECC C2000: 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