suebillt 发表于 2015-1-17 18:13:37

LPC1788 单片SDRAM问题256Mb 16*16,如何写32位数据?

#define SDRAM_BASE_ADDR        0xA0000000
#define SDRAM_SIZE                       0x2000000   
    config.ChipSize = 256;
    config.AddrBusWidth = 16;
    config.AddrMap = EMC_ADD_MAP_ROW_BANK_COL;
    config.CSn = 0;
    config.DataWidth = 16;
    config.TotalSize = SDRAM_SIZE;

    config.CASLatency= 2;
    config.RASLatency= 1;
    config.Active2ActivePeriod = 10;
    config.ActiveBankLatency =2;
    config.AutoRefrehPeriod = 10;
    config.DataIn2ActiveTime = 5;
    config.DataOut2ActiveTime = 5;
    config.WriteRecoveryTime = 2;
    config.ExitSelfRefreshTime = EMC_NS2CLK( 70);
    config.LoadModeReg2Active = 2;
    config.PrechargeCmdPeriod = 3;
    config.ReadConfig = 1;/* Command delayed strategy, using EMCCLKDELAY */
    config.RefreshTime = EMC_SDRAM_REFRESH( 64);
    config.Active2PreChargeTime = 7;
    config.SeftRefreshExitTime = EMC_NS2CLK( 70);
    DynMem_Init(&config);

做如上初始化,然后分别定义8,16,32位的指针从0xA0000000开始写数据并读出来验证,8和16位读写没有问题,但是写32位的数据就出错,
移植了FATFS之后,把SD卡的操作放在SDRAM中,就出错:SD中没有有效的FATFS卷
#define FATFS_BASEADDR        ((uint32_t)SDRAM_BASE_ADDR + 0x100000)
#definefile_BASEADDR        ((uint32_t)SDRAM_BASE_ADDR + 0x200000)
#define ftemp_BASEADDR        ((uint32_t)SDRAM_BASE_ADDR + 0x300000)
#define fatbuf_BASEADDR        ((uint32_t)SDRAM_BASE_ADDR + 0x600000)

FATFS *fs;/
FIL *file;                          /
FIL *ftemp;                         
UINT br,bw;                       
FILINFO fileinfo;
DIR dir;                       
uint16_t *fatbuf;               


uint8_t exfuns_init(void)
{
        fs=(FATFS*)FATFS_BASEADDR;       
file=(FIL*)file_BASEADDR;               
        ftemp=(FIL*)ftemp_BASEADDR;               
        fatbuf=(uint16_t*)fatbuf_BASEADDR;                               
        return 0;
}
求给个思路

suebillt 发表于 2015-1-17 20:24:42

自己顶一个

nongxiaoming 发表于 2015-1-29 14:47:01

这个sdram配置好以后就是一个地址区域,可以直接寻址的。所以你不用思考怎么存32bit数据了,直接指针指向你要的地址,直接赋值就好了。
页: [1]
查看完整版本: LPC1788 单片SDRAM问题256Mb 16*16,如何写32位数据?