STM32 FMC原理详解

2023-05-16

关于FSMC的基本原理已经在这两篇讲解了,如果有不懂的建议先看一下,这里我们对一些基本概念会说的少一些,主要就是针对FMC的特点和FSMC跟FMC的区别做主要的阐述(区别不大)。

STM32 FSMC/FMC原理保姆级讲解(一)

STM32 FSMC/FMC原理保姆级讲解(二)

SDRAM、DRAM及DDR FLASH ROM概念详解

FSMC和FMC区别

F1F407 使用的是FSMC(Flexible static memory controller)“静态存储器控制器”Cortex-M3内核的芯片专属的,STM32可以通过FSMC与静态SRAM、ROM、PSRAM、Nor Flash和NandFlash存储器的引脚相连,从而进行数据的交换。

Cortex-M4内核的F429和Cortex-M7内核的F7,H7系列中,变成了FMC(Flexible Memory Controller) 灵活存储控制器,支持了动态SDRAM 等设备,

其中最大的区别是什么呢?

FMC是在FSMC(Flexible Static Memory Controller)的基础上扩展了SDRAM的总线控制器,使用 FMC 可以动态刷新 SDRAM

静态RAM跟动态RAM

SRAM
SRAM,静态的随机存取存储器,又被称为静态RAM,利用双稳态电路进行存储。即使有干扰对稳态电路也没影响,所以有双稳态性,“静态”是指只要不掉电,存储在SRAM中的数据就可以一直保存,只要有电,SRAM中的数据就不会有变化。加电情况下,不需要一直刷新,数据不会丢失,而且,

DRAM
DRAM,动态随机存取存储器,需要不断的刷新,才能保存数据。主要的作用原理是利用电容内存储电荷的多寡来代表一个二进制比特(bit)是1还是0。由于在现实中电容会有漏电的现象,导致电位差不足而使记忆消失,因此除非电容经常周期性地充电,否则无法确保记忆长存。DRAM读取具有破坏性,也就是说,在读操作中会破坏内存单元行中的数据。因此,必需在该行上的读或写操作结束时,把行数据写回到同一行中。这一操作称为预充电,是行上的最后一项操作。必须完成这一操作之后,才能访问新的行,这一操作称为关闭打开的行。

SDRAM(Synchronous Dynamic Random Access Memory),同步动态随机存储器。同步的DRAM

同步和异步的区别是同步方式需要一个专门的片外时钟CLK信号引脚,所有的读写操作都是跟着这个时钟信号走的

FSMC和FMC区别总结

FSMC只能接静态SRAM,FMC可以接动态DRAM,而控制动态DRAM要复杂得多。动态RAM需要不停地进行周期性的刷新,否则RAM中的数据就会丢失,

这就产生了“管理”问题,如果您看了上面的FSMC原理,那么就会知道存储器和STM32之间就只是进行数据读写就可以

如果用一个MCU来连接DRAM,二者之间交换的就不只是数据交换那么简单了,还包含有控制信息。跟周期性刷新DRAM内数据,这样,DRAM中除了存储数据的单元,还需要有寄存器还得有个对DRAM的“初始化”过程

这么复杂,有同学就会问为什么还要用DRAM呢?用SRAM不就行了吗?

如果您看了上面的DRAM跟SRAM区别就会知道,SRAM的容量是小于DRAM的,并且价格远大于DRAM,所以SRAM一般只用于CPU内部的存储,而像我们电脑上外接的那几个G的内存条,都是动态DRAM类型的。


FMC介绍

我们来看下官方对FMC的介绍:

FMC灵活的存储控制器。FMC可连接SRAM(异步或同步)、SDRAM、NORFLASH、PC卡、NANDFLASH.支持突发模式,可编程时钟,8位、16位、32位宽的数据总线。FMC有6个存储区域,每个区域支持256MB的寻址空间。

FMC的特点:

  1. FMC的一大特点是支持不同位宽的异步读写操作。

  2. FMC同一时刻只能控制一个存储器外设 (因为fmc配置的地址线,数据线和控制线是共享的) ;每种存储区内都有自己的bank片选信号;

  3. FMC包含三种类型的存储控制器:NOR/PSRAM/SRAM存储控制器,NAND控制器,SDRAM控制器;

  4. FMC配置中未用到引脚均可以继续用作通用I/O模式或者其它复用功能,仅需不配置FMC复用即可。

  5. 每个片选下的存储器空间配置都是独立的,有专门的寄存器,互不影响

并行总线接口FMC

FMC(Flexible memory controller,灵活动态存储器)

H7中FMC的原理框图如下图所示:
在这里插入图片描述

1.

在框图的右侧是 FMC 外设相关的控制引脚,其中地址线 FMC_A 和数据线 FMC_D 是所有控制器都共用的。FMC_NBL数据掩码是SRAM共用的
这些 FMC不同存储器引脚具体对应的 GPIO 端口及引脚号可在《STM32H7xx 规格书》中搜索查找到,不在此列出。针对 SDRAM 控制器,以下的 FMC 与 SDRAM 引脚对应关系

在这里插入图片描述

FMC 的地址映射

2.

图中左侧的是 Cortex-M7 内核的存储空间分配,右侧是 STM32 FMC 外设的地址映射。可以看到
FMC 的 NOR/PSRAM/SRAM/NAND FLASH 以及 PC 卡的地址都在 External RAM 地址空间内,而
SDRAM 的地址是分配到 External device 区域的。正是因为存在这样的地址映射,使得访问 FMC
控制的存储器时,就跟访问 STM32 的片上外设寄存器一样 (片上外设的地址映射即图中左侧的
“Peripheral”区域)。
在这里插入图片描述
FMC可以分为6个区域,每个子区域有各自连接的存储器类型

  • 第一个区域用于NORFLASH、PSRAM、SRAM,可分为4个子区域,每个子区域有各自的片选信号,可连接4个器件

  • 区域2和3 用于NAND Flash,每个区域只能连接1个器件

  • 区域 4 用于连接PC卡

  • 区域5和6 用于SDRAM,每个区域只能连接1个器件

FMC重映射

与 F1 和 F4 不同,H7 系列的 FMC 总线接口支持重映射,也就是可以设置这几块存储器的位置。

在这里插入图片描述
根据 BMAP[0:1]设置的数值 00,01 或者 10,支持三种分配方式。默认情况下,使用 BMAP[0:1] = 00
的分配方式即可,也就是上面截图中的分配方式。

FMC时钟

3.

FMC 外设挂载在 AHB3 总线上,时钟信号来自于 HCLK(默认 200MHz),控制器的时钟输出就是
由它分频得到。还可以可以选择如下几种时钟源 HCLK3,PLL1Q,PLL2R 和 PER_CK

我们这里直接使用 HCLK3,配置 STM32H7 的主频为 400MHz 的时候,HCLK3 输出的 200MHz,这个速度是 FMC 支持的最高时钟

在这里插入图片描述

在SDRAM中,SDRAM 控制器的 FMC_SDCLK 引脚输出时钟频率,用于与 SDRAM 芯片进
行同步通讯,它的时钟频率可通过 FMC_SDCR1 寄存器的 SDCLK 位配置,可以配置为 HCLK 的
1/2 或 1/3,也就是说,与 SDRAM 通讯的同步时钟最高频率为 100MHz。

NOR/PSRAM/SRAM 块区。

这个块区用到的地方最多,像 NAND 和 SDRAM 块区基本只能接 NAND 和 SDRAM,而NOR/PSRAM/SRAM 区就不同了,除了能接这几种类型的存储器,还可以外接 TFTLCD,OLED,AD7606 等总线外设。这个块区有 4 路片选,分别是 FMC_NE1,FMC_NE2,FMC_NE3 和 FMC_NE4,这几个片选在芯片上都有对应的引脚,每个片选可以管理 64MB 的访问空间,这个是由 FMC 引出的 26路地址线 FMC_A[0:25]决定的,2^26 = 64MB。

FMC_NE1:首地址 0x6000 0000,可以管理的地址范围 0x6000 0000 到 0x63FF FFFF。
FMC_NE2:首地址 0x6400 0000,可以管理的地址范围 0x6400 0000 到 0x67FF FFFF。
FMC_NE3:首地址 0x6800 0000,可以管理的地址范围 0x6800 0000 到 0x6BFF FFFF。
FMC_NE4:首地址 0x6C00 0000,可以管理的地址范围 0x6C00 0000 到 0x6FFF FFFF。

STM32 FSMC/FMC原理保姆级讲解(一)

这一部分我们在这一篇已经讲解的很详细了,如果有不懂得请再看一下

这里我们再说一下SDRAM的存储配置

