FSMC基本介绍
FSMC(Flexible Static Memory Controller)是STM32系列微控制器中用于连接外部存储设备的重要外设。它支持多种存储类型,如SRAM、NOR Flash、PSRAM、NAND Flash以及PC Card等,同时还可用于驱动并行接口的LCD显示屏。通过将外部设备映射至处理器的地址空间,FSMC使得对这些设备的访问如同操作内部内存一般简便高效。
FSMC核心功能特性
- 多类型存储支持:可接入SRAM、PSRAM、NOR Flash、NAND Flash和PC Card等多种外部存储器件。
- 灵活时序配置:允许为不同性能的存储器独立设置读写时序参数,以匹配其电气特性。
- 多Bank架构:提供4个独立存储块(Bank1-Bank4),每个块可单独配置并连接不同类型的设备。
- 数据宽度可调:支持8位、16位和32位三种数据总线宽度,适应不同外设需求。
- 写FIFO机制:在STM32H7系列中,FMC(FSMC升级版)引入了写FIFO功能,提升连续写入效率。
- 扩展时序模式:支持分别为读操作和写操作设定不同的时序参数,增强灵活性(仅限FMC)。
存储块划分与地址映射关系
FSMC将外部存储区域划分为四个主要存储块,各自拥有固定的地址范围:
- Bank1:0x6000 0000 – 0x6FFF FFFF(256MB)
- Bank2:0x7000 0000 – 0x7FFF FFFF(256MB)
- Bank3:0x8000 0000 – 0x8FFF FFFF(256MB)
- Bank4:0x9000 0000 – 0x9FFF FFFF(256MB)
每个存储块进一步细分为4个子区,每区64MB,由对应的片选信号NE[4:1]进行选择,实现精准设备寻址。
关键信号线说明
FSMC通过以下引脚与外部设备通信:
- 地址线 A[25:0]:输出地址信息,最大支持26位寻址。
- 数据线 D[15:0]:双向数据通道,支持16位并行传输(部分型号支持32位)。
- 片选信号 NE[4:1]:分别对应Bank1到Bank4,用于激活特定存储块。
- 读使能 NOE:低电平有效,控制数据读取过程。
- 写使能 NWE:低电平有效,触发写操作。
- 字节使能 NBL[1:0]:在16位模式下,用于选择高字节或低字节传输。
FSMC初始化配置流程
- 开启FSMC时钟:通过RCC寄存器启用FSMC模块的时钟源。
- 配置GPIO引脚:将相关地址、数据及控制引脚设置为复用推挽输出模式,并指定为FSMC功能。
- 设定时序参数:依据外设手册中的时序要求,配置地址建立、数据建立、保持时间等关键参数。
- 配置存储块控制寄存器:设置目标设备类型、数据宽度、访问模式(同步/异步)等属性。
- 启用存储块:激活对应Bank,完成整体配置。
时序参数详细解析
为确保稳定通信,需精确配置以下时序参数:
- 地址建立时间(ADDSET):指地址信号稳定后,到NOE/NWE有效前所需的等待周期数。
- 数据建立时间(DATAST):对于读操作,表示从NOE有效到数据被正确采样的时间;对于写操作,则是NWE有效期间数据必须保持有效的持续时间。
- 地址保持时间(ADDHLD):在读/写使能信号失效后,地址仍需维持有效的最短时间。
- 数据保持时间(DATAHLD):写操作结束后,数据线上信息应继续保持的时间长度。
所有时序值通常以HCLK(AHB时钟)周期为单位进行计算和设置。
FSMC连接LCD的应用方式
当使用FSMC驱动并口LCD时,常将其模拟为SRAM设备处理。其中,LCD的寄存器选择信号RS通常连接至某一根地址线(如A0或A16),以此区分命令与数据访问:
若RS接至A16,则:
- 命令写入地址 = 基地址 + 0x0000
- 数据写入地址 = 基地址 + 0x20000(即基地址 + (1<<16))
通过切换访问地址即可实现指令与显存数据的分离控制。
[此处为图片3]DMA在FSMC中的应用
FSMC支持DMA(直接内存访问)传输机制,特别适用于大量数据搬运场景,例如LCD屏幕刷新、图像帧传输等。借助DMA,CPU无需参与每一次数据传送,显著降低负载,提高系统响应速度与运行效率。
实际应用中的注意事项
- GPIO速度设置:在高频操作下,建议将FSMC相关引脚配置为最高速度等级,以减少信号延迟。
- 未使用引脚处理:闲置的FSMC引脚应设为模拟输入或强制输出低电平,防止浮空引发噪声干扰。
- 时序调试优先:若出现通信异常,应首先核查时序参数是否符合外设规格,必要时适当增加建立与保持时间余量。
- 电源稳定性保障:确保外部设备供电干净稳定,合理布置去耦电容,避免因电源波动导致误动作。
关于STM32H7中的FMC模块
在STM32H7系列中,原FSMC被升级为FMC(Flexible Memory Controller),具备更强的功能支持。FMC不仅支持更高的工作频率,还提供更精细的时序控制选项,包括读写独立定时、更复杂的突发传输模式等,适用于高性能外部存储扩展需求。
总结
FSMC作为STM32平台上的关键外设之一,极大简化了对外部存储器及并行接口设备的集成与管理。通过合理的硬件连接与软件配置,尤其是准确设置各项时序参数,能够可靠地支持多种速率和类型的外设。熟练掌握FSMC/FMC的使用方法,对于开发涉及大容量存储扩展或高速LCD驱动的应用具有重要意义。


雷达卡


京公网安备 11010802022788号







