STM32单片机的FSMC机制FlaSh存储器扩展

发布者:学海飘香最新更新时间:2009-11-27 来源: 单片机与嵌入式系统关键字:STM32  FSMC机制  Flash  存储器  扩展 手机看文章 扫描二维码
随时随地手机看文章

  引 言

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

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

  1 FSMC机制

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

  1.1 FSMC技术优势

  ①支持多种静态存储器类型。STM32通过FSMC町以与SRAM、ROM、PSRAM、NOR Flash和NANDFlash存储器的引脚直接相连。

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

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

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

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

  1.2 FSMC内部结构

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

  1.3 FSMC映射地址空间

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

  2 FSMC扩展NOR Flash配置

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

  (1)确定映射地址空间

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

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

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

FSMC配置中用于配置该外部存储器的特殊功能寄存器号

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

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

  ①存储器类型(MTYPE)是SRAM/ROM、PSRAM,还是NOR FlaSh;

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

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

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

  ⑤对于NOR Flash(PSRAM),NWAIT信号的特性说明(WAITEN、WAITCFG、WAITPOL);

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

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

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

  ①HCLK与FSMC_CLK的分频系数(CLKDIV),可以为2~16分频;

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

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

NOR Flash控制器支持的时序模型

  3 STM2扩展S29GL系列NOR Flash实例

  3.1 S29GL系列NOR Flash简介

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

  3.2 STM32与S29GL512P的电路连接

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

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

  ②字模式时,数据引脚D0~D15上传送数据信号;字节模式时,只有D0~D7上有信号。

  此处,将BYTE上拉到高电平,选择16位的字访问单位。FSMC数据线FSMC_D[15:0]与S29GL512P的D15~D0对应连接;FSMC地址线FSMC_A[25:0]的低25根与S29GL512P的地址线A[24:0]对应连接。

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

  3.3 FSMC的配置

  根据S29GL512P的映射位置,需要对FSMC_BCR2和FSMC_BTR2/BWTR2寄存器进行配置。

  (1)FSMC_BCR2

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

  (2)FSMC_BTR2

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

公式

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

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

公式

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

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

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

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

  STM32固件库中提供的FSMC的NOR Flash控制器操作固件,主要包括2个数据结构和3个函数。数据结构FSMC_NORSRAMTimingInitTypeDef对应时间参数寄存器FSMC_BTR和FSMC_BWTR的结构定义;

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

程序

程序

  结 语

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

关键字:STM32  FSMC机制  Flash  存储器  扩展 引用地址:STM32单片机的FSMC机制FlaSh存储器扩展

上一篇:产业复苏在即,MCU期待蛰伏后的新活力
下一篇:ST新开发环境极大降低STM32微控制器的使用门槛

推荐阅读最新更新时间:2024-03-16 12:27

