当前位置: 首页 > news >正文

STM32 FSMC (Flexible static memory controller) 灵活静态内存控制器介绍

文章目录

    • 1. 介绍FSMC
    • 2. FSMC特点
    • 3. Block示意图
    • 4. AHB接口
      • 4.1 Supported memories and transactions
        • General transaction rules
        • Configuration registers
    • 5. 外部设备地址映射
      • 5.1 NOR/PSRAM地址映射
        • 将NOR Flash/PSRAM的支持进行封装
      • 5.2 NAND/PC Card地址映射

1. 介绍FSMC

说到STM32的FSMC(Flexible Static Memory Controller),这个玩意儿可真是STM32家族的“多面手”。想象一下,如果STM32是个热衷于DIY的工程师,那FSMC就是他的瑞士军刀,无论是连接SRAM、PSRAM、NOR/NAND Flash还是LCD模块,FSMC都能应对自如,简直就是连接外部存储和记忆界的“桥梁”。

FSMC的灵活性主要体现在它支持多种存储器类型和访问模式,这就像是它可以说多国语言,无论你来自哪个存储器国家,它都能和你愉快地交流。而且,FSMC能够让STM32以最高效的方式访问这些外部设备,这就像是它拥有VIP通道,能够迅速通过安检进入存储器的心脏区域。

具体来说,FSMC能让你配置各种访问参数,比如数据宽度(可以是8位或16位),存储器类型(SRAM、NOR Flash等),还有访问模式(直接模式、间接模式)。这就像是你在玩一个高级定制的游戏,你可以根据外设的特性和你的需求,调整FSMC的设置,以达到最优的访问速度和性能。

不过,FSMC也有它的复杂性,配置起来就像是在玩一个需要高度策略的游戏,每个选项都需要精心考虑。你得了解你的外部设备,知道它的语言和习惯,然后通过FSMC的配置,来告诉STM32如何与之有效交流。这就需要你深入阅读数据手册,可能还要做一些试验,来找到最佳配置。

总之,FSMC就像是STM32的“通讯专家”,能够让STM32轻松地扩展存储和连接各种外设。但要想完全驾驭它,你可能需要像学习外语一样,花一些时间和精力来深入了解它。别担心,一旦你熟悉了FSMC,你就能打开一个全新的可能性世界,让你的STM32项目更加强大和灵活!

2. FSMC特点

FSMC模块能够与同步和异步存储器以及16位PC内存卡进行接口。其主要目的是:将AHB事务转换为适当的外部设备协议,满足外部设备的访问时序要求。所有外部存储器与控制器共享地址、数据和控制信号。每个外部设备通过唯一的芯片选择来访问。FSMC一次只对一个外部设备进行访问。

FSMC具有以下主要特点:

  • 与静态内存映射设备接口,包括:
    • 静态随机访问存储器(SRAM)
    • NOR Flash 存储器/OneNAND Flash 存储器
    • PSRAM(4个内存Bank)
  • 具有ECC硬件检查最多8 K字节数据的两个 NAND Flash 存储区
  • 支持16位 PC 卡兼容设备
  • 支持对同步设备(NOR Flash 和 PSRAM)进行突发模式访问
  • 8位或16位宽数据总线
  • 每个内存Bank独立芯片选择控制
  • 每个内存Bank独立配置
  • 可编程定时以支持各种不同类型的设备,特别是:
    • 可编程等待状态(最多15个)
    • 可编程总线回转周期数(最多15个)
    • 可编程输出使能和写使能延迟时间(最多15个)
    • 独立读取和写入时序和协议,以支持各种记忆体和时序变化。
  • 用于PSRAM 和 SRAM 设备的写使能和字节通道选择输出。
  • 将32位宽 AHB 事务转换为连续16位或8位对外部16位或8位装置进行访问。
  • A Write FIFO,长度为2字(STM32F42x and STM32F43x长度为16字),每一个词都是32比特宽,仅仅保存了数据而没有地址.因此这样可以缓冲AHB 写突发事务. 这样就可以向慢速度记忆体中写入并且迅速释放AHB用于其他操作.只有一个突发同时被缓冲:如果新出现了一个AHB 突发或者单次传输在之前
  • 外部异步等待控制

定义外部设备类型和相关特性的FSMC寄存器通常在启动时设置,并且在下一次复位或上电之前不会改变。然而,可以随时更改这些设置。

