News Detail

stm32扩展外部SRAM总结

新型存储之MRAM资讯

108
Issuing time:2022-12-01 09:15Author:glochip.comSource:www.globalizex.com/news/Link:https://www.glochip.com/news/
原理:给STM32芯片扩展内存与给PC扩展内存的原理是一样的,只是PC上一般以内存条的形式扩展,内存条实质是由多个内存颗粒(即SRAM芯片)组成的通用标准模块,而STM32直接与SRAM芯片连接。

从上面的图片中我们可以看到,ARM芯片的下面就是我们今天的主角SRAM,具体型号为IS62WV51216。

黑黢黢的芯片我们也看不出什么东西来,下面就来看一看IS62WV51216的管脚图吧。


管脚图


哇!这么居然这么多管脚!别着急,下面我们来慢慢分析这些管脚。

除开基本的电源和地线,IS62WV51216的管脚大概可以这么来分类:


管脚说明

看吧!这样一分类,是不是就没有那么恐怖啦。

所以IS62WV51216的管脚总的来说大致分为:电源线、地线、地址线、数据线、片选线、写使能端、读使能端和数据掩码信号线。

从这个图中我们可以看出IS62WV51216有19根地址线和16根数据线,从这些数据中我们可以分析出IS62WV51216的存储大小为1M,那么这个1M是怎么分析出来的呢?

我们得来说说IS62WV51216的存储原理。

首先,我们来谈一谈一般的SRAM的存储原理:



sram存储矩阵模型

sram的存储模型我们可以用矩阵来说明:

SRAM内部包含的存储阵列,可以把它理解成一张表格,数据就填在这张表格上。和表格查找一样,指定一个行地址和列地址,就可以精确地找到目标单元格,这是SRAM芯片寻址的基本原理。这样的每个单元格被称为存储单元,而这样的表则被称为存储矩阵。地址译码器把N根地址线转换成2的N次方根信号线,每根信号线对应一行或一列存储单元,通过地址线找到具体的存储单元,实现寻址。如果存储阵列比较大,地址线会分成行和列地址,或者行、列分时复用同一地址总线,访问数据寻址时先用地址线传输行地址再传输列地址。

但是呢?你会发现,这个原理好像不太适用于IS62WV51216,为什么呢?

其实不然,因为我们使用的SRAM比较小,IS62WV51216没有列地址线。它只有19根行地址线,那么,我们就可以这么来解释:IS62WV51216有16根数据线,也就是说它的数据宽度为16位,一个行地址也就对应16位,即2字节空间。好,那现在来计算一下IS62WV51216有多少个行地址。2的19次方等于512K,在512K的基础之上在乘我们之前计算的2字节,不正好是1024K,也就是1M吗?1M后面的单位是B,即Byte,而不是Bit哦。

这样的话你就会发现IS62WV51216这个名字中本身就包含了大量的信息:IS62WV51216共有512K个行地址,数据宽度为16位,再加以计算就可以得到它的存储大小为1M啦,有趣吧!

SRAM的大致原理我们讲完了,但是SRAM到底在stm32中到底是怎么被使用的呢?

下面,一位大神即将登场,FSMC。

STM32F407系列芯片使用FSMC外设来管理扩展的存储器

FSMC是Flexible StaticMemory Controller的缩写,就是灵活的静态存储控制器。它可以用于驱动包括SRAM、NOR FLASH以及NAND FLSAH类型的存储器

其他我们不用管,从上面我们可以总结的是,stm32雇佣FSMC这个管家来管理我们的IS62WV51216。

来来来,我们来看看FSMC的庐山真面目:



FSMC控制器框图

蒙了吧!又是这么多信号线,不要怕,我们还是来总结归纳一下。

我们FSMC控制SRAM为例来说明:

FSMC中的SRAM控制信号线

你会发现居然和SRAM中的线居然高度统一(那是当然喏,我们就是讲的FSMC嘛!)

1.FSMC_NBL[1:0]分别对应于LB#、UB#,有什么用呢?提供数据掩码信号。具体是怎么回事呢?

