目录
概述
灵活的静态存储器控制器(FSMC)能够将片外设备挂在单片机的地址和数据总线上,使单片机可以像访问内存一样访问片外设备。
功能描述
FSMC模块能够与同步或异步存储器和16位PC存储器卡接口,它的主要作用是:
● 将AHB传输信号转换到适当的外部设备协议。
● 满足访问外部设备的时序要求。
所有的外部存储器共享控制器输出的地址、数据和控制信号,每个外部设备可以通过一个唯一的片选信号加以区分。FSMC在任一时刻只访问一个外部设备。
FSMC具有下列主要功能:
● 具有静态存储器接口的器件包括:
─ 静态随机存储器(SRAM)
─ 只读存储器(ROM)
─ NOR闪存
─ PSRAM(4个存储器块)
● 两个NAND闪存块,支持硬件ECC并可检测多达8K字节数据
● 16位的PC卡兼容设备
● 支持对同步器件的成组(Burst)访问模式,如NOR闪存和PSRAM
● 8或16位数据总线
● 每一个存储器块都有独立的片选控制
● 每一个存储器块都可以独立配置
● 时序可编程以支持各种不同的器件:
─ 等待周期可编程(多达15个周期)
─ 总线恢复周期可编程(多达15个周期)
─ 输出使能和写使能延迟可编程(多达15周期)
─ 独立的读写时序和协议,可支持宽范围的存储器和时序
● PSRAM和SRAM器件使用的写使能和字节选择输出。
● 将32位的AHB访问请求,转换到连续的16位或8位的,对外部16位或8位器件的访问。
● 具有16个字,每个字32位宽的写入FIFO,允许在写入较慢存储器时释放AHB进行其它操作。在开始一次新的FSMC操作前,FIFO要先被清空。
通常在系统复位或上电时,应该设置好所有定义外部存储器类型和特性的FSMC寄存器,并保持它们的内容不变;当然,也可以在任何时候改变这些设置。
图 1FSMC框图
支持的存储器和操作
请求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的角度看,可以把外部存储器划分为固定大小为256M字节的四个存储块,见下图。
● 存储块1用于访问最多4个NOR闪存或PSRAM存储设备。这个存储区被划分为4个NOR/PSRAM区并有4个专用的片选。
● 存储块2和3用于访问NAND闪存设备,每个存储块连接一个NAND闪存。
● 存储块4用于访问PC卡设备 每一个存储块上的存储器类型是由用户在配置寄存器中定义的。
图 2FSMC存储块
NOR和PSRAM地址映像
HADDR[27:26](片选信号)位用于选择四个存储块之一:
图 3NOR/PSRAM存储块选择
(1) HADDR是需要转换到外部存储器的内部AHB地址线。 HADDR[25:0]包含外部存储器地址。HADDR是字节地址,而存储器访问不都是按字节访问,因此接到存储器的地址线依存储器的数据宽度有所不同,如下表:
图 4外部存储器地址
(1) 对于16位宽度的外部存储器,FSMC将在内部使用HADDR[25:1]产生外部存储器的地址FSMC_A[24:0]。不论外部存储器的宽度是多少(16位或8位),FSMC_A[0]始终应该连到外部存储器的地址线A[0]。
NOR闪存和PSRAM的非对齐访问支持
每个NOR闪存或PSRAM存储器块都可以配置成支持非对齐的数据访问。 在存储器一侧,依据访问的方式是异步或同步,需要考虑两种情况:
● 异步模式:这种情况下,只要每次访问都有准确的地址,完全支持非对齐的数据访问。
● 同步模式:这种情况下,FSMC只发出一次地址信号,然后成组的数据传输通过时钟CLK顺序进行。
某些NOR存储器支持线性的非对齐成组访问,固定数目的数据字可以从连续的以N为模的地址读取(典型的N为8或16,可以通过NOR闪存的配置寄存器设置)。此种情况下,可以把存储器的非对齐访问模式设置为与AHB相同的模式。
如果存储器的非对齐访问模式不能设置为与AHB相同的模式,应该通过FSMC配置寄存器的相应位禁止非对齐访问,并把非对齐的访问请求分开成两个连续的访问操作。
NAND和PC卡地址映像
三个存储块可以用于NAND或PC卡的操作,每个存储块被划分为下述访问空间:
图 5存储器映像和时序寄存器
对于NAND闪存存储器,通用和属性空间又可以在低256K字节部分划分为3个区。
● 数据区(通用/属性空间的前64K字节区域)
● 命令区(通用/属性空间的第2个64K字节区域)
● 地址区(通用/属性空间的第2个128K字节区域)
图 6NAND存储块选择
应用软件使用这3个区访问NAND闪存存储器:
● 发送命令到NAND闪存存储器:软件只需对命令区的任意一个地址写入命令即可。
● 指定操作NAND闪存存储器的地址:软件只需对地址区的任意一个地址写入命令即可。因为一个NAND地址可以有4或5个字节(依实际的存储器容量而定),需要连续地执行对地址区的写才能输出完整的操作地址。
● 读写数据:软件只需对数据区的任意一个地址写入或读出数据即可。
因为NAND闪存存储器自动地累加其内部的操作地址,读写数据时没有必要变换数据区的地址,即不必对连续的地址区操作。
NOR闪存和PSRAM控制器
FSMC可以产生适当的信号时序,驱动下述类型的存储器:
● 异步SRAM和ROM ─ 8位 ─ 16位 ─ 32位
● PSRAM(Cellular RAM) ─ 异步模式 ─ 突发模式
● NOR闪存
─ 异步模式或突发模式
─ 复用模式或非复用模式 FSMC对每个存储块输出一个唯一的片选信号NE[4:1],所有其它的(地址、数据和控制)信号则是共享的。
在同步方式中,FSMC向选中的外部设备产生时钟(CLK),该时钟的频率是HCLK时钟的整除因子。每个存储块的大小固定为64M字节。 每个存储块都有专门的寄存器控制。 可编程的存储器参数包括访问时序(见下表)、是否支持非对齐数据存取和等待周期管理(只针对突发模式下访问PSRAM和NOR闪存)。
图 7可编程的NOR/PSRAM访问参数