外部扩展SRAM

本文详细介绍了如何在STM32F407ZGT6开发板上使用FSMC扩展SRAM,包括FSMC引脚配置、地址映射、时序设定、HAL库配置及内存管理。通过实例展示了SRAM的接线、读写流程和测试方法,旨在帮助开发者理解并实现外部SRAM的高效利用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个故事看懂内存条工作原理

简介

1、SRAM和DRAM

  • 静态随机存取存储器(Static Random-Access Memory,SRAM)是随机存取存储器的一种。所谓的“静态”,是指这种存储器只要保持通电,里面储存的数据就可以恒常保持。相对之下,动态随机存取存储器(DRAM)里面所储存的数据就需要周期性地更新。然而,当电力供应停止时,SRAM和DRAM储存的数据都是会消失(被称为volatile memory),这与在断电后还能储存资料的ROM或闪存是不同的。
  • SRAM不需要刷新电路即能保存它内部存储的数据。而DRAM(Dynamic Random Access Memory)每隔一段时间,要刷新充电一次,否则内部的数据即会消失,因此SRAM具有较高的性能,但是SRAM也有它的缺点,即它的集成度较低,功耗较DRAM大 [1] ,相同容量的DRAM内存可以设计为较小的体积,但是SRAM却需要很大的体积。同样面积的硅片可以做出更大容量的DRAM,因此SRAM显得更贵
  • SRAM一般用在高速缓存中;DRAM一般用在内存条里,内存条实质是由多个内存颗粒(即SDRAM芯片)组成的通用标准模块,而STM32直接与SRAM/SDRAM连接

2、我们world编写没有保存的时候直接关掉就没了,为什么呢因为这些东西都是放在内存里的,RAM掉电丢失但是运行速率比较快
3、STM32F407ZGT6 自带了 192K 字节的 SRAM,对一般应用来说,已经足够了,不过在一些对内存要求高的场合,STM32F4 自带的这些内存就不够用了。比如跑算法或者跑 GUI 等,就可能不太够用,所以探索者 STM32F4 开发板板载了一颗16 位宽 512K(512*16,即 1M 字节)容量的CMOS 静态内存芯片。 1M 字节容量的 SRAM 芯片:XM8A51216,满足大内存使用的需求。

4、FSMC一共26根地址线(正好2的26次对应64M字节),16根数据线,所有的都是共用这么几个的;我们使用的SRAM总共19根地址线(即2^19=512K,1K=1024),16根数据线。

5、整个使用:

  • 首先在cubemx中按照原理图,对应选择第三块,然后配置好时序,选择好对应引脚
  • 然后就可以直接用了
  • FSMC(驱动SRAM)特点我感觉就是很多地址线和很多数据线合在一起,并行使用。然后就是使能,片选,掩码(使用高字节还是低字节)对应的数据线,就这样。使用就是配置好时序就可以了,STM32会自己驱动,完全不用我们操心。

FSMC

简介

FSMC,即灵活的静态存储控制器,能够与同步或异步存储器和16位PC存储器卡连接,STM32的FSMC接口支持包括SRAM、NAND FLASH、NOR FLASH和PSRAM等存储器(不能驱动SDRAM这种动态存储器,FMC外设支持)。FSMC的框图如下图所示:

FSMC引脚介绍

在这里插入图片描述
1、NOR/PSRAM中:(也就用到了下面这两块)

  • FSMC_NE片选信号(总共有4个,因此可以一口气使用四块SRAM。NOR Flash、PSRAM、ROM、LCD也是用的这个),对应SRAM的CE;这四个就对应下面图片中,第一块黄色区域的四块64MB,也即是Bank1的四块所选区。这些片选信号,是程序控制的,也就是当我们访问区域1的时候,区域1的片选就会拉低。
  • FSMC_NBL数据掩码信号,对应SRAM的LB、UB;

2、公用信号

  • 其中的地址线和数据线所有控制器共用的,公共信号。
  • FSMC_NOE读信号
  • FSMC_NWE写信号。

FSMC与SRAM引脚对应

FSMC驱动外部SRAM时,外部SRAM的控制一般有:地址线(如A0-A25)、数据线(如D0~D15)、写信号(WE,即WR)、读信号(OE,即RD)、片选信号(CS),如果SRAM支持字节控制,那么还有UB/LB信号。

在这里插入图片描述
四个片选信号 就对应了下面这四块区域
在这里插入图片描述

地址映射

1、这张图除了黄色的部分 就是其他的东西比如代码存储位置啊,外设啊啥的 和我们的FSMC没有关系。FSMC就控制这块黄色区域(External RAM);我们用的四个片选信号线(用于驱动SRAM) ,就对应了下面第一块黄色区域的四个64MB大小的空间。
2、在使用FSMC外界存储器时,其存储单元是映射到STM32的内部寻址空间的;
3、在程序里,定义一个指向这些地址的指针,然后就可以通过指针直接修改该存储单元的内容,FSMC外设会自动完成数据访问过程,读写命令之类的操作不需要程序控制。
在这里插入图片描述

  • 从上图可以看出,FSMC 总共管理 1GB 空间,拥有 4 个存储块(Bank),本章,我们用到的是块 1,也就是bank1,配置也只需要配置这个bank
  • STM32的FSMC存储块1(Bank1)用于驱动NOR FLASH/SRAM/PSRAM,被分为4个区,每个区管理64M字节空间,每个区都有独立的寄存器对所连接的存储器进行配置。Bank1的256M字节空间由28根地址线(HADDR[27:0])寻址。这里HADDR,是内部AHB地址总线,其中,HADDR[25:0]来自外部存储器地址FSMC_A[25:0],而HADDR[26:27]对4个区进行寻址。如下表所示:
    在这里插入图片描述
  • 其中因为外接的SRAM就1M字节,所以他地址线只有19根地址线就正常了,但是用的是前16个地址线,因为这几根对应的是前1M的地址
  • 不论外部接8位/16位宽设备,FSMC_A[0]永远接在外部设备地址A[0]
  • 这里的地址+1,就是+了1bit

