stm32f2xx外接128M的nand flash挂载文件系统问题(源码)

2019-03-23 18:12发布

nand flash的读写测试和挂载文件系统的SD卡已经调试成功,因为SD卡读写速度太慢,导致图片解码程序的显示速度太慢,明显下一张图片慢慢刷新。现在想要将nand flash作为存储器来存储图片,然后解码显示。可是问题出现了,将文件系统FATFS移植到nandflash后,调用格式化函数f_mkfs(0,1,4096) 时,一直返回“格式化失败”。
  1. void test_fatfs(void)
  2. {
  3.     FATFS fs;
  4.         FIL fl;
  5.         FATFS *pfs;
  6.         DWORD clust;
  7.         unsigned int r,w,i;
  8.         FRESULT  res;

  9. //        NF_CHKDSK(0,1024);
  10.         display_page(0,0);
  11.        
  12. // for mount挂载       
  13.         res=f_mount(0,&fs);
  14.         printf("f_mount=%x ",res);
  15.        
  16. // for format格式化
  17.         res=f_mkfs(0,1,4096);        //新NANDFLASH必须格式化 !!!
  18.         printf("f_mkfs=%x ",res);

  19. // for
  20.         pfs=&fs;
  21.         res = f_getfree("/", &clust, &pfs);
  22. //        res = f_getfree("", &clust, &pfs);

  23.         printf("f_getfree=%x ",res);
  24.         printf(" %lu MB total drive space."
  25.                    " %lu MB available. ",
  26.                         (DWORD)(pfs->max_clust - 2) * pfs->csize /2/1024,
  27.                         clust * pfs->csize /2/1024);
  28.        
  29. // for read
  30.     res=f_open(&fl,"/test2.dat",FA_OPEN_EXISTING | FA_READ);
  31. //        res=f_open(&fl,"test.txt",FA_OPEN_EXISTING | FA_READ);
  32.     printf("f_open=%x ",res);
  33.         for(i=0;i<2;i++)
  34.         {
  35.                 for(r = 0; r < NAND_PAGE_SIZE; r++)
  36.                 {
  37.                         RxBuffer[r]= 0xff;
  38.                 }
  39.                
  40.                 res=f_read(&fl,RxBuffer,NAND_PAGE_SIZE,&r);
  41.                 printf("f_read=%x ",res);
  42.                 if(res || r == 0)break;
  43.                 for(r = 0; r < NAND_PAGE_SIZE; r++)
  44.             {
  45.                 printf("D[%08x]=%02x ",(i*NAND_PAGE_SIZE+r),RxBuffer[r]);
  46.                 if((r%8)==7)
  47.                 {printf(" ");}
  48.             }
  49.             
  50.         }
  51.         f_close(&fl);
  52. // for write
  53.         res=f_open(&fl,"/test2.dat",FA_CREATE_ALWAYS | FA_WRITE);
  54. //        res=f_open(&fl,"test.txt",FA_CREATE_ALWAYS | FA_WRITE);
  55.         printf("f_open=%x ",res);
  56.         for(i=0;i<2;i++)
  57.         {
  58.                 for(w = 0; w < NAND_PAGE_SIZE; w++)
  59.                 {
  60.                         TxBuffer[w]=((w<<0)&0xff);
  61.                 }
  62.         res=f_write(&fl,TxBuffer,NAND_PAGE_SIZE,&w);
  63.         printf("f_write=%x ",res);
  64.                 if(res || w
  65.                
  66.         }
  67.         f_close(&fl);
  68.        
  69. // for umount
  70.         f_mount(0,NULL);
  71. }               
复制代码 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。