3. Block示意图

FSMC由四个主要模块组成:

  • AHB接口(包括FSMC配置寄存器)

  • NOR Flash/PSRAM控制器

  • NAND Flash/PC卡控制器

  • 外部设备接口。

图434显示了该模块的框图。

image-20240210105854173

4. AHB接口

AHB从设备接口使得内部CPU和其他总线主设备能够访问外部静态存储器。AHB事务被转换为外部设备协议。特别地,如果选择的外部存储器是16位或8位宽度,则在AHB上的32位宽度事务会被分割成连续的16位或8位访问。FSMC芯片选择(FSMC_NEx)在执行带有扩展模式的D模式下除了进行连续访问时不会切换。

FSMC在以下情况下生成AHB错误:

  • 当读取或写入未启用的FSMC存储器时
  • 当在FSMC_BCRx寄存器中FACCEN位被复位时,读取或写入NOR Flash存储器
  • 当输入引脚FSMC_CD(卡片存在检测)为低电平时,读取或写入PC卡存储器

这个AHB错误的影响取决于尝试进行读写访问的AHB主设备:

  • 如果是带有FPU的Cortex®-M4 CPU,将会生成一个硬件故障中断。

  • 如果是DMA,则会产生DMA传输错误,并自动禁用相应的DMA通道。

AHB时钟(HCLK)是FSMC的参考时钟。

4.1 Supported memories and transactions

General transaction rules

所请求的AHB事务数据大小可以是8位、16位或32位,而访问的外部设备具有固定的数据宽度。这可能导致传输不一致。因此,必须遵循一些简单的事务规则:

  • AHB事务大小和内存数据大小相等时,在这种情况下没有问题。

  • AHB事务大小大于内存大小时,在这种情况下,FSMC将AHB事务分割成较小的连续内存访问,以满足外部数据宽度。

  • AHB事务大小小于内存大小时,异步传输可能与外部设备类型有关

    • 对于具有字节选择功能(SRAM、ROM、PSRAM)的设备进行异步访问。

      • FSMC通过其字节通道NBL[1:0]允许写入操作来访问正确的数据。
      • 允许读取操作。读取所有内存字节并丢弃无用字节。在读取操作期间保持NBL[1:0]低电平。
    • 对于没有字节选择功能(NOR和NAND Flash 16位)的设备进行异步访问。
      当请求对16位宽Flash存储器进行字节访问时会出现这种情况。显然,不能以字节模式访问该设备(只能从/向Flash存储器读取/写入16位词),因此:

    • 不允许写入操作

    • 允许读取操作。读取所有内存字节并丢弃无用字节。在读取操作期间将NBL[1:0]设置为0.

Configuration registers

FSMC可以通过寄存器集进行配置。详细描述了NOR Flash/PSRAM控制寄存器的内容,请参见第36.5.6节。详细描述了NAND Flash/PC卡寄存器的内容,请参见第36.6.8节。

5. 外部设备地址映射

从FSMC的角度来看,外部存储器被分为4个固定大小的256兆字节的Bank(参见图435):

  • Bank1用于寻址最多4个NOR Flash或PSRAM存储器设备。该Bank被分成4个NOR/PSRAM子Bank,每个子Bank有4个专用芯片选择信号,如下所示:

    • Bank1 - NOR/PSRAM 1

    • Bank1 - NOR/PSRAM 2

    • Bank1 - NOR/PSRAM 3

    • Bank1 - NOR/PSRAM 4

  • Bank2和3用于寻址NAND Flash设备(每个Bank一个设备)

  • Bank4用于寻址PC卡设备

对于每个Bank,要使用的存储器类型由配置寄存器中用户定义。

image-20240210113721909

5.1 NOR/PSRAM地址映射

HADDR[27:26]位用于根据表216中的显示选择四个内存Bank之一。

image-20240210113930922

HADDR[25:0]包含外部存储器的地址。由于HADDR是字节地址,而存储器是按字寻址的,根据存储器数据宽度,实际发给存储器的地址会有所变化,如下表所示。

image-20240210114010935

将NOR Flash/PSRAM的支持进行封装

不支持同步存储器的Wrap burst模式。必须将存储器配置为未定义长度的linear burst模式。

5.2 NAND/PC Card地址映射

在这种情况下,有三家Bank可供选择,每个Bank都被划分为表218中所示的内存空间。

