| |
地址映射图
Memory map |
Region |
code |
Instruction fetches are performed over the ICode bus. Data accesses are performed over the DCode bus |
SRAM |
Instruction fetches and data accesses are performed over the System bus. |
SRAM bit-band |
Alias region .data accesses are aliases. Instruction accesses are not aliases |
Peripheral |
Instruction fetches and data accesses are performed over the system bus |
Peripheral bit-band |
Alias region. data accesses are aliases. Instruction accesses are not aliases |
External RAM |
Instruction fetches and data accesses are performed over the System bus. |
External device |
Instruction fetches and data accesses are performed over the System bus. |
Private peripheral bus |
External and internal private peripheral (PPB) interface. See private peripheral bus. This memory region is execute never(XN) and so instruction fetches are prohibited. An MPU, if present cannot change this . |
System |
System segment for vendor system peripherals. This memory region is XN, and so instruction fetches are prohibited. An MPU , |
地址空间可以通过另一种方式分为 8 个 512MB 等份:
1. 代码区( 0x0000_0000-
0x1FFF_FFFF)。该区是可以执行指令的,缓存属性为 WT( “写通”,Write Through),即不可以缓存。此区亦允许布设数据存储器。在此区上的数据操作是通过数据总线接口的(估计读数据使用
D-Code,写数据使用 System),且在此区上的写操作是缓冲的。
2. SRAM 区( 0x2000_0000
– 0x3FFF_FFFF)。此区用于片内 SRAM,写操作是缓冲的,并且可以选择 WB-WA(Write Back,
Write Allocated)缓存属性。此区亦可以执行指令,以允许把代码拷贝到内存中执行——常用于固件升级等维护工作。
3. 片上外设区(0x4000_0000
– 0x5FFF_FFFF)。该区用于片上外设,因此是不可缓存的,也不可以在此区执行指令(这也称为
eXecute Never, XN。
arm 的参考手册大量使用此术语)。
4. 外部 RAM 区的前半段( 0x6000_0000 - 0x7FFF_FFFF)。该区可用于布设片上 RAM 或片外 RAM,可缓存(缓存属性为 WB-WA),并且可以执行指令.
5. 外部 RAM 区的后半段( 0x8000_0000 – 0x9FFF_FFFF)。除了不可缓存(WT)外,同前半段。
6. 外部外设区的前半段(0xA000_0000 – 0xBFFF_FFFF)。用于片外外设的寄存器,也用于多核系统中的共享内存(需要严格按顺序操作,即不可缓冲)。该区也是个不可执行区。
7. 外部外设区的后半段(0xC000_0000 – 0xDFFF_FFFF)。目前与前半段的功能完全一致。
8. 系统区(0xE000_0000 – 0xFFFF_FFFF)。此区是私有外设和供应商指定功能区。此区不可执行代码。系统区涉及到很多关键部位,因此访问都是严格序列化的(不可缓存,不可缓冲)。