灵活的静态存储控制器 (FSMC)的介绍(STM32F4)
目录
概述
1 认识FSMC
1.1 应用介绍
1.2 FSMC的主要功能
1.2.1 FSMC用途
1.2.2 FSMC的功能
2 FSMC的框架结构
2.1 AHB 接口
2.1.1 AHB 接口的Fault
2.1.2 支持的存储器和事务
2.2 外部器件地址映射
3 地址映射
3.1 NOR/PSRAM地址映射
3.2 NAND/PC卡地址映射
概述
本文主要介绍灵活的静态存储控制器 (FSMC)的基本概念,包括其支持主要器件,架构特点,以及在MCU内部AHB接口的特性,还介绍了其和外部NOR Flash,Nand flash, 以及SRAM的地址映射关系等内容。
1 认识FSMC
1.1 应用介绍
FSMC 能够连接同步、异步存储器和 16 位 PC 存储卡。其主要用途如下:
● 将 AHB 数据通信事务转换为适当的外部器件协议
● 满足外部器件的访问时序要求
所有外部存储器共享地址、数据和控制信号,但有各自的片选信号。 FSMC 一次只能访问一个外部器件。
总结如下:
1)所有的外部存储器共享地址、数据和控制信号
2)通过片选CS使能各自的片选
3)FSMC每一次只能选择一个器件
1.2 FSMC的主要功能
1.2.1 FSMC用途
FSMC 能够连接同步、异步存储器和 16 位 PC 存储卡。其主要用途如下:
● 将 AHB 数据通信事务转换为适当的外部器件协议
● 满足外部器件的访问时序要求
所有外部存储器共享地址、数据和控制信号,但有各自的片选信号。 FSMC 一次只能访问一个外部器件。
1.2.2 FSMC的功能
FSMC 具有以下主要功能:
1)连接静态存储器映射的器件:
— 静态随机访问存储器 (SRAM)
— 只读存储器 (ROM)
— NOR Flash/OneNAND Flash
— PSRAM( 4 个存储区域)
2)外围器件支持
两个带有 ECC 硬件的 NAND Flash 存储区域,可检查多达 8 KB 的数据。16 位 PC 卡兼容设备,支持对同步器件( NOR Flash 和 PSRAM)的突发模式访问;8 或 16 位宽的数据总线;每个存储区域有独立的片选控制,每个存储区域可独立配置。
3) 可对时序进行编程,以支持各种器件:
— 等待周期可编程(最多 15 个时钟周期)
— 总线周转周期可编程(最多 15 个时钟周期)
— 输出使能和写入使能延迟可编程(最多 15 个时钟周期)
— 独立的读和写时序和协议,以支持各种存储器和时序
4)其他功能
● 写使能和字节通道选择输出,可配合 PSRAM 和 SRAM 器件使用
● 将 32 位的 AHB 事务转换为针对外部 16 位或 8 位器件进行的连续 16 位或 8 位访问。
● 用于写入的 FIFO, 2 字长(对于 STM32F42x 和 STM32F43x,为 16 字长),每个字为32 位宽,仅用于存储数据,而不存储地址。因此,此 FIFO 仅会缓冲 AHB 批量写事务。从而可对慢速存储器执行写入操作后能快速释放 AHB,以供其它操作使用。每次仅缓冲一个突发事务:如果在有操作正在进行时发生一个新的 AHB 突发事务或者一个单独事务,则 FIFO 将会清空。 FSMC 将插入等待周期,直至当前存储器访问已完成)。
5)外部异步等待控制
定义外部器件类型和其特性的 FSMC 寄存器通常在启动时进行设置,并且在下次上电或复位前保持不变。但也可随时更改这些设置。
2 FSMC的框架结构
FSMC 包含四个主要模块:
1)AHB 接口(包括 FSMC 配置寄存器)
2)NOR Flash/PSRAM 控制器
3)NAND Flash/PC 卡控制器
4)外部器件接口
2.1 AHB 接口
CPU 和其它 AHB 总线主设备可通过该 AHB 从设备接口访问外部静态存储器。AHB 事务会转换为外部器件协议。尤其是当所选外部存储器的宽度为 16 位或 8 位时, AHB中的 32 位宽事务将被划分成多个连续的 16 或 8 位访问。片选将在每次访问时进行切换。
2.1.1 AHB 接口的Fault
出现以下条件时, FSMC 将产生 AHB 错误:
● 读取或写入未使能的 FSMC 存储区域
● 在 FSMC_BCRx 寄存器中的 FACCEN 位复位时读取或写入 NOR Flash 存储区域
● 在输入引脚 FSMC_CD( Card Presence Detection)为低电平时读取或写入 PC 卡存储区域此 AHB 错误的影响具体取决于尝试进行读写访问的 AHB 主设备:
● 如果为 Cortex™-M4F CPU,则会生成硬性故障 (hard fault) 中断
● 如果为 DMA,则会生成 DMA 传输错误,并会自动禁用相应的 DMA 通道AHB 时钟 (HCLK) 是 FSMC 的参考时钟。
2.1.2 支持的存储器和事务
1)通用事务规则
所请求的 AHB 事务传输大小可以是 8、 16 或 32 位,但访问的外部器件具有固定的数据宽度。这可能会导致不一致的数据宽度。因此,必须遵循一些简单的事务规则:
● AHB 事务数据宽度和存储器数据宽度相等没有任何问题。
● AHB 事务数据宽度大于存储器宽度在此情况下, FSMC 会将 AHB 事务分为多个较小的连续存储器访问,以便符合外部数据宽度。
对具有字节选择功能的器件( SRAM、 ROM、 PSRAM)进行异步访问。
a) FSMC 允许写入事务通过其字节选择通道 NBL[1:0] 访问恰当的数据
b) 允许读取事务。会读取所有存储器字节,并将丢弃无用的存储器字节。 NBL[1:0]在读取事务期间保持为低电平。
对不具有字节选择功能的器件( 16 位 NOR 和 NAND Flash)进行异步访问。
当请求对 16 位宽的 Flash 存储器进行字节访问时会发生此情形。显然,不能在字节模式下访问此器件(只能针Flash 存储器读取或写入 16 位字),因此:
a) 不允许写入事务
b) 允许读取事务。会读取所有存储器字节,并将丢弃无用的存储器字节。 NBL[1:0]在读取事务期间保持低电平。
2)配置寄存器
FSMC 可通过一个寄存器组进行配置。有关 NOR Flash/PSRAM 控制寄存器的详细说明
2.2 外部器件地址映射
从 FSMC 的角度,外部存储器被划分为 4 个固定大小的存储区域,每个存储区域的大小为256 MB(请参见下图 ):
● 存储区域 1 可连接多达 4 个 NOR Flash 或 PSRAM 存储器器件。此存储区域被划分为 4 个NOR/PSRAM 区域,带 4 个专用片选信号。
● 存储区域 2 和 3 用于连接 NAND Flash 器件(每个存储区域一个器件)
● 存储区域 4 用于连接 PC 卡设备
对于每个存储区域,所要使用的存储器类型由用户在配置寄存器中定义。
3 地址映射
3.1 NOR/PSRAM地址映射
HADDR[27:26] 位用于从表 185 中所示的四个存储区域之中选择其中一个存储区域。
NOR/PSRAM 存储区域选择
HADDR[25:0] 包含外部存储器地址。由于 HADDR 为字节地址,而存储器按字寻址,所以根据存储器数据宽度不同,实际向存储器发送的地址也将有所不同,如下表所示。
外部存储器地址
如果外部存储器的宽度为 16 位, FSMC 将使用内部的 HADDR[25:1] 地址来作为对外部存储器的寻址地址
FSMC_A[24:00]。
无论外部存储器的宽度为 16 位还是 8 位, FSMC_A[0] 都应连接到外部存储器地址 A[0]。
NOR Flash/PSRAM 的回卷支持
不支持同步存储器的回绕突发模式。存储器必须按未定义长度的线性突发模式进行配置。
3.2 NAND/PC卡地址映射
在此情况下,有三个存储区域,每个存储区域分为各个存储空间,如下表所示。
存储器映射和时序寄存器
对于 NAND Flash 存储器,通用区和特性区存储空间分为三个部分,均位于低位 256 KB 中(见下面的表):
● 数据区域(通用/特性存储空间中的第一个 64 KB)
● 命令区域(通用/特性存储空间中的第二个 64 KB)
● 地址区域(通用/特性存储空间中的下一个 128 KB)
NAND 存储区域选择
应用程序软件使用这 3 个区域来访问 NAND Flash 存储器:
● 向 NAND Flash 存储器发送命令:软件可以向命令区域中的任意存储器位置写入命令值。
● 指定读取或写入的 NAND Flash 地址:软件可以向地址区域中的任意存储位置写入地址值。由于地址的长度可以是 4 或 5 个字节(具体取决于实际存储器大小),要指定完整的地址,需要对地址区域执行多个连续写入操作。
● 读取或写入数据:软件将从数据区域中的任意存储器位置读取数据值,或者向其中写入数据值。
由于 NAND Flash 存储器会自动递增地址,所以在访问连续存储器位置时,无需递增数据区域
的地址。
相关文章:

