发新帖我要提问
12
返回列表
打印
[应用相关]

STM32F407扩展外部SRAM总结

[复制链接]
楼主: 9dome猫
手机看帖
扫描二维码
随时随地手机跟帖
21
9dome猫|  楼主 | 2021-8-3 23:06 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
FSMC是Flexible StaticMemory Controller的缩写,就是灵活的静态存储控制器。它可以用于驱动包括SRAM、NOR FLASH以及NAND FLSAH类型的存储器

使用特权

评论回复
22
9dome猫|  楼主 | 2021-8-3 23:12 | 只看该作者
其他我们不用管,从上面我们可以总结的是,stm32雇佣FSMC这个管家来管理我们的IS62WV51216。

使用特权

评论回复
23
9dome猫|  楼主 | 2021-8-3 23:17 | 只看该作者
来来来,我们来看看FSMC的庐山真面目:

使用特权

评论回复
24
9dome猫|  楼主 | 2021-8-3 23:22 | 只看该作者
又是这么多信号线,不要怕,我们还是来总结归纳一下。

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

使用特权

评论回复
25
9dome猫|  楼主 | 2021-8-3 23:22 | 只看该作者

使用特权

评论回复
26
9dome猫|  楼主 | 2021-8-3 23:23 | 只看该作者
你会发现居然和SRAM中的线居然高度统一(那是当然喏,我们就是讲的FSMC嘛!)1.FSM

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

使用特权

评论回复
27
9dome猫|  楼主 | 2021-8-3 23:27 | 只看该作者
还记得前面提到的行地址线吗?一根行地址线对应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的信号无效。这样是不是有一部分信号没有用呢?好像被掩盖了。因此它们被称为数据掩码信号。

使用特权

评论回复
28
9dome猫|  楼主 | 2021-8-3 23:28 | 只看该作者
2.FSMC_NE[1:4]是个很有趣的东西,它决定了FSMC可以控制多个存储器。

使用特权

评论回复
29
9dome猫|  楼主 | 2021-8-3 23:31 | 只看该作者
这里就要提及FSMC的地址映射啦!

使用特权

评论回复
30
9dome猫|  楼主 | 2021-8-3 23:32 | 只看该作者
首先,有一点我们必须明白,对于32位的stm32单片机来说,它能够管理的地址大小为4GB,而stm32将4GB的地址空间中的0x60000000到0x9FFFFFFF共1GB的空间分给外部内存,所以这1GB的空间就成了我们的小天地,供我们自由玩耍。

使用特权

评论回复
31
9dome猫|  楼主 | 2021-8-3 23:35 | 只看该作者
然后强势的FSMC就接管了这1GB的空间,FSMC将图中的1GB大小的External RAM存储区域分成了4个Bank区域,每个Bank对应于stm32内部寻址空间的不同地址范围。那么为什么要分为不同的Bank区域呢?因为不同的Bank可以来管理不同的外部存储设备,比如NOR Flash及SRAM存储器只能使用Bank1的地址,NAND Flash存储器只能使用Bank2和Bank3的地址,等。

使用特权

评论回复
32
9dome猫|  楼主 | 2021-8-3 23:37 | 只看该作者
细心的你肯定还会发现,每个Bnak中居然还有4x64MB这种文字,这是什么意思呢?

使用特权

评论回复
33
9dome猫|  楼主 | 2021-8-3 23:38 | 只看该作者
Bank内部的256MB空间又被分成4个小块,每块64M,各自有相应的控制引脚用于连接片选信号。以Bank1为例,见下图:

使用特权

评论回复
34
9dome猫|  楼主 | 2021-8-3 23:40 | 只看该作者
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就可以任由我们摆布啦。

使用特权

评论回复
35
9dome猫|  楼主 | 2021-8-3 23:42 | 只看该作者
因此,对于你使用IS62WV51216来说,一定要注意你的CS端是接的FSMC的哪个FSMC_NE端,这决定你在程序访问哪个地址范围。



使用特权

评论回复
36
9dome猫|  楼主 | 2021-8-3 23:45 | 只看该作者

使用特权

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

使用特权

评论回复
38
9dome猫|  楼主 | 2021-8-3 23:50 | 只看该作者
用FSMC来控制IS62WV51216还是很简单吧!



对于编程的具体细节我这里就不讲解了,懂了原理,写起代码来也很简单的。



原文转载自:http://www.jianshu.com/p/2e61bfe215c3

使用特权

评论回复
39
gyh974| | 2021-8-4 15:10 | 只看该作者
外扩最大可以支持多大内存?只能256M?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则