【单片机学习之旅】(1-2)stm32F407存储器及总线架构

stm32F407存储器及总线架构

  • 一、总线架构
  • 二、存储器


以下内容均基于stm32F4xx讲解

一、总线架构

相信学过51单片机的朋友应该都看过下面这张图:
【单片机学习之旅】(1-2)stm32F407存储器及总线架构_第1张图片
基本上学校用的都是这张图,看起来结构还是很清楚的,因为51是冯诺依曼结构,所以取址和取操作数是在同一条总线上进行的,不能同时进行,速度相比哈佛结构会慢一点。下面我们对比一下F4的结构框图:
【单片机学习之旅】(1-2)stm32F407存储器及总线架构_第2张图片

是不是瞬间惊住了,的确是很复杂。主系统由 32 位多层 AHB 总线矩阵构成,包含八条主控总线:
— Cortex™-M4F 内核 I 总线、D 总线和 S 总线
— DMA1 存储器总线
— DMA2 存储器总线
— DMA2 外设总线
— 以太网 DMA 总线
— USB OTG HS DMA 总线
七条被控总线:
— 内部 Flash ICode 总线
— 内部 Flash DCode 总线
— 主要内部 SRAM1 (112 KB)
— 辅助内部 SRAM2 (16 KB)
— AHB1 外设(包括 AHB-APB 总线桥和 APB 外设)
— AHB2 外设
— FSMC
借助总线矩阵,可以实现主控总线到被控总线的访问,这样即使在多个高速外设同时运行期间,系统也可以实现并发访问和高效运行。如图:
【单片机学习之旅】(1-2)stm32F407存储器及总线架构_第3张图片
1.I 总线:用于M4内核获取指令,对象是包含代码的存储器(内部Flash/SRAM 或通过 FSMC 的外部存储器)。
2.D 总线:用于M4内核进行立即数加载和调试访问,访问对象是包含代码或数据的存储器(内部Flash 或通过 FSMC 的外部存储器)。
3.S 总线:用于M4内核访问位于外设 或 SRAM 中的数据。也可获取指令(效率低于 I 总线。访问对象是112 KB、16 KB 的内部 SRAM、包括 APB 外设在内的 AHB1 外设、AHB2 外设以 及通过 FSMC 的外部存储器。
4.DMA1/2 存储器总线:用于DMA执行存储器数据的传入和传出。访问对象是数据存储器:内部 SRAM(112 KB、16 KB)以及通过 FSMC 的外部存储器。
5.DMA 外设总线:用于DMA 访问 AHB 外设或执行存储器间的数据传输。访问对象是 AHB 和 APB 外设以及数据存储器:内部 SRAM 以及通过 FSMC 的外部存储器。
6.以太网 DMA 总线:用于以太网 DMA向存储器存取数据。访问对象是数据存储器:内部 SRAM(112 KB、16 KB)以及通过FSMC 的外部存储器。
7.USB OTG HS DMA 总线:用于USB OTG DMA向存储器加载/存储数据。访问对象是数据存储器:内部 SRAM(112 KB、16 KB) 以及通过 FSMC 的外部存储器。

stm32是哈佛结构, I 总线就相对于读/写地址,D 总线就相对于读/写数据,可以并行进行。
总线矩阵用于主控总线之间的访问仲裁管理。
仲裁采用循环调度算法(就像在同一时间片下每个任务按先后顺序执行,完成将轮到下一个任务,时间片时间内未完成就要到下一轮去完成剩下未完成的)

二、存储器

程序存储器、数据存储器、寄存器和 I/O 端口排列在同一个顺序的 4 GB 地址空间内。可寻址的存储空间分为 8 个主要块,每个块为 512 MB。
各字节按小端格式在存储器中编码。字中编号最低的字节被视为该字的最低有效字节,而编号最高的字节被视为最高有效字节。
其中4GB是因为32位单片机总线能寻2^32=4GB,小端则是地址低位存放数据低位。
寄存器映射:
【单片机学习之旅】(1-2)stm32F407存储器及总线架构_第4张图片
八个区分别为:
1.Code:通过I-Code和D-Code访问,程序放在这里执行效率最高
2.SRAM区:包括SRAM1 (112 KB)及SRAM2 (16 KB)。通过S 总线访问,程序放在这里执行效率比Code区域低,虽然地址分配了512M,但是实际上只用了128KB。
3.片上外设区:包括APB1/2,AHB1/2在内的所有外设地址
4/5/6/7.外部RAM区:其中AHB3地址范围在(0x6000 0000-0xA000 0FFF),剩下的(0xA000 1000 - 0xDFFF FFFF)都是未使用的
8.系统级组件及私有外设总线区:Cortex-M4(0xE000 0000 - 0xE00F FFFF)

	可以看出大部分区域都是未使用的,这4GB空间是RAM定好的
	不同的芯片厂商可以根据需求自行设计

其中Code区又分为:
—Flash区域:保存数据的区域,我们常说的下载代码就是下载到这个里面。
—CCM数据RAM:Code区域是用I-Code和D-Code访问,作用是为了加快数据处理速度。
—系统存储器存储:用于存放在系统存储器自举模式下的启动程序(BootLoader),当使用ISP方式加载程序时,就是由这个程序执行。这个区域由芯片厂写入BootLoader,然后锁死,用户是无法改变这个区域的。
—选项字节:存储芯片的配置信息及对主存储块的保护信息。
—启动引脚BOOT映射的部分(0x0000 0000 - 0x000F FFFF)。
下面是片上外设区具体外设的映射地址:
【单片机学习之旅】(1-2)stm32F407存储器及总线架构_第5张图片
【单片机学习之旅】(1-2)stm32F407存储器及总线架构_第6张图片
【单片机学习之旅】(1-2)stm32F407存储器及总线架构_第7张图片
每个外设都对应一个地址范围,而他们又由多个寄存器构成,外设对应的寄存器地址可以在相关章节找到。

你可能感兴趣的:(单片机,stm32,学习)