通过FMC地址框图我们可以看到STM32对于SDRAM分配了两个bank空间 Bank1 和 Bank2 ,这里的 Bank 与 SDRAM 芯片内部的Bank 是不一样的,这是FMC内部有2个物理Bank地址的意思,每个BANK都可以接一个SDRAM,可以理解为FMC支持连接2个SDRAM芯片, 实际使用的时候看下具体的接线选择是BANK1还是BANK2,

MCU通过不同的片选信号SDNE0和SDNE1来选择具体使用哪个片外RAM 通过SDCKE0和SDCKE1来确定使能那个BANK的时钟

BANK0对应的存储区域 1 的地址范围是 0xC000 0000-0xCFFF FFFF,
而BANK1 对应的存储区域 2 的地址范围是 0xD000 0000- 0xDFFF FFFF。

当程序里控制内核访问这些地址的存储空间时,FMC 外设会即会产生对应的时序,对它外接的 SDRAM 芯片进行读写
在这里插入图片描述
请添加图片描述
请添加图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32 FMC原理详解 的相关文章

  • 软件开发者的精力管理(一)

    精力管理对于软件开发者来讲是非常重要的 不希望自己被长周期的项目拖垮 xff0c 不希望被连续的加班所累 我个人认为泛义的时间管理是涉及到多个方面的 而心理学 精力管理则是非常重要的 作为一名从事了多年软件开发的从业者 xff0c 我的一个
  • 如何高效能地学习和使用"工具"?

    在软件开发中 xff0c 应该注意工具的合理使用 xff0c 使得自己变得高效起来 1 工具也是产品 xff0c 有许多的工具是产品化的 既然是产品 xff0c 就很多的服务 xff0c 例如帮助文档 xff0c 论坛 xff0c 咨询人员
  • Ext4使用总结(十二) 采用 CellEditing 方式的Grid,如何取得修改的单元格数据值

    使用cellediting方式编辑数据的grid在保存数据时 xff0c 需要进行数据的处理 xff0c 所以数据处理的方式需要特别注意 cellEditing 插件的事件 listeners edit function editor e
  • 「Ubuntu」Ubuntu中的python终端配置(修改终端默认python配置,软连接,不同版本python环境配置)

    前言 通过这篇博客 xff08 Ubuntu安装Python xff09 安装完Python后 xff0c 想要在终端直接启动想启动的python版本 此时直接在终端输入python2或者python3 xff0c 发现系统已经配置好了py
  • [解题报告] CSDN竞赛第15期

    CSDN编程竞赛报名地址 xff1a https edu csdn net contest detail 29 1 求并集 题目 由小到大输出两个单向有序链表的并集 如链表 A 1 gt 2 gt 5 gt 7 链表 B 3 gt 5 gt
  • JSP开发技术四——————EL表达式

    EL xff08 Expression Language xff09 表达式 xff0c 即正则表达式 用来操作字符串 用一些特定的字符来表示一些代码操作 xff0c 这样简化代码书写 学习正则表达式 xff0c 就是学习一些特殊符号的实用
  • [解题报告] CSDN竞赛第17期

    CSDN编程竞赛报名地址 xff1a https edu csdn net contest detail 31 1 判断胜负 题目 已知两个字符串A B 连续进行读入n次 每次读入的字符串都为A B 输出读入次数最多的字符串 解题报告 模拟
  • [解题报告] CSDN竞赛第18期

    CSDN编程竞赛报名地址 xff1a https edu csdn net contest detail 32 1 单链表排序 题目 单链表的节点定义如下 xff08 C 43 43 xff09 xff1a class Node publi
  • [解题报告] CSDN竞赛第22期

    CSDN编程竞赛报名地址 xff1a https edu csdn net contest detail 36 1 c 43 43 难题 大数加法 题目 大数一直是一个c语言的一个难题 现在我们需要你手动模拟出大数加法过程 请你给出两个大整
  • [解题报告] CSDN竞赛第23期

    CSDN编程竞赛报名地址 xff1a https edu csdn net contest detail 37 1 排查网络故障 题目 A地跟B地的网络中间有n个节点 xff08 不包括A地和B地 xff09 xff0c 相邻的两个节点是通
  • CSDN竞赛第24期

    CSDN编程竞赛报名地址 xff1a https edu csdn net contest detail 38 这次写完第一道题时遇到一个奇怪的情况 xff1a 一直在 运行中 xff0c 然后发现每道题输入做任意代码都出现一直运行中 跟小
  • [Python开发] 使用python读取图片的EXIF

    使用python读取图片的EXIF 方法 使用PIL Image读取图片的EXIF 使用https pypi python org pypi ExifRead 读取图片的EXIF xff0c 得到EXIF标签 xff08 dict类型 xf
  • Partial Least Squares Regression 偏最小二乘法回归

    介绍 定义 偏最小二乘回归 多元线性回归分析 43 典型相关分析 43 主成分分析 输入 xff1a n m 的预测矩阵 X n p 的响应矩阵 Y 输出 X 和 Y 的投影 分数 矩阵 T U R n l 目标 xff1a 最大化 cor
  • 使用TensorFlow-Slim进行图像分类

    参考 https github com tensorflow models tree master slim 使用TensorFlow Slim进行图像分类 准备 安装TensorFlow 参考 https www tensorflow o
  • 使用TensorFlow Object Detection API进行图像物体检测

    参考 https github com tensorflow models tree master object detection 使用TensorFlow Object Detection API进行图像物体检测 准备 安装Tensor
  • 【Java笔记】异常处理(try-catch-finally、throws、throw)

    在 Java 语言中 xff0c 将程序执行中发生的不正常情况称为 异常 注 xff1a 开发过程中的语法错误和逻辑错误不是异常 在编写程序时 xff0c 经常要在可能出现错误的地方加上检测的代码 xff0c 如进行 x y 运算时 xff
  • 常用Log抓取方法

    1 最常用抓取方法 尽可能保存issue现场 xff0c 记录issue时间 adb pull data logs 2 使用电脑cmd连接device xff0c 并使之正常输出logcat信息 adb logcat gt 路径 main
  • jq获取和设置标签的css样式、jq给标签增加或移除class属性

    1 jQuery获取和设置标签的css样式 jQuery既可以直接获取标签的css样式 xff0c 也可以设置样式 xff0c 包括行内 内部 外部样式 xff1b 思路 xff1a 先要选取这个标签 xff0c 然后再获取或者设置样式 x
  • LwIP多TCP连接问题

    多个TCP连接的问题困扰了我很久 xff0c 前段时间解决了这个问题 xff0c 现在写下我的感受 xff1a 多个TCP可以绑定多个端口 xff0c 这里我是绑定一个端口 xff0c 这样更加复合实际应用 xff08 我的多个TCP的功能
  • GitHub Pages 绑定个人域名

    文章目录 一 购买域名二 配置域名解析三 GitHub Pages 绑定个人域名四 本地设置 CNAME五 重新发布网站 之前我们已经使用 github 搭建好了个人网站 xff0c 可以通过 xxx github io 来访问自己的网站