image-20240210115858239

对于NAND Flash存储器,常见和属性内存空间被细分为三个部分(见下表219)位于较低的256 K字节中:

  • 数据部分(在常见/属性内存空间中的前64 K字节)
  • 命令部分(在常见/属性内存空间中的第二个64 K字节)
  • 地址部分(在常见/属性内存空间中接下来的128 K字节)

image-20240210115951435

应用软件使用3个部分来访问NAND Flash存储器:

  • 发送命令到NAND Flash存储器:软件必须将命令值写入命令部分的任何内存位置。
  • 指定要读取或写入的NAND Flash地址:软件必须将地址值写入地址部分的任何内存位置。由于地址可能是4或5字节长(取决于实际内存大小),需要连续多次写入地址部分以指定完整的地址。
  • 读取或写入数据:软件从数据部分的任何内存位置读取或写入数据值。

由于NAND Flash存储器自动递增地址,因此无需递增数据部分的地址以访问连续的内存位置。

相关文章:

STM32 FSMC (Flexible static memory controller) 灵活静态内存控制器介绍

文章目录 1. 介绍FSMC2. FSMC特点3. Block示意图4. AHB接口4.1 Supported memories and transactionsGeneral transaction rulesConfiguration registers 5. 外部设备地址映射5.1 NOR/PSRAM地址映射将NOR Flash/PSRAM的支持进行封装 5.2 NAND/PC Card地址映射 1. 介绍FSMC 说到…...

手把手教你开发Python桌面应用-PyQt6图书管理系统-图书信息维护模块UI设计实现

锋哥原创的PyQt6图书管理系统视频教程: PyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~_哔哩哔哩_bilibiliPyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~共计24条视频&…...

SpringBoot源码解读与原理分析(六)WebMvc场景的自动装配

文章目录 2.6 WebMvc场景下的自动装配原理2.6.1 WebMvcAutoConfiguration2.6.2 Servlet容器的装配2.6.2.1 EmbeddedTomcat、EmbeddedJetty、EmbeddedUndertow2.6.2.2 BeanPostProcessorsRegistrar(后置处理器的注册器)2.6.2.3 两个定制器的注册 2.6.3 DispatcherServlet的装配2…...

git恢复rebase过程中遇到权限问题和丢失的提交

文章目录 一、检查丢失的提交是否还在 reflog 中二、创建一个新分支来恢复丢失的提交三、处理权限问题四. 使用 git fsck 查找丢失对象1、创建一个新分支来恢复该提交2、检查和合并提交 五. 介绍git中命令reflog 与 fsck1、git reflog2、git fsck使用场景 一、检查丢失的提交是…...

Spring boot 集成redis

一、使用spring bootspring-boot-starter-data-redis 导入maven包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> spring boot配置文件 spring.re…...

c++ STL系列——(一)概述

引言 在软件开发的世界里&#xff0c;C一直是一门备受青睐的编程语言&#xff0c;特别是在需要高性能和灵活性的场合。而C的标准模板库&#xff08;Standard Template Library&#xff0c;简称STL&#xff09;无疑是这门语言中最强大的工具之一。STL提供了一系列的数据结构和算…...

AI-数学-高中-25-三角函数一图像解决三角函数不等式

原作者视频&#xff1a;【三角函数】【考点精华】1图像解决三角函数不等式问题(基础&#xff09;_哔哩哔哩_bilibili 1.三角函数图像法&#xff1b; 2.不好画图像时&#xff1a;任意角的三角函数图像&#xff0c;在象限中比较&#xff0c;在4个象限中寻找角度的关系。 示例1…...

在Ubuntu上安装JetBrains Toolbox并解决libfuse.so.2依赖问题

在安装JetBrains Toolbox的过程中&#xff0c;我们遇到了libfuse.so.2依赖缺失的问题。这个问题通常发生在尝试运行AppImage格式的程序时&#xff0c;如果系统缺少必要的FUSE&#xff08;Filesystem in Userspace&#xff09;支持。以下是我在解决这个问题并在Ubuntu上成功安装…...

在vscode上传项目到gitee

一、在Gitee上新建一个仓库 Tip&#xff1a;若已经创建过了&#xff0c;直接跳到第二部分看VsCode如何上传代码到Gitee 创建仓库比较简单&#xff0c;下面两张图就是整个过程&#xff0c;这里不在赘述&#xff0c;具体如下&#xff1a; 二、VsCode连接Gitee上创建的仓…...

