31. Flexible static memory controller (FSMC)
31.1 FSMC main features
FSMC块能够与同步和异步内存和16位PC存储卡。其主要目的是:
- 将AHB事务转换为适当的外部设备协议
- 满足外部设备的访问定时要求
所有外部存储器与控制器共享地址、数据和控制信号。每个外部设备通过一个唯一的芯片选择来访问。FSMC一次只能访问一个外部设备。
FSMC具有以下主要特点:
- 静态内存映射设备接口,包括:
- 静态随机存取存储器(SRAM)
- NOR 闪存/OneNAND闪存
- PSRAM(4个内存库)
- 两个 NAND闪存库,带有ECC硬件,可以检查最多8千字节的数据
- 16位PC卡兼容设备
- 支持对同步设备的突发模式访问(NOR Flash和PSRAM)
- 8位或16位宽的数据总线
- 独立的芯片选择控制每个存储库
- 每个内存库的独立配置
- 可编程时序,以支持广泛的设备,特别是:
- 可编程等待状态(最多15个)
- 可编程总线转变周期(最多15个)
- 可编程输出使能和写入使能延迟(最多15次)
- 独立读写时序和协议,从而支持最广泛各种各样的内存和时序
- 写使能和字节巷选择输出用于PSRAM和SRAM设备
- 将32位宽的AHB事务传输转换为连续的16位或8位访问外部16位或8位设备
- 一个写FIFO, 2个字长,每个字32位宽,只存储数据,不存储地址。因此,这个FIFO只缓冲AHB写突发事务。可以用它往慢速内存中写入从而快速释放AHB为其他操作。只有一次一个突发事件被缓冲:如果一个新的AHB突发事件或单个事务发生在操作正在进行中,FIFO已经排干。FSMC将插入等待状态,直到当前内存访问完成。
- 外部异步等待控制
定义外部设备类型和相关特征的FSMC寄存器通常是在启动时设置,直到下一次复位或开机时才更改。然而,它是可以随时更改设置。
31.2 Block diagram
FSMC由四个主要模块组成:
- AHB接口(包括FSMC配置寄存器)
- NOR Flash/PSRAM控制器
- NAND闪存/PC卡控制器
- 外部设备接口
框图如图397所示

31.3 AHB接口
AHB从接口允许内部cpu和其他总线主外围设备访问外部静态内存。
AHB事务被转换为外部设备协议。如果所选外部内存为16或8位宽,AHB上32位宽的事务被拆分进入连续的16位或8位访问。FSMC芯片选择(FSMC_NEx)不会在连续的访问之间翻转,除非工作在模式D中启用扩展模式。
FSMC在以下情况下产生AHB错误:
- 读取或写入未启用的 FSMC bank时
- 当 FSMC_BCRx 寄存器中 FACCEN 位复位时读写NOR闪存库。
- 当输入管脚 FSMC_CD(卡存在检测)为低时,读写PC卡时。
这个AHB错误的影响取决于尝试读写访问的 AHB 主设备:
- 如果是 Cortex-M3 CPU,将产生硬中断故障
- 如果是 DMA,则会生成一个DMA传输错误,并且相应的DMA通道自动禁用。
AHB 时钟(HCLK)是FSMC的参考时钟。
31.3.1 支持的内存及事务
一般事务规则
请求的AHB事务数据大小可以是8位、16位或32位宽,而访问的外部设备具有固定的数据宽度。这可能导致不一致的传输。
因此,必须遵循一些简单的事务规则:
- AHB事务数据和内存大小相等: 在这种情况下没有问题。
- AHB事务数据大于内存大小:在这种情况下,FSMC将AHB事务分割成更小的连续内存访问以满足外部数据宽度。
- AHB事务数据小于内存大小:异步传输是否一致取决于外部类型设备。
- 具有字节选择功能的设备(SRAM,ROM,PSRAM)的异步访问:
- FSMC 允许写事务通过它的字节通道 NBL[1:0] 访问正确的数据。
允许读取事务。所有内存字节都是读的,无用的被丢弃的。NBL[1:0]在读取事务期间保持低位。
异步访问没有字节选择功能的设备(NOR和NAND Flash 16位)。
当请求对16位宽的闪存进行8位字节访问时,就会出现这种情况。显然,内存不能以字节模式访问设备(只能访问16位)因此:- 不允许写事务
- 允许读事务所有的字节都是可读的,无用的字节被丢弃。NBL[1:0]在读取事务期间设置为0。
- 具有字节选择功能的设备(SRAM,ROM,PSRAM)的异步访问:
31.4 外部设备地址映射
从FSMC的角度来看,外部存储器分为4个固定大小的bank,每个bank 有256兆字节(参见图398):
- Bank 1 用于 地址多达4个NOR 闪存或PSRAM内存设备。该bank分为为4个 NOR/PSRAM 子bank与4个专用芯片的选择,如下:
Bank 1 - NOR/PSRAM 1
Bank 1 - NOR/PSRAM 2
Bank 1 - NOR/PSRAM 3
Bank 1 - NOR/PSRAM 4
对于每个bank,要使用的内存类型是用户在配置寄存器中定义的。