随机推荐

  • Pycharm提示 Unresolved reference 的解决办法

    有时候a py和b py在一个目录里面 xff0c 但是在a py种写import b有时会提示Unresolved reference xff0c Pycharm常见 xff0c 解决办法是setting gt Project gt Pr
  • 解决idea新建maven项目时一直loading问题

    idea里新建maven项目时 xff0c 在create from archetype时 xff0c 一直显示loading archetype list 原因 idea一直读自己的配置里缓存导致的 解决 方案一 把 C Users Ad
  • 安装windows时install.wim文件过大的解决方案

    安装windows时install wim文件过大的解决方案 问题描述解决方法 问题描述 windows镜像文件中 xff0c install wim大于4GB 直接解压镜像到u盘制作启动盘的方法只能用fat32格式 xff0c 不支持大于
  • Ubuntu 14 桌面图标消失解决办法

    1 使用ctrl 43 alt 43 F1进入字符命令界面 xff0c 登录账户 2 使用命令mv config config bk xff0c 相当于删除备份文件 xff0c 重启后页面正常
  • 在vue项目中使用Lottie动画(随看随用)

    前言 xff1a Lottie是一个IOS xff0c Android和React Native库 xff0c 可以实时渲染动画 xff0c 动画被转化成JSON文件 xff0c 节省了很多资源 xff0c 允许应用程序像使用静态图像一样轻
  • 对于python中“FileNotFoundError: [Errno 2] No such file or directory”的解决办法

    在我们使用vscode运行Python代码时遇到的情况 一 出现原因 xff1a 这里是由于Vscode中 xff0c python里的路径是相对与工作目录来进行定位的 所以在多级目录情况下 xff0c 若不设置绝对路径 xff0c 往往找
  • 《构建Debian的精彩世界》

    2007 10 06 星期六 12 04 darkblue 这段时间在公司一直使用Ubuntu系统 xff0c 其实刚来的时候用的是Debian xff0c 也是我头一次安装 配置和使用Debian系统 后来为了统一开发环境 xff0c 才
  • 由于找不到VCRUNTIME140_1.dll,无法继续执行代码。重新安装程序可能会解决此问题

    重装office之后双击Excel和PowerPoint无法正常打开 并弹出如下提示 并且 docx文件和 xls文件图标变成了下图所示 双击 docx xff0c 弹出Global Labeling Management Print To
  • Java 在Linux使用crontab进行定时任务设置并执行jar

    需求 xff1a 通过java执行linux命令 xff0c 通过crontab定时执行jar 通过java执行定时任务时需要监理shell文件和一个txt文件 xff0c 通过将txt文件设置到crontab中 xff0c 定时调用 sh
  • apache配置多个版本php

    主要虚拟主机配置信息 FcgidInitialEnv PHPRC D phpstudy php55n 指定php目录 AddHandler fcgid script php FcgidWrapper D phpstudy php55n ph
  • 解决 Could not find com.android.tools.build:gradle 问题

    现在CSDN的文章也不靠谱 xff0c 都是复制粘贴 回到问题 repositories 也设置了 下载 gradle 6 8 1 all zip setting gradle use gradle from 选择 gradle wrapp
  • #移动开发者大会#总结

    移动开发者大会 总结 xff08 有限的发言者 xff09 xff1a 李开复 xff1a 1 Android将在中国一骑绝尘 今年底中国将有4000万台Android手机 xff0c 2000万台iPhone 明年底总数会翻一倍 xff0
  • 2011河北金融学院CSDN高校俱乐部动员大会

    2011年11月24日下午二点 xff0c 我校CSDN高校俱乐部动员大会在教学楼B123举行 该次大会主要针对大一学生召开 xff0c 号召大家了解并加入CSDN高校俱乐部 俱乐部指导老师王洪涛老师 计算机协会指导老师杜光辉老师 以及优秀
  • “激情与梦想 我的程序员之路”—2012高校巡讲

    2012年3月29日下午2点半 xff0c CSDN高校俱乐部项目主管潘永强老师在我校进行了一场以 激情与梦想 xff0c 我的程序员之路 为主题的演讲 信息管理与工程系团总支书记陈春燕 指导老师王洪涛以及杜光辉 刘冲等7位老师出席了该次讲
  • Linux基础.交叉编译工具链,makefile

    一 交叉工具链大纲 1 什么是交叉工具链 xff1f 什么是交叉编译 xff1f 2 安装交叉工具链方法 xff0c 结合环境变量PATH xff0c 工具链选项 3 Makefile使用 xff0c Makefile书写规则 4 嵌入式静
  • 基于TensorFlow2.3.0的花卉识别Android APP设计

    一 前言 本设计为基于TensorFlow2 3 0的花卉识别Android APP TensorFlow2 3 0的API简单易用 xff0c 训练好后模型导出tflite格式供Anroid APP使用 开发环境 xff1a Window
  • Docker部署 nodejs项目应用 一 : 安装docker

    尝试一下用docker容器 xff0c 那么首先要安装docker 一 安装docker 由于笔者服务器的系统是centos7 xff0c 所以这里写的是在centos7上安装docker xff1b 注 xff1a Docker 要求 C
  • Java 反射 -超详细讲解(附源码)

    学到spring框架的时候 xff0c 发现反射思想很重要 xff0c 故特此写下此文 xff0c 以加深理解 文章目录 1 xff1a 反射概述2 xff1a Class对象特点3 xff1a 反射的使用1 获取类对象2 利用反射机制创建
  • 推荐7款好用的终端工具

    点击上方 IT牧场 xff0c 选择 置顶或者星标 技术干货每日送达 1 Cmder 下载地址 xff1a https cmder net Cmder是一个代替cmd的终端工具 只能操作Windows 它的好处是 xff1a 支持大部分Li
  • STM32 FMC原理详解

    关于FSMC的基本原理已经在这两篇讲解了 xff0c 如果有不懂的建议先看一下 xff0c 这里我们对一些基本概念会说的少一些 xff0c 主要就是针对FMC的特点和FSMC跟FMC的区别做主要的阐述 区别不大 STM32 FSMC FMC