我的板子一片C6678外挂了4片三星公司的DDR3,最近参考DDR3初始化手册更改一下初始化参数,在进行DDR3读写测试的时候,发现地址线读写出错,而DDR3内存读写正确,百思不得其解,希望大神能够帮忙分析一下,下面是我改写的测试代码,不知道有没有什么问题。
int DataPatternTest(unsigned int uiStartAddress, unsigned int uiCount, unsigned int uiStep)
{
unsigned int i, j;
volatile unsigned long long *ulpAddressPointer;
volatile unsigned long long ulReadBack;
for(i = 0; i < PATTERN_SIZE; i++)
{
/* Write the pattern */
ulpAddressPointer = (unsigned long long *)uiStartAddress;
for(j = 0; j < uiCount; j++)
{
*ulpAddressPointer = ulDataPatternTable[i];
ulpAddressPointer += (uiStep);
}
/* Read back the data*/
ulpAddressPointer = (unsigned long long *)uiStartAddress;
for(j = 0; j < uiCount; j++)
{
ulReadBack = *ulpAddressPointer;
if(ulReadBack != ulDataPatternTable[i])
return 0;
ulpAddressPointer += (uiStep);
}
}
return 1;
}
int AddressTest(unsigned int uiStartAddress, unsigned int uiCount, unsigned int uiStep)
{
unsigned int i;
volatile unsigned long long *ulpAddressPointer;
volatile unsigned long long ulReadBack;
ulpAddressPointer = (unsigned long long*)uiStartAddress;
for(i = 0; i < uiCount; i++)
{
/* fill with address value */
*ulpAddressPointer = _itoll(((unsigned int)ulpAddressPointer)+4,(unsigned int)ulpAddressPointer);
ulpAddressPointer += (uiStep);
}
ulpAddressPointer = (unsigned long long*)uiStartAddress;
for(i = 0; i < uiCount; i++)
{
ulReadBack = *ulpAddressPointer;
if(ulReadBack != _itoll(((unsigned int)ulpAddressPointer)+4,(unsigned int)ulpAddressPointer))
return 0;
ulpAddressPointer += (uiStep);
}
return 1;
}