电子产品世界 » 论坛首页 » 企业专区 » STM32 » STM32F469I discovery 外扩SDRAM映射


共3条 1/1 1 跳转至

STM32F469I discovery 外扩SDRAM映射

菜鸟
2015-11-23 08:57:13    评分

STM32F469I discovery 外扩SDRAM映射

-----东方青

强大如F469,集成了2MByte的内部闪存Flash,又支持32MByte的外部Quad-SPIFlash,那么仅仅内部集成的384Kbyte RAM是不够执行如此大的程序的,所以在板卡上,也配备了一颗大小为128Mbit16MByte)的SDRAM作为程序的运行空间。其型号为MT48LC4M32B2B5-6A,支持FMC接口。

1.FMC接口和FSMC接口的异同。

整一个ST32位单片机中,基本上从资源列表(或选型表)可以看到中低端单片机大部分都集成了FSMC接口(比如F1系列、F2系列),而只有高端单片机才集成了FMC接口(比如F4的高端配置系列),那么他们的共同点是什么?差别又是什么呢?

共同点:都支持SRAMNOR FlashPSRAMNandflash等闪存或者内存。都支持将AHB传输信号转换到适当的外部设备协议,满足访问外设的时序要求。

区别:

(1)FSMC:英文名Flexible static memory controller,静态存储器控制器,能够与同步或异步存储器和16PC存储卡接口兼容。只支持静态存储,静态寻址取址。

(2)FMC:英文名Flexible memory controller,它再FSMC的基础上还支持了动态存储和动态寻址取址(因为有些存储器的寻址取址方式是动态的,比如DRAM)。所以有种说法是,FSMCFMC的子集。

STM32F469I Discovery板卡上板载的为16MByteSDRAM,它是DRAM中的一种,它为处理器提供的接口是FMC接口,所以此存储器只能在(针对于ST的单片机)STM32F429以上的MCU才能得到支持,比如在STM32F407上将不支持DRAM(这里这么说是因为有不少方案在使用SRAM,但是F429之后的方案又使用了DRAM)。

2.板载SDRAM的硬件资源和寻址地址。

(1)板载SDRAM的硬件资源。


如上图可以看到,SDRAM的控制分为数据总线、地址总线和控制端口(这就是为什么它的存取速度如此之快的原因)。

(2)寻址地址。


如上图为STM32F469系列MCU的内存映射表,再看列表:


如上图清晰的表述了,FMC控制器只是4个可用的bank向外提供FMC接口。

3.移植SDRAM驱动

同样的因为SDSTM32CubeF4库中已经为用户提供了完全的驱动支持,所以直接使用即可(其实就算是没有提供,通常也不会自己去写这样的驱动,而是找到对应的SDRAM厂商,移植其提供的驱动)。

SDRAM相关的驱动文件为stm32469i_discovery_qspi.cstm32469i_discovery_qspi.h,只需将此文件添加到工程,即可无缝使用(当然前提是CMSIS没问题)。但是在此还是分析一下初始化过程:


初始化的流程就如上图了,可以看出这是ST一贯的Demo架构。在此必须要注意SDRAM挂载的bank位置。

4.测试应用SDRAM

为了验证驱动的正确性,那么测试使用是必然的,思路为:指定地址在SDRAM中写数据,然后又从相应地址读取数据,对比写入的数据和读取的数据是否相同,如若相同,这即为驱动的移植成功。

(1)首先需要定义读写bufferSDRAM所挂载的bank的起始地址和读写的地址增量。如下图:


定义了256*4Byte(即1KByte)的读写buffer,值得关注的是SDRAM所挂载的bank的起始地址为0xC0000000。这里有个问题,为何是0xC0000000呢?而不是在内存映射表上看到的bank1的起始地址为0x60000000?可能就会有这样的疑问了(当然,会有这样疑问的通常是新手),如果存在这样的疑问,说明还没有很好的理解内存映射的欢迎FMCbankSDRAM的区别,后者是前者的子集吧,可以这样说。具体的在参考手册中有详细说明,如下图:


看到上图,一切的疑问貌似已经解决了,SDRAMbank1的起始地址确实是0xC0000000。这就体现了参考手册的强大功能,解答程序员的几乎一切烦恼(我之所以这样说,还是老规矩,强调多看手册,磨刀不误砍材工)。

(2)代码实现:



如上两图即为整个代码的实现流程了,在相关部分我已做了注释。整个代码非常简单,无需解释。

5.现象

实现了代码,那么build编译,然后烧录到板卡,最后看现象:


如上图所示,整一个程序代码都执行完毕,说明关于SDRAM的实验成功。

总结:整一个SDRAM的使用,如果仔细分析,还是很复杂的,对于老鸟而言,这样的使用是小儿科;但是对于新手,直接理解可能还是有难度的,特别是在ST提供了非常完善的开发平台的情况下,很多人为了快速看到效果而直接使用了STM32CubeMX这样的平台生成代码,根本就没有去理解其内部的东西,所以个人看法是完善的平台可能对老鸟的帮助非常大,因为直接生成的可运行的代码,再做修改或稍微小部分移植,即可实现快速的开发产品。而对于新手而言,这并未是件好事吧,屏蔽了硬件操作的复杂,降低了编程难度,同时也让人看不清(或者看不到)应该掌握的东西。我记得一句话是“美国对中国封锁的技术,中国都发展起来了;而开放的技术,中国一直没有发展起来”,可见牛人是逼出来的(这里只是个人对学习的观点)。

本文并未详细的对SDRAM驱动代码进行深入的跟读和分析,但是基本上也将整个使用框架给列出来了,理解了整一个使用的框架,那么跟读代码基本上就会很轻松了。




关键词: STM32F469I     discovery     外扩     S    

助工
2015-11-23 09:11:50    评分
2楼

早起的鸟儿有虫吃,太棒了,帖子更新的速度很快,继续加油!


菜鸟
2015-11-23 14:09:02    评分
3楼
学习学习东方大神威武

共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]