📄 main.c
字号:
/********************************************************************//*FILENAME: lfn.c */ /*FUNCTION: low level format nand flash in linux *//*DATA : 2007-1-18 10:22 *//*AUR : ZHANG YI FNEG *//*ORI : ZZVCOM *//********************************************************************//* 张驿风 2007-01-18 郑州市威科姆电子科技*//* Ver0.01 2007-01-20 can format a nand ic. Ver0.02 2007-01-23 add r,w command.*/#include<stdio.h>#include<stdlib.h>#include<string.h>#include "nand.h"char *version = (char*)"Ver0.02";u8 Buf[528];extern struct nand_info nand;u32 blockcount;void DisHexData(u8 *buf,u32 count);int main(int argc, char **argv){ u32 i,block; printf("lfn %s\r\n",version); printf("郑州市威科姆电子科技系统平台开发部.\r\n"); printf( __DATE__ "\r\n"); printf( __TIME__ "\r\n"); nand_init(); switch(read_nand_id()){ case 0x7520 :{ printf(NAND256W3A "\r\n"); blockcount = 2048; break; } default:{ printf("no find nand device,please check nand ic whether is ok.\r\n"); goto end; } } if(argc<2) { //不指定参数直接整片格式化。 for(i=0;i<blockcount;i++){ nand.block = i; nand.page = 0; nand.offset = 0; nand_block_erase(0); } goto end; } if((strcmp(argv[1],"?")==0)||(strcmp(argv[1],"h")==0)){ printf("format r n -- read the first page of block n.\r\n"); printf("format n -- format the block n.\r\n"); printf("format w n -- clear the first page of block n\r\n"); printf("format -- format the nand ic.\r\n"); printf("cbuilder@peoplemail.com.cn\r\n"); goto end; } if((strcmp(argv[1],"s")==0)||(strcmp(argv[1],"S")==0)){ //扫描整个芯片. printf("Scaning nand ic,'*' is a bad block '.' is ok block."); for(i=0;i<blockcount;i++){ nand.block = i; nand.page = 0; nand.offset = 0; if((i % 32)==0){ printf(" "); } if((i % 64)==0) { if(i>0){ printf(" %02dMB",i/64); } printf("\r\n"); } nand_read_page(0,Buf); if(Buf[517] !=0xFF){ printf("*"); }else{ printf("."); } } goto end; } if((strcmp(argv[1],"r")==0)||(strcmp(argv[1],"R")==0)){ //. if(argc<3) { printf("Please input block number for read.\r\n"); goto end; } nand.block = atoi(argv[2]); nand.page = 0; nand.offset = 0; nand_read_page(0,Buf); DisHexData(Buf,528); goto end; } if((strcmp(argv[1],"w")==0)||(strcmp(argv[1],"W")==0)){ //. if(argc<3) { printf("Please input block number for write.\r\n"); goto end; } for(i=0;i<528;i++){ Buf[i] = 0x00; } nand.block = atoi(argv[2]); nand.page = 0; nand.offset = 0; nand_write_page(0,Buf); nand_read_page(0,Buf); DisHexData(Buf,528); goto end; } block = atoi(argv[1]); //格式化指定的块 nand.block = block; nand.page = 0; nand.offset = 0; nand_block_erase(0); end: printf("\r\n"); nand_uninit(); return 0;}/**********************************************************************//* NAME : DisHexData *//* FUNCTION : format out the hex data as debug out mode *//* PARAMETER: *buf :will be display data buf pointer *//* count:will be display data length *//**********************************************************************/void DisHexData(u8 * buf ,u32 Count){ u32 i; printf(" "); for(i=0;i<16;i++){ if(i==8) printf(" "); printf("%02X ",i); } printf("\r\n "); for(i=0;i<16;i++){ printf("..."); } for(i=0;i<Count;i++){ if(((i%512)==0)&(i!=0)) printf("\r\n"); if((i%8)==0) printf(" "); if((i%16)==0){ printf("\r\n"); printf("%04X . ",i); } printf("%02X ",buf[i]); } //----------------------------------- printf("\r\n");}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -