📄 onenand_test.c
字号:
pReadData2 = pReadDataBase2;
for(i=0 ; i<uPageSize2 ; i++)
{
uPageAddr = (uStartPageAddr2+i)%64;
uBlkAddr = uStartBlkAddr2 + (uStartPageAddr2+i)/64;
for(k=0; k<ONENAND_PAGESIZE/4; k++)
aWriteData[k] = k + (uPageAddr<<12) + (uBlkAddr<<20);
for(j=0 ; j<ONENAND_PAGESIZE/4 ; j++)
if(aWriteData[j] != *pReadData2++)
{
UART_Printf("[Write data : Read data] = [0x%08x : 0x%08x] \n", aWriteData[j], *pReadData2++);
UART_Getc();
uError = TRUE;
break;
}
uPageAddr++;
}
if(uError == FALSE)
{
if(eTest == eTest_Manual)
UART_Printf("2nd Cache Read Verify OK\n");
}
uError = FALSE;
pReadData3 = pReadDataBase3;
for(i=0 ; i<uPageSize3 ; i++)
{
uPageAddr = (uStartPageAddr3+i)%64;
uBlkAddr = uStartBlkAddr3 + (uStartPageAddr3+i)/64;
for(k=0; k<ONENAND_PAGESIZE/4; k++)
aWriteData[k] = k + (uPageAddr<<12) + (uBlkAddr<<20);
for(j=0 ; j<ONENAND_PAGESIZE/4 ; j++)
if(aWriteData[j] != *pReadData3++)
{
UART_Printf("[Write data : Read data] = [0x%08x : 0x%08x] \n", aWriteData[j], *pReadData3++);
UART_Getc();
uError = TRUE;
break;
}
uPageAddr++;
}
if(uError == FALSE)
{
if(eTest == eTest_Manual)
UART_Printf("3rd Cache Read Verify OK\n");
else
UART_Printf(".");
}
}
if(eTest == eTest_Manual)
UART_Printf("\n");
#endif
free(pReadDataBase1);
free(pReadDataBase2);
free(pReadDataBase3);
}
//////////
// Function Name : OneNandT_MultiPipelineReadByRandomDataRead
// Function Description : Sequencial pipelined reads followed by Random data read
// Input : None
// Version : v0.1
void OneNandT_MultiPipelineReadByRandomDataRead(eFunction_Test eTest, oFunctionT_AutoVar oAutoVar)
{
u32 i, j, uStartBlkAddr1, uStartBlkAddr2, uReadPageCnt, uBlkAddr;
u8 uStartPageAddr1, uStartPageAddr2;
u8 uPageSize1, uPageSize2, uPageSizeSum;
u32 *pReadData1, *pReadDataBase1, *pReadData2, *pReadDataBase2;
u32 uRandomReadSize1, uRandomReadSize2;
u8 uPageAddr;
UART_Printf("[OneNandT_MultiPipelineReadByRandomDataRead]\n");
uRandomReadSize1 = 3;
uRandomReadSize2 = 2;
UART_Printf("Input the first block number to read[0~%d] : \n", OneNand_Inform[g_OneNandContNum].uNumOfBlock-1);
uStartBlkAddr1 = UART_GetIntNum();
UART_Printf("Input the first page number to read[0~%d] : \n", OneNand_Inform[g_OneNandContNum].uNumOfPage-1);
uStartPageAddr1 = (u8)UART_GetIntNum();
UART_Printf("Input the page size to read [more than %d ] : \n", uRandomReadSize1+1);
uPageSize1 = (u8)UART_GetIntNum();
UART_Printf("Input the second block number to read[0~%d] : \n", OneNand_Inform[g_OneNandContNum].uNumOfBlock-1);
uStartBlkAddr2 = UART_GetIntNum();
UART_Printf("Input the second page number to read[0~%d] : \n", OneNand_Inform[g_OneNandContNum].uNumOfPage-1);
uStartPageAddr2 = (u8)UART_GetIntNum();
UART_Printf("Input the page size to read [more than %d ] : \n", uRandomReadSize2+1);
uPageSize2 = (u8)UART_GetIntNum();
pReadDataBase1 = (u32 *)malloc(ONENAND_PAGESIZE*uPageSize1);
if(pReadDataBase1 == 0)
{
UART_Printf("Memory allocation Error...\n");
return;
}
pReadData1 = pReadDataBase1;
pReadDataBase2 = (u32 *)malloc(ONENAND_PAGESIZE*uPageSize2);
if(pReadDataBase2 == 0)
{
UART_Printf("Memory allocation Error...\n");
return;
}
pReadData2 = pReadDataBase2;
ONENAND_PipelineReadAhead(g_OneNandContNum, uStartBlkAddr1, uStartPageAddr1, uPageSize1);
ONENAND_PipelineReadAhead(g_OneNandContNum, uStartBlkAddr2, uStartPageAddr2, uPageSize2);
uReadPageCnt = 0;
uBlkAddr = uStartBlkAddr1;
uPageAddr = uStartPageAddr1;
OneNandT_oIntFlag.IntActInt_Count = 0;
uPageSizeSum = uPageSize1 + uPageSize2;
while(uReadPageCnt < uRandomReadSize1)
{
ONENAND_ReadPageForCacheRead(g_OneNandContNum, uBlkAddr, uPageAddr, (u32*)pReadData1, uPageSizeSum);
pReadData1 += ONENAND_PAGESIZE/4;
//Page Address刘啊 犬牢 鞘夸???
uPageAddr++;
if(uPageAddr == OneNand_Inform[g_OneNandContNum].uNumOfPage)
{
uPageAddr = 0;
uBlkAddr++;
}
uReadPageCnt++;
//for(i=0; i<ONENAND_PAGESIZE/4; i++)
// aReadData[i] = 0;
}
uReadPageCnt = 0;
uBlkAddr = uStartBlkAddr2;
uPageAddr = uStartPageAddr2;
while(uReadPageCnt < uRandomReadSize2)
{
ONENAND_ReadPageForCacheRead(g_OneNandContNum, uBlkAddr, uPageAddr, (u32*)pReadData2, uPageSizeSum);
pReadData2 += ONENAND_PAGESIZE/4;
uPageAddr++;
if(uPageAddr == OneNand_Inform[g_OneNandContNum].uNumOfPage)
{
uPageAddr = 0;
uBlkAddr++;
}
uReadPageCnt++;
}
uReadPageCnt = 0;
uBlkAddr = uStartBlkAddr1;
uPageAddr = uStartPageAddr1 + uRandomReadSize1;
while(uReadPageCnt < ( uPageSize1- uRandomReadSize1))
{
ONENAND_ReadPageForCacheRead(g_OneNandContNum, uBlkAddr, uPageAddr, (u32*)pReadData1, uPageSizeSum);
pReadData1 += ONENAND_PAGESIZE/4;
uPageAddr++;
if(uPageAddr == OneNand_Inform[g_OneNandContNum].uNumOfPage)
{
uPageAddr = 0;
uBlkAddr++;
}
uReadPageCnt++;
}
uReadPageCnt = 0;
uBlkAddr = uStartBlkAddr2;
uPageAddr = uStartPageAddr2 + uRandomReadSize2;
while(uReadPageCnt < (uPageSize2 - uRandomReadSize2))
{
ONENAND_ReadPageForCacheRead(g_OneNandContNum, uBlkAddr, uPageAddr, (u32*)pReadData2, uPageSizeSum);
pReadData2 += ONENAND_PAGESIZE/4;
uPageAddr++;
if(uPageAddr == OneNand_Inform[g_OneNandContNum].uNumOfPage)
{
uPageAddr = 0;
uBlkAddr++;
}
uReadPageCnt++;
}
#if 0
pReadData1 = pReadDataBase1;
for(i=0 ; i<uPageSize1 ; i++)
{
uPageAddr = (uStartPageAddr1+i)%64;
uBlkAddr = uStartBlkAddr1 + (uStartPageAddr1+i)/64;
UART_Printf("\n");
UART_Printf("[%d block, %d page]", uBlkAddr, uPageAddr);
for(j=0 ; j<ONENAND_PAGESIZE/4 ; j++)
{
if(!(j%4))
{
UART_Printf("\n");
UART_Printf("0x%04x : ",i*4);
}
UART_Printf("0x%08x ", *pReadData1++);
}
UART_Printf("\n");
}
pReadData2 = pReadDataBase2;
for(i=0 ; i<uPageSize2 ; i++)
{
uPageAddr = (uStartPageAddr2+i)%64;
uBlkAddr = uStartBlkAddr2 + (uStartPageAddr2+i)/64;
UART_Printf("\n");
UART_Printf("[%d block, %d page]", uBlkAddr, uPageAddr);
for(j=0 ; j<ONENAND_PAGESIZE/4 ; j++)
{
if(!(j%4))
{
UART_Printf("\n");
UART_Printf("0x%04x : ",i*4);
}
UART_Printf("0x%08x ", *pReadData2++);
}
UART_Printf("\n");
}
#else
{
u32 k, uError = FALSE;
u32 aWriteData[ONENAND_PAGESIZE/4] = {0, };
pReadData1 = pReadDataBase1;
for(i=0 ; i<uPageSize1 ; i++)
{
uPageAddr = (uStartPageAddr1+i)%64;
uBlkAddr = uStartBlkAddr1 + (uStartPageAddr1+i)/64;
for(k=0; k<ONENAND_PAGESIZE/4; k++)
aWriteData[k] = k + (uPageAddr<<12) + (uBlkAddr<<20);
for(j=0 ; j<ONENAND_PAGESIZE/4 ; j++)
if(aWriteData[j] != *pReadData1++)
{
UART_Printf("[Write data : Read data] = [0x%08x : 0x%08x] \n", aWriteData[j], *pReadData1++);
uError = TRUE;
break;
}
uPageAddr++;
}
if(uError == FALSE)
UART_Printf("1st Cache Read Verify OK\n");
uError = FALSE;
pReadData2 = pReadDataBase2;
for(i=0 ; i<uPageSize2 ; i++)
{
uPageAddr = (uStartPageAddr2+i)%64;
uBlkAddr = uStartBlkAddr2 + (uStartPageAddr2+i)/64;
for(k=0; k<ONENAND_PAGESIZE/4; k++)
aWriteData[k] = k + (uPageAddr<<12) + (uBlkAddr<<20);
for(j=0 ; j<ONENAND_PAGESIZE/4 ; j++)
if(aWriteData[j] != *pReadData2++)
{
UART_Printf("[Write data : Read data] = [0x%08x : 0x%08x] \n", aWriteData[j], *pReadData2++);
uError = TRUE;
break;
}
uPageAddr++;
}
if(uError == FALSE)
UART_Printf("2nd Cache Read Verify OK\n");
}
#endif
UART_Printf("\n");
free(pReadDataBase1);
free(pReadDataBase2);
}
//////////
// Function Name : OneNandT_MultiPipelineReadInterleavedWithRandomDataRead
// Function Description : Sequencial pipelined reads interleaved with random data reads
// Input : None
// Version : v0.1
void OneNandT_MultiPipelineReadInterleavedWithRandomDataRead(eFunction_Test eTest, oFunctionT_AutoVar oAutoVar)
{
u32 i, j, uStartBlkAddr1, uStartBlkAddr2, uReadPageCnt, uBlkAddr;
u8 uStartPageAddr1, uStartPageAddr2;
u8 uPageSize1, uPageSize2, uPageSizeSum;
u32 *pReadData1, *pReadDataBase1, *pReadData2, *pReadDataBase2;
u32 uRandomReadSize1, uRandomReadSize2;
u8 uPageAddr;
UART_Printf("[OneNandT_MultiPipelineReadInterleavedWithRandomDataRead]\n");
uRandomReadSize1 = 3;
uRandomReadSize2 = 2;
UART_Printf("Input the first block number to read[0~%d] : \n", OneNand_Inform[g_OneNandContNum].uNumOfBlock-1);
uStartBlkAddr1 = UART_GetIntNum();
UART_Printf("Input the first page number to read[0~%d] : \n", OneNand_Inform[g_OneNandContNum].uNumOfPage-1);
uStartPageAddr1 = (u8)UART_GetIntNum();
UART_Printf("Input the page size to read [more than %d ] : \n", uRandomReadSize1+1);
uPageSize1 = (u8)UART_GetIntNum();
UART_Printf("Input the second block number to read[0~%d] : \n", OneNand_Inform[g_OneNandContNum].uNumOfBlock-1);
uStartBlkAddr2 = UART_GetIntNum();
UART_Printf("Input the second page number to read[0~%d] : \n", OneNand_Inform[g_OneNandContNum].uNumOfPage-1);
uStartPageAddr2 = (u8)UART_GetIntNum();
UART_Printf("Input the page size to read [more than %d ] : \n", uRandomReadSize2+1);
uPageSize2 = (u8)UART_GetIntNum();
pReadDataBase1 = (u32 *)malloc(ONENAND_PAGESIZE*uPageSize1);
if(pReadDataBase1 == 0)
{
UART_Printf("Memory allocation Error...\n");
return;
}
pReadData1 = pReadDataBase1;
pReadDataBase2 = (u32 *)malloc(ONENAND_PAGESIZE*uPageSize2);
if(pReadDataBase2 == 0)
{
UART_Printf("Memory allocation Error...\n");
return;
}
pReadData2 = pReadDataBase2;
ONENAND_PipelineReadAhead(g_OneNandContNum, uStartBlkAddr1, uStartPageAddr1, uPageSize1);
uReadPageCnt = 0;
uBlkAddr = uStartBlkAddr1;
uPageAddr = uStartPageAddr1;
OneNandT_oIntFlag.IntActInt_Count = 0;
uPageSizeSum = uPageSize1 + uPageSize2;
while(uReadPageCnt < uRandomReadSize1)
{
ONENAND_ReadPageForCacheRead(g_OneNandContNum, uBlkAddr, uPageAddr, (u32*)pReadData1, uPageSizeSum);
pReadData1 += ONENAND_PAGESIZE/4;
//Page Address刘啊 犬牢 鞘夸???
uPageAddr++;
if(uPageAddr == OneNand_Inform[g_OneNandContNum].uNumOfPage)
{
uPageAddr = 0;
uBlkAddr++;
}
uReadPageCnt++;
//for(i=0; i<ONENAND_PAGESIZE/4; i++)
// aReadData[i] = 0;
}
ONENAND_PipelineReadAhead(g_OneNandContNum, uStartBlkAddr2, uStartPageAddr2, uPageSize2);
uReadPageCnt = 0;
uBlkAddr = uStartBlkAddr2;
uPageAddr = uStartPageAddr2;
while(uReadPageCnt < uRandomReadSize2)
{
ONENAND_ReadPageForCacheRead(g_OneNandContNum, uBlkAddr, uPageAddr, (u32*)pReadData2, uPageSizeSum);
pReadData2 += ONENAND_PAGESIZE/4;
uPageAddr++;
if(uPageAddr == OneNand_Inform[g_OneNandContNum].uNumOfPage)
{
uPageAddr = 0;
uBlkAddr++;
}
uReadPageCnt++;
}
uReadPageCnt = 0;
uBlkAddr = uStartBlkAddr1;
uPageAddr = uStartPageAddr1 + uRandomReadSize1;
while(uReadPageCnt < ( uPageSize1- uRandomReadSize1))
{
ONENAND_ReadPageForCacheRead(g_OneNandContNum, uBlkAddr, uPageAddr, (u32*)pReadData1, uPageSizeSum);
pReadData1 += ONENAND_PAGESIZE/4;
uPageAddr++;
if(uPageAddr == OneNand_Inform[g_OneNandContNum].uNumOfPage)
{
uPageAddr = 0;
uBlkAddr++;
}
uReadPageCnt++;
}
uReadPageCnt = 0;
uBlkAddr = uStartBlkAddr2;
uPageAddr = uStartPageAddr2 + uRandomReadSize2;
while(uReadPageCnt < (uPageSize2 - uRandomReadSize2))
{
ONENAND_ReadPageForCacheRead(g_OneNandContNum, uBlkAddr, uPageAddr, (u32*)pReadData2, uPageSizeSum);
pReadData2 += ONENAND_PAGESIZE/4;
uPageAddr++;
if(uPageAddr == OneNand_Inform[g_OneNandContNum].uNumOfPage)
{
uPageAddr = 0;
uBlkAddr++;
}
uReadPageCnt++;
}
#if 0
pReadData1 = pReadDataBase1;
for(i=0 ; i<uPageSize1 ; i++)
{
uPageAddr = (uStartPageAddr1+i)%64;
uBlkAddr = uStartBlkAddr1 + (uStartPageAddr1+i)/64;
UART_Printf("\n");
UART_Printf("[%d block, %d page]", uBlkAddr, uPageAddr);
for(j=0 ; j<ONENAND_PAGESIZE/4 ; j++)
{
if(!(j%4))
{
UART_Printf("\n");
UART_Printf("0x%04x : ",i*4);
}
UART_Printf("0x%08x ", *pReadData1++);
}
UART_Printf("\n");
}
pReadData2 = pReadDataBase2;
for(i=0 ; i<uPageSize2 ; i++)
{
uPageAddr = (uStartPageAddr2+i)%64;
uBlkAddr = uStartBlkAddr2 + (uStartPageAddr2+i)/64;
UART_Printf("\n");
UART_Printf("[%d block, %d page]", uBlkAddr, uPageAddr);
for(j=0 ; j<ONENAND_PAGESIZE/4 ; j++)
{
if(!(j%4))
{
UART_Printf("\n");
UART_Printf("0x%04x : ",i*4);
}
UART_Printf("0x%08x ", *pReadData2++);
}
UART_Printf("\n");
}
#else
{
u32 k, uError = FALSE;
u32 aWriteData[ONENAND_PAGESIZE/4] = {0, };
pReadData1 = pReadDataBase1;
for(i=0 ; i<uPageSize1 ; i++)
{
uPageAddr = (uStartPageAddr1+i)%64;
uBlkAddr = uStartBlkAddr1 + (uStartPageAddr
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -