i.MAX RT 系列之存储器映射
一、前言 在《初识 i.MX RT 系列》中,我们了解了 i.MX RT 系列芯片的特点和芯片架构,本文将以 RT1060 为例介绍 i.MX RT 系列的存储器映射及它的区域功能划分,参考 NXP 《IMXRT1060RM》(参考手册)一起看,理解效果会更加。
二、存储器映射 存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程就称为存储器映射,具体见图 2.1 。如果给存储器再分配一个地址就叫存储器重映射。
图 2.1 Cotex-M7 存储器应用
2.1 存储器区域功能划分 在 4G 地址空间中, ARM 已经被分成了 8 块,并规定了用途,具体如下表格 2-1 所示,大部分块的大小都有 512MB 以上。
序号 | 用途 | 地址范围 | Block 0 | Code | 0x0000 0000 ~ 0x1FFF FFFF (512MB) | Block 1 | SRAM | 0x2000 0000 ~ 0x3FFF FFFF (512MB) | Block 2 | Peripheral 片上外设 | 0x4000 0000 ~ 0x5FFF FFFF (512MB) | Block 3 | External RAM(外部RAM) | 0x6000 0000 ~ 0x9FFF FFFF (1024MB) | Block 4 | External device(外部设备) | 0xA000 0000 ~ 0xDFFF FFFF (1024MB) | Block 5 | 内核私有外设内部总线 | 0xE000 0000 ~ 0xE003 FFFF (256KB) | Block 6 | 内核私有外设外部总线 | 0xE004 0000 ~ 0xE00F FFFF (768KB) | Block 7 | 系统外设 | 0xE010 0000 ~ 0xFFFF FFFF (511MB) |
表 2-1 内核划分的存储器功能分类
在这 8 个 Block 中, Block0 、 Block1 及Block2 三个块是非常重要的。 Block0 一般采用 Flash 存储器存储程序代码, Block1 主要用于运行时的内存,一般用 SRAM 存储器,Block2 主要用于设计成片上外设,内核通过相应的地址访问片上外设。这三个 Block 具体区域的功能划分介绍如下:
(1)存储器Block0 内部区域功能划分 ARM 内核设计中, Block0 主要用于存储代码,在 i.MX RT1060 中,又把 Block0 细致地根据自己的芯片需求设计出具体的功能分配方案,如表 2-2 所示。
Start Address | End Address | Size | Description | 1000_0000 | 1FFF_FFFF | 256MB | Reserved | 0800_0000 | 0FFF_FFFF | 128MB | Reserved | 0040_0000 | 07FF_FFFF | 124MB | Reserved | 0028_0000 | 003F_FFFF | 1536KB | Reserved | 0022_0000 | 0027_FFFF | 384KB | ROMCP Reserved | 0020_0000 | 0021_FFFF | 128KB | ROMCP | 0010_0000 | 001F_FFFF | 1MB | ITCM Reserved | 0008_0000 | 000F_FFFF | 512KB | ITCM Reserved | 0000_0000 | 0007_FFFF | 512KB | ITCM |
表 2-2 RT1060 芯片对存储器 Block0 内部区域功能划分
首先是指令紧耦合内存(ITCM)。其中,“指令”指该内存专用于缓存指令,“紧耦合”指该内存与内核连接紧密,有非常高的访问速度。对于希望有着极高执行速度的代码,我们可以要求内核上电后把相应的代码从外部 FLASH 加载到 ITCM ,那么在运行时,代码的执行速度就不会因外部 FLASH 的访问速度而存在瓶颈。 其次是 ROMCP ,这是一小段 ROM 空间,用于存储芯片启动时的加载代码,即 bootloader ,它负责把指令从外部存储器加载至 ITCM 。 (2)储存器Block1 内部区域功能划分
Block1 用于设计片内的 SRAM ,也就是芯片运行时的内存,在 i.MX RT1060 芯片内部把这部分划分了两种 RAM 类型。Block1 内部区域的功能划分具体见表 2‑3。
Start Address | End Address | Size | Description | 3000_0000 | 3FFF_FFFF | 256MB | Reserved | 2040_0000 | 2FFF_FFFF | 252MB | Reserved | 2030_0000 | 203F_FFFF | 512KB | OCRAM Reserved | 2028_0000 | 202F_FFFF | 512KB | OCRAM - FlexRAM | 2020_0000 | 2027_FFFF | 512KB | OCRAM2 | 2010_0000 | 201F_FFFF | 1MB | Reserved | 2008_0000 | 200F_FFFF | 512KB | DTCM Reserved | 2000_0000 | 2007_FFFF | 512KB | DTCM |
表 2-3 RT1060 芯片对存储器 Block1 内部区域功能划分
DTCM — 数据紧耦合内存,它和 ITCM 相似,有着极高的访问速度,不过它是专门用来存储程序数据的,即代码中变量的存储位置。 OCRAM — On-chip RAM,片上内存,可以把它理解为传统 MCU 的内部 SRAM ,可用于存储指令和数据(通用)。
(3)储存器Block2 内部区域功能划分 Block2 用于设计片内的外设,在 RT1060 芯片中,它的外设使用 5 条总线与内核进行连接,它们的地址分配情况见表格 2‑4(此处仅列出 AIPS 总线相关部分)。
Start Address | End Address | Size | Description | 4200_0000 | 420F_FFFF | 1MB | AIPS-5 | 4030_0000 | 403F_FFFF | 1MB | AIPS-4 | 4020_0000 | 402F_FFFF | 1MB | AIPS-3 | 4010_0000 | 401F_FFFF | 1MB | AIPS-2 | 4000_0000 | 400F_FFFF | 1MB | AIPS-1 |
表 2-4 RT1060 芯片对存储器 Block2 内部区域功能划分
AIPS 是 ARM IP Bus 的缩写,它一边与内核 AHB 总线连接,另一边与片上的各种外设连接, AIPS 1~5 连接了各种各样的外设,此处每条总线划分的地址范围各为 1MB ,内核根据地址可以访问相应总线下的外设,达到控制目的,下面是 AIPS-2 总线上外设的地址分配,见表 2‑5 。
表 2‑5 AIPS-2 总线地址分配
该表格的最右侧栏是挂在 AIPS-2 总线上的外设名称。本文主要介绍了 i.MX RT 系列芯片存储器映射及以 RT1060 为例介绍了存储器区域功能的划分,在下一篇博文《i.MX RT 系列之寄存器映射》中,将围绕 RT1060 探讨什么是寄存器,什么又是寄存器映射。 喜欢的点关注,关注博主不迷路~~
【参考文献】
|