FSMC是某些微控制器(如STM32系列中的一些型号)中的一个功能模块,它主要用于扩展存储器和与外部设备的接口。FSMC可以简化与不同类型外部设备(例如SRAM、NOR Flash、PSRAM等)的连接,使得这些外设能够像内部存储器一样被直接访问。
FSMC的作用
- 协议转换:FSMC的主要任务之一是将来自AHB(Advanced High-performance Bus,高级高性能总线)的数据和控制信号转换为适合外部设备的通信协议。这意味着FSMC理解并执行必要的时序和协议要求来与各种类型的外部存储器或设备进行通信。
- 控制访问时序:不同的外部设备可能需要特定的读写时序才能正确地进行数据传输。FSMC能够配置这些时序参数(如设置地址建立时间、数据保持时间等),以确保与外设的可靠通信。这使得即使AHB总线和外部设备之间的时序要求不同,它们之间也能顺利交互。
- 直接寻址访问:通过FSMC,外部设备可以映射到微控制器的内存地址空间,允许程序像访问内部RAM或Flash一样直接对外部设备进行读写操作。这种方式极大地简化了软件设计,因为开发者不需要编写底层驱动来处理具体的通信细节;只需使用普通的指针操作即可访问外部设备。
FSMC主要由4部分组成:AHB总线接口(包括FSMC的配置寄存器)、NOR闪存/SRAM控制器、NAND闪存/PC卡控制器、外设接口四个部分构成。框图如下:
其中FSMC连接在AHB总线上的,AHB时钟(HCLK)是FSMC的参考时钟。
以下是AHB总线的介绍:
1.AHB接口为内部CPU和其它总线控制设备访问外部静态存储器提供了通道。
2.AHB总线事务的请求可以是8、16或者32位的,但外设器件的数据线位宽是恒定的。如果两者宽度相同就没事,如果总线事务的位宽大于外设的位宽,那么总线接口将把总线事务拆分为多个连续的8位或16位形式访问外设。如果总线事务宽度小于外设宽度的情况出现,依据外部设备的类型,异步的数据传输有可能不一致。
以下是NOR闪存/PSRAM控制器的介绍:
在嵌入式系统设计中,NOR闪存和PSRAM(Pseudo Static Random Access Memory,伪静态随机存取存储器)是两种常用的外部存储器类型。
NOR闪存控制器:
协议转换:负责将来自系统总线的数据和控制信号转换为适合NOR闪存的通信协议格式。
时序控制:NOR闪存有特定的读写和擦除时序要求,控制器需要精确地生成这些时序以确保正确操作。
地址映射:将NOR闪存映射到系统的内存地址空间,使得CPU可以直接通过访问内存地址的方式读写NOR闪存中的数据。
PSRAM控制器:
接口适配:PSRAM是一种基于DRAM技术但提供了类似SRAM接口的存储器,因此PSRAM控制器需要适配这种特殊的接口规范,使其能够像普通SRAM一样被访问。
刷新管理:由于PSRAM底层采用的是DRAM技术,需要定期刷新以保持数据不丢失,控制器要负责管理这一过程。
性能优化:通过优化访问模式和缓存策略,提升整体系统的响应速度和效率。
外部设备地址映射:
之前说FSMC可以简化与不同类型外部设备的连接,使得这些外设能够像内部存储器一样被直接访问,而通过访问微控制器内存中的特定地址来间接地读写外部设备的数据。这样做可以让外部设备看起来就像是微控制器的一部分,这就是外部设备地址映射。
从FSMC的角度看,可以把外部存储器划分为固定大小为4个256M字节的存储块。
存储块1用于访问最多4个NOR闪存或PSRAM存储设备。这个存储区被划分为4个NOR/PSRAM区并有4个专用的片选。
存储块2和3用于访问NAND闪存设备,每个存储块连接一个NAND闪存。
存储块4用于访问PC卡设备。