STM32 FSMC机制

news2024/11/24 2:46:01

  STM32ST(意法半导体)公司推出的基于ARM内核CortexM332位微控制器系列。CortexM3内核是为低功耗和价格敏感的应用而专门设计的,具有突出的能效比和处理速度。通过采用Thumb2高密度指令集,CortexM3内核降低了系统存储要求,同时快速的中断处理能够满足控制领域的高实时性要求,使基于该内核设计的STM32系列微控制器能够以更优越的性价比,面向更广泛的应用领域。

  STM32系列微控制器为用户提供了丰富的选择,可适用于工业控制、智能家电、建筑安防、医疗设备以及消费类电子产品等多方位嵌入式系统设计。STM32系列采用一种新型的存储器扩展技术——FSMC,在外部存储器扩展方面具有独特的优势,可根据系统的应用需要,方便地进行不同类型大容量静态存储器的扩展。

  1 FSMC机制

  FSMC(Flexihie Static Memory Controller,可变静态存储控制器)STM32系列中内部集成256 KB以上FlaSh,后缀为xCxDxE的高存储密度微控制器特有的存储控制机制。之所以称为可变,是由于通过对特殊功能寄存器的设置,FSMC能够根据不同的外部存储器类型,发出相应的数据/地址/控制信号类型以匹配信号的速度,从而使得STM32系列微控制器不仅能够应用各种不同类型、不同速度的外部静态存储器,而且能够在不增加外部器件的情况下同时扩展多种不同类型的静态存储器,满足系统设计对存储容量、产品体积以及成本的综合要求。

  11 FSMC技术优势

  支持多种静态存储器类型。STM32通过FSMC町以与SRAMROMPSRAMNOR FlashNANDFlash存储器的引脚直接相连。

  支持丰富的存储操作方法。FSMC不仅支持多种数据宽度的异步读/写操作,而且支持对NORPSRAMNAND存储器的同步突发访问方式。

  支持同时扩展多种存储器。FSMC的映射地址空间中,不同的BANK是独立的,可用于扩展不同类型的存储器。当系统中扩展和使用多个外部存储器时,FSMC会通过总线悬空延迟时间参数的设置,防止各存储器对总线的访问冲突。

  支持更为广泛的存储器型号。通过对FSMC的时间参数设置,扩大了系统中可用存储器的速度范围,为用户提供了灵活的存储芯片选择空间。

  支持代码从FSMC扩展的外部存储器中直接运行,而不需要首先调入内部SRAM

  12 FSMC内部结构

  STM32微控制器之所以能够支持NOR FlashNAND Flash这两类访问方式完全不同的存储器扩展,是因为FSMC内部实际包括NOR FlashNANDPC Card两个控制器,分别支持两种截然不同的存储器访问方式。在STM32内部,FSMC的一端通过内部高速总线AHB连接到内核CortexM3,另一端则是面向扩展存储器的外部总线。内核对外部存储器的访问信号发送到AHB总线后,经过FSMC转换为符合外部存储器通信规约的信号,送到外部存储器的相应引脚,实现内核与外部存储器之间的数据交互。FSMC起到桥梁作用,既能够进行信号类型的转换,又能够进行信号宽度和时序的调整,屏蔽掉不同存储类型的差异,使之对内核而言没有区别。

  13 FSMC映射地址空间

  FSMC管理1 GB的映射地址空间。该空间划分为4个大小为256 MBBANK,每个BANK又划分为464 MB的子BANK,如表1所列。FSMC2个控制器管理的映射地址空间不同。NOR Flash控制器管理第1BANKNANDPC Card控制器管理第24BANK。由于两个控制器管理的存储器类型不同,扩展时应根据选用的存储设备类型确定其映射位置。其中,BANK14个子BANK拥有独立的片选线和控制寄存器,可分别扩展一个独立的存储设备,而BANK2BANK4只有一组控制寄存器。

  2 FSMC扩展NOR Flash配置

  SRAMROMNOR FlashPSRAM类型的外部存储器都是由FSMCNOR Flash控制器管理的,扩展方法基本相同,其中NOR Flash最为复杂。通过FSMC扩展外部存储器时,除了传统存储器扩展所需要的硬件电路外,还需要进行FSMC初始化配置。FSMC提供大量、细致的可编程参数,以便能够灵活地进行各种不同类型、不同速度的存储器扩展。外部存储器能否正常工作的关键在于:用户能否根据选用的存储器型号,对配置寄存器进行合理的初始化配置。

  (1)确定映射地址空间

  根据选用的存储器类型确定扩展使用的映射地址空间。NOR Flash只能选用BANK1中的4个子BANK。选定映射子BANK后,即可确定以下2方面内容:

  硬件电路中用于选中该存储器的片选线FSMC_NEi(i为子BANK号,i=14)

  FSMC配置中用于配置该外部存储器的特殊功能寄存器号(如表1所列)

