找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3419|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

STM32 fats0.13a SDIO移植成功代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:276663 發(fā)表于 2018-3-2 09:36 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
根據(jù)論壇的帖子http://www.torrancerestoration.com/bbs/dpj-88507-1.html
自己移植了最新版FATS  0.13a
測試成功,可以讀寫文件,追加文件。
部分代碼如下
  1. void SD_ReadTest(void)
  2. {
  3.     unsigned int offset = 0;
  4.     disk_initialize(DEV_MMC);
  5.     res = f_mount(&fs,"1:",0);    // 掛載
  6.     res = f_open(&fsrc,"1:/KILLL.BAT",FA_OPEN_EXISTING | FA_READ); // 打開文件
  7.     if(res != FR_OK)
  8.     {
  9.         printf("%d ",res);
  10.         printf("open error\r\n");
  11.     }
  12.     else
  13.     {               
  14.         file_size = f_size(&fsrc);               
  15.         printf("filesize:%d\r\n",file_size);
  16.         do{
  17.             res = f_lseek(&fsrc,offset);   // 指針往后推128
  18.             res = f_read(&fsrc,buffer,sizeof(buffer),&br);   
  19.             if(res == FR_OK)
  20.             {                     
  21.                 USART1_SendBuf(buffer,br);
  22.                 printf("\r\n");        
  23.             }
  24.             else
  25.             {
  26.                 printf("read fils err\r\n");
  27.             }
  28.             offset += 128;            
  29.             file_size -= 128;
  30.         }while(file_size>128);
  31.         if(file_size>0)
  32.         {
  33.             res = f_read(&fsrc,buffer,file_size,&br);   
  34.             if(res == FR_OK)
  35.             {                     
  36.                 USART1_SendBuf(buffer,br);               
  37.                 printf("EndOfFile\r\n");        
  38.             }
  39.             else
  40.             {
  41.                 printf("read fils err\r\n");
  42.             }
  43.         }
  44.         f_close(&fsrc);// 關(guān)閉文件
  45.     }
  46.     f_mount(NULL,"1:",0); //卸載磁盤
  47. }   
復(fù)制代碼
獲取文件長度并串口輸出文件內(nèi)容,適用于讀取bin文件做系統(tǒng)軟件升級IAP.


  1. FRESULT open_append (
  2.     FIL* fp,            /* [OUT] File object to create */
  3.     const char* path    /* [IN]  File name to be opened */
  4. )
  5. {
  6.     FRESULT fr;

  7.     /* Opens an existing file. If not exist, creates a new file. */
  8.     fr = f_open(fp, path, FA_WRITE | FA_OPEN_ALWAYS);
  9.     if (fr == FR_OK) {
  10.         /* Seek to end of the file to append data */
  11.         fr = f_lseek(fp, f_size(fp));
  12.         if (fr != FR_OK)
  13.             f_close(fp);
  14.     }
  15.     return fr;
  16. }

  17. void SD_WriteTest(void)
  18. {
  19.     unsigned char write_f[20]={"ming write file test"};
  20.     disk_initialize(0);
  21.     res = f_mount(&fs,"1:",0);  
  22.     res = open_append(&fdst,"1:/testa.txt");
  23.    
  24.   //  res = f_open(&fdst, "1:/testa.txt", FA_CREATE_ALWAYS | FA_WRITE);   
  25.     if(res != FR_OK)
  26.     {
  27.         printf("open error\r\n");
  28.     }
  29.     else
  30.     {
  31.         f_printf(&fdst, "%d\n", runtime);  
  32.         //res = f_write(&fdst,write_f,sizeof(write_f),&bw);
  33.         //res = f_puts("hello",&fdst);
  34.         if(res <0)
  35.         {
  36.             printf("write err! %d\r\n",res);                       
  37.         }
  38.         else
  39.         {
  40.             printf("write ok! %d\r\n",res);   
  41.         }
  42.         f_close(&fdst);
  43.     }
  44.     f_mount(NULL,"1:",0);// 卸載
  45.     printf("write test passed! \r\n");
  46. }
復(fù)制代碼
文件內(nèi)容追加,適合保存日志log


  1. void ReadSDFile(void)
  2. {
  3. //  FIL file;
  4.   FILINFO finfo;
  5.   DIR dirs;
  6.   int i_name=0;
  7. //  char *fn;
  8.   f_mount(&fs,"1:",1);
  9.   res =  f_opendir(&dirs, "1:/");
  10.   if (res == FR_OK)
  11.   {
  12.     while (f_readdir(&dirs, &finfo) == FR_OK)
  13.         {
  14.           if (finfo.fattrib & AM_ARC)
  15.       {
  16.         if(!finfo.fname[0])        break;  //文件名不為空,如果為空,則表明該目錄下面的文件已經(jīng)讀完了                           
  17.                 stringcopy(buff_filename[i_name], (BYTE*)finfo.fname);
  18.                 i_name++;
  19.         file_cnt = i_name;        
  20.           }
  21.         }
  22.     f_close(&fsrc);
  23.     i_name = 0;
  24.     do{        
  25.         //USART1_SendBuf(buff_filename[i_name],br);               
  26.         printf("%s\r\n",buff_filename[i_name]);           
  27.         i_name++;
  28.         file_cnt--;
  29.     }while(file_cnt);
  30.   }
  31.   f_mount(NULL,"1:",1);
  32. }
復(fù)制代碼
獲取文件列表。

STM32_SDIO_FAT13.zip (1.44 MB, 下載次數(shù): 39)

如果需要解壓密碼,請雙擊壓縮包或右鍵壓縮包查看注釋。

評分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:654855 發(fā)表于 2021-4-25 22:57 | 只看該作者
這個是單線的SDIO,且是MMC卡,如果是4線,8線SDIO,DMA操作,SD卡都需要自行修改
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表