【STM32】FSMC—扩展外部 SRAM 初步使用 1
是一个外设,挂载在AHB总线下。可以用于驱动包括SRAMNOR FLASH以及NAND FLSAH类型的存储器,不能驱动如SDRAM这种动态的存储器STM32F429 系列的控制器中,它具有 FMC 外设,支持控制 SDRAM 存储器。简单来说类似于GPMC,可以以直接寻址的方式操作外置的存储设备,比如挂载一块SRAM在0x6000 0000处,不需要再像操作外置存储设备那样使用相关协议写一个字节
基于野火指南者《零死角玩转 STM32F103—指南者》的学习
STM32F103系列
FSMC Flexible Static Memory Controller简介
1.详细功能参看《STM32F10x参考手册》,这边是概述
是一个外设,挂载在AHB总线下。
可以用于驱动包括 SRAM
、NOR FLASH
以及 NAND FLSAH
类型的存储器,不能驱动如 SDRAM
这种动态的存储器
STM32F429 系列的控制器中,它具有 FMC 外设,支持控制 SDRAM 存储器。
简单来说
类似于GPMC,可以以直接寻址的方式操作外置的存储设备,比如挂载一块SRAM在0x6000 0000处,不需要再像操作外置存储设备那样使用相关协议写一个字节,直接*(char)0x6000 0000 = 0x01就可以了。
2.根据外接的存储设备选引脚
2.1 控制不同类型存储器的时候会有一些不同的引脚,看起来有非常多
2.2 不同模式使用不同引脚,根据框图分为NOR/PSRAM
,NAND
,PC卡信号
三类
2.3 FSMC_A
和数据线 FSMC_D
是所有控制器都共用
3. 对于同一种类的存储器也可以有不同模式,以NOR/PSRAM模式为例子
我们需要操作的是NOR型存储器,所以选择NOR型模式,
复用模式和非复用模式依照实际情况选择(也就是地址线和数据线是否复用)
复用引脚和非复用
FSMC 信号名称 | 信号方向 | 功能 |
---|---|---|
CLK | 输出 | 时钟(同步突发模式使用);; |
NE[x] | 输出 | 片选,x = 1…4 |
NADV | 输出 | 地址、数据线复用时作锁存信号 |
A[25:0] | 输出 | 地址总线 |
D[15:0] | 输入/输出 | 双向数据总线 |
NOE | 输出 | 输出使能 |
NWE | 输出 | 写使能 |
NWAIT | 输入 | NOR 闪存要求 FSMC 等待的信号 |
NBL[1] | 输出 | 高字节使能(存储器信号名称为:NUB) PSRAM使用 |
NBL[0] | 输出 | 低字节使能(存储器信号名称为:NLB) PSRAM使用 |
N表示低有效
其他型号的存储器引脚分配详见资料手册
4.地址映射 与 地址线
地址映射 分配给FSMC的地址是哪里?
FSMC 连接好外部的存储器并初始化后,就可以直接通过访问地址来读写数据 其中这部分在内存中有着固定的存储地址,存储单元是映射到 STM32 的内部寻址空间的;在程序里,定义一个指向这些地址的指针,然后就可以通过指针直接修改该存储单元的内容,FSMC 外设会自动完成数据访问过程,读写命令之类的操作不需要程序控制。
0x6000 0000 至 0x9FFF FFFF用于FSMC。
FSMC 把整个 存储区域分成了 4 个 Bank 区域,NOR 及 SRAM 存储器只能使用 Bank1 的地址,在每个 Bank 的内部又分成了 4 个小块,每个小块有相应的控制引脚用于连接片选信号FSMC_NE1/2/3/4
当 STM32 访问0x60000000-0x63FF FFFF 地址空间时,其实就是访问FSMC BANK1的第1块
区域,FSMC_NE1 引脚会自动设置为低电平
0x60000000-0x6FFF FFFF这片地址也就是Bank1的256M字节空间,在芯片内部由AHB总线上的28根地址线(ADDR[27:0])寻址。这里ADDR 是内部AHB地址总线
,其中ADDR[25:0]对应外部存储器地址FSMC_A[25:0],而HADDR[26:27]对应4个区.
ADDR[25:0],有26根地址线,也就是可以进行2**26地址范围的寻址,(也就是0x400 0000
)。
HADDR[26:27]对4个区进行寻址.
四个区对应二进制,红色部分就是bit HADDR[26:27]:
Bank1:0110-00
00 0000-0000 0000-0000 0000-0000 ,即 60 00 00 00;
Bank2:0110-01
00 0000-0000 0000-0000 0000-0000 ,即 64 00 00 00;
Bank3:0110-10
00 0000-0000 0000-0000 0000-0000 ,即 68 00 00 00;
Bank4:0110-11
00 0000-0000 0000-0000 0000-0000 ,即 6c 00 00 00;
总结:对于存储块BANK1cpu给他分配的地址是0x60000000-0x6FFF FFFF,那么cpu对他寻址的话是使用32根地址线,其中低ADDR[25:0]根可以外接到外部存储器进行0x400 0000范围的寻址,ADDR[27:26]根可以在Bank中的四部分选择一个。
外部存储器宽度
默认情况下存储器的一个地址对应的是1个byte,那么可以正常当作cpu上内部存储一样读取。如果存储器地址数据为16位,32位,也就是两个字节一个地址,四个字节一个地址,那么控制16位,32位宽度的存储设备,且不支持单字节访问就比较麻烦了。
存储器地址数据为16位,32位的这种类型的存储器,我们本来对应64M个的byte的地址,就变成了32M个的双字节byte的地址,也就是最后一位ADDR[bit0]无效了,因为地址一次要加2HADDR[27:0]
:AHB总线对外设FSMC寻址的地址线,AHB总线与FSMC的连接FSMC_A[25:0]
:FSMC外设对外部扩展存储的寻址线。
不同类型的存储器 不同类型的控制方式
根据类型选择模式:FSMC可以控制很多类型的器件,模式1 —— SRAM/CRAM
类型模式下还有模式ABCD : 对于模式1还有ABCD四种模式,这里选择模式B进行说明
FSMC 控制异步 NOR FLASH 的时序
FSMC 读 NOR FLASH 的时序图(模式 B)
当内核发出访问某个指向外部存储器地址时,FSMC 外设会根据配置控制信号线产生时序访问存储器,上图中的是访问外部异步 NOR FLASH(模式 B)时 FSMC外设的读写时序。
以读时序为例,该图表示一个存储器操作周期由地址建立周期(ADDSET)、数据建立周期(DATAST)以及 2个 HCLK周期组成。在地址建立周期中,地址线发出要访问的地址,数据掩码信号线指示出要读取地址的高、低字节部分,片选信号使能存储器芯片;地址建立周期结束后读使能信号线发出读使能信号,接着存储器通过数据信号线把目标数据传输给 FSMC,FSMC 把它交给内核。
FSMC 写 NOR FLASH 的时序图(模式 B)
写时序类似,区别是它的一个存储器操作周期仅由地址建立周期(ADDSET)和数据建立周期(DATAST)组成,且在数据建立周期期间写使能信号线发出写信号,接着FSMC把数据通过数据线传输到存储器中。
FSMC寄存器
NOR/PSRAM/SRAM 设备使用相同的控制器;
NAND/PC 卡设备使用相同的控制器;
控制 NOR FLASH 的有 FSMC_BCR1/2/3/4 控制寄存器、FSMC_BTR1/2/3/4 片选时序寄存器以及 FSMC_BWTR1/2/3/4 写时序寄存器。
FSMC时钟
FSMC 外设挂载在 AHB 总线上,时钟信号来自于 HCLK(默认 72MHz),控制器的同步时钟输出就是由它分频得到。
它的时钟频率可通过 FSMC_BTR 寄存器的 CLKDIV 位配置,HCLK 与 FSMC_CLK 的分频系数(CLKDIV),可以为 2~16 分频
它可用于与同步类型的 NOR FLASH 芯片通过FSMC_CLK 引脚输出进行同步通讯。
对于异步类型的存储器,不使用同步时钟信号,所以时钟分频配置不起作用。
其他资料
收集参考资料: keil中扩展RAM的使用与配置
更多推荐
所有评论(0)