灵活的静态存储控制器 (FSMC)的介绍(STM32F4)
目录 概述 1 认识FSMC 1.1 应用介绍 1.2 FSMC的主要功能 1.2.1 FSMC用途 1.2.2 FSMC的功能 2 FSMC的框架结构 2.1 AHB 接口 2.1.1 AHB 接口的Fault 2.1.2 支持的存储器和事务 2.2 外部器件地址映射 3 地址映射 3.1 NOR/PSRAM地址映射 3.2 NAND/PC卡地址映射 概述…...
nginx-rtmp
1.已经安装nginx;configure配置模块;make编译无需安装;把objs/nginx复制到已安装的宁目录下 ./configure --prefix/usr/local/nginx --add-module/usr/local/src/fastdfs-nginx-module/src --add-module/usr/local/src/nginx-rtmp-module-mas…...
nginx 代理java 请求报502
情况:nginx代理java 请求 后端返回正常,但是经过nginx 时报502 经过多次对比其他接口发现可能是返回的请求头过大,导致nginx 报错:如下 2024/05/13 02:57:12 [error] 88#88: *3755 upstream sent too big header while reading r…...

面试集中营—Redis面试题
一、Redis的线程模型 Redis是基于非阻塞的IO复用模型,内部使用文件事件处理器(file event handler),这个文件事件处理器是单线程的,所以Redis才叫做单线程的模型,它采用IO多路复用机制同时监听多个socket&a…...

