RT1050开发--第6节 RT1050 Memory Mapping
第6节 RT1050 Memory Mapping

RT1052结构框图

Cortex-M7 存储器映射

- 如果给存储器再分配一个地址,就叫做存储器重映射;
- 在4GB的地址空间,ARM粗线条的平均分为7个块,每个块也规定了用途,大部分的款大小都是512MB以上,显然是很大的,芯片厂商在每个块的范围内设计外设时根本用不完;

RT1052存储器功能划分
重点!!!
在这上面的7个Block中,有4个非常重要。
- Block0 主要用于存储**程序代码**,一般采用FLASH存储器;
- Block1 主要用于**运行时内存**,一般采用SRAM存储器;
- Block2 用来设计成片上外设,内核通过相应的地址访问片上外设;
- Block5 用于NVIC,系统定时器,系统功能控制块;
Block0

自下往上看:
- ITCM:是Instruction Tightly-Coupled Memory的缩写,指的是**指令紧耦合内存**。
- 所谓紧耦合,指的是该内存与内核紧密连接,有很高的访问速度,而“指令”,表示该内存用于缓存指令;
- 对于我们希望有极高执行速度的代码,可以要求内核上电后把相应的代码从外部的Flash加载至ITCM,那么在运行时,代码的执行速度就不会因为外部的Flash访问速度而存在瓶颈。
- ROCMP:**这是一小段ROM空间,用于存储芯片启动时的加载代码,即Bootloader,Bootloader负载把指令从外部存储器加载到ITCM**;
- FlexSPI:和SEMC一起是RT1052中可用于控制外部并行和串行NorFlash的两个外设,此处把它们映射到这个代码空间,是歪了支持XIP功能(即指令直接在NorFlash中运行,不需要加载到内部的ITCM)。
- SEMC:智能外部存储器控制器;
Block1

- DTCM:数据紧耦合内存,和ITCM类似,有着极高的访问速度,*不过它是专门用来存储程序数据的,即带啊吗中变量的存储位置*;
- OCRAM:是 On-chip RAM 的缩写。即片上内存,可以完全把它理解为传统MCU内部的SRAM,它没有像ITCM和DTCM的专用限制,**可以用于存储指令和数据**(通用目的)。
注意!
在RT1052中,TCM只有512KB,不是分别ITCM DTCM OCRAM都有,而是它们三个共有512KB!

通过FUSE,有16种FlexRAM的配置!这个和后续的分散加载文件息息相关!
- 具体来说,ITCM DTCM OCRAM三种存储器**共享内部FlexRAM的空间,而这个内部的FlexRAM空间在RT1052中是512KB**;
- 默认是第一种配置,256-128-128;
Block2

Block2 用于设计片内的外设,在RT1052中,它的外设使用4条总线与内核进行连接,AIPS 是 ARM IP Bus
的缩写,**它一边与 AHB 总线连接,另一边与片上的各种外设连接,AIPS1~4 即连接了各种各样的外设,此处每条总线划分的地址范围是1MB,内核根据地址可以访问相应总线下的外设,达到控制目的**。
Block5

谁影响了代码的运行速度?

订正:
- I-Cache/D-Cache
RT1052没有内置的Flash,那么如果像原来一样,在MCU的Flash中运行,就会受限于NorFlash的总线访问速度,无法发挥CPU速度的优势。那么,通过分散加载文件,到Cache,TCM中运行,就是一个可行的解决方案了。
RT1050开发--第6节 RT1050 Memory Mapping
https://dustofstars.github.io/NXP/RT1050/rt1050开发-第6节-rt1050-memory-mapping/