目录
概述
1 认识FSMC
1.1 应用介绍
1.2 FSMC的主要功能
1.2.1 FSMC用途
1.2.2 FSMC的功能
2 FSMC的框架结构
2.1 AHB 接口
2.1.1 AHB 接口的Fault
2.1.2 支持的存储器和事务
2.2 外部器件地址映射
3 地址映射
3.1 NOR/PSRAM地址映射
3.2 NAND/PC卡地址映射
概述
本文主要介绍灵活的静态存储控制器 (FSMC)的基本概念,包括其支持主要器件,架构特点,以及在MCU内部AHB接口的特性,还介绍了其和外部NOR Flash,Nand flash, 以及SRAM的地址映射关系等内容。
1 认识FSMC
1.1 应用介绍
FSMC 能够连接同步、异步存储器和 16 位 PC 存储卡。其主要用途如下:
● 将 AHB 数据通信事务转换为适当的外部器件协议
● 满足外部器件的访问时序要求
所有外部存储器共享地址、数据和控制信号,但有各自的片选信号。 FSMC 一次只能访问一个外部器件。
总结如下:
1)所有的外部存储器共享地址、数据和控制信号
2)通过片选CS使能各自的片选
3)FSMC每一次只能选择一个器件
1.2 FSMC的主要功能
1.2.1 FSMC用途
FSMC 能够连接同步、异步存储器和 16 位 PC 存储卡。其主要用途如下:
● 将 AHB 数据通信事务转换为适当的外部器件协议
● 满足外部器件的访问时序要求
所有外部存储器共享地址、数据和控制信号,但有各自的片选信号。 FSMC 一次只能访问一个外部器件。
1.2.2 FSMC的功能
FSMC 具有以下主要功能:
1)连接静态存储器映射的器件:
— 静态随机访问存储器 (SRAM)
— 只读存储器 (ROM)
— NOR Flash/OneNAND Flash
— PSRAM( 4 个存储区域)
2)外围器件支持
两个带有 ECC 硬件的 NAND Flash 存储区域,可检查多达 8 KB 的数据。16 位 PC 卡兼容设备,支持对同步器件( NOR Flash 和 PSRAM)的突发模式访问;8 或 16 位宽的数据总线;每个存储区域有独立的片选控制,每个存储区域可独立配置。
3) 可对时序进行编程,以支持各种器件:
— 等待周期可编程(最多 15 个时钟周期)
— 总线周转周期可编程(最多 15 个时钟周期)
— 输出使能和写入使能延迟可编程(最多 15 个时钟周期)
— 独立的读和写时序和协议,以支持各种存储器和时序
4)其他功能
● 写使能和字节通道选择输出,可配合 PSRAM 和 SRAM 器件使用
● 将 32 位的 AHB 事务转换为针对外部 16 位或 8 位器件进行的连续 16 位或 8 位访问。
● 用于写入的 FIFO, 2 字长(对于 STM32F42x 和 STM32F43x,为 16 字长),每个字为32 位宽,仅用于存储数据,而不存储地址。因此,此 FIFO 仅会缓冲 AHB 批量写事务。从而可对慢速存储器执行写入操作后能快速释放 AHB,以供其它操作使用。每次仅缓冲一个突发事务:如果在有操作正在进行时发生一个新的 AHB 突发事务或者一个单独事务,则 FIFO 将会清空。 FSMC 将插入等待周期,直至当前存储器访问已完成)。
5)外部异步等待控制
定义外部器件类型和其特性的 FSMC 寄存器通常在启动时进行设置,并且在下次上电或复位前保持不变。但也可随时更改这些设置。
2 FSMC的框架结构
FSMC 包含四个主要模块:
1)AHB 接口(包括 FSMC 配置寄存器)
2)NOR Flash/PSRAM 控制器
3)NAND Flash/PC 卡控制器
4)外部器件接口
2.1 AHB 接口
CPU 和其它 AHB 总线主设备可通过该 AHB 从设备接口访问外部静态存储器。AHB 事务会转换为外部器件协议。尤其是当所选外部存储器的宽度为 16 位或 8 位时, AHB中的 32 位宽事务将被划分成多个连续的 16 或 8 位访问。片选将在每次访问时进行切换。
2.1.1 AHB 接口的Fault
出现以下条件时, FSMC 将产生 AHB 错误:
● 读取或写入未使能的 FSMC 存储区域
● 在 FSMC_BCRx 寄存器中的 FACCEN 位复位时读取或写入 NOR Flash 存储区域
● 在输入引脚 FSMC_CD( Card Presence Detection)为低电平时读取或写入 PC 卡存储区域此 AHB 错误的影响具体取决于尝试进行读写访问的 AHB 主设备:
● 如果为 Cortex™-M4F CPU,则会生成硬性故障 (hard fault) 中断
● 如果为 DMA,则会生成 DMA 传输错误,并会自动禁用相应的 DMA 通道AHB 时钟 (HCLK) 是 FSMC 的参考时钟。
2.1.2 支持的存储器和事务
1)通用事务规则
所请求的 AHB 事务传输大小可以是 8、 16 或 32 位,但访问的外部器件具有固定的数据宽度。这可能会导致不一致的数据宽度。因此,必须遵循一些简单的事务规则:
● AHB 事务数据宽度和存储器数据宽度相等没有任何问题。
● AHB 事务数据宽度大于存储器宽度在此情况下, FSMC 会将 AHB 事务分为多个较小的连续存储器访问,以便符合外部数据宽度。
对具有字节选择功能的器件( SRAM、 ROM、 PSRAM)进行异步访问。
a) FSMC 允许写入事务通过其字节选择通道 NBL[1:0] 访问恰当的数据
b) 允许读取事务。会读取所有存储器字节,并将丢弃无用的存储器字节。 NBL[1:0]在读取事务期间保持为低电平。
对不具有字节选择功能的器件( 16 位 NOR 和 NAND Flash)进行异步访问。
当请求对 16 位宽的 Flash 存储器进行字节访问时会发生此情形。显然,不能在字节模式下访问此器件(只能针Flash 存储器读取或写入 16 位字),因此:
a) 不允许写入事务
b) 允许读取事务。会读取所有存储器字节,并将丢弃无用的存储器字节。 NBL[1:0]在读取事务期间保持低电平。
2)配置寄存器
FSMC 可通过一个寄存器组进行配置。有关 NOR Flash/PSRAM 控制寄存器的详细说明
2.2 外部器件地址映射
从 FSMC 的角度,外部存储器被划分为 4 个固定大小的存储区域,每个存储区域的大小为256 MB(请参见下图 ):
● 存储区域 1 可连接多达 4 个 NOR Flash 或 PSRAM 存储器器件。此存储区域被划分为 4 个NOR/PSRAM 区域,带 4 个专用片选信号。
● 存储区域 2 和 3 用于连接 NAND Flash 器件(每个存储区域一个器件)
● 存储区域 4 用于连接 PC 卡设备
对于每个存储区域,所要使用的存储器类型由用户在配置寄存器中定义。
3 地址映射
3.1 NOR/PSRAM地址映射
HADDR[27:26] 位用于从表 185 中所示的四个存储区域之中选择其中一个存储区域。
NOR/PSRAM 存储区域选择
HADDR[25:0] 包含外部存储器地址。由于 HADDR 为字节地址,而存储器按字寻址,所以根据存储器数据宽度不同,实际向存储器发送的地址也将有所不同,如下表所示。
外部存储器地址
如果外部存储器的宽度为 16 位, FSMC 将使用内部的 HADDR[25:1] 地址来作为对外部存储器的寻址地址
FSMC_A[24:00]。
无论外部存储器的宽度为 16 位还是 8 位, FSMC_A[0] 都应连接到外部存储器地址 A[0]。
NOR Flash/PSRAM 的回卷支持
不支持同步存储器的回绕突发模式。存储器必须按未定义长度的线性突发模式进行配置。
3.2 NAND/PC卡地址映射
在此情况下,有三个存储区域,每个存储区域分为各个存储空间,如下表所示。
存储器映射和时序寄存器
对于 NAND Flash 存储器,通用区和特性区存储空间分为三个部分,均位于低位 256 KB 中(见下面的表):
● 数据区域(通用/特性存储空间中的第一个 64 KB)
● 命令区域(通用/特性存储空间中的第二个 64 KB)
● 地址区域(通用/特性存储空间中的下一个 128 KB)
NAND 存储区域选择
应用程序软件使用这 3 个区域来访问 NAND Flash 存储器:
● 向 NAND Flash 存储器发送命令:软件可以向命令区域中的任意存储器位置写入命令值。
● 指定读取或写入的 NAND Flash 地址:软件可以向地址区域中的任意存储位置写入地址值。由于地址的长度可以是 4 或 5 个字节(具体取决于实际存储器大小),要指定完整的地址,需要对地址区域执行多个连续写入操作。
● 读取或写入数据:软件将从数据区域中的任意存储器位置读取数据值,或者向其中写入数据值。
由于 NAND Flash 存储器会自动递增地址,所以在访问连续存储器位置时,无需递增数据区域的地址。