测试DDR2,该如何解决
测试DDR2
用三星S5PV210做了几块板子,加载完程序后,发现跑不起来,怀疑是DDR2的问题。想在代码中加入测试DDR2。不知道怎么加,用的是WINCE操作系统,有谁弄过这块,帮下忙哦,谢谢。
------解决方案--------------------
這種東西當然是要加在C:\WINCE600\PLATFORM\SMDKV210\SRC\BOOTLOADER\STEPLDR\main.c裡面
不然是要怎嚜測試整各DRAM
void main(void)
{
Port_Init();
Led_Display_Off(1); //RED
Led_Display_Off(2); //BLUE
Led_Display_On(3); //GREEN
if(!DRAM_Test())
{
Led_Display_On(1); //RED
RAM_Error();
}
}
BOOL DRAM_Test(void);
unsigned long* DRAM_DeviceTest(unsigned long *BaseAddr, unsigned long nBytes);
unsigned long* DRAM_AddrBusTest(unsigned long *BaseAddr, unsigned long nBytes);
unsigned long DRAM_DataBusTest(unsigned long *Addr);
//*----------------------------------------
//* \fn DRAM_DataBusTest
//* \brief Test the DRAM Data Bus
//* return succeed return 0 / fail return Data Value
//*----------------------------------------
unsigned long DRAM_DataBusTest(unsigned long *Addr)
{
unsigned long pattern;
for(pattern = 1; pattern != 0; pattern <<= 1)
{
*Addr = pattern;
Addr[1] = ~pattern;
if(*Addr != pattern)
return pattern;
}
return 0;
}
//*----------------------------------------
//* \fn DRAM_AddrBusTest
//* \brief Test the DRAM Address Bus
//* return succeed return 0 / Fail return Error Address
//* 測試區塊盡可能為2的次方
//*----------------------------------------
unsigned long* DRAM_AddrBusTest(unsigned long *BaseAddr, unsigned long nBytes)
{
unsigned long offset,testOffset;
unsigned long pattern = 0xAAAAAAAA;
unsigned long antipattern = 0x55555555;
unsigned long addressMask = (nBytes - 1)>>2; /*設定用來當成停止狀況,一次測試4個Bytes*/
for(offset = 4;(offset & addressMask) != 0; offset <<= 1)
{
BaseAddr[offset] = pattern;
}
/*檢查是否有其他位址線也出現1的訊號*/
BaseAddr[0] = antipattern;
for(offset = 4;(offset & addressMask) != 0; offset <<= 1)
{
if(BaseAddr[offset] != pattern)
return (unsigned long*) &BaseAddr[offset];
}
BaseAddr[0] = pattern;
/*檢查是否有短路或誤接到低電位的位址線*/
for(testOffset = 4;(testOffset & addressMask) != 0; testOffset <<= 1)
{
BaseAddr[testOffset] = antipattern;
for(offset = 4;(offset & addressMask) != 0; offset <<= 1)
用三星S5PV210做了几块板子,加载完程序后,发现跑不起来,怀疑是DDR2的问题。想在代码中加入测试DDR2。不知道怎么加,用的是WINCE操作系统,有谁弄过这块,帮下忙哦,谢谢。
------解决方案--------------------
這種東西當然是要加在C:\WINCE600\PLATFORM\SMDKV210\SRC\BOOTLOADER\STEPLDR\main.c裡面
不然是要怎嚜測試整各DRAM
void main(void)
{
Port_Init();
Led_Display_Off(1); //RED
Led_Display_Off(2); //BLUE
Led_Display_On(3); //GREEN
if(!DRAM_Test())
{
Led_Display_On(1); //RED
RAM_Error();
}
}
BOOL DRAM_Test(void);
unsigned long* DRAM_DeviceTest(unsigned long *BaseAddr, unsigned long nBytes);
unsigned long* DRAM_AddrBusTest(unsigned long *BaseAddr, unsigned long nBytes);
unsigned long DRAM_DataBusTest(unsigned long *Addr);
//*----------------------------------------
//* \fn DRAM_DataBusTest
//* \brief Test the DRAM Data Bus
//* return succeed return 0 / fail return Data Value
//*----------------------------------------
unsigned long DRAM_DataBusTest(unsigned long *Addr)
{
unsigned long pattern;
for(pattern = 1; pattern != 0; pattern <<= 1)
{
*Addr = pattern;
Addr[1] = ~pattern;
if(*Addr != pattern)
return pattern;
}
return 0;
}
//*----------------------------------------
//* \fn DRAM_AddrBusTest
//* \brief Test the DRAM Address Bus
//* return succeed return 0 / Fail return Error Address
//* 測試區塊盡可能為2的次方
//*----------------------------------------
unsigned long* DRAM_AddrBusTest(unsigned long *BaseAddr, unsigned long nBytes)
{
unsigned long offset,testOffset;
unsigned long pattern = 0xAAAAAAAA;
unsigned long antipattern = 0x55555555;
unsigned long addressMask = (nBytes - 1)>>2; /*設定用來當成停止狀況,一次測試4個Bytes*/
for(offset = 4;(offset & addressMask) != 0; offset <<= 1)
{
BaseAddr[offset] = pattern;
}
/*檢查是否有其他位址線也出現1的訊號*/
BaseAddr[0] = antipattern;
for(offset = 4;(offset & addressMask) != 0; offset <<= 1)
{
if(BaseAddr[offset] != pattern)
return (unsigned long*) &BaseAddr[offset];
}
BaseAddr[0] = pattern;
/*檢查是否有短路或誤接到低電位的位址線*/
for(testOffset = 4;(testOffset & addressMask) != 0; testOffset <<= 1)
{
BaseAddr[testOffset] = antipattern;
for(offset = 4;(offset & addressMask) != 0; offset <<= 1)