【?聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱:feixiaoxing @163.com】
??
? ? ? ? 前面我們已經實現了spi norflash的驅動,理論上這已經可以實現數據的持久化保存了。為什么還需要一個文件系統呢?主要原因還是不方便。如果沒有文件系統的話,我們訪問文件都需要知道確切文件的sector地址和大小,這樣很麻煩。此外,寫入、讀取文件的時候,還要提前規劃好文件的大小,防止不同的文件之間相互覆蓋。而有了fatfs之后,使用上就不需要這么小心翼翼了。
? ? ? ? 另外,今天我們還提出了一個中間件的概念。什么叫中間件呢,其實就是說這部分代碼本身處于系統中間的位置。對上,它提供調用接口;對下,它需要具體硬件的適配。所以,只有這樣的代碼才稱之為中間件。
1、除了fatfs之外,還有哪些中間件
? ? ? ? 廣義的中間件還是蠻多的。比如說圖形界面的lvgl,網絡協議棧的lwip,實時操作系統rtos嚴格意義上也可以看成是中間件,畢竟它下面對著cpu,上面提供os接口。
2、fatfs需要適配哪些接口
? ? ? ? 目前來說,fatfs需要適配這么幾個接口函數,
disk_status
disk_initialize
disk_read
disk_write
disk_ioctl
get_fattime
? ? ? ? 其中disk_status一般就是判斷一下硬件的狀態。disk_initialize代表硬件初始化,norflash的初始化話就在這里。disk_read代表讀取數據。disk_write代表寫入數據。disk_ioctl主要就是回復一些硬件屬性,比如sector多大,整個硬件容量多大等等。get_fattime獲取系統時間。
? ? ? ? 這幾個接口都是在diskio.c文件里面,還是很好辨認的。
3、fatfs支持哪些硬件
? ? ? ? 理論上fatfs支持任何的硬件,只要按照它的要求做好底層適配就好了。不過目前為止,用的比較多的還是norflash和tf卡。norflash一般是固化在開發板的,往里面存文件不太方便。這個時候如果有一個可插拔的tf卡,直接通過fatfs,把文件從tf卡copy到norflash,那就很方便了。
4、fatfs給上層提供的接口
? ? ? ? fatfs對外提供的接口其實和大多數文件系統都差不多,一般就是這些接口,大家不用全部掌握,用的什么學什么就可以了,
f_mount
f_mkfs
f_open
f_write
f_read
f_close
5、配置fatfs
? ? ? ? fatfs自身也是可以配置的,比如我們希望對fatfs進行功能裁剪的話,直接配置ffconf.h文件就可以了。
6、測試方案
? ? ? ? fatfs的測試還是比較容易的。首先對norflash進行fatfs加載,如果發現不能加載,那么先進行格式化操作,格式化完了再加載。接著就是寫入數據、讀取數據。判斷一下寫入的數據和讀取的數據是不是吻合。最后就是卸載fatfs了。
7、調試
? ? ? ? 本身作者給出了完整的項目代碼,和之前norflash相比較,其實就多了fatfs三個文件,
? ? ? ? 編譯、燒入后,我們發現fatfs執行是失敗的。進一步調試,發現在disk_status狀態確認的時候,返回值是錯誤的。單步后發現,還是flashid判斷的問題,重新調整修改一下代碼,
if(SPI_FLASH_ReadID() == 0x684016){status &= ~STA_NOINIT;}else{status = STA_NOINIT;;}
? ? ? ? 至此,我們可以看到在上位機串口打印上,一切ok正常了,