时序

  • FSMC外设支持输出多种不同的时序以便于控制不同的存储器,对应着FSMC的ABCD四种模式,其中SRAM使用的是A模式
  • 在cubemx中没有直接让你选择使用什么模式,但是让你选择了读写什么设备,我猜应该他是通过你读写什么设备然后自动给你选择相应的模式了

在这里插入图片描述

寄存器

如果用的是HAL,那不需要了解寄存器,直接cubemx配置就行了

  • 对于NOR FLASH/PSRAM控制器(存储块1),通过FSMC_BCRx、FSMC_BTRx和FSMC_BWTRx寄存器设置(其中x=1~4,对应4个区)。通过这3个寄存器,可以设置FSMC访问外部存储器的时序参数,拓宽了可选用的外部存储器的速度范围。

1、SRAM/NOR闪存片选控制寄存器(FSMC_BCRx)
在这里插入图片描述

  • EXTMOD:扩展模式使能位,控制是否允许读写不同的时序,设置为0
  • WREN:写使能位。我们需要向SRAM写数据,故该位必须设置为1
  • MWID[1:0]:存储器数据总线宽度。00,表示8位数据模式;01表示16位数据模式;10和11保留。我们的SRAM是16位数据线,所以设置WMID[1:0]=01。
  • MTYP[1:0]:存储器类型。00表示SRAM、ROM;01表示PSRAM;10表示NOR FLASH;11保留。我们驱动的芯片为SRAM,所以需要设置MTYP[1:0]=00。
  • MBKEN:存储块使能位。需设置为1

2、SRAM/NOR闪存片选时序寄存器(FSMC_BTRx)
在这里插入图片描述

  • ACCMOD[1:0]:访问模式。00:模式A;01:模式B;10:模式C;11:模式D。
  • DATAST[7:0]:数据保持时间,等于: DATAST(+1)个HCLK时钟周期,DATAST最大为255。对IS62WV51216来说,其实就是OE/WE低电平持续时间,最大为55ns。对STM32F1,一个HCLK=13.8ns (1/72M),设置为3;对STM32F4,一个HCLK=6ns(1/168M) ,设置为8。
  • ADDSET[3:0]:地址建立时间。表示:ADDSET (+1)个HCLK周期,ADDSET最大为15。对IS62WV51216来说,访问周期最快位55ns,而我们前面的设置,已经可以保证访问周期不小于55ns,因此这个地址建立时间,我们可以直接设置为0即可。

因为设置了EXTMOD位,所以读写时序共用这个时序寄存器!

SRAM

  • SRAM的控制比较简单,只要控制信号线使能了访问,从地址线输入要访问的地址,即可从I/O数据线写入或读出数据。
  • IS62WV51216是ISSI(Integrated Silicon Solution, Inc)公司生产的一颗16位宽512K(512*16,即1M字节)容量的CMOS静态内存(SRAM)芯片。

接线

  • 地址线可以随便接不用对应,而数据线却是不能的,需要一一对应
    在这里插入图片描述
  • 图中A0-18为地址线,总共19根地址线(即2^19=512K);I/O0~15为数据线,总共16根数据线(因此大小为1M字节)。CS2和CS1都是片选信号,不过CS2是高电平有效CS1是低电平有效;OE是输出使能信号(读信号);WE为写使能信号;UB和LB分别是高字节控制和低字节控制信号;本示例中的 SRAM 为异步类型的存储器,不使用同步时钟信号,所以时钟分频配置不起作用
    在这里插入图片描述

读写流程

在这里插入图片描述
1、下图为:IS62WV51216芯片的8080并口写时序,详见:IS62WV51216.pdf
在这里插入图片描述

重点时序

  • ADDSET:地址建立时间(tSA),0ns。也就是多久时间可以去识别这个地址地址,多少个HCLK周期(也就是168MHz)
  • DATAST:数据建立时间和数据保持时间,类似于地址建立时间,多少时间可以读数据。写周期时间(tWC),55ns
  • WE脉宽(tPWE),写操作周期,这里的读和写都是相同的。45ns
  • 我们只需要输入上面这三个时序就可以了,其他的交给stm32。这三个也就是对应cubemx中需要输入的三个选项。地址建立时间,地址保持时间,数据保持时间。一般直接用cubemx提供的默认数据也行,也能使用

在这里插入图片描述
引脚不要接错了。后来发现,FSMC的引脚比较特殊,我们不需要特别设置,直接使用默认配置的引脚就可以了,因为他好像没有复用的,不会映射到其他。
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

成草

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值