FSMC模块可以与同步或异步存储器和16位PC存储器卡接口,它的主要做用是:编程
全部的外部存储器共享控制器输出的地址、数据和控制信号,每一个外部设备能够经过一个惟一的片选信号加以区分。FSMC在任一时刻只访问一个外部设备。异步
─ 静态随机存储器(SRAM)spa
─ 只读存储器(ROM)3d
─ NOR闪存blog
─ PSRAM(4个存储器块)接口
─ 等待周期可编程(多达15个周期)同步
─ 总线恢复周期可编程(多达15个周期)软件
─ 输出使能和写使能延迟可编程(多达15周期)配置
─ 独立的读写时序和协议,可支持宽范围的存储器和时序硬件
注:[1]若是当前FIFO正在被占用,此时其余的FIFO操做将等待,直到当前的FIFO操做完成
[2]一般在系统复位或上电时,应该设置好全部定义外部存储器类型和特性的FSMC寄存器,并保持它们的内容不变;固然,也能够在任什么时候候改变这些设置。
图 FMSC框图
FSMC包含四个主要模块:
● AHB接口(包含FSMC配置寄存器)
● NOR闪存和PSRAM控制器
● NAND闪存和PC卡控制器
● 外部设备接口
AHB接口为内部CPU和其它总线控制设备访问外部静态存储器提供了通道。 AHB操做被转换到外部设备的操做。
当选择的外部存储器的数据通道是16或8位时,在AHB上的32位数据会被分割成连续的16或8位的操做。 AHB时钟(HCLK)是FSMC的参考时钟。
请求AHB操做的数据宽度能够是8位、16位或32位,而外部设备则是固定的数据宽度,此时须要保障实现数据传输的一致性。 所以,FSMC执行下述操做规则:
● AHB操做的数据宽度与存储器数据宽度相同:无数据传输一致性的问题。
● AHB操做的数据宽度大于存储器的数据宽度:此时FSMC将AHB操做分割成几个连续的较小数据宽度的存储器操做,以适应外部设备的数据宽度。
● AHB操做的数据宽度小于存储器的数据宽度: 依据外部设备的类型,异步的数据传输有可能不一致。─ 与具备字节选择功能的存储器(SRAM、ROM、PSRAM等)进行异步传输时,FSMC执行读写操做并经过它的字节通道BL[1:0]访问正确的数据。
─ 与不具备字节选择功能的存储器(NOR和16位NAND等)进行异步传输时,即须要对16位宽的闪存存储器进行字节访问;显然不能对存储器进行字节模式访问(只容许16位的数据传输),所以:
a. 不容许进行写操做
b. 能够进行读操做(控制器读出完整的16位存储器数据,只使用须要的字节)。
FSMC由一组寄存器进行配置
图 FMSC存储BANK
从FSMC的角度看,能够把外部存储器划分为固定大小为256M字节的四个存储块:
注:(1) HADDR是须要转换到外部存储器的内部AHB地址线。
表 NOR/PSRAM存储块选择
HADDR是字节地址,而存储器访问不都是按字节访问,所以接到存储器的地址线依存储器的数据宽度有所不一样
注:(1) 对于16位宽度的外部存储器,FSMC将在内部使用HADDR[25:1]产生外部存储器的地址FSMC_A[24:0]。不论外部存储器的宽度是多少(16位或8位),FSMC_A[0]始终应该连到外部存储器的地址线A[0]。
表 外部存储器地址
表 存储器映像和时序寄存器
表 NAND存储块选择
注:数据区(通用/属性空间的前64K字节区域)
命令区(通用/属性空间的第2个64K字节区域)
地址区(通用/属性空间的第2个128K字节区域)
应用软件使用这3个区访问NAND闪存存储器:
● 发送命令到NAND闪存存储器:软件只需对命令区的任意一个地址写入命令便可。
● 指定操做NAND闪存存储器的地址:软件只需对地址区的任意一个地址写入命令便可。由于一个NAND地址能够有4或5个字节(依实际的存储器容量而定),须要连续地执行对地址区的写才能输出完整的操做地址。
● 读写数据:软件只需对数据区的任意一个地址写入或读出数据便可。 由于NAND闪存存储器自动地累加其内部的操做地址,读写数据时没有必要变换数据区的地址,即没必要对连续的地址区操做。
//TODO
//TODO
//TODO