Fatfs文件系統向文件寫內容出現f_write返回值爲1的問題

f_write返回值爲1,則就是FR_DISK_ERR,               /* (1) A hard error occurred in the low level disk I/O layer */

低級磁盤I/O層中發生硬錯誤

問題解決方式:

1 更改寫扇區函數

2 每次寫了之後(f_write)都加一個小延時

3 單次的傳輸是不是太大?  傳輸字節幾百的話是沒有問題的,現在傳輸的每次是4000多字節 就會出現這種錯誤的情況

4 看看頻率最多支持多少,從底往上都要看。SDIO有頻率,CPU有主頻,速度過快也不行啊,你最好折中速度,比如試試2000,再試試1000,或者3000等等。

5 重點檢查diskio.c文件中的disk_initialize()、disk_status()、disk_read()、disk_write()這幾個函數

6  將 FIL fil; 從函數外拿出,定義爲全局變量,即可解決。

7 確保f_mount已經掛載上了。確保硬件初始化完成了。

8 每次插入usb都會進行枚舉,我們要等到可執行用戶程序的時候才進行f_open

9 一開始時候低速,查詢卡信息發現是"SD V2HC",然後將主頻從400k提高10MBit時候經常出現FR_DISK_ERR,慢慢降低到1.7MBit時候就FR_OK了

10 f_write 一直失敗  FR_DISK_ERR,回來發現在 在diskio 的 disk_write 操作裏要加上卡的狀態等待。對的,根據你這個方法能解決FR_DISK_ERR錯誤,必須要等到SD卡處於TRANSFER的狀態纔行

11 移植工程時,FATFS文件和TF卡操作程序需要是同一個工程,FATFS文件不同工程裏面的操作不同,我從新更新了原始FATFS程序,問題解決。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章