Files
elec_capture/source/nand/nandtester.c

209 lines
4.6 KiB
C
Raw Normal View History

#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;
}