TCM(两块)和SRAM(多块)

TCM : Tightly-Coupled Memory 紧密耦合内存 。

  1. ITCM 用于指令
  2. 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 的缓冲。

  1. SRAM4 区
    位于 D3 域,数据带宽是 32bit,挂在 AHB 总线上,大部分主控都能访这块 SRAM 区。
    速度:200MHz。
    地址:0x3800 0000,大小 64KB。
    用途:用途不限,可以用于 D3 域中的 DMA 缓冲,也可以当 D1 和 D2 域进入 DStandby 待机方式后,继续保存用户数据。
  2. 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;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容