TI中文支持网
TI专业的中文技术问题搜集分享网站

AM3352上ddr3(MT41J256M16 – 32 Meg x 16 x 8 banks)在程序运行的时候数据被清空了

我想问下,为什么我的ddr在MLO运行的时候表现出内存数据被清除的现象;(从SD卡启动)

具体表现为:

int omap_mmc_init(int dev_index)

 {

  struct mmc *mmc;  mmc = &hsmmc_dev[dev_index];

 //Sam

  printf("#Sam %s %d %d %X %X %X\n",__func__,__LINE__,dev_index,mmc_init_setup,hsmmc_dev,mmc);

  sprintf(mmc->name, "OMAP SD/MMC");

  printf("#Sam %s %d mmc_send_cmd =%x\n",__func__,__LINE__,mmc_send_cmd);

 mmc->send_cmd = mmc_send_cmd;  mmc->set_ios = mmc_set_ios;  mmc->init = mmc_init_setup; 

 printf("#Sam %s %d %X %X %X %X\n",__func__,__LINE__,dev_index,mmc->send_cmd,mmc->set_ios,mmc->init);//第一行

  printf("#Sam %s %d %X %X %X %X\n",__func__,__LINE__,dev_index,mmc->send_cmd,mmc->set_ios,mmc->init);//第二行

  printf("#Sam %s %d %X %X %X %X\n",__func__,__LINE__,dev_index,mmc->send_cmd,mmc->set_ios,mmc->init);

  printf("#Sam %s %d %X %X %X %X\n",__func__,__LINE__,dev_index,mmc->send_cmd,mmc->set_ios,mmc->init);

 ……….

}

这是在uboot里面注册mmc的代码,每次运行到第一行打印的时候,地址打印正确,但是运行到第二行的时候,地址打印出来就全为0了;

或者在第一行的前面加个打印消息,然后现在的第一行也就全是0了,所以我认为这个地方是时序造成的问题;

我们的电路设计现在是没有PMU是直接从主电源引的电源,测量过电压正常;

软件寄存器配置:

SDRAM_CONFIG:0x61C04B32;

SDRAM_REF_CTRL:0x10000C30;

请帮忙看下或者给点意见,谢谢各位

Jian Zhou:

可以在U-boot下先测试下整个DDR3空间的读写。

shan xu2:

回复 Jian Zhou:

dear jian zhou:

ddr的读写我有测试过,下面是测试代码,测试是读出的数据是没问题的

 int *p = 0,i = 0;

for(i=0;i<0x4000;i=i+4) 

 {

   p = 0x80000000+i;

   *p = i;

   printf("->%x\n",i);

  }

shan xu2:

回复 Jian Zhou:

int omap_mmc_init(int dev_index){    struct mmc *mmc;    mmc = &hsmmc_dev[dev_index];    int i = 0;    sprintf(mmc->name, "OMAP SD/MMC");    mmc->send_cmd = mmc_send_cmd;    mmc->set_ios = mmc_set_ios;    mmc->init = mmc_init_setup;    for(i=0;i<10;i++)    {        printf("#Sam %s %d %X %X %X %X\n",__func__,__LINE__,dev_index,mmc->send_cmd,mmc->set_ios,mmc->init);        printf("#Sam %s %d %X %X %X %X\n",__func__,__LINE__,dev_index,mmc->send_cmd,mmc->set_ios,mmc->init);        printf("#Sam %s %d %X %X %X %X\n",__func__,__LINE__,dev_index,mmc->send_cmd,mmc->set_ios,mmc->init);        printf("#Sam %s %d %X %X %X %X\n",__func__,__LINE__,dev_index,mmc->send_cmd,mmc->set_ios,mmc->init);    }

….

}

换了块板,打印的时候:

#mmc_initialize 80000c78 80000c78 80000c78#Sam omap_mmc_init 468 0 402F2C6C 402F3C78 402F4974#Sam omap_mmc_init 469 0 402F2C6C 402F3C78 402F4974#Sam omap_mmc_init 470 0 402F2C6C 402F3C78 402F4974#Sam omap_mmc_init 471 0 402F2C6C 402F3C78 402F4974#Sam omap_mmc_init 468 0 402F2C6C 402F3C78 402F4974#Sam omap_mmc_init 469 0 402F2C6C 402F3C78 402F4974#Sam omap_mmc_init 470 0 402F2C6C 402F3C78 402F4974#Sam omap_mmc_init 471 0 402F2C6C 402F3C78 402F4974#Sam omap_mmc_init 468 0 402F2C6C 402F3C78 402F4974#Sam omap_mmc_init 469 0 0 0 402F4974#Sam omap_mmc_init 470 0 402F2C6C 402F3C78 402F4974#Sam omap_mmc_init 471 0 0 0 0#Sam omap_mmc_init 468 0 402F2C6C 402F3C78 402F4974#Sam omap_mmc_init 469 0 402F2C6C 402F3C78 402F4974#Sam omap_mmc_init 470 0 402F2C6C 402F3C78 402F4974

这是怎么回事?

Jian Zhou:

回复 shan xu2:

你这个问题是随机的,还是每次必现?

你的内存读写测试是循环测了整个DDR3的空间么?

shan xu2:

回复 Jian Zhou:

没有循环读写整个ddr,因为太大,时间会太长;

从现象上来看,数据没有丢失,但是读取的时候有时错误或者是读不到;

请问下,大概会有什么原因导致这样的问题呢?

Jian Zhou:

回复 shan xu2:

不知道你有没有做过DDR3的software leveling :

http://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/t/53263.aspx

shan xu2:

回复 Jian Zhou:

做了software leveling后确实OK了,只是改了ddr的time1,time2,time3的配置和相关的几个寄存器,SDRAM_CONFIG寄存器还是和楼上的配置一样

只是现在第一次烧录后开机,会在

UBIFS: start fixing up free space

这个阶段停留稍微长点,几秒钟的样子

Jian Zhou:

回复 shan xu2:

之后就没有那么长的时间了么?一般烧录后第一次启动文件系统都会慢一些。

这个DDR3数据清空的问题算是解决了么?

赞(0)
未经允许不得转载:TI中文支持网 » AM3352上ddr3(MT41J256M16 – 32 Meg x 16 x 8 banks)在程序运行的时候数据被清空了
分享到: 更多 (0)