FSMC外设—扩展外部SRAM

news2024/12/24 20:33:24

目录

FSMC—扩展外部SRAM

前言

SRAM

SRAM控制原理

SRAM芯片外观

SRAM芯片的内部功能框架

SRAM信号线

SRAM的存储矩阵

地址译码器、列I/O及I/O数据电路

控制电路

SRAM的读写流程

FSMC

FSMC简介

FSMC框图剖析

通讯引脚

存储器控制器

时钟控制逻辑

FSMC的地址映射

FSMC控制SRAM的时序


FSMC—扩展外部SRAM

前言

FSMC是STM32芯片的一个片上外设。STM32F103VET6由于是100引脚,引脚数量不支持扩展外部SRAM,STM32F103ZET6 144脚才支持。

PS:

相对于霸道开发板,指南者开发板使用的STM32VET6芯片引脚数不足,不能扩展SRAM。

这是由STM32VET6芯片决定的,不能扩展SRAM。

但控制SRAM时使用的STM32 FSMC外设很值得学习,

在后面章节的指南者控制液晶屏程序也是使用FSMC外设的。

SRAM

SRAM控制原理

STM32控制器芯片内部有一定大小的SRAM及FLASH作为内存和程序存储空间,但当程序较大,内存和程序空间不足时,就需要在STM32芯片的外部扩展存储器了。STM32F103ZE系列芯片可以扩展外部SRAM用作内存。

给STM32芯片扩展内存与给PC扩展内存的原理是一样的,只是PC上一般以内存条的形式扩展,而且内存条实质是由多个内存颗粒(即SDRAM芯片)组成的通用标准模块,而STM32扩展时,直接直接与SRAM芯片连接。

SRAM芯片外观

型号为IS62WV51216的SRAM芯片外观

一共有44个引脚

SRAM芯片的内部功能框架

SRAM信号线

SRAM的控制比较简单,只要控制信号线使能了访问,从地址线输入要访问的地址,即可从I/O数据线写入或读出数据。

SRAM的存储矩阵

SRAM内部包含的存储阵列,可以把它理解成一张表格,数据就填在这张表格上。和表格查找一样,指定一个行地址和列地址,就可以精确地找到目标单元格,这是SRAM芯片寻址的基本原理。这样的每个单元格被称为存储单元,而这样的表则被称为存储矩阵。

地址译码器、列I/O及I/O数据电路

地址译码器把N根地址线转换成2N根信号线,每根信号线对应一行或一列存储单元,通过地址线找到具体的存储单元,实现寻址。

本实例中的SRAM比较小,没有列地址线,它的数据宽度为16位,即一个行地址对应2字节空间,框图中左侧的A0-A18是行址信号,18根地址线一共可以表示2^18=28x1024=512K行存储单元(每个存储单元2个字节),所以它一共能访问512Kx16bits大小的空间,共1024K字节空间。

访问时,使用UB#或LB#线控制数据宽度,分别控制高八位数据线和第八位数据线(低电平有效),从而进行高字节和低字节的读写。

控制电路

 控制电路主要包含了片选、读写使能以及上面提到的宽度控制信号UB#和LB#。利用CS2或CS1#片选信号,可以把多个SRAM芯片组成一个大容量的内存条。OE#和WE#可以控制读写使能,防止误操作。

SRAM的读写流程

SRAM使用异步通信,没有时钟信号线

对SRAM进行数据时,它各个信号线的时序流程如下:

其中要设置tRC不低于55ns,tAA不低于33ns,tDOE不超过25ns。

对SRAM进行数据时,它各个信号线的时序流程如下:

WE非最低要使能40ns,tSD最低25ns,tHD可以为0

时间参数可以通过手册查阅

读写时序的流程很类似,过程如下:

(1) 主机使用地址信号线发出要访问的存储器目标地址;

(2) 控制片选信号CS1#及CS2#使能存储器芯片;

(3) 若是要进行读操作,则控制读使能信号OE#表示要读数据,若进行写操作则控制写使能信号WE#表示要写数据;

(4) 使用掩码信号LB#与UB#指示要访问目标地址的高、低字节部分;

(5) 若是读取过程,存储器会通过数据线向主机输出目标数据,若是写入过程,主要使用数据线向存储器传输目标数据。

FSMC

可以通过数据手册知道STM32F103VET6和ZET6都具有FSMC外设

FSMC简介

STM32F1系列芯片使用FSMC外设来管理扩展的存储器,FSMC是Flexible Static Memory Controller的缩写,译为灵活的静态存储控制器。它可以用于驱动包括SRAM、NOR FLASH以及NAND FLSAH类型的存储器,不能驱动如SDRAM这种动态的存储器而在STM32F429系列的控制器中,它具有FMC外设,支持控制SDRAM存储器。

