存储器和总线架构
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Cortex-M3内核4G字节可寻址空间
1
512M字节Code区域
通过I-Code/D-code访问 程序放在这里执行效率更高
STM32F2根据不同芯片实现了 128K/256K/512K/768K/1024K 字节的片上闪存
2
512M字节SRAM区域
通过System Bus访问 可以把程序放在这里执行,效率不如Code区域 前1M字节是位带区,对应32M字节的位带别名区
启动模式选择引脚 BOOT1(I/O PB2) X 0 1 BOOT0(I) 0 1 1
启动模式 从片上用户闪存启动 从片上系统闪存启动,运行bootloader 从片上SRAM启动
1) 把BOOT电平配置好,复位系统,则可以激活启动代码的运行。 2) 在复位后第四个SYSCLK时钟的上升沿时刻,锁存两个BOOT引脚的电平,由此进入相应的启动空间
分成两个子区域,可被不同AHB主设备同时访问
112K字节 16K字节
备份域SRAM
属于电池供电域(参见电源章节) 4K字节,地址范围
0x4002,4000 ~0x4002,4FFF
12
位带操作,介绍
位带(Bit-band)操作是Cortex-M3提供的特殊操作:位带区 的每个位都有位带别名区的一个字与之对应。 对位带别名区每个字节的写操作,Cortex-M3都将自动转 换成对对应比特位的读-修改-写操作。对位带别名区每个 字节的读操作则将转换成相对应比特位的读操作。 与原有的读字节-修改相应比特位-写字节的操作方式相比, Bit-band虽然不能减少操作时间,却能简化操作,减小代 码量,并防止错误写入。 Bit-band区域的存储器以32位方式进行访问,其中有效的 仅仅是BIT0位,只有BIT0的值才对应到相应的普通区域的 比特位上,其他位无效。 STM32F系列芯片为所有外设寄存器和SRAM提供相对应 的Bit-band区域,以简化对外设寄存器和SRAM的操作
数组第二个字节的BIT3对应的位带地址为:
0x22000000+(0x4001*32)+(3*4) = 0x2208002c GPIOA的端口输出数据寄存器地址0x4001080c,对于PA.0来说控
制其输出电平的比特位的位带操作地址为:
0x42000000+(0x1080c*32)+(0*4) = 0x42021018
9
Cortex-M3预定义存储器映射图
6
5
4
3
2 1
10
STM32F2的存储器映射实现
6
5
4 3 2 1
11
片上SRAM
系统SRAM
属于1.2V供电域(参见电源章节) 可以8位、16位和32位地访问,CPU零等待
CPU通过System Bus访问SRAM 设置重映射从SRAM启动,CPU通过I-Code/D-Code总线访问 (从SRAM执行代码效率更高)
7
培训内容
系统架构
多层AHB总线矩阵
存储空间
存储器映射 片上SRAM
位带操作
片上闪存
自适应闪存加速器(STM32F2新增)
启动模式
代码空间的动态重映射(STM32F2新增) 内嵌bootloader
8
Cortex-M3预定义存储器映射和STM32F2的实现
20
动态重映射特性
可由BOOT引脚以及 重映射寄存器配置 只能由重映射寄存器配置
注意:FSMC重映射时,只有Bank1的前两个区域(region)被重映射了,并非整个外部存储器空间
21
动态重映射寄存器
复位之后,BOOT引脚的值被拷贝到该寄存器
唯一例外:当BOOT1=1/BOOT0=0从片上闪存启动时,寄存器值=0x00
闪存自适应加速器
CPU能够以120MHz全速在片上闪存上运行,无需等待
详细信息参见”片上闪存.ppt”
17
培训内容
系统架构
多层AHB总线矩阵
存储空间
存储器映射 片上SRAM
位带操作
片上闪存
自适应闪存加速器(STM32F2新增)
启动模式
代码空间的动态重映射(STM32F2新增) 内嵌bootloader
例如
在SRAM的0x20004000地址定义一个长度为512字节的数组:
#pragma location=0x20004000 __root _no_init u8 Buffer[512];
数组首字节的BIT0对应的位带地址为:
0x22000000+(0x4000*32)+(0*4) = 0x22080000
M5
M4
M3
M2
SRAM 112KB
D
PFQ/BC
M1
480MB/s
I
D I
M0
FLASH 1MB
480MB/s
4
8个AHB总线主设备
Cortex-M3内核的指令总线
用于在[0x0,0x1FFFFFFF]空间取指 默认可以访问片上闪存 通过重映射还可访问片上SRAM(112K)以及外部存储器
不使用位带操作: 使用位带操作:
U32 spi_ctrl = SPI1->CR1;
Spi_ctril = spi_ctrl | 0x00000040; SPI1->CR1 = spi_ctril;
SPI1的CR1寄存器地址为0x40013000,因 此CR1寄存器BIT6的位带地址为: 0x42000000 + 0x13000*32 + 6*4 = 0x42260018 对BIT6的置位操作为:
14
位带操作,使用例一
例1:将前页数组中的数据通过PA.0端口输出
不使用位带操作: 使用位带操作:
for (u16 cnt=0; cnt<512; cnt++)
for (u8 num=0; num<8; num++) if ((Buffer[cnt]>>num)&0x01) GPIOA->BSRR = 1; else
(*((u32*)0x42260018)) = 1;
16
片上闪存
主要特性
最高可达1M字节 对闪存的一次读操作可读取128位 能以字节、半字、字,甚至双字为单位对闪存执行写操作 能以扇区为单位或者对整片闪存进行擦除 片上闪存组织架构
4个16K字节的扇区;紧跟1个64K字节的扇区;紧跟7个128K字节的扇区 30K字节系统闪存,用于存储出厂前烧入的bootloader 528字节OTP区域 16字节选项字节(option byte)
6
多层AHB
通过内联矩阵来实现多层AHB的架构
可以在多主系统中减少延迟,提高总线可用带宽
获得的系统可用带宽正比于总线的层数
对每个主设备有一个总线层,并通过从设备复用开关连 到所有从设备
由于每层只有一个主设备,就无需仲裁,更方便实现 只有在多个主设备意图同时访问同一个从设备时才需要仲裁 使用轮询方式 round-robin
片上SRAM
两个子区域拥有各自不同的AHB从设备端口 可以被不同主设备同时访问
外部存储器接口FSMC
可以被所有AHB主设备访问
AHB1
AHB1上的外设:GPIO、备份SRAMAHB-APB1桥和AHB-APB2桥
分别接APB1和APB2外设
AHB2
AHB2上的外设:DCMI、硬件加密模块、全速USB
存储器和总线架构
培训内容
系统架构
多层AHB总线矩阵
存储空间
存储器映射 片上SRAM
位带操作
片上闪存
自适应闪存加速器(STM32F2新增)
启动模式
代码空间的动态重映射(STM32F2新增) 内嵌bootloader
2
培训内容
系统架构
多层AHB总线矩阵
启动模式
从片上用户闪存启动 从片上系统闪存启动,运行bootloader
1
1
从片上SRAM启动
1) 把BOOT电平配置好,复位系统,则可以激活启动代码的运行。 2) 在复位后第四个SYSCLK时钟的上升沿时刻,锁存两个BOOT引脚的电平,由此进入相应的启动空间
Bootloader支持的通信接口
USART1(PA9/PA10)接口 USART3(PC10/PC11 or PB10/PB11)接口
18
启动模式
复位之后总是从地址0x04取起始地址开始执行程序
通过Icode总线获取复位矢量,执行效率更高
三块物理存储器起始地址
片上SRAM起始地址:0x2000,0000 片上用户闪存起始地址:0x0800,0000 片上系统闪存(bootloader)起始地址:0x1FFF,0000
13
位带操作,寻址
位带操作最重要的一环就是寻址,即为需要操作的“目标 位”找到位带别名区相对应的地址:
位带别名区首地址+(操作字节的偏移量*32) +(操作位的偏移量*4)
内置SRAM区的位带别名区首地址 = 0x2200,0000 外设寄存器区的位带别名区首地址 = 0x4200,0000
存储空间
存储器映射 片上SRAM
位带操作
片上闪存
自适应闪存加速器(STM32F2新增)
启动模式
代码空间的动态重映射(STM32F2新增) 内嵌bootloader
3
多层32位AHB总线矩阵
-M3
with MPU
120MHz
GPGPDMA1 DMA1
8 ch 8c
GPDMA2
8 ch
MAC ETH 10/100
DMA
USB OTG HS
DMA
DMA_P1 ICODE DCODE SYSTEM DMA_MEM1 DMA_MEM2 DMA_P2
DMA 480Mb/s 60MB/s
100Mb/s 12.5MB/s
S0
S1
S2
S3
S4
S5
S6
S7
M6
FSMC AHB2 periph AHB1 periph SRAM 16KB
来自百度文库
U32 *pBuffer = ((u32*)0x22080000)
U16 cnt = 512*8; While(cnt--) { (*((u32*)0x42021018)) = *pBuffer++; }
GPIOA->BRR = 1;
15
位带操作,使用例二
例2:修改SPI控制器的BIT6,使能SPI
由Boot引脚决定以上 三块物理存储器中的哪 块映射到0x0的起始地址
见下页表格
19
启动模式选择
BOOT引脚在复位后第四个SYSCLK上升沿采样锁定 BOOT0引脚是启动专用引脚(输入方向) BOOT1和GPIO共享引脚
采样确定启动空间后,即可被用户做GPIO使用
从待机模式(Standby)退出后,会重新采样BOOT引脚电平 进入待机模式之前,用户要注意BOOT1的配置
STM32F2实现了 128K字节的SRAM
3
512M字节片上外设区域
通过System Bus访问 前1M字节是位带区,对应32M字节的位带别名区 这里不能执行程序
STM32F2实现了多 种高性能外设
4 5 6
1G字节外部RAM STM32F2实现了外部存储器区域 STM32F2实现了外部存储器接口FSMC 1G字节外部设备 0.5G字节系统级组件、私有外设总线…
DMA1和DMA2各自的存储器访问端口 DMA2的外设访问端口 以太网专用DMA
访问片上SRAM和外部扩展存储器
高速USB专用DMA
访问片上SRAM和外部存储器
5
7个AHB总线从设备
片上闪存
指令访问接口和数据访问接口占用不同的从设备端口 指令访问接口只能被内行指令总线访问
内部16MHz的HSI驱动USART外设工作
Cortex-M3内核的数据总线
用于在[0x0,0x1FFFFFFF]获取literal 默认可以访问片上闪存 通过重映射还可访问片上SRAM(112K)以及外部存储器
Cortex-M3内核的系统总线
可用于取数据,也可以用来获取指令(效率不如指令总线) 可以访问除片上闪存外所有AHB总线从设备
FSMC的映射到地址0x00,只能通过软件来使能
通过Icode总线执行代码比映射前使用System总线效率更高 重映射后,FSMC寄存器和外部存储器空间中未被重映射的区域就不能被 访问了;退出重映射后,恢复访问允许。
22
系统启动代码
启动模式选择引脚 BOOT1(I/O PB2) X 0 BOOT0(I) 0 1
1
512M字节Code区域
通过I-Code/D-code访问 程序放在这里执行效率更高
STM32F2根据不同芯片实现了 128K/256K/512K/768K/1024K 字节的片上闪存
2
512M字节SRAM区域
通过System Bus访问 可以把程序放在这里执行,效率不如Code区域 前1M字节是位带区,对应32M字节的位带别名区
启动模式选择引脚 BOOT1(I/O PB2) X 0 1 BOOT0(I) 0 1 1
启动模式 从片上用户闪存启动 从片上系统闪存启动,运行bootloader 从片上SRAM启动
1) 把BOOT电平配置好,复位系统,则可以激活启动代码的运行。 2) 在复位后第四个SYSCLK时钟的上升沿时刻,锁存两个BOOT引脚的电平,由此进入相应的启动空间
分成两个子区域,可被不同AHB主设备同时访问
112K字节 16K字节
备份域SRAM
属于电池供电域(参见电源章节) 4K字节,地址范围
0x4002,4000 ~0x4002,4FFF
12
位带操作,介绍
位带(Bit-band)操作是Cortex-M3提供的特殊操作:位带区 的每个位都有位带别名区的一个字与之对应。 对位带别名区每个字节的写操作,Cortex-M3都将自动转 换成对对应比特位的读-修改-写操作。对位带别名区每个 字节的读操作则将转换成相对应比特位的读操作。 与原有的读字节-修改相应比特位-写字节的操作方式相比, Bit-band虽然不能减少操作时间,却能简化操作,减小代 码量,并防止错误写入。 Bit-band区域的存储器以32位方式进行访问,其中有效的 仅仅是BIT0位,只有BIT0的值才对应到相应的普通区域的 比特位上,其他位无效。 STM32F系列芯片为所有外设寄存器和SRAM提供相对应 的Bit-band区域,以简化对外设寄存器和SRAM的操作
数组第二个字节的BIT3对应的位带地址为:
0x22000000+(0x4001*32)+(3*4) = 0x2208002c GPIOA的端口输出数据寄存器地址0x4001080c,对于PA.0来说控
制其输出电平的比特位的位带操作地址为:
0x42000000+(0x1080c*32)+(0*4) = 0x42021018
9
Cortex-M3预定义存储器映射图
6
5
4
3
2 1
10
STM32F2的存储器映射实现
6
5
4 3 2 1
11
片上SRAM
系统SRAM
属于1.2V供电域(参见电源章节) 可以8位、16位和32位地访问,CPU零等待
CPU通过System Bus访问SRAM 设置重映射从SRAM启动,CPU通过I-Code/D-Code总线访问 (从SRAM执行代码效率更高)
7
培训内容
系统架构
多层AHB总线矩阵
存储空间
存储器映射 片上SRAM
位带操作
片上闪存
自适应闪存加速器(STM32F2新增)
启动模式
代码空间的动态重映射(STM32F2新增) 内嵌bootloader
8
Cortex-M3预定义存储器映射和STM32F2的实现
20
动态重映射特性
可由BOOT引脚以及 重映射寄存器配置 只能由重映射寄存器配置
注意:FSMC重映射时,只有Bank1的前两个区域(region)被重映射了,并非整个外部存储器空间
21
动态重映射寄存器
复位之后,BOOT引脚的值被拷贝到该寄存器
唯一例外:当BOOT1=1/BOOT0=0从片上闪存启动时,寄存器值=0x00
闪存自适应加速器
CPU能够以120MHz全速在片上闪存上运行,无需等待
详细信息参见”片上闪存.ppt”
17
培训内容
系统架构
多层AHB总线矩阵
存储空间
存储器映射 片上SRAM
位带操作
片上闪存
自适应闪存加速器(STM32F2新增)
启动模式
代码空间的动态重映射(STM32F2新增) 内嵌bootloader
例如
在SRAM的0x20004000地址定义一个长度为512字节的数组:
#pragma location=0x20004000 __root _no_init u8 Buffer[512];
数组首字节的BIT0对应的位带地址为:
0x22000000+(0x4000*32)+(0*4) = 0x22080000
M5
M4
M3
M2
SRAM 112KB
D
PFQ/BC
M1
480MB/s
I
D I
M0
FLASH 1MB
480MB/s
4
8个AHB总线主设备
Cortex-M3内核的指令总线
用于在[0x0,0x1FFFFFFF]空间取指 默认可以访问片上闪存 通过重映射还可访问片上SRAM(112K)以及外部存储器
不使用位带操作: 使用位带操作:
U32 spi_ctrl = SPI1->CR1;
Spi_ctril = spi_ctrl | 0x00000040; SPI1->CR1 = spi_ctril;
SPI1的CR1寄存器地址为0x40013000,因 此CR1寄存器BIT6的位带地址为: 0x42000000 + 0x13000*32 + 6*4 = 0x42260018 对BIT6的置位操作为:
14
位带操作,使用例一
例1:将前页数组中的数据通过PA.0端口输出
不使用位带操作: 使用位带操作:
for (u16 cnt=0; cnt<512; cnt++)
for (u8 num=0; num<8; num++) if ((Buffer[cnt]>>num)&0x01) GPIOA->BSRR = 1; else
(*((u32*)0x42260018)) = 1;
16
片上闪存
主要特性
最高可达1M字节 对闪存的一次读操作可读取128位 能以字节、半字、字,甚至双字为单位对闪存执行写操作 能以扇区为单位或者对整片闪存进行擦除 片上闪存组织架构
4个16K字节的扇区;紧跟1个64K字节的扇区;紧跟7个128K字节的扇区 30K字节系统闪存,用于存储出厂前烧入的bootloader 528字节OTP区域 16字节选项字节(option byte)
6
多层AHB
通过内联矩阵来实现多层AHB的架构
可以在多主系统中减少延迟,提高总线可用带宽
获得的系统可用带宽正比于总线的层数
对每个主设备有一个总线层,并通过从设备复用开关连 到所有从设备
由于每层只有一个主设备,就无需仲裁,更方便实现 只有在多个主设备意图同时访问同一个从设备时才需要仲裁 使用轮询方式 round-robin
片上SRAM
两个子区域拥有各自不同的AHB从设备端口 可以被不同主设备同时访问
外部存储器接口FSMC
可以被所有AHB主设备访问
AHB1
AHB1上的外设:GPIO、备份SRAMAHB-APB1桥和AHB-APB2桥
分别接APB1和APB2外设
AHB2
AHB2上的外设:DCMI、硬件加密模块、全速USB
存储器和总线架构
培训内容
系统架构
多层AHB总线矩阵
存储空间
存储器映射 片上SRAM
位带操作
片上闪存
自适应闪存加速器(STM32F2新增)
启动模式
代码空间的动态重映射(STM32F2新增) 内嵌bootloader
2
培训内容
系统架构
多层AHB总线矩阵
启动模式
从片上用户闪存启动 从片上系统闪存启动,运行bootloader
1
1
从片上SRAM启动
1) 把BOOT电平配置好,复位系统,则可以激活启动代码的运行。 2) 在复位后第四个SYSCLK时钟的上升沿时刻,锁存两个BOOT引脚的电平,由此进入相应的启动空间
Bootloader支持的通信接口
USART1(PA9/PA10)接口 USART3(PC10/PC11 or PB10/PB11)接口
18
启动模式
复位之后总是从地址0x04取起始地址开始执行程序
通过Icode总线获取复位矢量,执行效率更高
三块物理存储器起始地址
片上SRAM起始地址:0x2000,0000 片上用户闪存起始地址:0x0800,0000 片上系统闪存(bootloader)起始地址:0x1FFF,0000
13
位带操作,寻址
位带操作最重要的一环就是寻址,即为需要操作的“目标 位”找到位带别名区相对应的地址:
位带别名区首地址+(操作字节的偏移量*32) +(操作位的偏移量*4)
内置SRAM区的位带别名区首地址 = 0x2200,0000 外设寄存器区的位带别名区首地址 = 0x4200,0000
存储空间
存储器映射 片上SRAM
位带操作
片上闪存
自适应闪存加速器(STM32F2新增)
启动模式
代码空间的动态重映射(STM32F2新增) 内嵌bootloader
3
多层32位AHB总线矩阵
-M3
with MPU
120MHz
GPGPDMA1 DMA1
8 ch 8c
GPDMA2
8 ch
MAC ETH 10/100
DMA
USB OTG HS
DMA
DMA_P1 ICODE DCODE SYSTEM DMA_MEM1 DMA_MEM2 DMA_P2
DMA 480Mb/s 60MB/s
100Mb/s 12.5MB/s
S0
S1
S2
S3
S4
S5
S6
S7
M6
FSMC AHB2 periph AHB1 periph SRAM 16KB
来自百度文库
U32 *pBuffer = ((u32*)0x22080000)
U16 cnt = 512*8; While(cnt--) { (*((u32*)0x42021018)) = *pBuffer++; }
GPIOA->BRR = 1;
15
位带操作,使用例二
例2:修改SPI控制器的BIT6,使能SPI
由Boot引脚决定以上 三块物理存储器中的哪 块映射到0x0的起始地址
见下页表格
19
启动模式选择
BOOT引脚在复位后第四个SYSCLK上升沿采样锁定 BOOT0引脚是启动专用引脚(输入方向) BOOT1和GPIO共享引脚
采样确定启动空间后,即可被用户做GPIO使用
从待机模式(Standby)退出后,会重新采样BOOT引脚电平 进入待机模式之前,用户要注意BOOT1的配置
STM32F2实现了 128K字节的SRAM
3
512M字节片上外设区域
通过System Bus访问 前1M字节是位带区,对应32M字节的位带别名区 这里不能执行程序
STM32F2实现了多 种高性能外设
4 5 6
1G字节外部RAM STM32F2实现了外部存储器区域 STM32F2实现了外部存储器接口FSMC 1G字节外部设备 0.5G字节系统级组件、私有外设总线…
DMA1和DMA2各自的存储器访问端口 DMA2的外设访问端口 以太网专用DMA
访问片上SRAM和外部扩展存储器
高速USB专用DMA
访问片上SRAM和外部存储器
5
7个AHB总线从设备
片上闪存
指令访问接口和数据访问接口占用不同的从设备端口 指令访问接口只能被内行指令总线访问
内部16MHz的HSI驱动USART外设工作
Cortex-M3内核的数据总线
用于在[0x0,0x1FFFFFFF]获取literal 默认可以访问片上闪存 通过重映射还可访问片上SRAM(112K)以及外部存储器
Cortex-M3内核的系统总线
可用于取数据,也可以用来获取指令(效率不如指令总线) 可以访问除片上闪存外所有AHB总线从设备
FSMC的映射到地址0x00,只能通过软件来使能
通过Icode总线执行代码比映射前使用System总线效率更高 重映射后,FSMC寄存器和外部存储器空间中未被重映射的区域就不能被 访问了;退出重映射后,恢复访问允许。
22
系统启动代码
启动模式选择引脚 BOOT1(I/O PB2) X 0 BOOT0(I) 0 1