FSMC详解
1、FSMC简介:
FSMC,即灵活的静态存储控制器,能够与同步或异步存储器和 16 位 PC 存储器卡连接,STM32 的 FSMC 接口支持包括 SRAM、NAND FLASH、NOR FLASH 和 PSRAM 等存储器。
2、FSMC 的框图:
从上图我们可以看出,STM32 的 FSMC 将外部设备分为 3 类:NOR/PSRAM 设备、NAND设备、PC 卡设备。他们共用地址数据总线等信号,他们具有不同的 CS 以区分不同的设备, TFTLCD 可以用 FSMC_NE4 做片选,其实就是将 TFTLCD 当成 SRAM 来控制。
3、FSMC 的外部设备地址映像
STM32 的 FSMC将外部存储器划分为固定大小为 256M 字节的四个存储块,如图所示:
FSMC 总共管理 1GB 空间,拥有 4 个存储块(Bank)
4、 FSMC 存储块 1(Bank1)
STM32 的 FSMC 存储块 1(Bank1)被分为 4 个区,每个区管理 64M 字节空间,每个区都有独立的寄存器对所连接的存储器进行配置。Bank1 的 256M 字节空间由 28 根地址线(HADDR[27:0])寻址。
这 里 HADDR 是内 部 AHB 地址总 线,其 中 HADDR[25:0]来自外部存储器地址FSMC_A[25:0],而 HADDR[26:27]对 4 个区进行寻址。
说明:
(1)当Bank1接的是16位宽度存储器的时候:HADDR[25:1]–>FSMC_A[24:0]
(2)当Bank1接的是8位宽度存储器的时候:HADDR[25:0]–>FSMC_A[25:0]
(3)不论外部接8位/16位宽设备,FSMC_A[0]永远接在外部设备地址A[0]
注意:
(1)TFTLCD使用的是 16 位数据宽度,所以 HADDR[0]并没有用到,只有 HADDR[25:1]是有效的,对应关系变为:HADDR[25:1]→ FSMC_A[24:0],相当于右移了一位
(2)HADDR[27:26]的设置,是不需要我们干预的,比如:当你选择使用 Bank1 的第三个区,即使用 FSMC_NE3 来连接外部设备的时候,即对应了 HADDR[27:26]=10,我们要做的就是配置对应第 3 区的寄存器组,来适应外部设备即可。
5、STM32 的 FSMC 各 Bank 配置寄存器如表所示:
对于 NOR FLASH 控制器,主要是通过 FSMC_BCRx、FSMC_BTRx 和 FSMC_BWTRx 寄存器设置(其中 x=1~4,对应 4 个区)。通过这 3 个寄存器,可以设置 FSMC 访问外部存储器的时序参数,拓宽了可选用的外部存储器的速度范围。
6、FSMC存储块1 支持的访问模式
STM32的FSMC存储块1 支持的异步突发访问模式包括:模式1、模式A~D等多种时序模型,驱动SRAM时一般使用模式1或者模式 A,这里使用模式A来驱动LCD(当SRAM用)
(1)模式A读时序图
(2)模式A写时序图
FSMC 的 NOR FLASH 控制器支持同步和异步突发两种访问方式。
(3)选用同步突发访问方式时,FSMC 将 HCLK(系统时钟)分频后,发送给外部存储器作为同步时钟信号 FSMC_CLK。
此时需要的设置的时间参数有 2 个:
1,HCLK 与 FSM