FSMC框图剖析

普通外设是挂载在APB1或APB2外设总线上,而FSMC是直接挂载在AHB系统总线上的,因此FSMC的地址线和数据线都是直接从内核上面引出来的,所以可以通过访问内存的地址就可以控制SRAM、NOR FLASH以及NAND FLSAH类型的存储器

通讯引脚

由于控制不同类型存储器的时候会有一些不同的引脚,看起来有非常多,其中地址线FSMC_A和数据线FSMC_D是所有控制器都共用的。

SRAM使用到的引脚如下

其中比较特殊的FSMC_NE是用于控制SRAM芯片的控制信号线,STM32具有FSMC_NE1/2/3/4号引脚为片选信号引脚,不同的引脚对应STM32内部不同的地址区域,从而可以控制多个SRAM,扩展更多的存储空间。

例如,当STM32访问0x68000000-0x6BFFFFFF地址空间时,FSMC_NE3引脚会自动设置为低电平,由于它连接到SRAM的CE#引脚,所以SRAM的片选被使能,而访问0x60000000-0x63FFFFFF地址时,FSMC_NE1会输出低电平。当使用不同的FSMC_NE引脚连接外部存储器时,STM32访问SRAM的地址不一样,从而达到控制多块SRAM芯片的目的。

存储器控制器

上面不同类型的引脚是连接到FSMC内部对应的存储控制器中的。NOR/PSRAM/SRAM设备使用相同的控制器,NAND/PC卡设备使用相同的控制器,不同的控制器有专用的寄存器用于配置其工作模式。

控制SRAM的有FSMC_BCR1/2/3/4控制寄存器、FSMC_BTR1/2/3/4片选时序寄存器以及FSMC_BWTR1/2/3/4写时序寄存器。每种寄存器都有4个,分别对应于4个不同的存储区域,各种寄存器介绍如下:

FSMC_BCR控制寄存器可配置要控制的存储器类型、数据线宽度以及信号有效极性能参数。

FMC_BTR时序寄存器用于配置SRAM访问时的各种时间延迟,如数据保持时间、地址保持时间等。

FMC_BWTR写时序寄存器与FMC_BTR寄存器控制的参数类似,它专门用于控制写时序的时间参数。

具体查看参考手册

时钟控制逻辑

FSMC外设挂载在AHB总线上,时钟信号来自于HCLK(默认72MHz),控制器的同步时钟输出就是由它分频得到。例如,NOR控制器的FSMC_CLK引脚输出的时钟,它可用于与同步类型的SRAM芯片进行同步通讯,它的时钟频率可通过FSMC_BTR寄存器的CLKDIV位配置,可以配置为HCLK的1/2或1/3,也就是说,若它与同步类型的SRAM通讯时,同步时钟最高频率为36MHz。本示例中的SRAM为异步类型的存储器,不使用同步时钟信号,所以时钟分频配置不起作用。

FSMC的地址映射

FSMC连接好外部的存储器并初始化后,就可以直接通过访问地址来读写数据。

FSMC访问存储器的方式与I2C EEPROM、SPI FLASH的不一样,后两种方式都需要控制I2C或SPI总线给存储器发送地址,然后获取数据;在程序里,这个地址和数据都需要分开使用不同的变量存储,并且访问时还需要使用代码控制发送读写命令。

而使用FSMC外接存储器时,其存储单元是映射到STM32的内部寻址空间的;在程序里,定义一个指向这些地址的指针,然后就可以通过指针直接修改该存储单元的内容,FSMC外设会自动完成数据访问过程,读写命令之类的操作不需要程序控制。

 图中左侧的是Cortex-M3内核的存储空间分配,右侧是STM32 FSMC外设的地址映射。可以看到FSMC的NOR/PSRAM/SRAM/NAND FLASH以及PC卡的地址都在External RAM地址空间内。

正是因为存在这样的地址映射,使得访问FSMC控制的存储器时,就跟访问STM32的片上外设寄存器一样(片上外设的地址映射即图中左侧的“Peripheral”区域)。

FSMC把整个External RAM存储区域分成了4个Bank区域,并分配了地址范围及适用的存储器类型,如NOR及SRAM存储器只能使用Bank1的地址。

在NOR及SRAM区域,每个Bank的内部又分成了4个小块,每个小块有相应的控制引脚用于连接片选信号,如FSMC_NE[4:1]信号线可用于选择BANK1内部的4小块地址区域,当STM32访问0x68000000-0x6BFFFFFF地址空间时,会访问到Bank1的第3小块区域,相应的FSMC_NE3信号线会输出控制信号。

