SDRAM的读写程序在购买的开发板上能正常,但是在我自己做的板子上会出现下面的情况:
1:读写程序程序如下时,会打印错误地址,观察memory串口,里面的数据没有写进去
for(block = 0;block <0x20000;block++)
{
for(i = 0;i<0x100;i++)
{
*((Uint8 *)(DM642_SDRAM_BASE + i+(block<<8))) = i;
}
/*read and check*/
/* for(i = 0;i<0x100;i++)
{
check = *((Uint8 *)(DM642_SDRAM_BASE + i+(block<<8)));
if(check != i)
{
for(;;)
{
printf("the error address is 0x%x\n",DM642_SDRAM_BASE + i+(block<<8));
break;
}
}
}
}
2:读写程序程序如下时,就不会打印错误地址,观察memory串口,里面的数据正常写进去
for(block = 0;block <0x20000;block++)
{
for(i = 0;i<0x100;i++)
{
*((Uint8 *)(DM642_SDRAM_BASE + i+(block<<8))) = i;
printf("0x%x\n",*((Uint8 *)(DM642_SDRAM_BASE + i+(block<<8)))); //比上段程序加了这一句
}
/*read and check*/
/* for(i = 0;i<0x100;i++)
{
if(check != i)
{
for(;;)
{
printf("the error address is 0x%x\n",DM642_SDRAM_BASE + i+(block<<8));
break;
}
}
}
}
程序2只是比程序1加了一句printf,然后就读写正常了,这个是什么原因呢?
Chris Meng:
Jacky,
你如果降低SDRAM的频率对你的问题是否有改善?
SDRAM是否有时序需要调整?
Jacky Yan:
回复 Chris Meng:
我的EMIF时钟设置为CPUCLK/6=100MHz,SDRAM的时钟接到ECLKOUT1上,SDRAM的时钟也就是100MHz,这个时钟好像不好再降低了。
因为这个时序设置在买回来的开发板上可以运行,然后我自己的板子就是照着这个板子做的。时序我也做了一些调整了,但是还是会有这个问题。
Chris Meng:
回复 Jacky Yan:
Jacky,
谢谢更新。原来是硬件焊接问题导致的不稳定。