SDRAM在nuttx的实现
一、SDRAM启动过程(stm32f746g-disco为例)
void __start(void) nuttx\nuttx-7.21\arch\arm\src\chip\stm32_start.c
stm32_boardinitialize() \configs\stm32f746g-disco\src\stm32_boot.c
stm32_enablefsmc(); \configs \stm32f746g-disco\src\stm32_extmem.c
二、驱动程序
stm32_extmem.c是其驱动程序
1.引脚配置(参照PCB图)
2.SDRAM配置(参照SDRAM文档)
前2步完成后即可测试驱动是否能够工作
for(i=0;i<5329;i++)
{
*( double*) (SDRAM_BANK_ADDR+8*i)=o+0.3;
o++;
}
给SDRAM指定地址赋值看能否读取,若驱动不正常工作则读取数据全是0
三、NUTTX配置
修改deconfig
CONFIG_MM_REGIONS=3
CONFIG_SYS_RESERVED=4
CONFIG_LIB_SYSCALL=y
CONFIG_STM32_FSMC=y
CONFIG_STM32_FSMC_SRAM=yCONFIG_STM32F7_FSMC=y
CONFIG_STM32F7_FSMC_SRAM=y
CONFIG_HEAP2_BASE=0xC01F4000 //根据实际情况
CONFIG_HEAP2_SIZE=15728640 //根据实际情况
第一种只使用mallco分配动态空间(是否必要有待验证)
修改script/flash.ld
MEMORY
{
itcm (rwx) : ORIGIN = 0x00200000, LENGTH = 1024K
flash (rx) : ORIGIN = 0x08000000, LENGTH = 1024K
dtcm (rwx) : ORIGIN = 0x20000000, LENGTH = 128K
sram1 (rwx) : ORIGIN = 0x20020000, LENGTH = 368K
sram2 (rwx) : ORIGIN = 0x2007c000, LENGTH = 16K
sdram (rwx) : ORIGIN = 0xC01F4000, LENGTH = 15360K //根据实际
sdram2 (rwx) : ORIGIN = 0xC1000000, LENGTH = 16384K //根据实际
}
这样使用mallco就是自身SRAM加上SDRAM全空间分配
第二种使用静态分配动态空间(以hello为例)
修改script/flash.ld
Hello中的静态数组即可分配到SDRAM中