STM32F4参考手册-存储器和总线架构
目录
STM32F4参考手册-存储器和总线架构
系统架构
AHB/APB总线桥(APB)
存储器组织结构
存储器映射
SRAM概述
Flash概述
位段
自举配置
嵌入式自举程序
物理重映射
系统架构
主系统由32位多层AHB总线矩阵构成,可实现以下部分部分的互连:
八条主控总线:
Cortex-M4F内核I总线、D总线和S总线
DMA1存储器总线
DMA2存储器总线
DMA2外设总线
以太网DMA总线
USB OTG HS DMA总线
七条被控总线:
内部Flash ICode总线
内部Flash DCode总线
主要部分SRAM1(112KB)
主要部分SRAM2(16KB)
主要部分SRAM2(64KB)(仅适用于STM32F42xxx和STM32F43xxx器件)
AHB1外设(包括AHB-APB总线桥和APB外设)
AHB2外设
FSMC
借助总线矩阵,可以实现主控总线到被控总线的访问,这样即使在多个高速外设同时运行期间,系统也可以实现并发访问和高效运行。
总线矩阵:用于主控总线间的访问总裁管理。仲裁采用循环调度算法。
Tips:图中显示,64KB的CCM数据RAM(内核耦合存储器)不属于总线矩阵,只能通过CPU对其进行访问。
S0--I总线:
用于将Cortex-M4F内核的指令总线连接到总线矩阵。内核通过此总线获取指令。
此总线访问的对象是包含代码的存储器(内部Flash/SRAM或通过FSMC的外部存储器)。
S1--D总线:
用于将Cortex-M4F内核的数据总线连接到总线矩阵。此总线用于访问位于外设或SRAM中的数据,也可通过此总线获取指令(效率低于ICode总线)。
此总线访问的对象是内部SRAM、APB1外设、APB2外设以及通过FSMC的外部存储器。
S2--S总线:
用于将Cortex-M4F内核的系统总线连接到总线矩阵。此总线用于访问位于外设或SRAM中的数据,也可通过此总线获取指令(效率低于ICode总线)。
此总线访问的对象是内部SRAM、APB1外设、APB2外设以及通过FSMC的外部存储器。
S3、S4--DMA存储器总线:
用于将DMA存储器总线主接口连接到总线矩阵。DMA通过此总线来执行存储器数据的传入和传出。
此总线访问的对象是内部SRAM以及通过FSMC的外部存储器。
S5--DMA外设总线:
用于将DMA外设主总线接口连接到总线矩阵。DMA通过此总线访问AHB外设或执行存储器间的数据传输。
此总线访问的对象是内部SRAM、AHB外设、APB1外设、APB2外设以及通过FSMC的外部存储器。
S6--以太网DMA总线:
用于将以太网DMA主总线接口连接到总线矩阵。以太网DMA通过此总线向存储器存取数据。
此总线访问的对象是内部SRAM以及通过FSMC的外部存储器。
S7--USB OTG HS DMA总线:
用于将USB OTG HS DMA主总线接口连接到总线矩阵。USB OTG HS DMA通过此总线向存储器加载/存储数据。
此总线访问的对象是内部SRAM以及通过FSMC的外部存储器。
AHB/APB总线桥(APB)
借助两个AHB/APB总线桥,可在AHB总线与两个APB总线之间实现完全同步的连接,从而灵活选择外设频率。
每次芯片复位后,所有外设时钟都将关闭(SRAM和Flash接口除外)。使用外设前,必须在RCC_AHBxENR或RCC_APPBxENR寄存器中使能其时钟。
Tips:对APB寄存器执行16位或8位访问时,该访问将转换为32位访问(总线桥将16位或8位数据复制后提供给32位向量)。
存储器组织结构
程序存储器、数据存储器、寄存器和I/O端口排列在同一顺序的4GB地址空间内。
各字节按小端格式在存储器中编码。字中编号最低的字节被视为该字的最低有效字节,而编号最高的字节被视为最高有效字节。
可寻址的存储空间分为8个主要块,每个块为512MB。
未分配给片上存储器和外设的所有存储区域均视为保留区。
存储器映射
详看STM32F4参考手册。例如:
边界地址 | 外设 | 总线 | 寄存器映射 |
0xA000 0000 - 0xA000 0FFF | FSMC控制寄存器 | AHB3 | 第1241页的第32.6.9节:FSMC寄存器映射 |
SRAM概述
ST32F405xx/07xx和STM32F415xx/17xx带有4KB备份SRAM(具体在电池备份域一节)和192KB系统SRAM。
ST32F42xxxx和STM32F43xxx带有4KB备份SRAM(具体在电池备份域一节)和256KB系统SRAM。
系统SRAM可按字节、半字(16位)或全字(32位)访问。读写操作以CPU速度执行,且等待周期为0。
系统SRAM分为三个块:
映射在地址0x2000 0000的112KB和16KB块,可供所有AHB主控总线访问。
映射在地址0x2002 0000的64KB块,可供所有AHB主控总线访问。(适用于STM32F2xxx和STM32F3xxx)。AHB主控总线支持并发SRAM访问(通过以太网或USB OTG HS)。例如,当CPU对112KB或64KB的SRAM进行读/写操作时,以太网MAC可以同时对16KB的SRAM进行读/写操作。
映射在地址0x1000 0000的64KB块,只能供CPU通过数据总线访问。
如果选择从SRAM自举或选择物理重映射(第8.2.1节:SYSCFG存储器重映射寄存器SYSCFG_MEMRMP),则CPU可通过系统总线或I-Code/D-Code总线访问系统SRAM。要在SRAM执行期间获得最佳的性能,应选择物理重映射(通过自举管脚及软件配置来选择)。
Flash概述
Flash接口可管理CPU通过AHB I-Code和D-Code对Flash进行访问。该接口可针对Flash执行擦除和编程操作,并实施读写保护机制。Flash接口通过指令预取和缓存机制加速代码执行。
Flash结构如下:
主存储器块分为多个扇区。
系统存储器,器件在系统存储器自举模式下从该存储器启动。
512 OTP(一次性可编程)字节,用于存储用户数据。
选项字节,用于配置读写保护、BOR级别、软件/硬件看门狗以及器件处于待机或停止模式下的复位。
位段
Cortex-M4F存储器映射包括两个位段区域。这些区域将存储器别名区域中的每个字映射到存储器位段区域中的相应位。在别名区域写入字时,相当于对位段区域的目标位执行读-修改-写操作。
在STM32F4xx器件中,外设寄存器和SRAM均映射到一个位段区域,这样可实现单个位段的读写操作。这些操作仅适用于Cortex-M4F访问,对于其它总线主接口(如DMA)无效。
可通过一个映射公式说明别名区域中的每个字与位段区域中各个位之间的对应关系。映射公式为:
bit_word_addr = bit_band_base + (byte_offset * 32) + (bit_number * 4)
bit_word_addr:别名区域中将映射到目标地址位的字的地址
bit_band_base:别名区域的其起始地址
byte_offset:目标位所在位段区域中的字节编号
bit_number:目标位的位位置(0-7)
例如-如何将SRAM地址0x2000 0300处字节的位2映射到别名区域:
bit_word_addr = 0x2200 0000 + (0x300 * 32) + (2 * 4) = 0x2200 6008
对地址0x2200 6008执行写操作相当于在SRAM地址0x2000 0300处字节的位2执行读-修改-写操作。
对地址0x2200 6008执行读操作将返回SRAM地址0x2000 0300处字节的位2的值(0x01-位置位,0x00-位复位)。
自举配置
存储器采用固定的存储器映射,代码区域起始地址为0x0000 0000(通过ICode/DCode总线访问),而数据区域起始地址为0x2000 0000(通过系统总线访问)。Cortex-M4F CPU始终通过ICode总线获取复位向量,这意味着只有代码区域(通常为Flash)可以提供自举空间。STM32F4xx微控制器实施一种特殊机制,可以从其它存储器(如内部SRAM)进行自举。
在STM32F4xx中,可以通过BOOT[1:0]引脚选择三种不同的自举模式。
BOOT1 BOOT0 自举模式 x 0 Flash 0 1 系统存储器 1 0 嵌入式SRAM
复位后,在SYSCLK的第四个上升沿锁存BOOT引脚的值。复位后,用户可以通过设置BOOT1和BOOT0引脚来选择需要的自举模式。
BOOT0为专用引脚,而BOOT1则与GPIO引脚共用。一旦完成对BOOT1的采样,相应GPIO引脚即进入空闲模式,可用于其它用途。
器件退出待机模式时,还会对BOOT引脚重新采样。因此,当器件处于待机模式时,这些引脚必须保持所需的自举模式配置。这样的启动延迟结束后,CPU将从地址0x0000 0000获取栈顶值,然后从始于0x0000 0004的自举存储器开始执行代码。
Tips:如果器件从SRAM自举,在应用程序初始化代码中,需要使用NVIC异常及中断向量表和偏移寄存器来重新分配SRAM中的向量表。
嵌入式自举程序
嵌入式自举程序模式用于通过以下串行接口重新编程Flash:
USART1(PA9/PA10)
USART3(PB10/PB11和PC10/11)
CAN2(PB5/13)
USB OTG FS(PA11/PA12)从设备模式(DFU:器件固件升级)
USART外设以内部16MHz振荡器(HSI)频率运行,而CAN和USB OTG FS则需要相当于1MHz数倍(4MHz~26MHz)的外部时钟频率。
嵌入式自举程序代码位于系统存储器,在芯片生产期间由ST编程。有关详细信息,请参考应用笔记AN2606。
物理重映射
选择自举引脚后,应用程序软件可以将某些存储器设定为从代码空间进行访问(这样,可通过ICode总线而非系统总线执行代码)。这样的修改通过在SYSCFG控制器中编程来实现。
因此可重映射一下存储器:
主Flash
系统存储器
嵌入式SRAM1(112KB)
FSMC块1(NOR/PSRAM1和2)