4.4 存储器映射
在图4-4中,连接被控总线的是Flash、RAM和片上外设,这些功能部件共同排列在一个4GB大小的地址空间内。在编程的时候,操作的正是这些功能部件。
存储器本身不具有地址信息,它的地址由芯片厂商或用户分配,给存储器分配地址的过程就称为存储器映射,具体见图4-5。如果给存储器再分配一个地址,就叫存储器重映射。
存储器区域功能划分
在这4GB的地址空间中,ARM将其大致地平均分成8块(Block),每个块也都规定了用途,具体功能分类见表4-1。每个块的大小都有512MB,显然这是非常大的,芯片厂商在每个块的地址范围内设计各具特色的外设时一般只用其中的一部分。
表4-1 存储器功能分类
在这8个Block里面,有3个非常重要,也是我们最关心的3个。Block0用于设计内部Flash, Block1用于设计内部RAM, Block2用于设计片上的外设。下面我们简单介绍这3个Block里具体区域的功能划分。
1. Block0内部区域功能划分
Block0主要用于设计片内的Flash, F429系列芯片内部Flash最大是2MB, STM32F429IGT6的Flash是1MB。在芯片内部集成更大的Flash或者SRAM意味着芯片成本会增加,往往片内集成的Flash都不会太大,ST在追求性价比的同时能做到1MB以上,实乃良心之举。Block0内部区域的功能划分具体见表4-2。
表4-2 Block0内部区域功能划分
2. Block1内部区域功能划分
Block1用于设计片内的SRAM。F429芯片内部SRAM的大小为256KB,其中64KB的CCM RAM位于Block0,剩下的192KB位于Block1,分为:SRAM1112KB、SRAM2 16KB、SRAM3 64KB。Block1内部区域的功能划分具体见表4-3。
表4-3 Block1内部区域功能划分
3. Block2内部区域功能划分
Block2用于设计片内的外设,根据外设的总线速度不同,Block2被分成了APB和AHB两部分,其中APB又被分为APB1和APB2, AHB分为AHB1和AHB2,具体见表4-4。还有一个AHB3包含了Block3/4/5/6,这4个Block用于扩展外部存储器,如SDRAM、NORFlash和NANDFlash等。
表4-4 Block2内部区域功能划分