关于使用git拉取gitlab仓库的步骤(解决公钥问题和pytho版本和repo版本不对应的问题)
先获取权限,提交ssh-key 虚拟机连接 GitLab并提交代码_gitlab提交mr-CSDN博客 配置完成上诉步骤之后,执行下列指令进行拉去仓库的内容 sudo apt install repo export PATHpwd/.repo/repo:$PATH python3 "实际路径"/repo init -u ssh://gitxx…...

Django图书馆综合项目-学习(2)
接下来我们来实现一下图书管理系统的一些相关功能 1.在书籍的book_index.html中有一个"查看所有书毂"的超链接按钮,点击进入书籍列表book_list.html页面. 这边我们使用之前创建的命名空间去创建超连接 这里的book 是在根路由创建的namespacelist是在bo…...
vue3+ts 获取input 输入框中的值
从前端input 输入框获取值,通过封装axios 将值传给后端服务 数据格式为json html <el-form> <el-form-item label"域名"><el-input v-model"short_url" style"width: 240px"type"text"placeholder&quo…...
Gin框架返回Protobuf类型:提升性能的利器
在构建高效、高性能的微服务架构时,数据序列化和反序列化的性能至关重要。Protocol Buffers(简称Protobuf)作为一种轻量级且高效的结构化数据存储格式,已经在众多领域得到广泛应用。Gin框架作为Go语言中流行的Web框架,…...