(2)配置存储器基本特征

  通过对FSMC特殊功能寄存器FSMC_BCRi(i为子BANK号,i=14)中对应控制位的设置,FSMC根据不同存储器特征可灵活地进行工作方式和信号的调整。根据选用的存储器芯片确定需要配置的存储器特征,主要包括以下方面:

  存储器类型(MTYPE)SRAMROMPSRAM,还是NOR FlaSh

  存储芯片的地址和数据引脚是否复用(MUXEN)FSMC可以直接与AD0AD15复用的存储器相连,不需要增加外部器件;

  存储芯片的数据线宽度(MWID)FSMC支持8位/16位两种外部数据总线宽度;

  对于NOR Flash(PSRAM),是否采用同步突发访问方式(B URSTEN)

  对于NOR Flash(PSRAM)NWAIT信号的特性说明(WAITENWAITCFGWAITPOL)

  对于该存储芯片的读/写操作,是否采用相同的时序参数来确定时序关系(EXTMOD)

  (3)配置存储器时序参数

  FSMC通过使用可编程的存储器时序参数寄存器,拓宽了可选用的外部存储器的速度范围。FSMCNORFlash控制器支持同步和异步突发两种访问方式。选用同步突发访问方式时,FSMCHCLK(系统时钟)分频后,发送给外部存储器作为同步时钟信号FSMC_CLK。此时需要的设置的时间参数有2个:

  HCLKFSMC_CLK的分频系数(CLKDIV),可以为216分频;

  同步突发访问中获得第1个数据所需要的等待延迟(DATLAT)

  对于异步突发访问方式,FSMC主要设置3个时间参数:地址建立时间(ADDSET)、数据建立时间(DATAST)和地址保持时间(ADDHLD)FSMC综合了SRAMROMPSRAMNOR Flash产品的信号特点,定义了4种不同的异步时序模型。选用不同的时序模型时,需要设置不同的时序参数,如表2所列。在实际扩展时,根据选用存储器的特征确定时序模型,从而确定各时间参数与存储器读/写周期参数指标之间的计算关系;利用该计算关系和存储芯片数据手册中给定的参数指标,可计算出FSMC所需要的各时间参数,从而对时间参数寄存器进行合理的配置。