FSMC控制SRAM的时序

FSMC外设支持输出多种不同的时序以便于控制不同的存储器,它具有ABCD四种模式,下面我们仅针对控制SRAM使用的模式A进行讲解,不同模式可根据参考手册来配置

读时序

ADDSET+1控制在55ns(twc的最小时间)以内,DATAST+1必须大于25ns(tDOE最大时间)

当内核发出访问某个指向外部存储器地址时,FSMC外设会根据配置控制信号线产生时序访问存储器,上图中的是访问外部SRAM时FSMC外设的读写时序。

以读时序为例,该图表示一个存储器操作周期由地址建立周期(ADDSET)、数据建立周期(DATAST)以及2个HCLK周期(1/72Mhz)组成。在地址建立周期中,地址线发出要访问的地址,数据掩码信号线指示出要读取地址的高、低字节部分,片选信号使能存储器芯片;地址建立周期结束后读使能信号线发出读使能信号,接着存储器通过数据信号线把目标数据传输给FSMC,FSMC把它交给内核。(ADDSET和DATAST使用FSMC_BTR寄存器控制)

写时序类似,区别是它的一个存储器操作周期仅由地址建立周期(ADDSET)和数据建立周期(DATAST)组成,且在数据建立周期期间写使能信号线发出写信号,接着FSMC把数据通过数据线传输到存储器中。

写时序

ADDSET+1控制在55ns(twc的最小时间)以内,DATAST+1必须大于40ns

对应SRAM读写时序没必要配置不同寄存器

FSMC的作用实际上就是:不需要我们人为干预,只需要我们配置好FSMC外设的相关寄存器,我们只要访问内存空间,它就会根据时序来读写相应存储器。

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

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

相关文章

【USRP X410】LabVIEW参考架构软件,用于使用Ettus USRP X410对无线系统进行原型验证

LabVIEW参考架构软件,用于使用Ettus USRP X410对无线系统进行原型验证 设备 1 MHz to 7.2 GHz,400 MHz带宽,GPS驯服OCXO,USRP软件无线电设备 - Ettus USRP X410集成硬件和软件,可帮助您制作高性能无线系统的原型&…

探索非洲专线物流的新时代_国际物流供应链管理平台_箱讯科技

随着全球化的发展,非洲作为一个充满机遇和挑战的大陆,吸引着越来越多的企业和投资者。然而,由于非洲的地理复杂性和基础设施不完善,物流问题一直是制约非洲发展的瓶颈之一。为了解决这一问题,非洲专线物流应运而生。本…

分布式数据库HBase,它到底是怎么组成的?

原文链接:http://www.ibearzmblog.com/#/technology/info?id3f432a2451f5f9cb9a14d6e756036b67 前言 大数据的核心问题无非就是存储和计算这两个。Hadoop中的HDFS解决了数据存储的问题,而HBase就是在HDFS上构建,因此Hbase既能解决大数据存…

【广州华锐互动】AR远程巡检系统在设备维修保养中的作用

随着科技的不断发展,AR(增强现实)远程巡检系统在设备检修中发挥着越来越重要的作用。这种系统可以将AR技术与远程通信技术相结合,实现对设备检修过程的实时监控和远程指导,提高设备检修的效率和质量。 首先,AR远程巡检系统可以帮助…

004.PADS VX2.4常用快捷键及无模命令

1.常用快捷键: F2 布线(Layout) F3 布线(Router) F4 切换layer F6 选中一个导线按f6选中整个网络 TAB 旋转 CtrlA select All 全选 CtrlB sheet 切换到整线sheet可以的视图状态 CtrlC copy 复制选定对象(可以是多选或选一范围): 也可以在按住Ctrl同时拖动选定对象…

微信小程序音频播放失败:TypeError: Cannot read property ‘duration‘ of undefined

报错截图 最下面这个this.setData()报错可不用理会,是this取值的问题 解决 需要播放和暂停功能时,需要把audio以及他的src放在Page外面。不能缺少 audioCtx.onPlay() 和 audioCtx.onError()两个方法,且需要放在play()方法之前如果在wx.crea…

解决/usr/bin/ld: cannot find -l****解决

运行程序时出现了以下错误 在这里说明一下出现/usr/bin/ld: cannot find -l****其实都是出现了类似的问题,只是各自的文件不同 其中****即表示函式库文件名称,如上例的:libstdc.so、libluuid.so 其命名规则是:lib库名(即xxx).so …

pytorch深度学习 之一 神经网络梯度下降和线性回归