还记得前面提到的行地址线吗?一根行地址线对应16位的数据,我们可以把16位的数据分为高字节和低字节。当要访问宽度为16位的数据时,使用行地址线指出地址,然后把UB#和LB#线都设置为低电平(FSMC_NBL0和FSMC_NBL1为低电平),那么I/O0-I/O15线(FSMC_D0到FSMC_D15)都有效,它们一起输出该地址的16位数据(或者接收16位数据到该地址);当要访问宽度为8位的数据时,使用行地址线指出地址,然后把UB#(FSMC_NBL0)设置为低电平,I/O8-I/O15(FSMC_D8到FSMC_D15)会对应输出该地址的高8位,I/O0-I/O7的信号无效(或者把LB#(FSMC_NBL1)设置为低电平,I/O0-I/O7(FSMC_D0到FSMC_D7)会对应输出该地址的低8位,I/O8-I/O15的信号无效。这样是不是有一部分信号没有用呢?好像被掩盖了。因此它们被称为数据掩码信号。

2.FSMC_NE[1:4]是个很有趣的东西,它决定了FSMC可以控制多个存储器。

这里就要提及FSMC的地址映射啦!


FSMC地址映射

首先,有一点我们必须明白,对于32位的stm32单片机来说,它能够管理的地址大小为4GB,而stm32将4GB的地址空间中的0x60000000到0x9FFFFFFF共1GB的空间分给外部内存,所以这1GB的空间就成了我们的小天地,供我们自由玩耍。

然后强势的FSMC就接管了这1GB的空间,FSMC将图中的1GB大小的External RAM存储区域分成了4个Bank区域,每个Bank对应于stm32内部寻址空间的不同地址范围。那么为什么要分为不同的Bank区域呢?因为不同的Bank可以来管理不同的外部存储设备,比如NOR Flash及SRAM存储器只能使用Bank1的地址,NAND Flash存储器只能使用Bank2和Bank3的地址,等。

细心的你肯定还会发现,每个Bnak中居然还有4x64MB这种文字,这是什么意思呢?


Bank内部的256MB空间又被分成4个小块,每块64M,各自有相应的控制引脚用于连接片选信号。以Bank1为例,见下图:


Bank1内部的小块地址分配
OK!重点来了!

刚刚前面提到的FSMC_NE[4:1]信号线就分别对应图中的FSMC bank1 NOR/PSRAM4到FSMC bank1 NOR/PSRAM1。当STM32访问0x6C000000-0x6FFFFFFF地址空间时,会访问到Bank1的第3小块区域:FSMC bank1 NOR/PSRAM3相应的FSMC_NE3信号线会输出控制信号(即片选信号),如果这个时候FSMC_NE3处刚好接上IS62WV51216的CS端,那么IS62WV51216就可以任由我们摆布啦。

因此,对于你使用IS62WV51216来说,一定要注意你的CS端是接的FSMC的哪个FSMC_NE端,这决定你在程序访问哪个地址范围。

下面来说一下在stm32F407中SRAM的硬件连接:


外部SRAM硬件连接图

图中需要注意的是,除了PG12的连接不固定外,其他的管脚都要按照图中的方式连,为什么呢?因为对于FSMC来说,它已经集成到了单片机内部,它的提供给的管脚已经确定了,是不能改动的。唯一具有灵活性的就是FSMC_NE,具体用哪个FSMC_NE管脚来和你的SRAM相连,当然是你的自由,但是不要忘了,你要找到你选的FSMC_NE所对应的地址范围,不然写程序的时候就搞不清喏!

怎么样?用FSMC来控制IS62WV51216还是很简单吧!




Article classification: SRAM
Share to:
Home                                    Product                                        News                                   About                                        Contact
Tel: +86-0755-84866816  
Tel: +86-0755-84828852
Mail:  kevin@glochip.com
Web:  www.chip.com.hk
Rm401.1st Building, Dayun software Longgang Avenue, Longgang district,Shenzhen
全球芯微信公众号
Samsung Micron SKhynix Kingston Sandisk  Kioxia Nanya Winbond MXIC ESMT Longsys Biwin HosgingGlobal  BoyaMicro  Piecemakers Rayson  Skyhigh  Netsol

SRAM MRAM SDRAM DDR1 DDR2 DDR3 DDR4 DDR5 LPDDR3 LPDDR4 LPDDR4X LPDDR5 LPDDR5X NAND NOR eMMC UFS eMCP uMCP SSD Module