3 STM2扩展S29GL系列NOR Flash实例

  31 S29GL系列NOR Flash简介

  Spansion公司的S29GL系列芯片是采用90nm技术制造的高集成度NOR Flash存储芯片,提供16128 MB可选容量,支持最快25 ns的页访问速度和11O ns的随机访问速度,带有最大64字节的写缓冲区,以提供更快、更高效的编程,是嵌入式系统设计中大容量存储器扩展的理想选择。本文选用的型号为S29GL512P,容量为512×64K(总容量64 MB),扩展到NOR Flash控制器管理的BANK1的第2个子BANK

  32 STM32S29GL512P的电路连接

  S25GL512P可通过控制引脚BYTE选择对芯片的访问单位(字/字节),区别在于:

  对于芯片引脚DQ15,字模式时传送最高数据位D15;字节模式时传送最低地址A-1

  字模式时,数据引脚D0D15上传送数据信号;字节模式时,只有D0D7上有信号。

  此处,将BYTE上拉到高电平,选择16位的字访问单位。FSMC数据线FSMC_D[150]S29GL512PD15D0对应连接;FSMC地址线FSMC_A[250]的低25根与S29GL512P的地址线A[240]对应连接。

  由于S29GL512P芯片映射到BANK1的子BANK2,可确定其片选线应连接FSMC片选控制线FSMC_NE2S29GL512PRYBY引脚连接FSMCFSMC_NWAIT引脚,提供等待信号。

  33 FSMC的配置

  根据S29GL512P的映射位置,需要对FSMC_BCR2FSMC_BTR2BWTR2寄存器进行配置。

  (1)FSMC_BCR2

  配置S29GL512P的读/写采用统一时间参数,只需要设置时间寄存器FSMC_BTR2。配置存储器类型为NORFlash,数据总线宽度为16(),不采用地址/数据复用,使能BANK1的子BANK2

  (2)FSMC_BTR2

  由表2可知,异步NOR Flash时序模型Mode2B需要设置时间参数DATASTADDSET。根据时序图,两个参数的计算公式如下:

 式中:TwcTrc为所选存储芯片的写周期长度和读操作周期长度Twp为所选存储芯片的写信号持续长度。根据S29GL512P用户手册,可知参数Twc=Trc=130 nsTwp=35 ns。设STM32微控制器采用72 MHz主频,则HCLK=(172×10-6)s。通过上述公式计算,可取值为:DATAST=2ADDSET=5

  为了达到更好的控制效果,还应考虑FSMC自身延迟问题,使用校正公式:

式中:TAVQV为所选存储芯片访问过程中,从地址有效至数据有效的时间域Tsu(Data_NE)STM32特征参数,从数据有效到FSMC_NE(片选)失效时间域Ttv(A_NE)STM32特征参数,从FSMC_NE有效至地址有效的时间域。

  TAVQV=130 nsTsu(Data_NE)+Ttv(A_NE]=36 ns,对DATAST参数进行校正,可得DATAST=3

  34 应用STM32固件对FSMC进行初始化配置

  ST公司为用户开发提供了完整、高效的工具和固件库,其中使用C语言编写的固件库提供了覆盖所有标准外设的函数,使用户无需使用汇编操作外设特性,从而提高了程序的可读性和易维护性。

STM32固件库中提供的FSMCNOR Flash控制器操作固件,主要包括2个数据结构和3个函数。

数据结构FSMC_NORSRAMTimingInitTypeDef对应 时间参数寄存器FSMC_BTRFSMC_BWTR的结构定义;

  FSMC_NORSRAMinitTypeDef对应特征配置寄存器FSMC_BCR的结构定义,并包含2个指向对应BANKFSMC_BTRFSMC_BWTR寄存器的FSMC_NORSRAMTimingInitTypeDef结构指针。针对上述S29GL512P芯片扩展要求,利用固件库进行的主要初始化操作如下:

  STM32作为新一代ARM Cortex-M3核处理器,其卓越的性能和功耗控制能够适用于广泛的应用领域;而其特殊的可变静态存储技术FSMC具有高度的灵活性,对于存储容量要求较高的嵌入式系统设计,能够在不增加外部分立器件的情况下,扩展多种不同类型和容量的存储芯片,降低了系统设计的复杂性,提高了系统的可靠性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/624610.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

五种I/O模型

一、I/O基本概念 I/O即数据的读取&#xff08;接收&#xff09;或写入&#xff08;发送&#xff09;操作 通常用户进程中的一个完整I/O分为两个阶段 (1)用户进程空间<-->内核空间 (2)内核空间<-->设备空间&#xff08;磁盘、网卡等&#xff09; I/O分为内存I/O、…

