『』Stm32F103R6之FSMC
概述
灵活的静态存储器控制器(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卡设备 每一个存储块上的存储器类型是由用户在配置寄存器中定义的 。
推荐阅读
- 映维网:概述谷歌 Pixel 4 深度传感 uDepth 工作原理和底层算法
- 『』中芯国际概述N+1节点投产计划 较14nm工艺更具成本优势
- 『』你写的Java对象究竟占多少内存?
- 『』运维概述与Linux系统安装
- 「mac」苹果的白皮书来了!最新的Mac Pro的概述其强大的“专业”