赞
踩
说到STM32的FSMC(Flexible Static Memory Controller),这个玩意儿可真是STM32家族的“多面手”。想象一下,如果STM32是个热衷于DIY的工程师,那FSMC就是他的瑞士军刀,无论是连接SRAM、PSRAM、NOR/NAND Flash还是LCD模块,FSMC都能应对自如,简直就是连接外部存储和记忆界的“桥梁”。
FSMC的灵活性主要体现在它支持多种存储器类型和访问模式,这就像是它可以说多国语言,无论你来自哪个存储器国家,它都能和你愉快地交流。而且,FSMC能够让STM32以最高效的方式访问这些外部设备,这就像是它拥有VIP通道,能够迅速通过安检进入存储器的心脏区域。
具体来说,FSMC能让你配置各种访问参数,比如数据宽度(可以是8位或16位),存储器类型(SRAM、NOR Flash等),还有访问模式(直接模式、间接模式)。这就像是你在玩一个高级定制的游戏,你可以根据外设的特性和你的需求,调整FSMC的设置,以达到最优的访问速度和性能。
不过,FSMC也有它的复杂性,配置起来就像是在玩一个需要高度策略的游戏,每个选项都需要精心考虑。你得了解你的外部设备,知道它的语言和习惯,然后通过FSMC的配置,来告诉STM32如何与之有效交流。这就需要你深入阅读数据手册,可能还要做一些试验,来找到最佳配置。
总之,FSMC就像是STM32的“通讯专家”,能够让STM32轻松地扩展存储和连接各种外设。但要想完全驾驭它,你可能需要像学习外语一样,花一些时间和精力来深入了解它。别担心,一旦你熟悉了FSMC,你就能打开一个全新的可能性世界,让你的STM32项目更加强大和灵活!
FSMC模块能够与同步和异步存储器以及16位PC内存卡进行接口。其主要目的是:将AHB事务转换为适当的外部设备协议,满足外部设备的访问时序要求。所有外部存储器与控制器共享地址、数据和控制信号。每个外部设备通过唯一的芯片选择来访问。FSMC一次只对一个外部设备进行访问。
FSMC具有以下主要特点:
定义外部设备类型和相关特性的FSMC寄存器通常在启动时设置,并且在下一次复位或上电之前不会改变。然而,可以随时更改这些设置。
FSMC由四个主要模块组成:
AHB接口(包括FSMC配置寄存器)
NOR Flash/PSRAM控制器
NAND Flash/PC卡控制器
外部设备接口。
图434显示了该模块的框图。
AHB从设备接口使得内部CPU和其他总线主设备能够访问外部静态存储器。AHB事务被转换为外部设备协议。特别地,如果选择的外部存储器是16位或8位宽度,则在AHB上的32位宽度事务会被分割成连续的16位或8位访问。FSMC芯片选择(FSMC_NEx)在执行带有扩展模式的D模式下除了进行连续访问时不会切换。
FSMC在以下情况下生成AHB错误:
这个AHB错误的影响取决于尝试进行读写访问的AHB主设备:
如果是带有FPU的Cortex®-M4 CPU,将会生成一个硬件故障中断。
如果是DMA,则会产生DMA传输错误,并自动禁用相应的DMA通道。
AHB时钟(HCLK)是FSMC的参考时钟。
所请求的AHB事务数据大小可以是8位、16位或32位,而访问的外部设备具有固定的数据宽度。这可能导致传输不一致。因此,必须遵循一些简单的事务规则:
AHB事务大小和内存数据大小相等时,在这种情况下没有问题。
AHB事务大小大于内存大小时,在这种情况下,FSMC将AHB事务分割成较小的连续内存访问,以满足外部数据宽度。
AHB事务大小小于内存大小时,异步传输可能与外部设备类型有关
对于具有字节选择功能(SRAM、ROM、PSRAM)的设备进行异步访问。
对于没有字节选择功能(NOR和NAND Flash 16位)的设备进行异步访问。
当请求对16位宽Flash存储器进行字节访问时会出现这种情况。显然,不能以字节模式访问该设备(只能从/向Flash存储器读取/写入16位词),因此:
不允许写入操作
允许读取操作。读取所有内存字节并丢弃无用字节。在读取操作期间将NBL[1:0]设置为0.
FSMC可以通过寄存器集进行配置。详细描述了NOR Flash/PSRAM控制寄存器的内容,请参见第36.5.6节。详细描述了NAND Flash/PC卡寄存器的内容,请参见第36.6.8节。
从FSMC的角度来看,外部存储器被分为4个固定大小的256兆字节的Bank(参见图435):
Bank1用于寻址最多4个NOR Flash或PSRAM存储器设备。该Bank被分成4个NOR/PSRAM子Bank,每个子Bank有4个专用芯片选择信号,如下所示:
Bank1 - NOR/PSRAM 1
Bank1 - NOR/PSRAM 2
Bank1 - NOR/PSRAM 3
Bank1 - NOR/PSRAM 4
Bank2和3用于寻址NAND Flash设备(每个Bank一个设备)
Bank4用于寻址PC卡设备
对于每个Bank,要使用的存储器类型由配置寄存器中用户定义。
HADDR[27:26]位用于根据表216中的显示选择四个内存Bank之一。
HADDR[25:0]包含外部存储器的地址。由于HADDR是字节地址,而存储器是按字寻址的,根据存储器数据宽度,实际发给存储器的地址会有所变化,如下表所示。
不支持同步存储器的Wrap burst模式。必须将存储器配置为未定义长度的linear burst模式。
在这种情况下,有三家Bank可供选择,每个Bank都被划分为表218中所示的内存空间。
对于NAND Flash存储器,常见和属性内存空间被细分为三个部分(见下表219)位于较低的256 K字节中:
应用软件使用3个部分来访问NAND Flash存储器:
由于NAND Flash存储器自动递增地址,因此无需递增数据部分的地址以访问连续的内存位置。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。