张量和随机运行,exp函数 import torch a torch.tensor([[1,2],[3,4]]) print(a) a torch.randn(size(10,3)) print(a) b a-a[0] print(torch.exp(b)[0].numpy())输出: tensor([[1, 2],[3, 4]]) tensor([[-1.0165, 0.3531, -0.0852],[-0.1065, -0.5…

【HCIA】06.静态路由

路由器的作用:通过路由器让不同广播域实现互联互通;路由可以指的是路由器,也可以是传递的一个动词,或者是一个路由条目信息。 在一个典型的数据通信网络中,往往存在多个不同的IP网段,数据在不同的IP网段之…

学会写作读后感

读书不是任务 有句俗话说:“清醒时做事,迷茫时读书,独处时思考,烦躁时运动”。 读书 不仅让我们 跨越时间,空间 去感受 作者 思想的力量,也连接了另一个世界——认知,想象,情感,美…

PDF转CAD后尺寸如何保持一致?这几种方法可以尝试一下

CAD文件是可编辑的,可以进行修改、添加和删除,这使得在CAD软件中进行编辑更加容易和灵活。这意味着,如果需要对图纸进行修改或者添加新的元素,可以直接在CAD软件中进行操作,而不需要重新制作整个图纸。那么将PDF文件转…

BFS广度优先搜索

目录 一、BFS的概念BFS的定义BFS的搜索方式BFS的特点 二、BFS的实战应用1.走迷宫代码实现扩展 2.升级版走迷宫(边的权值不同)思路代码实现扩展 3.八数码代码实现 一、BFS的概念 BFS的定义 BFS(Breadth-First Search)广度优先搜索…

Python 和 RabbitMQ 进行消息传递和处理

一、RabbitMQ 简介 RabbitMQ 是一个开源的消息代理软件,它实现了高级消息队列协议(AMQP)标准。它的官方客户端提供了多种编程语言的接口,包括 Python、Java 和 Ruby 等。它支持消息的持久化、多种交换机类型、消息通知机制、灵活…

面试题更新之-什么是响应式设计?响应式设计的基本原理是什么?如何兼容低版本的IE?css实现响应式设计的方案

文章目录 什么是响应式设计?响应式设计的基本原理是什么如何兼容低版本的IE?css实现响应式设计的方案媒体查询(Media Queries):弹性单位(Flexible Units):Flexbox布局:Gr…

应用程序的执行 第 4 章 Spark 任务调度机制

应用程序的执行 && 第 4 章 Spark 任务调度机制 应用程序的执行(1) RDD 依赖shuffledRDDShuffleDependencyMapPartitionRDDOneToOneDependency (2) 阶段的划分shuffledRDDRDDShuffleMapStageResultStage (3) 任务的切分(4) 任务的调度TaskTaskPool (5) 任务的执行Task…

【Unity面试篇】Unity 面试题总结甄选 |热更新与Lua语言 | ❤️持续更新❤️

前言 关于Unity面试题相关的所有知识点:🐱‍🏍2023年Unity面试题大全,共十万字面试题总结【收藏一篇足够面试,持续更新】为了方便大家可以重点复习某个模块,所以将各方面的知识点进行了拆分并更新整理了新…

解决 Qt 下载安装太慢的办法

Qt 现在新的版本都是采用在线安装,那速度实在是.... 找了一些方法,原理就是用 Fiddler 来代理,然后替换掉 url 成清华的镜像地址,这样就相当于直接从清华安装了,嘎嘎快 打开 Fiddler, 打开 Qt 安装程序,在…

【Visual Studio】在 Windows 上使用 Visual Studio 配合 Qt 构建 VTK

知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 之前在 Windows 上完成了使用 Visual Studio 构建 VTK,这一篇结合实现 Qt 在 Windows 上使用 Visual Studio 配合 Qt 构建 VTK。之前的文章链接为…

最新2023水果编曲软件FL Studio Producer Edition 21.0.3 Build 3517中文版下载安装激活图文教程

各位,大家好,今天兔八哥给大家带来最新最新2023水果编曲软件FL Studio Producer Edition 21.0.3 Build 3517中文版下载安装激活图文教程。我们一起先了解一些FL Studio 。FL Studio21是目前流行广泛使用人数最多音乐编曲宿主制作DAW软件,这款…

腾讯、飞书等在线表格自动化编辑--python

编辑在线表格 一 目的二 实现效果三 实现过程简介1、本地操作表格之后进入导入在线文档2、直接操作在线文档 四 实现步骤讲解1、实现方法的选择2、导入类库3、设置浏览器代理直接操作已打开浏览器4、在线文档登录5、在线文档表格数据操作6、行数不够自动添加行数 五 代码实现小…