聲明:該設(shè)計資料來自啊德Blog文章,希望給需要的朋友帶來幫助。
一、序言
經(jīng)常在網(wǎng)上、群里看到很多人問關(guān)于STM32的FATFS文件系統(tǒng)移植的問題,剛好自己最近也在調(diào)試這個程序,為了讓大家少走彎路,我把我的調(diào)試過程和方法也貢獻(xiàn)給大家。
二、FATFS簡介
FatFs Module是一種完全免費(fèi)開源的FAT文件系統(tǒng)模塊,專門為小型的嵌入式系統(tǒng)而設(shè)計。它完全用標(biāo)準(zhǔn)C語言編寫,所以具有良好的硬件平臺獨(dú)立性,可以移植到8051、PIC、AVR、SH、Z80、H8、ARM等系列單片機(jī)上而只需做簡單的修改。它支持FATl2、FATl6和FAT32,支持多個存儲媒介;有獨(dú)立的緩沖區(qū),可以對多個文件進(jìn)行讀/寫,并特別對8位單片機(jī)和16位單片機(jī)做了優(yōu)化。
三、移植準(zhǔn)備
1、FATFS源代碼的獲取,可以到官網(wǎng)下載:https://elm-chan.org/fsw/ff/00index_e.html 最新版本是R0.09版本,我們就移植這個版本的。
2、解壓文件會得到兩個文件夾,一個是doc文件夾,這里是FATFS的一些使用文檔和說明,以后在文件編程的時候可以查看該文檔。另一個是src文件夾,里面就是我們所要的源文件。
3、建立一個STM32的工程,為方便調(diào)試,我們應(yīng)重載printf()底層函數(shù)實現(xiàn)串口打印輸出??梢詤⒖家呀?jīng)建立好的printf()打印輸出工程:https://www.viewtool.com/bbs/foru ... d=77&extra=page%3D1(或者“相關(guān)附件”下載)
四、開始移植
- 在已經(jīng)建立好的工程目錄User文件夾下新建兩個文件夾,F(xiàn)ATFS_V0.09和SPI_SD_Card,F(xiàn)ATFS_V0.09用于存放FATFS源文件,SPI_SD_Card用于存放SPI的驅(qū)動文件。
- 將ff.c添加到工程文件夾中,并新建diskio.c文件,在diskio.c文件中實現(xiàn)五個函數(shù):
- DSTATUS disk_initialize (BYTE);//SD卡的初始化
- DSTATUS disk_status (BYTE);//獲取SD卡的狀態(tài),這里可以不用管
- DRESULT disk_read (BYTE, BYTE*, DWORD, BYTE);//從SD卡讀取數(shù)據(jù)
- DRESULT disk_write (BYTE, const BYTE*, DWORD, BYTE);//將數(shù)據(jù)寫入SD卡,若該文件系統(tǒng)為只讀文件系統(tǒng)則不用實現(xiàn)該函數(shù)
- DRESULT disk_ioctl (BYTE, BYTE, void*);//獲取SD卡文件系統(tǒng)相關(guān)信息
如截圖:
FATFS初始化函數(shù):
FATFS狀態(tài)獲取函數(shù):
FATFS底層讀數(shù)據(jù)函數(shù):
注意:更多相關(guān)代碼下載,見“相關(guān)附件”下載