TCM : Tightly-Coupled Memory 紧密耦合内存 。
- ITCM 用于指令
- DTCM 用于数据
特点是跟内核速度一样,而片上 RAM 的速度基本都达不到这个速度。
速度:480MHz(和芯片的速度一致)
DTCM 地址:0x2000 0000,大小 128KB。
ITCM 地址:0x0000 0000,大小 64KB。
各块 SRAM 的特性对比如下,特别注意他们支持的最大速度和容量大小。
1.AXI SRAM 区
位于 D1 域,数据带宽是 64bit,挂在 AXI 总线上。除了 D3 域中的 BDMB 主控不能访问,其它都可以访问此 RAM 区。
速度:200MHz。
地址:0x2400 0000,大小 512KB。
用途:用途不限,可以用于用户应用数据存储或者 LCD 显存。
2.SRAM1,SRAM2 和 SRAM3 区
位于 D2 域,数据带宽是 32bit,挂在AHB 总线上。除了 D3域中的 BDMB主控不能访问这三块SRAM,其它都可以
访问这几个 RAM 区。
速度:200MHz。
SRAM1:地址 0x3000 0000,大小 128KB,用途不限,可用于 D2 域中的 DMA 缓冲,也可以当 D1 域断电后用于运行程序代码。
SRAM2:地址 0x3002 0000,大小 128KB,用途不限,可用于 D2 域中的 DMA 缓冲,也可以用于用户数据存取。
SRAM3:地址 0x3004 0000,大小 32KB,用途不限,主要用于以太网和 USB 的缓冲。
- SRAM4 区
位于 D3 域,数据带宽是 32bit,挂在 AHB 总线上,大部分主控都能访这块 SRAM 区。
速度:200MHz。
地址:0x3800 0000,大小 64KB。
用途:用途不限,可以用于 D3 域中的 DMA 缓冲,也可以当 D1 和 D2 域进入 DStandby 待机方式后,继续保存用户数据。 - Backup SRAM 区
备份 RAM 区,位于 D3 域,数据带宽是 32bit,挂在 AHB 总线上,大部分主控都能访问这块 SRAM区。
速度:200MHz。
地址:0x3880 0000,大小 4KB。
用途:用途不限,主要用于系统进入低功耗模式后,继续保存数据(Vbat 引脚外接电池)。
把程序烧录在TCM中(使用MDK)
Keil MDK中,您可以使用attribute((section(".RAMTCM")))来指定一个函数或变量存储在TCM中
#include <stdint.h>
// 定义一个函数并将其存储在TCM中
__attribute__((section(".RAMTCM"))) void myFunctionInTCM(void)
{
// Your code here
}
// 定义一个变量并将其存储在TCM中
__attribute__((section(".RAMTCM"))) uint32_t myDataInTCM = 0;
使用attribute((section(".RAMX")))来指定一个函数或变量存储在SRAM的任意一块内存中,其中"X"代表SRAM的具体区域名称
将函数或变量放入SRAM特定区域的示例:
__attribute__((section(".RAM1"))) void myFunctionInSRAM1(void)
{
// Your code here
}
将一个变量放入SRAM2区域:
__attribute__((section(".RAM2"))) uint32_t myDataInSRAM2 = 0;