Nuru_Banmian
Nuru_Banmian
Published on 2025-07-29 / 103 Visits
0
0

FSMC-介绍

FSMC概述

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

​ FSMC(Flexible static memory controller,灵活静态存储器控制器),STM32可以通过FSMC与SRAM、ROM、PSRAM、Nor Flash和NandFlash存储器的引脚相连,从而进行数据的交换。要注意的是FSMC只能扩展静态内存(S:static),不能是动态的内存,比如SDRAM就不能扩展。

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

FSMC组成

功能框图

FSMC-介绍-外部设备地址映射

​ FSMC主要由4个部分组成:AHB总线接口(包括FSMC的配置寄存器)、NOR闪存/SRAM控制器、NAND闪存/PC卡控制器、外设接口四个部分构成。

​ 本次实验需要用到的引脚有:

  1. FSMC_A[25:0]:地址总线

  2. FSMC_D[15:0]:双向数据总线

  3. FSMC_NE[4:1]:片选引脚,低电平有效

  4. FSMC_NOE:读使能,低电平有效

  5. FSMC_NWE:写使能,低电平有效

AHB总线接口

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

​ AHB总线事务的请求可以是8、16或者32位的,但外设器件的总线位宽是恒定的。如果两者宽度相同就不存在什么问题,如果总线事务的位宽大于外设的位宽,那么总线接口将把总线事务拆分为多个连续的8位或者16位形式访问外设。我们应当尽量避免总线事务宽度小于外设宽度的情况出现,因为这将可能导致数据的不一致,具体与外设类型有关系。

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

NOR闪存/PSRAM控制器

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

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

NAND闪存/PC卡控制器

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

外设接口

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

外部设备地址映射

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

FSMC-介绍-外部设备地址映射

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

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

FSMC控制NOR闪存或PSRAM的时序

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

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

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

​ 我们以读写SRAM的模式A为例来介绍。

FSMC-介绍-模式A读操作

FSMC-介绍-模式A写操作

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

​ 在读时序中,一个存储器操作周期由1个地址建立周期(ADDSET),1个数据建立周期(DATASET)和2个HCLK周期组成。在地址建立周期中,地址线发出要访问的地址,数据掩码信号线指示出要读取地址的高、低字节部分,片选信号使能存储器芯片;地址建立周期结束后读使能信号线发出读使能信号,接着存储器通过数据信号线把目标数据传输给FSMC,FSMC把它交给内核。

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


Comment