sd卡驅動 FAT檔案系統(三)

2021-04-28 09:06:38 字數 1131 閱讀 3142

4、測試和使用

移植好以後,經過測試,可以順利讀出sd卡中的檔案,在使用過程中遇到兩個問題:

1>怎麼讀寫sd卡子目錄裡面的檔案?

在fatfs檔案系統中,檔案目錄相關的函式有

fresult f_opendir (dir*, const char*);                /* open an existing directory */

fresult f_readdir (dir*, filinfo*);                    /* read a directory item */

但是沒有提供切換當前目錄的函式。

在c語言中,轉換當前目錄的辦法有幾種:

1)使用庫函式中的chdir()函式,但是編譯器的庫不支援這個函式

2)fp=fopen("123",使用方式)。這種方式不知道在pc上能否這樣使用,在這裡也不可行

這個問題稍頭疼了一下,看過ff.c的原始碼之後,才算明白

fatfs檔案系統沒有切換目錄的函式,也沒有此功能,但是可以使用絕對路徑進行檔案讀寫。

要讀寫子目錄下面的檔案,只需在檔名前加上路徑。如"/test/test.dat"

2>檔案的寫入

根據fatfs**提供的document,測試了乙個檔案複製的函式:

static int copy_file(char *dst,char *src)

// close all files

f_close(&fsrc);

f_close(&fdst);

// unregister a work area before discard it

f_mount(0, null);

return 0;    

}執行結果,sd卡的檔案讀出正確,但是寫入異常,可以正確建立檔案,但是裡面沒有內容。經過單步跟蹤,發現是sd_raw.c檔案的sd_raw_write()函式的問題。

在執行到

if(length == write_length)

return 1;

語句時,總會直接返回,而沒有傳送後續的寫sd卡的命令。

問題找到了,解決起來就很容易,把這句話注釋掉,檔案寫入就正常了。這應該是sd_raw.c檔案的乙個bug。

整理之後,會把相關源**上傳。

SD卡和FAT檔案系統示例

1 初始化sd卡 我現在用的多是spi模式,所以在這裡只討論spi模式。在spi模式中,所有的指令都要求先將cs腳置0。所以這點,我在後面就不再強調了。cmd0,使sd卡從sd模式轉到spi模式。判斷返回值r0,如果不是card is not ready,說明硬體上有問題。cmd8,引數是0x000...

sd卡檔案系統

在手機tf卡經歷多次受損後 chksdk終於失去作用 換了讀卡器,先前的是用類似u盤的,後面是專業 先前手機執行狀態下解除安裝unmountsd卡再裝上測試可行 曾有多次 可能導致檔案系統內交叉鏈結太多 壞前有大量讀寫,直接執行解除安裝,結果檔案系統變成raw 尋求解答,發現原格式是fat檔案系統根...

製作SD卡檔案系統

一 先說一下關於檔案系統方面的東西 因為根檔案系統主要負責啟動執行的配置檔案,所以linux在啟動必須先掛載根檔案系統。這樣 在啟動後就可以自動或手動掛載其他檔案系統。常見的檔案系統型別 儲存裝置 檔案系統 型別 ramdram proc,sysfs,ranfs sdram rom各種 flash ...