STM32F103X datasheet学习笔记---Flexible static memory controller (FSMC)
1.前言
FSMC模块能够与同步或异步存储器和16位PC存储器卡接口,它的主要作用是:
- 将AHB传输信号转换到适当的外部设备协议
- 满足访问外部设备的时序要求
所有的外部存储器共享控制器输出的地址、数据和控制信号,每个外部设备可以通过一个唯一的片选信号加以区分。FSMC在任一时刻只访问一个外部设备。
2.FMSC的主要功能
- 与具有静态存储器接口的器件接口,包括:
─ 静态随机存储器(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进行其它操作。
注:[1]如果当前FIFO正在被占用,此时其他的FIFO操作将等待,直到当前的FIFO操作完成
[2]通常在系统复位或上电时,应该设置好所有定义外部存储器类型和特性的FSMC寄存器,并保持它们的内容不变;当然,也可以在任何时候改变这些设置。
3. FMSC框图
图 FMSC框图
FSMC包含四个主要模块:
● AHB接口(包含FSMC配置寄存器)
● NOR闪存和PSRAM控制器
● NAND闪存和PC卡控制器
● 外部设备接口
4. AHB接口
AHB接口为内部CPU和其它总线控制设备访问外部静态存储器提供了通道。 AHB操作被转换到外部设备的操作。
当选择的外部存储器的数据通道是16或8位时,在AHB上的32位数据会被分割成连续的16或8位的操作。 AHB时钟(HCLK)是FSMC的参考时钟。
4.1 支持的存储器和操作
- 一般的操作规则
请求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由一组寄存器进行配置
5. 外部设备地址映像
图 FMSC存储BANK
从FSMC的角度看,可以把外部存储器划分为固定大小为256M字节的四个存储块:
- 存储块1用于访问最多4个NOR闪存或PSRAM存储设备。这个存储区被划分为4个NOR/PSRAM区并有4个专用的片选。
- 存储块2和3用于访问NAND闪存设备,每个存储块连接一个NAND闪存。
- 存储块4用于访问PC卡设备 每一个存储块上的存储器类型是由用户在配置寄存器中定义的。
5.1 NOR和PSRAM地址映像
- HADDR[27:26]位用于选择四个存储块之一
注:(1) HADDR是需要转换到外部存储器的内部AHB地址线。
表 NOR/PSRAM存储块选择
- HADDR[25:0]包含外部存储器地址
HADDR是字节地址,而存储器访问不都是按字节访问,因此接到存储器的地址线依存储器的数据宽度有所不同
注:(1) 对于16位宽度的外部存储器,FSMC将在内部使用HADDR[25:1]产生外部存储器的地址FSMC_A[24:0]。不论外部存储器的宽度是多少(16位或8位),FSMC_A[0]始终应该连到外部存储器的地址线A[0]。
表 外部存储器地址
5.2 NAND和PC卡地址映像
- 三个存储块可以用于NAND或PC卡的操作,每个存储块被划分为下述访问空间:
表 存储器映像和时序寄存器
- 对于NAND闪存存储器,通用和属性空间又可以在低256K字节部分划分为3个区
表 NAND存储块选择
注:数据区(通用/属性空间的前64K字节区域)
命令区(通用/属性空间的第2个64K字节区域)
地址区(通用/属性空间的第2个128K字节区域)
应用软件使用这3个区访问NAND闪存存储器:
● 发送命令到NAND闪存存储器:软件只需对命令区的任意一个地址写入命令即可。
● 指定操作NAND闪存存储器的地址:软件只需对地址区的任意一个地址写入命令即可。因为一个NAND地址可以有4或5个字节(依实际的存储器容量而定),需要连续地执行对地址区的写才能输出完整的操作地址。
● 读写数据:软件只需对数据区的任意一个地址写入或读出数据即可。 因为NAND闪存存储器自动地累加其内部的操作地址,读写数据时没有必要变换数据区的地址,即不必对连续的地址区操作。
6. NOR闪存和PSRAM控制器
//TODO
7. NAND闪存和PC卡控制器
//TODO
8.FSMC寄存器地址映象
//TODO
9. 参考文献
STM32F103X datasheet学习笔记---Flexible static memory controller (FSMC)的更多相关文章
- 31. Flexible static memory controller (FSMC)
31.1 FSMC main features FSMC块能够与同步和异步内存和16位PC存储卡.其主要目的是: 将AHB事务转换为适当的外部设备协议 满足外部设备的访问定时要求 所有外部存储器与控制 ...
- STM32F103X datasheet学习笔记---RCC(reset and clock control)
1.前言 本文主要记录stm32 关于reset 和 clock部分 datasheet的内容. 2.reset 有三种类型的reset:system reset, power reset, back ...
- STM32F103X datasheet学习笔记---DMA
1.前言 直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输. 无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作. 两个DMA控制器 ...
- STM32F103X datasheet学习笔记---Interrupts and events
1.前言 本章主要介绍STM32中断和事件相关的内容 2.NVIC NVIC管理着包括内核异常等中断 主要特性 68个外部中断源(不包含16个内部中断线) 可编程优先级为16级 低延迟异常和中断处理 ...
- STM32F103X datasheet学习笔记---USART
1.前言 通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换. USART利用分数波特率发生器提供宽范围的波特率选择. 它支持同步 ...
- STM32F103X datasheet学习笔记---GPIOs and AFIOs
1.前言 每个GPIO端口有如下几个寄存器进行操作: 两个32位配置寄存器:GPIOx_CRL, GPIOx_CRH 两个32位数据寄存器:GPIOx_IDR, GPIOx_ODR 一个32位set/ ...
- ARMV8 datasheet学习笔记3:AArch64应用级体系结构
1.前言 本文主要从应用的角度介绍ARMV8的编程模型和存储模型 2. AArch64应用级编程模型 从应用的角度看到的ARM处理器元素: 可见的元素(寄存器/指令) 说明 可见的寄存器 R0-R30 ...
- ARMV8 datasheet学习笔记5:异常模型
1.前言 2.异常类型描述 见 ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(1)-EL/ET/ST 一文 3. 异常处理路由对比 AArch32.AArch64架 ...
- Java学习笔记之---static
Java学习笔记之---static static不能修饰类,局部变量 (一)静态成员的特征 static+属性 静态属性 无论实例化出来多少个对象,都会共用同一块静态空间,类对象共享 静态成员从第 ...
随机推荐
- 51nod1236 序列求和 V3 【数学】
题目链接 51nod1236 题解 用特征方程求得斐波那契通项: \[f(n) = \frac{(\frac{1 + \sqrt{5}}{2})^{n} - (\frac{1 - \sqrt{5}}{ ...
- luogu2634 聪聪可可 (树形dp)
要求出两点间距离==0(mod3) 的数量,然后除以(n*n) 设f[i][j]为i的子树到i的距离==j(mod3)的数量,然后做树形dp即可 因为要最简,所以要求一下gcd,然后除下去 #incl ...
- Android编程心得-在Assets文件夹中放入.sql文件实现创建SQlite表的操作
当我们在使用SQLiteOpenHelper时,经常使用db.execSQL(String sql)方法写入对应语句实现创建表的操作,这样的确可以实现业务逻辑.与此同时还有一种更灵活的方法,从asse ...
- WebLogic安装及部署
安装(输入命令打开安装窗口) 打开命令终端,cd 到你wls1036_generic.jar存放的目录下 在终端输入:java -Dspace.detection=false -jar wls1036 ...
- 【POJ2248】加法链 idfs
首先,在这道题的搜索框架中,在对每一位进行枚举时,复杂度为\(O(n^2)\),但是可知最优解序列的长度不会太长. 其次,采用 \(bool\) 类型返回值时,是一种存在性搜索,并不一定能够得到最优解 ...
- JSP总结(二)—Cookie(汇总)
注:后缀为汇总的基本上是整理一些网上的. 1. 什么是Cookie Cookie是Web服务器保存在用户硬盘上的一段文本.Cookie允许一个Web站点在用户电脑上保存信息并且随后再取回它 ...
- oracle 按 123456789 排序 而不是 1 10 11 2 这种
order by decode(trim(translate(cptm,'0123456789',' ')),null,to_number(cptm))
- 和我一起使用postcss+gulp进行vw单位的移动端的适配
随着iphoneX的出现,新的一轮适配大法应该又出现了吧?不论是使用flex布局或者媒体查询,好似都不能完全解决新加的刘海带来的适配问题. 但是有一个单位vw就神奇的解决了这个问题.vw和vh是相对于 ...
- Android Support Library 是什么?
这两天刚开始学习安卓,这里记录下这两天遇到的一些小问题. 首先先贴一个安卓 API 等级. 官方地址:https://developer.android.com/about/dashboards/ ( ...
- (转)hdu 3436Queue-jumpers--splay+离散化
dalao博客 http://acm.hdu.edu.cn/showproblem.php?pid=3436 题意:初始排列1到N,现在要你实现3种操作: 将x插入到队头去 询问x当前的位置 询问第x ...