ARM Cortex-M0 存储器系统

kelly的头像
kelly 发布于:周二, 09/06/2016 - 14:12 ,关键词:

作者:Founder_U

1. Cortex-M0 的两种总线协议:

1)AHB_Lite 系统总线协议:32位地址线,高速高性能访问(Flash, SRAM,总线桥,外部存储器接口)

2)APB 外设总线协议: 32位, 外设等较慢设备通讯(I/O,Timer, UART, Watch Dog。)

系统总线和外设总线是相互分离的,两种总线通过总线桥连接通讯,时钟频率控制不同,可能有多个外设总线段,并且每个段运行在不同的时钟频率下。有些高速外设是直接连接在AHB_Lite系统总线上的。

2. 存储器映射(4GB地址空间)

Cortex-M0(+)处理器的4G存储空间从架构上被分为多个区域。总的被分成8个大部分,每个部分512M。

Cortex-M0处理器架构定义的存储器映射

虽然映射已经被架构预先定义,但是实际分配却是很灵活的。

存储器设计的一个例子:

3. 程序存储器(Flash),Bootloader和存储器重映射

1)程序存储器一般使用片上Flash,不过也可以使用外部或其他类型存储器设备(EEPROM)

2)Flash存储器一般是从地址0开始,当Reset 后,会首先访问0地址的向量表,取得MSP的初始值和复位向量。

3)Bootloader 是位于芯片上的一小段加载引导程序,与用户应用程序是分开的。

4)存储器重映射:系统总线的一种存储器映射切换特性。Bootloader执行时会设置硬件寄存器来控制重映射。常见的处理方式是通过地址别名被重映射到地址的开头。

5)Bootloader其他特性:硬件初始化(时钟,PLL设置),多种启动配置,固件保护,Flash擦除工具。

6)SRAM重映射到地址0,code可以被复制到SRAM并以最快速度执行,可以避免取向量的等待时间。

4. 数据存储器(SRAM)

1) Cortex-M0数据存储:数据(全局变量、静态变量、数据结构)、栈存储(临时数据、局部变量、函数调用参数传递和异常处理的寄存器备份)和堆存储(C函数自动分配存储区域:alloc()、malloc()) 。

2)没有OS,就之后使用一个栈(MSP),数据存储分配如下:

SRAM常见数据存储使用示例

5. 支持小端和大端

1)Cortex-M0支持大端和小端两种存储,都支持字节(8bit)、半字(16bit)和字(32bit)传输, 存储器会根据传输大小和地址的最低两位选择数据链路。

2)大端模式:字节不变模式(BE8)和字不变模式(BE32), 字数据最低字节会保存在24到31位;

3)小端模式:字数据最低字节会保存在0到7位;

4) 多数情况下,连接到APB的外设应该用字传输,因为APB协议没有定义传输宽度信号,都被默认为字大小,因此,通过APB访问的外设寄存器通常被声明为”volatile unsigned integer“。

5)Thumb指令只能产生对齐访问(字对齐,半字对齐,字节对齐),传输地址只能是传输大小的整数倍。

6) C程序直接操作一个指针或用汇编,可进行非对齐传输。

6. 存储器属性

存储器访问属性:可执行(Executable),可缓冲(Bufferable),可缓存(Cacheable),可共享(Shareable)。

文章来源:极客头条

围观 570