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图)

SDRAM在nuttx的实现

2.SDRAM配置(参照SDRAM文档)

SDRAM在nuttx的实现

前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

SDRAM在nuttx的实现

Hello中的静态数组即可分配到SDRAM中