比较两次从接口获取的数据,并找出变动的字段

问题&#xff1a;有这么一个接口数据&#xff0c;每次会返回这么一个数据: [{Id:1,pending:65,queued:0,completed:0},{Id:2,pending:0,queued:0,completed:0}]&#xff0c;请问再次请求这个接口的时候如何将获取的数据和上一次获取到的数据进行比较&#xff0c;找出变动的字段…...

Java并发基础:LinkedBlockingDeque全面解析!

内容概要 LinkedBlockingDeque提供了线程安全的双端队列实现&#xff0c;它支持在队列两端高效地进行插入和移除操作&#xff0c;同时具备阻塞功能&#xff0c;能够很好地协调生产者与消费者之间的速度差异&#xff0c;其内部基于链表结构&#xff0c;使得并发性能优异&#x…...

Zabbix6.x配置中文界面 解决乱码问题

Zabbix6.x配置中文界面 解决乱码问题 Zabbix6.x界面无法选择中文&#xff0c;通过安装语言包解决。后面也解决了zabbix6中文方块&#xff08;乱码&#xff09;问题。 配置中文语言包 系统中默认没有携带中文语言包&#xff0c;可以通过以下命令查看 localectl list-locales #…...

next项目页面性能调优

next项目页面性能调优 一般来说性能优化可以分为加载时、运行时两部分的优化。 扩展参考链接&#xff1a; 前端性能优化 24 条建议 Webpack 4进阶–从前的日色变得慢 &#xff0c;一下午只够打一次包 Webpack 分包优化首屏加载 参考指标 FCP&#xff08;First Contentful P…...

性能评测|虚拟化和裸金属 K8s 哪个性能更好?

本文重点 整体而言&#xff0c;SKS&#xff08;虚拟机 Kubernetes&#xff09;可以达到裸金属 Kubernetes 性能的 82% – 96%&#xff0c;满足绝大部分场景下生产容器应用的性能需求。更多虚拟化与裸金属 Kubernetes 架构、特性、适用场景与性能对比&#xff0c;欢迎阅读文末电…...

【大厂AI课学习笔记】【1.6 人工智能基础知识】(1)人工智能、机器学习、深度学习之间的关系

6.1 人工智能、机器学习与深度学习的关系 必须要掌握的内容&#xff1a; 如上图&#xff1a;人工智能>机器学习>深度学习。 机器学习是人工智能的一个分支&#xff0c;该领域的主要研究对象是人工智能&#xff0c;特别是如何在经验学习中改进具体算法的性能。 深度学习…...

计算机毕业设计基于的农村蔬菜销售系统SSM

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; vue mybatis Maven mysql5.7或8.0等等组成&#xff0c;B…...

【Chrono Engine学习总结】3-地型terrain

由于Chrono的官方教程在一些细节方面解释的并不清楚&#xff0c;自己做了一些尝试&#xff0c;做学习总结。 1、关于物体材质 在介绍地型之前&#xff0c;要初步了解chrono中关于材质的一些基本概念。 首先&#xff0c;最基本的材质类是ChMaterialSurface,其进一步包括&…...

【Linux】构建模块

&#x1f525;博客主页&#xff1a;PannLZ &#x1f38b;系列专栏&#xff1a;《Linux系统之路》 &#x1f94a;不要让自己再留有遗憾&#xff0c;加油吧&#xff01; 文章目录 构建第一个模块1模块的makefile2内核树内构建3内核树外构建 构建第一个模块 可以在两个地方构建模…...

vscode远程连接失败

目录 解决方案尝试1解决方案尝试2 解决方案尝试1 最近通过vscode一直使用腾讯云的服务器作为远程开发环境&#xff0c;以前一直很好用。 直到最近重装了系统之后&#xff0c;发现vscode没法对云服务器进行连接了&#xff0c;即使在远程主机添加了本地的公钥也不行。直接报错:…...

C#系列-C#访问FTP服务器实现上传下载(8)

FTP Server是什么&#xff1f; FTP Server&#xff08;File Transfer Protocol Server&#xff09;&#xff0c;即文件传输协议服务器&#xff0c;是在互联网上提供文件存储和访问服务的计算机。它依照FTP协议提供服务&#xff0c;专门用来传输文件。 FTP Server允许不同的客…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...