⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 onenand_test.c

📁 提供S3C6400源例子代码.希望对大家有所帮助
💻 C
📖 第 1 页 / 共 5 页
字号:

		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 + -