这个银行是
31. Flexible static memory controller (FSMC)的更多相关文章
- STM32F103X datasheet学习笔记---Flexible static memory controller (FSMC)
1.前言 FSMC模块能够与同步或异步存储器和16位PC存储器卡接口,它的主要作用是: 将AHB传输信号转换到适当的外部设备协议 满足访问外部设备的时序要求 所有的外部存储器共享控制器输出的地址.数据 ...
- Java知多少(31)static关键字以及Java静态变量和静态方法
static 修饰符能够与变量.方法一起使用,表示是“静态”的. 静态变量和静态方法能够通过类名来访问,不需要创建一个类的对象来访问该类的静态成员,所以static修饰的成员又称作类变量和类方法.静态 ...
- Memory Controller
1.S3C6410 地址空间 For memory at the table details 2. SDRAM图解 3. SDRAM 芯片容量计算: L_BANK 数目 * 一个 L_BANK 中的单 ...
- 19.2 MEMORY CONTROLLER
在存储控制器的BANKCONTROLREGISTER(BANKCONn: GCS6-nGCS7)表中:中文翻译各个寄存器的位出现错误: 原文中正确的表述见下图:
- FSMC(STM32)
(一)FSMC:Flexible Static Memory Controller,可变(灵活)静态存储控制器 小容量产品是指闪存存储器容量在1 6K至32K 字节之间的STM32F101xx.STM ...
- stm32f10x.h文件分析理解
今天再看过半年前自己写的这篇发现自己当时理解有误,stm32f10x.h与库开发并未存在太大关系,只是一个最为重要的寄存器地址到寄存器结构体变量的映射. stm32f10x.h 这个头文件是STM32 ...
- 嵌入式单片机STM32应用技术(课本)
目录SAIU R20 1 6 第1页第1 章. 初识STM32..................................................................... ...
- 第26章 FMC—扩展外部SDRAM
本章参考资料:<STM32F76xxx参考手册2>.<STM32F7xx规格书>.库帮助文档<STM32F779xx_User_Manual.chm>. 关于SDR ...
- 第26章 FMC—扩展外部SDRAM—零死角玩转STM32-F429系列
第26章 FMC—扩展外部SDRAM 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...
随机推荐
- ivew Table 固定列设置后,底部拖拽的横轴被覆盖拉不动
原因:设置了max-height=500px:表格最大高度,单位 px,设置后,如果表格内容大于此值,会固定表头.去掉即可.
- 购买 Linux VPS 服务器后简单的安全设置
我们在购买了 Linux 系统的 VPS 或服务器后,一般的商家都会给你一个 root 权限的账号,并且默认的密码不会太长,这是很不安全的.经常有客户因为弱口令而被黑客暴力破解密码导致 VPS 服务器 ...
- Findwind() Enumwindow()
1. FindWindow() HWND FindWindow(LPCSTR lpClassName, LPCSTR lpWindowName); 功能:查找与指定窗口类名和窗口名称相匹配的顶级窗口, ...
- CentOS 7 配置SFTP
目前越来越多的FTP客户端软件开始支持SSH协议上传和下载文件,这种协议方式就是SFTP. SFTP的优势主要有两点,一是不需要再配置个FTP服务端:二是SSH协议是安全传输,上传和下载是经过加密的. ...
- python基础【第八篇】
day06笔记 1.小数据池 is 与 ==的区别 is :判断两边的内存地址是否相同 ==:判断两边的值是否相同 python中的驻留机制: 数字: -5 ~ 256 字符串: 3.6 乘法 ...
- 43-python基础-python3-字符串-常用字符串方法(一)-upper()-lower()-isupper()-islower()
请注意, 这些方法没有改变字符串本身,而是返回一个新字符串. 如果你希望改变原来的字符串,就必须在该字符串上调用 upper()或 lower(),然后将这个新字符串赋给保存原来字符串的变量. 1 ...
- 归并排序(Merge_Sort)
基本思想 建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Divide and Conquer)的一个非常典型的应用. 算法原理 归并操作指的是将两个已经排序的序列合并成一个序列的操作,归并 ...
- enovia plm export to sap
UPC creation UPC 结构 PLM 使用的UPC 是 14个数字组成的,兼容. 前两位为 0,后12位为有效数字,在SAP中0会被忽略,符合国际UPC通用 规则, 前一位为0,后13 位为 ...
- svndumpfilter - 过滤一个 Subversion 仓库的转储文件 `dumpfile'。
SYNOPSIS 总览 svndumpfilter command [options & args] OVERVIEW 概述 Subversion 是一个版本控制系统,允许保存旧版本的文件和目 ...
- makefile自动编译
1.格式: 目标:依赖 规则 规则前有一个tab键 ,缺少tab键出错,使用空格替代也不可以 (1). 例子: 编写makefile 编译 main.c ,fun.c , fun.h test ...