数据放在 DTCM 和普通 SRAM 的区别

 

一、 问题描述

         在将一段代码通过外部传输方式放入 ram 中运行的目的中(详见《关于函数指针值和函数入口地址不同思考》),有发现将代码放在普通 SRAM 和放在 DTCM 中是不一样的,放在 DTCM 中可以正常运行,普通 SRAM 不可以。这里简单介绍一下 DTCM 相对普通 SRAM 的区别。

 

二、问题解析

TCM,tightly coupled memory,又有 ITCM(Instruction TCM) 和 DTCM(Data TCM) 之分。这里以 M7 举例,一个处理器(即一个M7核)最多有两个 TCM(TCM 都是可选,可有可无),即 ITCM 和 DTCM,每个 TCM 具有 双字数据宽度,其中 ITCM 可以通过 64 位宽接口访问,DTCM 可以通过 32 位宽 D1TCM (高字)和 32 位宽 D0TCM 访问(低字)。

指令获取和数据访问可以通过 ITCM、DTCM 或 AXIM 接口执行,但不同的是,ITCM 位于 0x00000000,DTCM 位于 0x20000000。一般而言,ITCM 用于存放执行代码和常量,DTCM用于存放可变数据。对于当前的 TCM 对应的内核而言,TCM 是与缓存并行的(TCM 始终是 非缓存非共享的 normal 内存),当然,其他核也可以通过 AHBS 对 其他核的 TCM 进行访问。

DTCM 一般都是RAM,ITCM 可以为 RAM,可以为 Flash。

         结合上面提到的 TCM 的内容,我们可以总结出:

  • 如果不考虑缓存和 MPU,一般而言,相比较存放在普通 SRAM,存放在 DTCM 的数据,其对应的内核访问的时候会更快
  • 不考虑 MPU,只开启缓存,那么 DTCM里面的数据是不能被缓存的,但普通 SRAM 的数据是可被缓存的,我们写入和读出的时候需要注意缓存的影响

三、参考文档

(1) ARM:《DDI0489F_cortex_m7_trm.pdf》

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论