HTML满屏漂浮爱心
目录 写在前面 满屏爱心 代码分析 系列推荐 写在最后 写在前面 小编给大家准备了满屏漂浮爱心代码,一起来看看吧~ 满屏爱心 文件heart.svg <svg xmlns"http://www.w3.org/2000/svg" width"473.8px" height"408.6px" view…...
爬虫应该选择住宅ip代理还是数据中心代理?
住宅代理 住宅代理是互联网服务提供商 (ISP) 提供的 IP 地址,它们是附加到实际物理位置的真实IP地址。住宅代理允许用户通过目标区域内的真实IP地址连接到互联网。 数据中心代理 数据中心代理是指是使用数据中心拥有并管理IP的代理,IP地址来源于数据中…...
百面算法工程师目录 | 深度学习目标检测、语义分割、分类上百种面试问答技巧
本文给大家带来的百面算法工程师是深度学习面试目录大纲,文章内总结了常见的提问问题,旨在为广大学子模拟出更贴合实际的面试问答场景。在这篇文章中,可以点击题目直达问题答案处,方便查找问题寻找答案。节约大家的时间。通过对这…...

Java中Maven的依赖管理
依赖介绍 是指当前项目运行所需要的jar包,一个项目中可以引入多个依赖 配置 在pom.xml中编写<dependencies>标签 在<dependencies>中使用<dependency>引入标签 定义坐标的groupId、rtifactId、version 点击刷新按钮、引入新坐标 例如引入下…...

Github新手入门使用方法
**存在问题:**新手如何快速入门github,能够下载开源文件,并且修改后更新远程github仓库; 解决方案: 参考: http://www.360doc.com/content/24/0301/12/60419_1115656653.shtml https://blog.csdn.net/gongd…...

期权隐含波动率到底是什么意思?
今天期权懂带你了解期权隐含波动率到底是什么意思?期权隐含波动率解析。通俗的说,期权隐含波动率是在期权市场中买家和卖家对于,某一期权合约价格变动幅度大小的判断。 期权隐含波动率到底是什么意思? 隐含波动率是根据期权市场价…...
28、Flink 为管理状态自定义序列化
为管理状态自定义序列化 a)概述 对状态使用自定义序列化,包含如何提供自定义状态序列化程序、实现允许状态模式演变的序列化程序。 b)使用自定义状态序列化程序 注册托管 operator 或 keyed 状态时,需要 StateDescriptor 来指…...

【强训笔记】day17
NO.1 思路:用一个字符串实现,stoi函数可以转化为数字并且去除前导0。 代码实现: #include <iostream> #include<string> using namespace std;string s;int main() {cin>>s;for(int i0;i<s.size();i){if(s[i]%20) s[…...

平滑 3d 坐标
3d平滑 import torch import torch.nn.functional as F import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3Dclass SmoothOperator:def smooth(self, vertices):# 使用一维平均池化进行平滑vertices_smooth F.avg_pool1d(vertices.p…...
Go解析的数据类型可能含有不同数据结构的处理方式
最近做一个需求,各种业务消息都会往我的消息队列中写各种类型的数据,服务端需要接受各种不同的参数然后转换为本地数据结构,Go语言不确定上游传过来的数值是什么类型,然后又下面四种解决方案。 1. 类型断言和类型切换 func (Mis…...
Java网络编程基础
Java网络编程基础主要涉及进程间通信、网络通信协议、IP地址和端口以及Java提供的网络应用编程接口等核心概念。 进程间通信是Java网络编程的基础。进程是运行中的程序,而进程间通信则是指不同进程之间进行数据交换和共享信息的过程。在Java中,进程间的…...

鸿蒙DevEco Studio 4.1 Release-模拟器启动方式错误
软件版本:DevEco Studio 4.1 Release 报错提示: 没有权限查看处理指导 Size on Disk 显示1.0MB 尝试方案(统统无效): 1、“windows虚拟机监控程序平台”、"虚拟机平台"已开启 启用CPU虚拟化 2、C…...

【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...

Unity VR/MR开发-VR开发与传统3D开发的差异
视频讲解链接:【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...
Monorepo架构: Nx Cloud 扩展能力与缓存加速
借助 Nx Cloud 实现项目协同与加速构建 1 ) 缓存工作原理分析 在了解了本地缓存和远程缓存之后,我们来探究缓存是如何工作的。以计算文件的哈希串为例,若后续运行任务时文件哈希串未变,系统会直接使用对应的输出和制品文件。 2 …...