欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SDRAM使用总结

程序员文章站 2024-02-25 10:37:04
...

最近stm32学到使用SDRAM了,板载SDRAM为IS42S16400J。


SDRAM为一种可以运行存储在存储器上的代码的存储器,stm32内部有2M的代码运行空间,一般都是够用的,如果不够用的时候就可以用SDRAM扩大代码运行空间。


SDRAM是通过FMC连接后直接映射到stm32内部寻址空间,与IIC和SPI需要操作总线不一样,操作SDRAM只需要在程序中定义一个指向这个空间的指针,通过指针直接修改存储单元内容,FMC外设会自动完成数据访问过程。


SDRAM使用总结


为了使FMC完成这些数据访问操作,需要在程序一开始进行初始化过程,一共包括对GPIO管脚时钟的初始化、FMC的初始化、SDRAM时序初始化。


SDRAM我觉得最重要的就是初始化过程了,初始化顺序一定要注意,一定要按照GPIO->FMC->SDRAM这个顺序初始化。


使用CubeMX创建的stm32工程需要注意,SDRAM时序初始化不能放在HAL_SDRAM_MspInit里,因为CubeMX生成的程序初始化过程是这样的,MX_FMC_Init->HAL_SDRAM_Init->HAL_SDRAM_MspInit,如果SDRAM时序初始化放在HAL_SDRAM_MspInit里,会由于FMC还没有初始化成功而导致SDRAM时序初始化失败。


我一开始就是由于不清楚这个初始化顺序,导致程序一直卡在SDRAM读写处。


SDRAM使用总结


读写SDRAM的话,只需要用一个指向这个空间地址的指针,然后操作这个指针指向的内容就好了。一个简单的读的例子如下。

uint32_t *pSDRAM;

uint32_t RadomBuffer[10000];

#define SDRAM_BANK_ADDR     ((uint32_t)0xD0000000)

*pSDRAM=RadomBuffer[count];



SDRAM使用总结