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

📄 main.c

📁 使用物理地址方式绕开mtd驱动进行nand flash的低级格式化和维护可以修复nand 坏块(不是物理损坏而是由于文件系统造成的坏块)
💻 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 + -