个人博客网站实现微信扫码登录(新)

前言 在不久之前&#xff08;两年前&#xff09;我写了一篇同名的博客《个人博客网站实现微信扫码登录&#xff08;附源码&#xff09;》&#xff0c;当时只是做一个记录而已。但是没想到会收到很多“猿友”的私聊&#xff0c;“代码跑不起来”、“实现原理”、“测试网址访问不…

[网鼎杯 2018]Fakebook1

拿到题目后是一个博客的界面&#xff0c;这里可以登录和注册 点入登录界面&#xff0c;猜测可能是sql注入 试了很多次&#xff0c;都不是&#xff0c;也没有回显报错&#xff0c;所以把目光放到了注册上面 注册的其他行数据&#xff0c;差不多都可以乱填&#xff0c;只有一个bl…

王道考研计算机网络第二章知识点汇总

2.1.1物理层基本概念 电气特性和功能特性易混淆&#xff0c;注意区分。电气特性一般指的是某个范围&#xff0c;功能特性一般指的是电平所代表的含义。 2.1.2数据通信基础知识 同步传输是指发送方和接收方节奏是统一的&#xff0c;数据之间是没有间隔的是一个一个的区块。在键…

轻松掌握Python自动化工具,解锁PyAutoGUI的强大功能

前言 PyAutoGUI是一个用于图像识别和鼠标/键盘控制的Python库。它提供了一组函数和方法&#xff0c;用于自动化屏幕上的鼠标移动、点击、拖拽和键盘输入&#xff0c;以及执行图像识别和处理。本文旨在帮助读者入门 PyAutoGUI&#xff0c;理解其基础概念和掌握最佳实践&#xff…

手把手教你实现—基于OpenCV的车流量统计和车速检测代码

本章将实现了一个简单的车辆速度估计和车流量统计的GUI应用&#xff0c;它使用了Haar级联检测器和相关跟踪器来检测和跟踪视频中的车辆&#xff0c;并通过图像处理和数学计算来估计车辆的速度。 1.首先&#xff0c;该代码需要cv2&#xff1a;用于图像处理和计算机视觉任务&…

软件测试(功能、接口、性能、自动化)详解

一、软件测试功能测试测试用例编写是软件测试的基本技能&#xff1b;也有很多人认为测试用例是软件测试的核心&#xff1b;软件测试中最重要的是设计和生成有效的测试用例&#xff1b;测试用例是测试工作的指导&#xff0c;是软件测试的必须遵守的准则。黑盒测试常见测试用例编…

比较18个3*6尺寸差值结构的迭代次数

已发现二值化差值结构有3种相互作用&#xff0c;纵向&#xff0c;横向和斜向。纵向相互作用只与行间距有关而与数值的数量无关&#xff0c;与迭代次数成反比&#xff1b;横向相互作用只与列的数值数量有关与列间距无关&#xff0c;与迭代次数成正比&#xff1b;斜向相互作用将导…

完全免费PNG素材库,免费可商用~

推荐的这几个PNG素材网一定要收藏~免费可商用~ 菜鸟图库 https://www.sucai999.com/searchlist/66008----all-0-1.html?vNTYxMjky 菜鸟图库是一个为新手设计师提供免费素材的网站&#xff0c;站内有非常多设计相关素材&#xff0c;比如平面模板、UI素材、电商素材、免抠素材…

C++中string类的常用函数

文章目录 默认成员函数常见构造函数(constructor) string类的容量操作size()empty()capacity()reserve()clear()resize() string类对象的访问及遍历操作重载 [ ]begin()end()begin() end() 遍历字符串rbegin()rend()rbegin() rend()反向遍历字符串C11范围for string类对象修改…

客户至上 服务至极 ——优维服务流程标准化体系

