01 FSMC特点 Flexible static memory controller(FSMC)灵活的静态存储控制器。FSMC可以连接异步或同步存储器或16位PC存储卡,主要用途有:
所有外部存储器共享地址、数据和控制信号,但有各自的片选信号。FSMC 一次只能访问一个外部器件。 FSMC,即灵活的静态存储控制器,能够与同步或异步存储器和16位PC存储器卡连接,STM32的FSMC接口支持包括SRAM、NANDFLASH、NORFLASH和PSRAM等存储器。 △FSMC框图示意 02 AHB接口 AHB设备接口可以使内部CPU和其他主总线外设去访问外部存储器。AHB事务可以传输外部设备协议。特别是当外部存储器被选择位8位或16位,32位的AHB传输传输事务会被划分为多个连续的8位或16的传输事务。片选会在每次访问时切换。 通用事务规则要求AHB传输数据宽度必须是8位、16位或32位。但是访问外部数据必须有个固定的数据宽度。这可能导致不一样的传输。 因此必须遵循一些简单的事务规则:
对设备的异步访问要具有字节选择功能(SRAM,ROM,PSRAM),①FSMC 允许写入事务通过其字节选择通道 NBL[1:0] 访问恰当的数据,②允许读取事务。会读取所有存储器字节,并将丢弃无用的存储器字节。 NBL[1:0]在读取事务期间保持为低电平。 对不具有字节选择功能的器件( 16 位 NOR 和 NAND Flash)进行异步访问,当请求对 16 位宽的 Flash 存储器进行字节访问时会发生此情形。 显然,不能在字节模式下访问此器件(只能针对 Flash 存储器读取或写入 16 位字),因此①不允许写入事务,②允许读取事务。会读取所有存储器字节,并将丢弃无用的存储器字节。 NBL[1:0]在读取事务期间保持低电平。 03 外部设备地址映射 FSMC的外部设备地址映像,STM32的FSMC将外部存储器划分为固定大小为256M字节的四个存储块:
对于每个存储区域,所要使用的存储器类型由用户在配置寄存器中定义 NOR/PSRAM地址映射 Bank1的256M字节空间由28根地址线(HADDR[27:0])寻址。这里HADDR,是内部AHB地址总线,但也会参与对外部存储器的寻址,其中,HADDR[25:0]来自外部存储器地址FSMC_A[25:0],而HADDR[26:27]对4个区进行寻址。如下表所示: HADDR[25:0] 包含外部存储器地址。由于HADDR为字节地址,而存储器按字寻址,所以根据存储器数据宽度不同,实际向存储器发送的地址也将有所不同,如下表所示: 当Bank1接的是16位宽度存储器的时候:HADDR[25:1]->FSMC_A[24:0]; 当Bank1接的是8位宽度存储器的时候:HADDR[25:0]->FSMC_A[25:0]; 不论外部接8位/16位宽设备,FSMC_A[0]永远接在外部设备地址A[0]。 04 NOR/PSRAM控制器 FSMC 会生成适当的信号时序,以驱动以下类型的存储器
FSMC每个块输出独立的片选信号NE[4:1]。其他信号(读,数据和控制)是共享的; 对于同步访问,FSMC仅仅在读写事务时给选择的外部设备发出时钟。HCLK时钟频率是该时钟的整数倍。每个块的大小固定64M字节。 存储器的可编程参数包括访问时序(详见下图)和对等待管理的支持(用于在突发模式下访问NOR Flash 和PSRAM)。 NOR/PSRAM 的可编程访问参数 05 外部存储器接口信号 非复用 I/OPSRAM/SRAM 注意:前缀“N”表示相关的信号为低电平有效 06 NOR/PSRAM控制器异步事务 异步静态存储器(NOR Flash、PSRAM、SRAM)
对于这5种模式,总结如下: 模式1/A:SRAM/PSRAM(CRAM)OE翻转,模式A与模式1的区别是NOE的变化和相互独立的读写时序。 模式2/B:NOR闪存,模式2/B与模式1相比较,不同的是NADV的变化,且在扩展模式下(模式B)读写时序相互独立。(只有当设置了扩展模式时(模式B),FSMC_BWTRx才有效,否则该寄存器的内容不起作用。) 模式C :NOR闪存- OE翻转,模式C与模式1不同的是,NOE和NADV的翻转变化,以及独立的读写时序; 模式D:带地址扩展的异步操作,模式D与模式1不同的是NADV的翻转变化,NOE的翻转出现在NADV翻转之后,并且具有独立的读写时序。 07 模式1 模式 1 -SRAM/PSRAM (CRAM) 下图显示了所遵循的受支持模式的读写事务通过配置FSMC_BCRx, and FSMC_BTRx/FSMC_BWTRx寄存器 ▽模式1读访问 ▽模式1写访问 位于写入事务末尾的一个HCLK 周期有助于确保NWE 上升沿之后的地址和数据保持时间。由于存在此HCLK 周期,DATAST 值必须大于零(DATAST > 0)。 08 模式A 模式 A -SRAM/PSRAM (CRAM) OE 切换 ▽模式A读访问 ▽模式A写访问 与模式1的不同之处在于NOE 的切换与独立的读取和写入时序 对于模式A, ADDSET就是NWE的高电平时间,也就是地址建立时间 DATAST就是NWE的低电平时间,也就是数据保持时间 09 代码说明 readWriteTiming.FSMC_AddressSetupTime = 0x02; //地址建立时间(ADDSET)为2个HCLK 2*1/120M=16nsreadWriteTiming.FSMC_AddressHoldTime = 0x02; //地址保持时间(ADDHLD),16ns readWriteTiming.FSMC_DataSetupTime = 0x06; //数据建立时间,50nsreadWriteTiming.FSMC_BusTurnAroundDuration = 0x00;//总线恢复时间readWriteTiming.FSMC_CLKDivision = 0x00;// 时钟分频因子 readWriteTiming.FSMC_DataLatency = 0x00;//数据产生时间readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A; //模式A FSMC_AddressSetupTime:这些位定义地址的建立时间,适用于SRAM、ROM和异步总线复用模式的NOR闪存操作。 FSMC_AddressHoldTime :这些位定义地址的保持时间,适用于SRAM、ROM和异步总线复用模式的NOR闪存操作。 |