209 lines
4.6 KiB
C
209 lines
4.6 KiB
C
![]() |
#include "nandtester.h"
|
|||
|
#include "nand.h"
|
|||
|
#include "ftl.h"
|
|||
|
#include "string.h"
|
|||
|
//#include "usart.h"
|
|||
|
#include "stdlib.h"
|
|||
|
//////////////////////////////////////////////////////////////////////////////////
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
|||
|
//ALIENTEK STM32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
//NAND FLASH USMART<52><54><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>
|
|||
|
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2016/1/15
|
|||
|
//<2F>汾<EFBFBD><E6B1BE>V1.0
|
|||
|
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
|||
|
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2014-2024
|
|||
|
//All rights reserved
|
|||
|
//////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
|
|||
|
#define mymalloc(a,b) malloc(b)
|
|||
|
#define myfree(a,b) free(b)
|
|||
|
#define printf(...)
|
|||
|
|
|||
|
|
|||
|
//<2F><>NANDijһҳд<D2B3><D0B4>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
//pagenum:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>ַ
|
|||
|
//colnum:Ҫд<D2AA><D0B4><EFBFBD>Ŀ<EFBFBD>ʼ<EFBFBD>е<EFBFBD>ַ(ҳ<>ڵ<EFBFBD>ַ)
|
|||
|
//writebytes:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С<EFBFBD><D0A1>MT29F16G<36><47><EFBFBD><EFBFBD>Ϊ4320<32><30>MT29F4G<34><47><EFBFBD><EFBFBD>Ϊ2112
|
|||
|
u8 test_writepage(u32 pagenum,u16 colnum,u16 writebytes)
|
|||
|
{
|
|||
|
u8 *pbuf;
|
|||
|
u8 sta=0;
|
|||
|
u16 i=0;
|
|||
|
pbuf=mymalloc(SRAMIN,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(SRAMIN,pbuf); //<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
|||
|
return sta;
|
|||
|
}
|
|||
|
|
|||
|
//<2F><>ȡNANDijһҳָ<D2B3><D6B8><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
//pagenum:Ҫ<><D2AA>ȡ<EFBFBD><C8A1>ҳ<EFBFBD><D2B3>ַ
|
|||
|
//colnum:Ҫ<><D2AA>ȡ<EFBFBD>Ŀ<EFBFBD>ʼ<EFBFBD>е<EFBFBD>ַ(ҳ<>ڵ<EFBFBD>ַ)
|
|||
|
//readbytes:Ҫ<><D2AA>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С<EFBFBD><D0A1>MT29F16G<36><47><EFBFBD><EFBFBD>Ϊ4320<32><30>MT29F4G<34><47><EFBFBD><EFBFBD>Ϊ2112
|
|||
|
u8 test_readpage(u32 pagenum,u16 colnum,u16 readbytes)
|
|||
|
{
|
|||
|
u8 *pbuf;
|
|||
|
u8 sta=0;
|
|||
|
u16 i=0;
|
|||
|
pbuf=mymalloc(SRAMIN,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("%x ",pbuf[i]); //<2F><><EFBFBD>ڴ<EFBFBD>ӡ<EFBFBD><D3A1>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
}
|
|||
|
printf("\r\nend\r\n");
|
|||
|
}
|
|||
|
myfree(SRAMIN,pbuf); //<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
|||
|
return sta;
|
|||
|
}
|
|||
|
|
|||
|
//<2F><>һҳ<D2BB><D2B3><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һҳ,<2C><>д<EFBFBD><D0B4>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
//ע<><D7A2>:Դҳ<D4B4><D2B3>Ŀ<EFBFBD><C4BF>ҳҪ<D2B3><D2AA>ͬһ<CDAC><D2BB>Plane<6E>ڣ<EFBFBD>(ͬΪ<CDAC><CEAA><EFBFBD><EFBFBD>/ͬΪż<CEAA><C5BC>)
|
|||
|
//spnum:Դҳ<D4B4><D2B3>ַ
|
|||
|
//epnum:Ŀ<><C4BF>ҳ<EFBFBD><D2B3>ַ
|
|||
|
//colnum:Ҫд<D2AA><D0B4><EFBFBD>Ŀ<EFBFBD>ʼ<EFBFBD>е<EFBFBD>ַ(ҳ<>ڵ<EFBFBD>ַ)
|
|||
|
//writebytes:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD>ҳ<EFBFBD><D2B3>С
|
|||
|
u8 test_copypageandwrite(u32 spnum,u32 dpnum,u16 colnum,u16 writebytes)
|
|||
|
{
|
|||
|
u8 *pbuf;
|
|||
|
u8 sta=0;
|
|||
|
u16 i=0;
|
|||
|
pbuf=mymalloc(SRAMIN,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(SRAMIN,pbuf); //<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
|||
|
return sta;
|
|||
|
}
|
|||
|
|
|||
|
//<2F><>ȡNANDijһҳSpare<72><65>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
//pagenum:Ҫ<><D2AA>ȡ<EFBFBD><C8A1>ҳ<EFBFBD><D2B3>ַ
|
|||
|
//colnum:Ҫ<><D2AA>ȡ<EFBFBD><C8A1>spare<72><65><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
|
|||
|
//readbytes:Ҫ<><D2AA>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С<EFBFBD><D0A1>MT29F16G<36><47><EFBFBD><EFBFBD>Ϊ64<36><34>MT29F4G<34><47><EFBFBD><EFBFBD>Ϊ224
|
|||
|
u8 test_readspare(u32 pagenum,u16 colnum,u16 readbytes)
|
|||
|
{
|
|||
|
u8 *pbuf;
|
|||
|
u8 sta=0;
|
|||
|
u16 i=0;
|
|||
|
pbuf=mymalloc(SRAMIN,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(SRAMIN,pbuf); //<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
|||
|
return sta;
|
|||
|
}
|
|||
|
|
|||
|
//<2F><>ָ<EFBFBD><D6B8>λ<EFBFBD>ÿ<EFBFBD>ʼ,<2C><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>NAND,ÿ<><C3BF>BLOCK<43>ĵ<EFBFBD>һ<EFBFBD><D2BB>page<67><65>ǰ5<C7B0><35><EFBFBD>ֽ<EFBFBD>
|
|||
|
//sblock:ָ<><D6B8><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>block<63><6B><EFBFBD><EFBFBD>
|
|||
|
void test_readallblockinfo(u32 sblock)
|
|||
|
{
|
|||
|
u8 j=0;
|
|||
|
u32 i=0;
|
|||
|
u8 sta;
|
|||
|
u8 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>
|
|||
|
|
|||
|
//<2F><>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ,д<><D0B4>seccnt<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
//secx:<3A><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
//secsize:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
|
|||
|
//seccnt:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
u8 test_ftlwritesectors(u32 secx,u16 secsize,u16 seccnt)
|
|||
|
{
|
|||
|
u8 *pbuf;
|
|||
|
u8 sta=0;
|
|||
|
u32 i=0;
|
|||
|
pbuf=mymalloc(SRAMIN,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(SRAMIN,pbuf); //<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
|||
|
return sta;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//<2F><>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ,<2C><><EFBFBD><EFBFBD>seccnt<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
//secx:<3A><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
//secsize:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
|
|||
|
//seccnt:Ҫ<><D2AA>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
u8 test_ftlreadsectors(u32 secx,u16 secsize,u16 seccnt)
|
|||
|
{
|
|||
|
u8 *pbuf;
|
|||
|
u8 sta=0;
|
|||
|
u32 i=0;
|
|||
|
pbuf=mymalloc(SRAMIN,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(SRAMIN,pbuf); //<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
|||
|
return sta;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|