第24章
基于FLASH的FatFs文件系統(tǒng)移植
24.1
文件系統(tǒng)
即使讀者可能不了解文件系統(tǒng),讀者也一定對“文件”這個概念十分熟悉。數(shù)據(jù)在PC上是以文件的形式儲存在磁盤中的,這些數(shù)據(jù)的形式一般為ASCII 碼或二進制形式。在上一章我們已經(jīng)寫好了串行 Flash芯片的驅(qū)動函數(shù),我們可以非常方便的在串行Flash芯片上讀寫數(shù)據(jù)。如需要記錄文字,可以把這些文字轉(zhuǎn)化成相應編碼的字符串,存儲在數(shù)組中,然后調(diào)用串行FLASH的寫函數(shù),把數(shù)組內(nèi)容寫入到串行Flash芯片的指定地址上,在需要的時候從該地址把數(shù)據(jù)讀取出來,再對讀出來的數(shù)據(jù)以相應編碼的格式進行解讀。
但是,這樣直接存儲數(shù)據(jù)會帶來極大的不便,如難以記錄有效數(shù)據(jù)的位置,難以確定存儲介質(zhì)的剩余空間,以及應以何種格式來解讀數(shù)據(jù)。就如同一個巨大的圖書館無人管理,雜亂無章地存放著各種書籍,難以查找所需的文檔。想象一下圖書館的采購人員購書后,把書籍往館內(nèi)一扔,拍拍屁股走人,當有人來借閱某本書的時候,就不得不一本本地查找。這樣直接存儲數(shù)據(jù)的方式對于小容量的存儲介質(zhì)如EEPROM還可以接受,但對于大容量Flash芯片或者SD卡之類的大容量設備,我們需要一種高效的方式來管理它的存儲內(nèi)容。
這些管理方式即為文件系統(tǒng),它是為了存儲和管理數(shù)據(jù),而在存儲介質(zhì)建立的一種組織結(jié)構(gòu),這些結(jié)構(gòu)包括操作系統(tǒng)引導區(qū)、目錄和文件。常見的windows下的文件系統(tǒng)格式包括FAT32、NTFS、exFAT。在使用文件系統(tǒng)前,要先對存儲介質(zhì)進行格式化。格式化先擦除原來內(nèi)容,在存儲介質(zhì)上新建一個文件分配表和目錄。這樣,文件系統(tǒng)就可以記錄數(shù)據(jù)存放的物理地址、剩余空間。
使用文件系統(tǒng)時,數(shù)據(jù)都以文件的形式存儲。寫入新文件時,先在目錄中創(chuàng)建一個文件索引,它指示了文件存放的物理地址,再把數(shù)據(jù)存儲到該地址中。當需要讀取數(shù)據(jù)時,可以從目錄中找到該文件的索引,進而在相應的地址中讀取出數(shù)據(jù)。具體還涉及到邏輯地址、簇大小、不連續(xù)存儲等一系列輔助結(jié)構(gòu)或處理過程。
文件系統(tǒng)的存在使我們在存取數(shù)據(jù)時,不再是簡單地向某物理地址直接讀寫,而是要遵循它的讀寫格式。如經(jīng)過邏輯轉(zhuǎn)換,一個完整的文件可能被分開成多段存儲到不連續(xù)的物理地址,使用目錄或鏈表的方式來獲知下一段的位置。
上一章的串行Flash芯片驅(qū)動只完成了向物理地址寫入數(shù)據(jù)的工作,而根據(jù)文件系統(tǒng)格式的邏輯轉(zhuǎn)換部分則需要額外的代碼來完成。實質(zhì)上,這個邏輯轉(zhuǎn)換部分可以理解為當我們需要寫入一段數(shù)據(jù)時,由它來求解向什么物理地址寫入數(shù)據(jù)、以什么格式寫入及寫入一些原始數(shù)據(jù)以外的信息(如目錄)。這個邏輯轉(zhuǎn)換部分代碼我們也習慣稱之為文件系統(tǒng)。
24.2
FatFs文件系統(tǒng)介紹
上面提到的邏輯轉(zhuǎn)換部分代碼(文件系統(tǒng))即為本章的要點,文件系統(tǒng)龐大而復雜,它需要根據(jù)應用的文件系統(tǒng)格式而編寫,而且一般與驅(qū)動層分離開來,很方便移植,所以工程應用中一般是移植現(xiàn)成的文件系統(tǒng)源碼。
FatFs是面向小型嵌入式系統(tǒng)的一種通用的FAT文件系統(tǒng)。它完全是由ANSI C語言編寫并且完全獨立于底層的I/O介質(zhì)。因此它可以很容易地不加修改地移植到其他的處理器當中,如8051、PIC、AVR、SH、Z80、H8、ARM等。FatFs支持FAT12、FAT16、FAT32等格式,所以我們利用前面寫好的串行Flash芯片驅(qū)動,把FatFs文件系統(tǒng)代碼移植到工程之中,就可以利用文件系統(tǒng)的各種函數(shù),對串行Flash芯片以“文件”格式進行讀寫操作了。
FatFs文件系統(tǒng)的源碼可以從FatFs官網(wǎng)下載:
FatFs官網(wǎng)
http://elm-chan.org/fsw/ff/00index_e.html
FatFs源碼下載連接
http://elm-chan.org/fsw/ff/archives.html
24.2.1
FatFs特性
DOS/Windows兼容的FAT/exFAT文件系統(tǒng)。
與平臺無關,易于移植。
程序代碼和工作區(qū)的占用空間非常小。
支持以下各種配置選項:
ANSI/OEM或Unicode中的長文件名。
exFAT文件系統(tǒng),64位LBA和GPT可存儲大量數(shù)據(jù)。
RTOS的線程。
多個卷(物理驅(qū)動器和分區(qū),最多10個卷)。
可變扇區(qū)大小。
多個代碼頁,包括DBCS。
只讀,可選API,I/O緩沖區(qū)等…
24.2.2
FatFs層級結(jié)構(gòu)
FatFs層級結(jié)構(gòu)如下:

應用層調(diào)用FatFs模塊接口,F(xiàn)atFs調(diào)用底層接口,實現(xiàn)對USB、SD卡等存儲設備的操作(需提供RTC時鐘給FatFs模塊)。
24.3
源碼下載

FatFs和Petit FatFs:
PetitFatFs是用于小型8位微控制器的FatFs模塊的子集。它是按照ANSI C編寫的,并且與磁盤I/O層完全分開。即使RAM大小小于扇區(qū)大小,也可以將其合并到內(nèi)存有限的微型微控制器中。我們這里選擇完整版的FatFs。
24.3.1
源碼結(jié)構(gòu)
在移植FatFs文件系統(tǒng)到開發(fā)板之前,我們先要到 FatFs的官網(wǎng)獲取源碼,官網(wǎng)有對FatFs做詳細的介紹,有興趣可以了解。解壓之后可看到里面有 documents和source這兩個文件夾和LICENSE.txt文件,見圖FatFs文件目錄。documents文件夾里面是一些使用幫助文檔;source才是FatFs文件系統(tǒng)的源碼。而LICENSE.txt則是使用FatFs所需遵循的許可證。
FatFs 0.15版本的源碼結(jié)構(gòu)如下:


24.3.1.1
FatFs幫助文檔
打開documents文件夾,可看到如圖documents文件夾的文件目錄:

documents這個文件夾下面存放的是FatFs模塊文檔:
? 其中doc文件夾里面是編譯好的html文檔,講的是FatFs里面各個函數(shù)的使用方法,這些函數(shù)都是封裝好的函數(shù),利用這些函數(shù)我們就可以操作串行Flash芯片。
? res文件夾包含doc文件夾下文件需要用到的圖片,還有四個名為app.c文件,內(nèi)容都是FatFs具體應用例程。
? 00index_e.html相當于FatFs的主頁。
? updates.txt記錄了各個版本的更新。
24.3.1.2
FatFs源碼
打開src文件夾,可看到如圖source文件夾的文件目錄:

source這個文件夾下面存放的是FatFs源碼:
? diskio.c/.h:IO層的實現(xiàn)。
? ff.c/.h:FatFs核心文件,文件管理的實現(xiàn)方法。該文件獨立于底層介質(zhì)操作文件的函數(shù),利用這些函數(shù)實現(xiàn)文件的讀寫。
? ffconf.h:這個頭文件包含了對FatFs功能配置的宏定義,通過修改這些宏定義就可以裁剪FatFs的功能。
? ffsystem.c:操作系統(tǒng)相關。
? ffunicode.c:unicode編碼相關。FF_USE_LFN !=0時必須包含此文件。
? 00history.txt:介紹了FatFs的版本更新情況。
? 00readme.txt:說明了當前目錄下各個文件的功能。
24.3.2
長文件名
FatFs模塊支持FAT文件系統(tǒng)的長文件名(LFN)擴展名。默認情況下,禁用LFN。如果要啟用LFN,要將FF_USE_LFN設置為1、2或3,并將ffunicode.c文件添加到項目中。LFN功能需要一定的工作緩沖區(qū)。緩沖區(qū)大小可由FF_MAX_LFN根據(jù)可用內(nèi)存配置。LFN的長度最多可以為255個字符,因此FF_MAX_LFN也應設置為255。

24.3.3
FatFs限制
文件系統(tǒng)類型:FAT、FAT32(rev0.0)和exFAT(rev1.0)。
打開的文件數(shù)量:無限制。(取決于可用內(nèi)存)
卷數(shù):最多10個。
扇區(qū)大小:512、1024、2048和4096字節(jié)。
最小卷大?。?28個扇區(qū)。
最大卷大?。?2位LBA中的2^32-1扇區(qū),在帶有exFAT的64位LBA中幾乎不受限制。
最大文件大?。篎AT卷上為2^32-1字節(jié),exFAT卷上幾乎不受限制。
群集大?。篎AT卷上最多128個扇區(qū),exFAT 卷上最多16MB。
24.3.4
FatFs的已知問題
掃描下方二維碼或復制鏈接到瀏覽器查看:記錄著有關Fatfs最新版本的已知問題以及問題的解決方法或補丁。
下載鏈接
http://elm-chan.org/fsw/ff/patches.html

網(wǎng)址上會公布已發(fā)現(xiàn)并解決的BUG,以補丁形式發(fā)布。以R0.14b版本為例,目前該版本有2個補丁。
有需要的話可以按照官方提供的方法對源碼進行修改,由于我們這里使用的都是一些比較基礎的功能,這些功能是沒有問題的,所以就不進行修改了。
-
FlaSh
+關注
關注
10文章
1752瀏覽量
155632 -
文件系統(tǒng)
+關注
關注
0文章
304瀏覽量
20996 -
函數(shù)
+關注
關注
3文章
4419瀏覽量
67620 -
FATFS
+關注
關注
0文章
46瀏覽量
19553
原文標題:基于FLASH的FatFs文件系統(tǒng)移植——瑞薩RA系列FSP庫開發(fā)實戰(zhàn)指南(85)
文章出處:【微信號:瑞薩嵌入式小百科,微信公眾號:瑞薩嵌入式小百科】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
瑞薩RA系列FSP庫開發(fā)實戰(zhàn)指南之基于FLASH的FatFs文件系統(tǒng)移植實驗
瑞薩e2studio(1)----瑞薩芯片之搭建FSP環(huán)境
【瑞薩RA2L1入門學習】RA2L1開發(fā)環(huán)境搭建
【瑞薩RA6E2地奇星開發(fā)板試用】介紹、環(huán)境搭建、工程測試
【瑞薩RA4系列開發(fā)板體驗】開發(fā)環(huán)境搭建和新手點燈指南
【瑞薩RA4系列開發(fā)板體驗】體驗過程
【野火啟明6M5開發(fā)板體驗】開箱+認識開發(fā)板+資料
Fatfs(文件系統(tǒng)的移植)
瑞薩RA系列FSP庫開發(fā)實戰(zhàn)指南之FatFs文件系統(tǒng)介紹
評論