This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
TI的工程师你们好!在 memory_test中的KeyStone_memory_bus_test()函数中调用Memory_Data_Bus_Test()函数其下的伪代码如下所示:
volatile unsigned long long *ulpAddressPointer;
uiBusWidth_64bit= (uiBusWidth+63)/64;
for(j=0; j<uiBusWidth_64bit; j++)
{
//write a pattern
*ulpAddressPointer = ulDataPattern[i];
ulpAddressPointer[uiBusWidth_64bit]= ~ulDataPattern[i]; //avoid floating bus
ulReadBack= *ulpAddressPointer;
if (ulReadBack != ulDataPattern[i])
{
printf(" Data pattern Test fails at 0x%8x, Write 0x%016llx, Readback 0x%016llx\n", (unsigned int)ulpAddressPointer, (ulDataPattern[i]), ulReadBack);
Memory_error_double_check((volatile unsigned long long *)ulpAddressPointer);
uiFailCount++;
}
其中uiBusWidth_64bit = 256*4,*ulpAddressPointer指向的地址是L2或者SMC。uiBusWidth_64bit是根据数据总线的宽度计算的吗?,*ulpAddressPointer = ulDataPattern[i];和 ulpAddressPointer[uiBusWidth_64bit]= ~ulDataPattern[i];中读写测试为什么要相隔uiBusWidth_64bit的地址,这么做是为了测试什么?
请参考看一下K1_STK_v1.1\K1_STK_v1.1\docs\KeyStone_1_Memory_STK_User's_Guide部分的说明。
Floating bus may “cheat” the test program. To avoid floating bus, a dummy write to another address with inverted value is inserted into original write and read operations.
For example:
write A to address X;
write inversion of A to address Y;
read value from address X;
In this way, the floating bus is avoided.