[应用相关] stm32扩展外部SRAM总结

[复制链接]
1711|36
 楼主| externally 发表于 2020-7-21 20:56 | 显示全部楼层
我们FSMC控制SRAM为例来说明:
680205f16e5dab8345.png
 楼主| externally 发表于 2020-7-21 20:56 | 显示全部楼层
你会发现居然和SRAM中的线居然高度统一(那是当然喏,我们就是讲的FSMC嘛!)
 楼主| externally 发表于 2020-7-21 20:57 | 显示全部楼层
1.FSMC_NBL[1:0]分别对应于LB#、UB#,有什么用呢?提供数据掩码信号。具体是怎么回事呢?
 楼主| externally 发表于 2020-7-21 20:57 | 显示全部楼层
还记得前面提到的行地址线吗?一根行地址线对应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的信号无效。这样是不是有一部分信号没有用呢?好像被掩盖了。因此它们被称为数据掩码信号。
 楼主| externally 发表于 2020-7-21 20:58 | 显示全部楼层
2.FSMC_NE[1:4]是个很有趣的东西,它决定了FSMC可以控制多个存储器。
 楼主| externally 发表于 2020-7-21 20:58 | 显示全部楼层
这里就要提及FSMC的地址映射啦!
121405f16e67a5fa7e.png
 楼主| externally 发表于 2020-7-21 20:59 | 显示全部楼层
首先,有一点我们必须明白,对于32位的stm32单片机来说,它能够管理的地址大小为4GB,而stm32将4GB的地址空间中的0x60000000到0x9FFFFFFF共1GB的空间分给外部内存,所以这1GB的空间就成了我们的小天地,供我们自由玩耍。
 楼主| externally 发表于 2020-7-21 21:00 | 显示全部楼层
然后强势的FSMC就接管了这1GB的空间,FSMC将图中的1GB大小的External RAM存储区域分成了4个Bank区域,每个Bank对应于stm32内部寻址空间的不同地址范围。那么为什么要分为不同的Bank区域呢?因为不同的Bank可以来管理不同的外部存储设备,比如NOR Flash及SRAM存储器只能使用Bank1的地址,NAND Flash存储器只能使用Bank2和Bank3的地址,等。
 楼主| externally 发表于 2020-7-21 21:00 | 显示全部楼层
细心的你肯定还会发现,每个Bnak中居然还有4x64MB这种文字,这是什么意思呢?
 楼主| externally 发表于 2020-7-21 21:01 | 显示全部楼层
Bank内部的256MB空间又被分成4个小块,每块64M,各自有相应的控制引脚用于连接片选信号。以Bank1为例,见下图:
475185f16e7125aae9.png
 楼主| externally 发表于 2020-7-21 21:02 | 显示全部楼层
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就可以任由我们摆布啦。
 楼主| externally 发表于 2020-7-21 21:02 | 显示全部楼层
因此,对于你使用IS62WV51216来说,一定要注意你的CS端是接的FSMC的哪个FSMC_NE端,这决定你在程序访问哪个地址范围。
 楼主| externally 发表于 2020-7-21 21:04 | 显示全部楼层
下面来说一下在stm32F407中SRAM的硬件连接:
968215f16e787843d4.png
 楼主| externally 发表于 2020-7-21 21:04 | 显示全部楼层
图中需要注意的是,除了PG12的连接不固定外,其他的管脚都要按照图中的方式连,为什么呢?因为对于FSMC来说,它已经集成到了单片机内部,它的提供给的管脚已经确定了,是不能改动的。唯一具有灵活性的就是FSMC_NE,具体用哪个FSMC_NE管脚来和你的SRAM相连,当然是你的自由,但是不要忘了,你要找到你选的FSMC_NE所对应的地址范围,不然写程序的时候就搞不清喏!
 楼主| externally 发表于 2020-7-21 21:05 | 显示全部楼层
怎么样?用FSMC来控制IS62WV51216还是很简单吧!
 楼主| externally 发表于 2020-7-21 21:06 | 显示全部楼层
对于编程的具体细节我这里就不讲解了,懂了原理,写起代码来也很简单的。
 楼主| externally 发表于 2020-7-21 21:06 | 显示全部楼层

作者:沙子硅
链接:https://www.jianshu.com/p/2e61bfe215c3
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部