C语言基础知识科普
C语言是单片机开发中的必备基础知识,本文列举了部分STM32学习中比较常见的一些C语言基础知识。 1 位操作 下面我们先讲解几种位操作符,然后讲解位操作使用技巧。C语言支持以下六种位操作:79c55d0c-080b-11ed-ba43-dac502259ad0.png 下面,重点讲解一下位操作在单片机开发中的一些实用技巧。1.1 在不改变其他位的值的状况下,对某几个位进行设值 这个场景在单片机开发中经常使用,方法就是我们先对需要设置的位用&操作符进行清零操作,然后用 | 操作符设值。 比如,我要改变GPIOA的状态,可以先对寄存器的值进行&清零操作:79dc505c-080b-11ed-ba43-dac5
[单片机]
STM32之触摸屏
一、触摸屏控制器简介 1、TSC2046概貌 2、TSC2046引脚描述 3、TSC2046应用电路 4、常见接线方法 YU=Y- YD=Y+ XL=X- XR=X+ 二、TSC2046编程注意事项 TSC2046的PENIRQ脚在触摸屏被按下的时候输出低电平,没有按下的时候输出高电平。需要格外注意的是在MCU给TSC2046发送命令的时候,次引脚也会产生错误的低电压脉冲,0 us t 100 us。 It is recommended that the processor mask the interruptPENIRQ is associated with whenever the proce
[单片机]
<font color='red'>STM32</font>之触摸屏
基于STM32和MPU-6050的两轮自平衡小车系统设计与实现
引言 两轮自平衡小车系统类似于倒立摆系统,具有多变量、非线性、强耦合等特点,是研究各种控制方法的理想平台。两轮自平衡小车系统的控制过程是微控制器对姿态检测传感器和编码器等采集的数据进行分析处理,计算出使系统恢复平衡的实时控制量,从而驱动电机实现系统的动态平衡。 针对小车系统的复杂性,本文提出了将卡尔曼滤波算法和双闭环PID控制算法相结合的方法,既利用卡尔曼滤波算法对MPU-6050传感器采集的倾斜角度和角速度数据进行融合,得到小车平衡姿态的最优估计值,又利用以姿态信息、速度为反馈控制量构成双闭环PID控制算法,再结合采用高性能STM32F103C8T6作为主控制器,从而提高两轮小车系统稳定性和抗干扰能力。 1、系统的硬件设
[单片机]
基于<font color='red'>STM32</font>和MPU-6050的两轮自平衡小车系统设计与实现
Sense Photonics为自动驾驶汽车推出FLASH激光雷达
据外媒报道,因变革性固态FLASH架构而闻名的 激光雷达 公司Sense Photonics正式进入了汽车市场,推出了首款用于高级驾驶辅助系统(ADAS)和 自动驾驶 的 模块化 FLASH 激光 雷达 – Osp rey,该组件售价为3200美元,现在已经开放预订。 Osprey的出现是一个重要的汽车里程碑,开启了全固态深度传感的新时代。Osprey的垂直视野为75度,而且视野非常宽且密集,能够以高分辨率在道路边沿至地平线范围内探测目标。该激光雷达被设计成一个易于集成的模块包,结合了车用级近场 传感器 与Sense Illu mi nator,后者是一个专有的VCSEL激光阵列,由数千个独立的激光元件组成。Sense Pho
[汽车电子]
Sense Photonics为自动驾驶汽车推出<font color='red'>FLASH</font>激光雷达
ATmega32 Flash程序存储器
系统内可编程的Flash 程序存储器 ATmega32具有32K字节的在线编程Flash,用于存放程序指令代码。因为所有的AVR指令为16 位或32 位,故而Flash 组织成16K x 16 位的形式。用户程序的安全性要根据Flash程序存储器的两个区:引导(Boot) 程序区和应用程序区,分开来考虑。 Flash存储器至少可以擦写10,000次。ATmega32的程序计数器(PC)为14 位,因此可以寻 址 16K 字的程序存储器 P228 “支持 引导装入程序 – 在写的同时可以读(RWW, Read-While-Write)的自我编程能力” ,而P240 “ 存储器编程 ” 详述了用 SPI 或 JTAG 接口实现对 Fl
[单片机]
ATmega32 <font color='red'>Flash</font>程序<font color='red'>存储器</font>
STM32 串口总线空闲检测
主机环境:Windows XP SP3 开发环境:MDK 5.20 目标芯片:STM32F030C8T6 前两天在群里看到有人在询问有关STM32 串口总线空闲检测的事情,根据串口总线是否空闲来判断一帧数据是否发送完成,之前使用串口一直没怎么注意过这一串口特性,所以后来特意去看了下手册中有关总线空闲检测的指示,发现它的确是个好特性,之前都只是在串口中断中接收数据在主循环中不断的读取数据然后检测是否是一帧完整的数据,之后再进行后续处理。这样处理有一个不是很好的问题就是在主循环读取串口数据时需要有个超时计数器来避免无串口数据时死等在那里,但如果使用串口总线空闲检测的话,我们就不需要超时计数器了,只需要在检测到串口总线空闲时把收到的数据
[单片机]
STM32 USB DFU设备固件升级 工程讲解
说到STM32 USB的UDF,其实就是我们常说的IAP(In Application Programming)在应用编程。IAP有很多方法,我之前就用过串口IAP,网络IAP。而这里我们使用的是USB IAP,就是通过USB更新代码。所以这里有必要线了解IAP。 IAP是In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。 通常在用户需要实现IAP功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编写两个项目代码,第一个项目程序不执行正常的功能操作,
[单片机]
<font color='red'>STM32</font> USB DFU设备固件升级 工程讲解
STM32基础知识:中断系统
中断系统 1 数据传输方式 无条件传输 :处理器不必了解外部设备状态,直接进行数据传输,用于指示灯和按键等简单设备.。 查询方式 :传输前,一方先查询另一方的状态,若已经准备好就传输,否则就继续查询。 中断方式 :一方通过申请中断的方式与另一方进行数据传输,收发双方可以并行工作。 直接存储器访问 :处理器内部建立片内外设和内存之间的数据传输通道,传输过程不需要处理器参与。 2 中断系统的基本概念 2.1 中断全过程 中断发生: 当CPU在处理某一事件A时,发生了另一事件B,请求CPU迅速去处理。 中断处理: CPU暂停当前的工作,转去处理事件B。 中断返回: 当CPU将事件B处理完毕后,再回到事件A中被暂停的地方继
[单片机]
<font color='red'>STM32</font>基础知识:中断系统
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved