FSMC

FSMC

1. FSMC概述

MCU自带的FLASH和SRAM资源是十分有限的。一般情况下对于嵌入式应用够用,但避免不了一些大量消耗内存的应用, 比如说图像处理。对于这类对内存要求较高的应用,往往需要扩展一个FLASH或者SRAM。STM32提供的FSMC就是用来完成这项功能的。

FSMC(Flexible static memory controller,灵活的静态存储器控制器),STM32可以通过FSMCSRAMROMPSRAMNor FlashNandFlash存储器的引脚相连,从而进行数据的交换。

FSMC 只能扩展静态的内存(S:static),不能是动态的内存,比如 SDRAM 就不能扩展。

FSMC把AHB总线上的数据转换为对应外设的通信协议,控制外设的访问时序,可以直接在程序中寻址访问。

2. FSMC组成

image-20250425192402501

FSMC主要由4部分组成:

  • AHB总线接口(包括FSMC的配置寄存器)
  • NOR闪存/SRAM控制器
  • NAND闪存/PC卡控制器
  • 外设接口四个部分构成

2.1 AHB总线接口

AHB总线接口是CPU、DMA等AHB总线主设备访问FSMC的通道,它负责把AHB总线事务转换成为外设通信的协议。

AHB总线事务的请求可以是8、16或者32位的,但外设器件的数据线位宽是恒定的。如果两者宽度相同就不存在什么问题。

如果总线事务的位宽大于外设的位宽,那么总线接口将把总线事务拆分为多个连续的8位或16位形式访问外设。应当尽量避免总线事务宽度小于外设宽度的情况出现,因为这将可能导致数据的不一致,具体与外设类型有关系。

配置寄存器则描述了扩展外设的具体形式、通信协议和接口形式。用于总线接口将AHB总线事务转换为外设通信协议, 驱动NOR闪存/SRAM控制器和NAND闪存/PC卡控制器,进而控制外设。

2.2 NOR闪存/SRAM控制器

NOR/PSRAM内存控制器支持各种同步异步的内存。所谓同步内存就是在读写内存的时候需要一个同步时钟来指导数据的发送和接收。对于同步内存,FSMC只会在读写操作的时候产生驱动时钟,而且其频率是系统总线时钟HCLK的分频。

NOR/PSRAM控制器用于生成适当的时序,以驱动8位、16位、32位的异步SRAM和ROM、异步或者突发模式的PSRAM和NOR闪存。通过配置寄存器描述外设的特征和时序后,控制器就可以为生成对应的驱动时序。

2.3 NAND闪存/PC卡控制器

NAND/PC卡控制器用于驱动8位或者16位的NAND闪存以及16位的PC卡兼容设备。

2.4 外设接口四个部分构成

用于与要扩展外设联通用的。在接线时必须根据每个外设的特点,来进行合适的接线。

3. 外部设备地址映射

从FSMC的角度看,可以把外部存储器划分为固定大小为4个256M字节的存储块。

image-20250425194520219

  • 存储块1用于访问最多4个NOR闪存或PSRAM存储设备。这个存储区被划分为4个NOR/PSRAM区并有4个专用的片选。
  • 存储块2和3用于访问NAND闪存设备,每个存储块连接一个NAND闪存。
  • 存储块4用于访问PC卡设备。

每一个存储块上的存储器类型是由用户在配置寄存器中定义的。

4. FSMC控制时序

FSMC 外设支持输出多种不同的时序以便于控制不同的存储器,它具有6种模式:1,A,2/B,C,D,复用模式。

所有信号由内部时钟HCLK保持同步,但该时钟不会输出到外部扩展的存储器。FSMC始终在片选信号NE失效前对数据线采样,这样能够保证符合存储器的数据保持时序。

所有的控制器输出信号在内部时钟(HCLK)的上升沿变化,在同步写模式(PSRAM)下,读写的数据在存储器时钟(CLK)的下降沿变化。

当内核发出访问某个指向外部存储器的地址时,FSMC外设会根据配置控制信号线产生时序访问存储器(硬件自动生成对应的时序)。

在读时序中,一个存储器操作周期由1个地址建立周期(ADDSET),1个数据建立周期(DATASET)和2个HCLK周期组成。

在地址建立周期中,

  • 地址线发出要访问的地址。
  • 数据掩码信号线指示出要读取地址的高、低字节部分。
  • 片选信号使能存储器芯片。
  • 地址建立周期结束后读使能信号线发出读使能信号,接着存储器通过数据信号线把目标数据传输给 FSMC,FSMC 把它交给内核。

写时序类似,区别是它的一个存储器操作周期仅由1个地址建立周期(ADDSET)和1个数据建立周期(DATAST)组成,且在数据建立周期期间写使能信号线发出写信号,接着 FSMC 把数据通过数据线传输到存储器中。

4.1 Mode 1

SRAM/PSRAM (CRAM)

image-20250428161503110

image-20250428161519476

写入事务结束时的一个 HCLK 周期有助于保证地址和NWE 上升沿之后的数据保持时间。由于存在这个 HCLK 循环,因此DATAST 值必须大于零 (DATAST > 0)。

4.2 Mode A

SRAM/PSRAM (CRAM) OE toggling

image-20250428165450148

image-20250428165356035

Mode 1 相比,区别在于 NOE 的切换和独立读写时序。

4.3 Mode 2/B

NOR Flash

image-20250428170326756

image-20250428170244773

image-20250428170259829

Mode 1 的不同之处在于,当设置成扩展(Mode B)时,NWE的切换以及独立读取和写入时间。

4.4 Mode C

NOR Flash - OE toggling

image-20250428173744039

image-20250428173801395

Mode 1 相比,区别在于 NOE 的切换以及独立读取和写入时间。

4.5 Mode D

asynchronous access with extended address

image-20250428173944304

image-20250428173959074

Mode 1 的区别在于, NOE 的切换在 NADV 变化之后继续切换,以及独立的读写时序。

4.6 Muxed mode

Multiplexed asynchronous access to NOR Flash memory

image-20250428174748905

image-20250428174803500

Mode D 不同的是,数据总线上的较低地址字节的驱动