CCM/TCM在STM32中的含义和用途
CCM(Core Coupled Memory)和TCM(Tightly Coupled Memory)是ARM架构中的特殊内存类型,它们都表示与CPU核心紧密耦合的内存区域。这些内存具有一些特殊特性,使其在某些应用场景下非常有用。
CCM (Core Coupled Memory)
CCM是STM32F4系列特有的内存类型:
-
特点:
- 高速访问(零等待状态)
- 直接连接到CPU核心
- 不能被DMA访问
- 不能用于存储需要DMA操作的数据缓冲区
-
地址范围:
- STM32F407:64KB CCM,地址范围 0x10000000-0x1000FFFF
-
典型用途:
- 存储频繁访问的数据变量
- 存储不需要DMA访问的数据结构
- 存储栈(可以提高函数调用性能)
- 用于执行性能关键代码(如在链接脚本中放置特定函数)
TCM (Tightly Coupled Memory)
TCM是ARM Cortex-M架构提供的概念:
-
类型:
- ITCM (Instruction TCM):用于存储指令
- DTCM (Data TCM):用于存储数据
-
特点:
- 低延迟(通常零等待状态)
- 确定性访问时间(无缓存未命中)
- 可以在CPU运行关键代码时不受系统总线干扰
-
在STM32中:
- STM32F4:CCM实际上是DTCM的一种实现
- STM32F7/H7:提供了独立的ITCM和DTCM
在您的项目中应用CCM
您可以通过以下方式利用CCM:
-
在链接脚本中定义CCM段:
MEMORY {RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128KCCMRAM (xrw) : ORIGIN = 0x10000000, LENGTH = 64KFLASH (rx) : ORIGIN = 0x08008000, LENGTH = 480K }
-
指定变量放置在CCM中:
// 在GCC中 uint8_t ccm_buffer[1024] __attribute__((section(".ccmram")));// 在Keil MDK中 __attribute__((section(".ccmram"))) uint8_t ccm_buffer[1024];
-
优化性能关键代码:
- 将计算密集型函数放在CCM中执行
- 将频繁访问的数据结构放在CCM中
使用CCM的注意事项
-
DMA限制:
- CCM不能被DMA访问,所以不要将用于DMA传输的缓冲区放在CCM
- 例如,UART/SPI/ADC缓冲区应放在普通RAM
-
中断处理:
- 如果将中断处理程序放在CCM,可能提高响应速度
- 但要确保中断向量表已正确设置
-
启动代码:
- 启动代码不应放在CCM,因为上电后CCM内容不确定
-
省电模式兼容性:
- 在某些低功耗模式下,CCM可能会断电
- 在进入低功耗模式前,需要保存CCM中的重要数据
CCM/TCM是嵌入式系统性能优化的重要工具,合理利用这些特殊内存可以显著提高关键代码的执行效率和实时响应能力。