◎ 如何用服务打动客户&#xff1f; 在思考这个问题之前&#xff0c;首先我们要了解做好服务最难的是什么&#xff1f; 众所周知&#xff0c;由机器作业出来的东西是一致且规范的&#xff0c;而服务不一样。服务&#xff0c;是需要人来参与的&#xff0c;当由不同的人来完成某…

web问题定位:F12,如何找到对应接口

接口查看法&#xff0c;是我们最常用的定位前后端问题的方法。即&#xff1a;一般用来查看是后端返回给前端的数据有误&#xff0c;还是前端显示有误。 主流浏览器&#xff08;如Chrome&#xff0c;FireFox&#xff0c;等&#xff09;都有自带的接口查看工具&#xff0c;可以通…

微软wsl2 + ubantu + docker + 部署本地项目

windows 操作系统版本要达到要求 开启 wsl2 安装实用工具 Windows Terminal 和 Visual Studio Code 安装 Ubuntu 子系统 安装 Docker Desktop 并让 Docker Desktop 基于 wsl2 来运行 基础环境准备可以完全参照《搭建 Laravel Sail 开发环境 - Windows》来进行&#xff0c;我跟教…

2023年的深度学习入门指南(16) - JAX和TPU加速

2023年的深度学习入门指南(16) - JAX和TPU加速 上一节我们介绍了ChatGPT的核心算法之一的人类指示的强化学习的原理。我知道大家都没看懂&#xff0c;因为需要的知识储备有点多。不过没关系&#xff0c;大模型也不是一天能够训练出来的&#xff0c;也不可能一天就对齐。我们有…

葡萄酒质量预测

本文中所有代码及数据均存放于&#xff1a;https://github.com/MADMAX110/WineQualityPrediction 本文根据酸度、残糖和酒精浓度等特征训练和调整一个随机的葡萄酒质量森林模型。 一、设置环境&#xff0c;确认你的电脑安装了以下环境 Python 3NumPyPandasScikit-Learn (a.k.a…

Ubuntu 18.04 交叉编译Opencv-4.6.0

环境 操作系统&#xff1a;Ubuntu 18.04 OpenCv版本&#xff1a;4.6.0 交叉工具链&#xff1a;arm-linux-gnueabihf-gcc-5.3.1 下载OpenCV源代码 这里推荐大家到网上找OpenCV的Linux版本安装包&#xff08;.tar.gz结尾&#xff09;&#xff0c;不要github上clone&#xff08…

leetcode688. 骑士在棋盘上的概率(java)

骑士在棋盘上的概率 leetcode688. 骑士在棋盘上的概率题目描述 解题思路代码演示动态规划专题 leetcode688. 骑士在棋盘上的概率 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/knight-probability-in-chessboard 题目描…

【源码篇】基于ssm+vue+微信小程序的医疗科普小程序

系统介绍 这是一个ssmvue微信小程序的医疗科普小程序&#xff0c;分为pc端和微信小程序端 pc端包括&#xff1a;管理员角色和学生角色。 管理员拥有&#xff1a;学生管理、科普知识管理、论坛管理、收藏管理、试卷管理、留言板管理、试题管理、系统管理、考试管理 学生端拥…

AI实战营第二期 第五节 《目标检测与MMDetection》——笔记6

文章目录 摘要主要特性 常用概念框、边界框交并比 (loU)感受野有效感受野置信度 目标检测的基本思路难点滑框在特征图进行密集计算边界框回归基于锚框VS无锚框NMS&#xff08;非极大值抑制&#xff09;使周密集预测模型进行推理步骤如何训练密集预测模型的训练匹配的基本思路密…

C++ 教程(01)

C 教程 C 是一种高级语言&#xff0c;它是由 Bjarne Stroustrup 于 1979 年在贝尔实验室开始设计开发的。C 进一步扩充和完善了 C 语言&#xff0c;是一种面向对象的程序设计语言。C 可运行于多种平台上&#xff0c;如 Windows、MAC 操作系统以及 UNIX 的各种版本。 本教程通过…