SDRAM在nuttx的实现

实际使用的是原子F767开发板

一、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的实现_第1张图片

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

SDRAM在nuttx的实现_第2张图片

前2步完成后即可测试驱动是否能够工作

#define SDRAM_BANK_ADDR 0xc0000000
int i;
double o=0.112;

 for(i=0;i<5329;i++)
    {
        *( double*) (SDRAM_BANK_ADDR+8*i )=o;
        *( double*) (SDRAM_BANK_ADDR+0x10000+8*i)=o+0.3;
        o++;
    }
    for(i=0;i<5500;i++)
    {
        double p,q;
        p=*( double*) (SDRAM_BANK_ADDR+8*i );
        q=*( double*) (SDRAM_BANK_ADDR+0x10000+8*i);
    printf("%5.3f\n",p);
    printf("%5.3f\n",q);
 

给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全空间分配

SDRAM在nuttx的实现_第3张图片

第二种使用静态分配动态空间(以hello为例)

修改script/flash.ld

SDRAM在nuttx的实现_第4张图片

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

 

你可能感兴趣的:(nuttx)