214 lines
5.1 KiB
C
214 lines
5.1 KiB
C
|
#include "./nand/nandtest.h"
|
|||
|
#include "./nand/bsp_nand.h"
|
|||
|
#include "./nand/ftl.h"
|
|||
|
#include "string.h"
|
|||
|
#include "./malloc/malloc.h"
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>NANDijһҳд<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param pagenum:Ҫд<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD>ַ
|
|||
|
* @param colnum:Ҫд<EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD>ʼ<EFBFBD>е<EFBFBD>ַ(ҳ<EFBFBD>ڵ<EFBFBD>ַ)
|
|||
|
* @param writebytes:Ҫд<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С<EFBFBD><EFBFBD>MT29F16G<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ4320<EFBFBD><EFBFBD>MT29F4G<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ2112
|
|||
|
* @retval 0,<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>,ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;1,<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>,<EFBFBD>в<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
uint8_t test_writepage(uint32_t pagenum,uint16_t colnum,uint16_t writebytes)
|
|||
|
{
|
|||
|
uint8_t *pbuf;
|
|||
|
uint8_t sta=0;
|
|||
|
uint16_t i=0;
|
|||
|
pbuf=mymalloc(SRAMEX,5000);
|
|||
|
for(i=0;i<writebytes;i++)//<><D7BC>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>0<EFBFBD><30>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
pbuf[i]=i;
|
|||
|
}
|
|||
|
sta=NAND_WritePage(pagenum,colnum,pbuf,writebytes); //<2F><>nandд<64><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
myfree(SRAMEX,pbuf); //<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
|||
|
return sta;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ȡNANDijһҳָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param pagenum : Ҫ<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD>ַ
|
|||
|
* @param colnum : Ҫ<EFBFBD><EFBFBD>ȡ<EFBFBD>Ŀ<EFBFBD>ʼ<EFBFBD>е<EFBFBD>ַ(ҳ<EFBFBD>ڵ<EFBFBD>ַ)
|
|||
|
* @param readbytes : Ҫ<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С<EFBFBD><EFBFBD>MT29F16G<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ4320<EFBFBD><EFBFBD>MT29F4G<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ2112
|
|||
|
* @retval <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
uint8_t test_readpage(uint32_t pagenum, uint16_t colnum, uint16_t readbytes)
|
|||
|
{
|
|||
|
uint8_t *pbuf;
|
|||
|
uint8_t sta=0;
|
|||
|
uint16_t i=0;
|
|||
|
pbuf=mymalloc(SRAMEX,5000);
|
|||
|
sta=NAND_ReadPage(pagenum,colnum,pbuf,readbytes); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
if(sta==0||sta==NSTA_ECC1BITERR||sta==NSTA_ECC2BITERR)//<2F><>ȡ<EFBFBD>ɹ<EFBFBD>
|
|||
|
{
|
|||
|
printf("read page data is:\r\n");
|
|||
|
for(i=0;i<readbytes;i++)
|
|||
|
{
|
|||
|
printf("%d ",pbuf[i]); //<2F><><EFBFBD>ڴ<EFBFBD>ӡ<EFBFBD><D3A1>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
}
|
|||
|
printf("\r\nend\r\n");
|
|||
|
}
|
|||
|
myfree(SRAMEX,pbuf); //<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
|||
|
return sta;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>һҳ<EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һҳ,<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
* @note Դҳ<EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD>ҳҪ<EFBFBD><EFBFBD>ͬһ<EFBFBD><EFBFBD>Plane<EFBFBD>ڣ<EFBFBD>(ͬΪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>/ͬΪż<EFBFBD><EFBFBD>)
|
|||
|
* @param spnum : Դҳ<EFBFBD><EFBFBD>ַ
|
|||
|
* @param epnum : Ŀ<EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD>ַ
|
|||
|
* @param colnum : Ҫд<EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD>ʼ<EFBFBD>е<EFBFBD>ַ(ҳ<EFBFBD>ڵ<EFBFBD>ַ)
|
|||
|
* @param writebytes : Ҫд<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܳ<EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD>С
|
|||
|
* @retval <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
uint8_t test_copypageandwrite(uint32_t spnum, uint32_t dpnum, uint16_t colnum, uint16_t writebytes)
|
|||
|
{
|
|||
|
uint8_t *pbuf;
|
|||
|
uint8_t sta=0;
|
|||
|
uint16_t i=0;
|
|||
|
pbuf=mymalloc(SRAMEX,5000);
|
|||
|
for(i=0;i<writebytes;i++)//<><D7BC>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>0X80<38><30>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
pbuf[i]=i+0X80;
|
|||
|
}
|
|||
|
sta=NAND_CopyPageWithWrite(spnum,dpnum,colnum,pbuf,writebytes); //<2F><>nandд<64><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
myfree(SRAMEX,pbuf); //<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
|||
|
return sta;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ȡNANDijһҳSpare<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param pagenum : Ҫ<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD>ַ
|
|||
|
* @param colnum : Ҫ<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>spare<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ַ
|
|||
|
* @param readbytes : Ҫ<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С<EFBFBD><EFBFBD>MT29F16G<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ64<EFBFBD><EFBFBD>MT29F4G<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ224
|
|||
|
* @retval <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
uint8_t test_readspare(uint32_t pagenum, uint16_t colnum, uint16_t readbytes)
|
|||
|
{
|
|||
|
uint8_t *pbuf;
|
|||
|
uint8_t sta=0;
|
|||
|
uint16_t i=0;
|
|||
|
pbuf=mymalloc(SRAMEX,512);
|
|||
|
memset(pbuf,0,512);
|
|||
|
sta=NAND_ReadSpare(pagenum,colnum,pbuf,readbytes); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
if(sta==0)//<2F><>ȡ<EFBFBD>ɹ<EFBFBD>
|
|||
|
{
|
|||
|
printf("read spare data is:\r\n");
|
|||
|
for(i=0;i<readbytes;i++)
|
|||
|
{
|
|||
|
printf("%x ",pbuf[i]); //<2F><><EFBFBD>ڴ<EFBFBD>ӡ<EFBFBD><D3A1>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
}
|
|||
|
printf("\r\nend\r\n");
|
|||
|
}
|
|||
|
myfree(SRAMEX,pbuf); //<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
|||
|
return sta;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>λ<EFBFBD>ÿ<EFBFBD>ʼ,<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>NAND,ÿ<EFBFBD><EFBFBD>BLOCK<EFBFBD>ĵ<EFBFBD>һ<EFBFBD><EFBFBD>page<EFBFBD><EFBFBD>ǰ5<EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>
|
|||
|
* @param sblock : ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>block<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void test_readallblockinfo(uint32_t sblock)
|
|||
|
{
|
|||
|
uint8_t j=0;
|
|||
|
uint32_t i=0;
|
|||
|
uint8_t sta;
|
|||
|
uint8_t buffer[5];
|
|||
|
for(i=sblock;i<nand_dev.block_totalnum;i++)
|
|||
|
{
|
|||
|
printf("block %d info:",i);
|
|||
|
sta=NAND_ReadSpare(i*nand_dev.block_pagenum,0,buffer,5);//<2F><>ȡÿ<C8A1><C3BF>block,<2C><>һ<EFBFBD><D2BB>page<67><65>ǰ5<C7B0><35><EFBFBD>ֽ<EFBFBD>
|
|||
|
if(sta)printf("failed\r\n");
|
|||
|
for(j=0;j<5;j++)
|
|||
|
{
|
|||
|
printf("%x ",buffer[j]);
|
|||
|
}
|
|||
|
printf("\r\n");
|
|||
|
}
|
|||
|
}
|
|||
|
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
|||
|
/* FTL<54><4C><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD> */
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ,д<EFBFBD><EFBFBD>seccnt<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param secx : <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param secsize : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
|
|||
|
* @param seccnt : Ҫд<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
uint8_t test_ftlwritesectors(uint32_t secx, uint16_t secsize, uint16_t seccnt)
|
|||
|
{
|
|||
|
uint8_t *pbuf;
|
|||
|
uint8_t sta=0;
|
|||
|
uint32_t i=0;
|
|||
|
pbuf=mymalloc(SRAMEX,secsize*seccnt);
|
|||
|
for(i=0;i<secsize*seccnt;i++) //<><D7BC>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>0<EFBFBD><30>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
pbuf[i]=i;
|
|||
|
}
|
|||
|
sta=FTL_WriteSectors(pbuf,secx,secsize,seccnt); //<2F><>nandд<64><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
myfree(SRAMEX,pbuf); //<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
|||
|
return sta;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ,<EFBFBD><EFBFBD><EFBFBD><EFBFBD>seccnt<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param secx : <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param secsize : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
|
|||
|
* @param seccnt : Ҫ<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
uint8_t test_ftlreadsectors(uint32_t secx, uint16_t secsize, uint16_t seccnt)
|
|||
|
{
|
|||
|
uint8_t *pbuf;
|
|||
|
uint8_t sta=0;
|
|||
|
uint32_t i=0;
|
|||
|
pbuf=mymalloc(SRAMEX,secsize*seccnt);
|
|||
|
memset(pbuf,0,secsize*seccnt);
|
|||
|
sta=FTL_ReadSectors(pbuf,secx,secsize,seccnt); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
if(sta==0)
|
|||
|
{
|
|||
|
printf("read sec %d data is:\r\n",secx);
|
|||
|
for(i=0;i<secsize*seccnt;i++) //<><D7BC>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>0<EFBFBD><30>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
printf("%x ",pbuf[i]); //<2F><><EFBFBD>ڴ<EFBFBD>ӡ<EFBFBD><D3A1>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
}
|
|||
|
printf("\r\nend\r\n");
|
|||
|
}
|
|||
|
myfree(SRAMEX,pbuf); //<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
|||
|
return sta;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|