1.STM32控制器芯片内部有一定大小的SRAM及FLASH作为内存和程序存储空间,但当程序较大,内存和程序空间不足时,就需要在STM32芯片的外部扩展存储器了,扩展内存时一般使用SRAM和SDRAM 存储器。STM32F1系列的芯片不支持扩展SDRAM (STM32F429系列支持),它仅支持使用FSMC外设扩展SRAM,由于引脚数量的限制,只有STM32F103ZE 或以上型号的芯片才可以扩展外部SRAM。
给STM32芯片扩展内存与给PC扩展内存的原理是一样的,只是PC上一般以内存条的形式扩展,内存条实质是由多个内存颗粒(即SDRAM芯片)组成的通用标准模块,而STM32直接与SRAM芯片连接。
STM32F1系列芯片使用FSMC外设来管理扩展的存储器,FSMC是Flexible Static Memory Controller的缩写,译为灵活的静态存储控制器。它可以用于驱动包括SRAM、NOR FLASH以及NAND FLSAH类型的存储器,不能驱动如 SDRAM这种动态的存储器。
2.FSMC的功能:将AHB传输信号转换到适当的外部设备协议;满足访问外部设备的时序要求。
所有的外部存储器共享控制器输出的地址、数据和控制信号,每个外部设备可以通过一个唯一的片选信号加以区分。FSMC在任一时刻只访问一个外部设备。
3.FSMC包含四个主要模块:AHB接口(包含FSMC配置寄存器);NOR闪存和PSRAM控制器;NAND闪存和PC卡控制器;外部设备接口。FSMC框图如图1:
3.1通讯引脚:在框图的右侧是FSMC外设相关的控制引脚,控制不同类型存储器的时候会有一些不同的引脚,其中地址线FSMC_A和数据线FSMC_D是所有控制器都共用的。NOR闪存和PSRAM接口的典型信号如表1~3,其中具有前缀“N”的信号表示低有效信号。
3.2存储器控制器:上面不同类型的引脚是连接到FSMC内部对应的存储控制器中的。NOR/PSRAM/SRAM设备使用相同的控制器,NAND/PC卡设备使用相同的控制器,不同的控制器有专用的寄存器用于配置其工作模式。
控制SRAM的有FSMC_BCR1/2/3/4控制寄存器、FSMC_BTR1/2/3/4片选时序寄存器以及FSMC_BWTR1/2/3/4写时序寄存器。每种寄存器都有4个,分别对应于4个不同的存储区域,各种寄存器介绍如下:
FSMC_BCR控制寄存器可配置要控制的存储器类型、数据线宽度以及信号有效极性能参数。
FSMC_BTR时序寄存器用于配置SRAM访问时的各种时间延迟,如数据保持时间、地址保持时间等。
FSMC_BWTR写时序寄存器与FMC_BTR寄存器控制的参数类似,它专门用于控制写时序的时间参数。
3.3时钟控制逻辑:FSMC外设挂载在AHB总线上,时钟信号来自于 HCLK (默认72MHz),控制器的同步时钟输出就是由它分频得到。