1. 程式人生 > >嵌入式系統學習——STM32之FATFS檔案系統

嵌入式系統學習——STM32之FATFS檔案系統

檔案系統是什麼?

負責管理和儲存檔案資訊的軟體機構稱為檔案管理系統,簡稱檔案系統。
即在磁碟上組織檔案的方法。

常用的檔案系統:
-FAT / FATFS
-NTFS: 基於安全性的檔案系統,是Windows NT所採用的獨特的檔案系統結構
-CDFS:CDFS是大部分的光碟的檔案系統
-exFAT
 

FATFS檔案系統

FATFS是一個完全免費開源的FAT 檔案系統模組,專門為小型的嵌入式系統而設計。完全用標準C 語言編寫,所以具有良好的硬體平臺獨立性。可以移植到8051、PIC、AVR、SH、Z80、H8、ARM 等系列微控制器上而只需做簡單的修改。它支援FATl2、FATl6 和FAT32,支援多個儲存媒介;有獨立的緩衝區,可以對多個檔案進行讀/寫,並特別對8 位微控制器和16 位微控制器做了優化。

FATFS是可裁剪的檔案系統。

FATFS檔案系統特點

1、Windows相容的FAT檔案系統(支援FAT12/FAT16/FAT32)
2、與平臺無關,移植簡單。全C語言編寫。
3、程式碼量少、效率高。
4、多種配置選項
——支援多卷(物理驅動器或分割槽,最多10個卷)
——多個ANSI/OEM內碼表包括DBCS
——支援長檔名、ANSI/OEM或Unicode
——支援RTOS
——支援多種扇區大小
——只讀、最小化的API和I/O緩衝區等

FATFS模組的層次結構圖

①底層介面,包括儲存媒介讀/寫介面(disk I/O)和供給檔案建立修改時間的實時時鐘,需要我們根據平臺和儲存介質編寫移植程式碼。
②中間層FATFS模組,實現了FAT 檔案讀/寫協議。FATFS模組提供的是ff.c和ff.h。除非有必要,使用者一般不用修改,使用時將標頭檔案直接包含進去即可。
③最頂層是應用層,使用者無需理會FATFS的內部結構和複雜的FAT 協議,只需要呼叫FATFS模組提供給使用者的一系列應用介面函式,如f_open,f_read,f_write 和f_close等,就可以像在PC 上讀/寫檔案那樣簡單。

FATFS檔案系統包:

下載地址:http://elm-chan.org/fsw/ff/00index_e.html

 此地址不僅僅包含資料包下載,還包括檔案系統一些知 識,包括函式說明,函式呼叫例項等。

FATFS檔案系統包結構


經驗:
大部分的可移植的小系統或者應用,都是採用類似這種將與底層打交道的原始碼開發給使用者編寫,然後提供頂層配置檔案供配置。
diskio.c和diskio.h是硬體層。
ff.c和ff.h是FatFs的檔案系統層和檔案系統的API層。
FATFS模組在移植的時候,我們一般只需要修改2個檔案,即ffconf.h和diskio.c。FATFS模組的所有配置項都是存放在ffconf.h裡面,我們可以通過配置裡面的一些選項,來滿足自己的需求。diskio.c是硬體層,負責與底層硬體介面適配。


ffconf.h : FATFS關鍵配置檔案

①_FS_TINY。這個選項在R0.07版本中開始出現,之前的版本都是以獨立的C檔案出現(FATFS和Tiny FATFS),有了這個選項之後,兩者整合在一起了,使用起來更方便。我們使用FATFS,所以把這個選項定義為0即可。
②_FS_READONLY。這個用來配置是不是隻讀,本章我們需要讀寫都用,所以這裡設定為0即可。
③_USE_STRFUNC。這個用來設定是否支援字串類操作,比如f_putc,f_puts等,本章我們需要用到,故設定這裡為1。
④ _USE_MKFS。這個用來定時是否使能格式化,這裡用到,所以設定這裡為1。
⑤ _USE_FASTSEEK。這個用來使能快速定位,我們設定為1,使能快速定位。
⑥ _USE_LABEL。這個用來設定是否支援磁碟碟符(磁碟名字)讀取與設定。我們設定為1,使能,就可以通過相關函式來讀取和設定磁碟的名字了。
⑦_CODE_PAGE。這個用於設定語言型別,包括很多選項(見FATFS官網說明),我們這裡設定為936,即簡體中文(GBK碼,需要c936.c檔案支援,該檔案在option資料夾)。
⑧_USE_LFN。該選項用於設定是否支援長檔名(還需要_CODE_PAGE支援),取值範圍為0~3。0,表示不支援長檔名,1~3是支援長檔名,但是儲存地方不一樣,我們選擇使用3,通過ff_memalloc函式來動態分配長檔名的儲存區域。
⑨_VOLUMES。用於設定FATFS支援的邏輯裝置數目,我們設定為3的話,即支援3個裝置(磁碟)。
⑩_MAX_SS。扇區緩衝的最大值,一般設定為512。

FATFS移植步驟

資料型別:在integer.h 裡面去定義好資料的型別。這裡需要了解你用的編譯器的資料型別,並根據編譯器定義好資料型別。
②配置:通過ffconf.h配置FATFS的相關功能,以滿足你的需要。
③函式編寫:開啟diskio.c,進行底層驅動編寫,一般需要編寫6 個介面函式

FATFS開放函式




相關推薦

嵌入式系統學習——STM32FATFS檔案系統

檔案系統是什麼? 負責管理和儲存檔案資訊的軟體機構稱為檔案管理系統,簡稱檔案系統。 即在磁碟上組織檔案的方法。 常用的檔案系統: -FAT / FATFS -NTFS: 基於安全性的檔案系統,是W

嵌入式系統學習——STM32TFT漢字顯示

常用漢字編碼 GB2312 GB13000 GBK BIG5(繁體) 漢字顯示原理 漢字在液晶上的顯示其實就是一些點的顯示與不顯示,這就相當於我們的筆一樣,有筆經過的地方就畫出來,沒經過的地方就不畫

嵌入式系統學習——STM32按鍵輸入

  之前寫了兩篇關於STM32 GPIO的介紹和運用,跑馬燈用到了GPIO的推輓輸出,但是對於輸入還是沒有用到,這次就運用一下GPIO的上拉輸入。實驗還是和以前51做的實驗一樣,就是判斷按鍵的輸入,然後控制LED燈。這次沒有直接配置暫存器,而是呼叫庫函式和位操作結合。 注

嵌入式系統學習——STM32電容型觸控式螢幕

觸控式螢幕   觸控式螢幕(touch screen)又稱為“觸控屏”、“觸控面板”,是一種可接收觸頭等輸入訊號的感應式裝置。作為一種新型的電腦輸入裝置,可以用來取代傳統的機械按鍵等輸入裝置。它是目前

嵌入式系統學習——STM32RTOS系統UCOS介紹與移植

前後臺系統:         早期嵌入式開發沒有嵌入式作業系統的概念,直接操作裸機,在裸機上寫程式,比如用51微控制器基本就沒有作業系統的概念。通常把程式分為兩部分:前臺系統和後臺系統。         簡單的小系統通常是前後臺系統,這樣的程式包括一個死迴圈和若干個中斷服務

STM32例程FATFS檔案系統(SPI方式)移植筆記(原始碼下載)

STM32的FATFS檔案系統移植筆記 一、序言     經常在網上、群裡看到很多人問關於STM32的FATFS檔案系統移植的問題,剛好自己最近也在除錯這個程式,為了讓大家少走彎路,我把我的除錯過程和方法也貢獻給大家。 二、FATFS簡介     FatFs Module

嵌入式系統學習——STM32SD卡(下)

SDIO簡介-SDIO暫存器 SDIO電源控制暫存器(SDIO_POWER)         該暫存器只有最低2位(PWRCTRL[1:0])有效,其他都是保留位,STM32復位以後,PWRCTRL

STM32FATFS檔案系統移植筆記(轉…

一、序言     經常在網上、群裡看到很多人問關於STM32的FATFS檔案系統移植的問題,剛好自己最近也在除錯這個程式,為了讓大家少走彎路,我把我的除錯過程和方法也貢獻給大家。 二、FATFS簡介     FatFs Module是一種完全免費開源的FAT檔案系統模組,專門為小型的嵌入式系統而設計。

STM32FATFS檔案系統常用API函式的理解

首先,第一次在CSDN上面開通部落格,這也算是我的第一篇博文吧,寫的不好的地方還請大家不吝賜教,筆者現大二在校學生,之所以會選擇在這裡使用部落格,是在一位嵌入式大蝦的渲染下,和小夥伴一起分享學習的話,我相信可以學的更多。 廢話不多說,進入主題。 首先,FATFS 是一個完全

STM32FATFS檔案系統移植筆記

一、序言     經常在網上、群裡看到很多人問關於STM32的FATFS檔案系統移植的問題,剛好自己最近也在除錯這個程式,為了讓大家少走彎路,我把我的除錯過程和方法也貢獻給大家。 二、FATFS簡介     FatFs Module是一種完全免費開源的FAT檔案系統模組,專

轉一篇比較詳細介紹FatFs檔案系統移植的文章 FatFs檔案系統的移植

  因為需要,又不想自己寫,所以就移植了一個檔案系統。     說下我的硬體和開發工具:接成 TRUE IDE 模式下的CF卡(也就是相當於一塊硬碟了),三星S3C2440的ARM9,開發工具是很老很老的D版的ADS1.2。    

基於STM32的SD卡FATFS檔案系統學習筆記

一、FATFS檔案系統格式分析 搞檔案系統,首先要了解一下SD卡里面的結構和分割槽,如下圖 1、引導扇區 引導扇區包含著磁碟和檔案系統的許多重要引數。檔案管理系統首先要對該扇區的資訊進行分析,才能瞭解當前磁碟上檔案系統的格式。 EB 58 90 4D 53 44 4F 53 35 2E 3000 020

Linux學習檔案系統管理——回顧分割槽和檔案系統

一、回顧分割槽和檔案系統 1、分割槽型別: 》主分割槽:總共最多隻能分四個 》擴充套件分割槽:只能有一個,也算作主分割槽的一種,也就是說主分割槽加擴充套件分割槽最多有四個。但是擴充套件分球不能儲存資料和格式化,必須再劃分成邏輯分割槽才能使用。 》邏輯分割槽:邏輯分割槽是在擴充套件

【C++學習如何用系統日期時間給檔案命名

參考的網上的模板,直接給出程式: #include "ctime" #include "time.h" using namespace std; string int2string(int value) { stringstream ss;

STM32+SD卡 利用FATFS檔案系統建立資料夾並新建txt檔案

這幾天在移植FATFS檔案系統,在移植過程中需要新建資料夾下建立新的cfg檔案,查詢資料後發現需要用到以下函式: f_mkdir("0:/2017110223");//新建資料夾,其中2017110223是資料夾名稱 f_open(filescr1, "0:20171102

JavaWeb學習入門——圖書館管理系統開發(Hibernate學習1)

pass ica void 技術分享 gets 學習 images 創建 driver 最近看了看JavaWeb的書籍,才感覺到大二時候學的JavaWeb才僅僅只是個入門。最尷尬的當初還沒咋學一直在看.NET,現在看起來JavaWeb,各種框架各種頭疼啊。看了幾個例子之後覺

Linux學習筆記二————Linux系統的文件和目錄

管道 過程 命令 合成 給定 cal 如圖所示 項目 img 一、Windows和Linux文件系統區別 1、在 windows 平臺下,打開“計算機”,我們看到的是一個個的驅動器盤符: 每個驅動器都有自己的根目錄結構,這樣形成了多個樹並列的情形,如圖所示:

系統學習前端FormData詳解

pan 3.2 第一個 實例 open password 訪問表 -name 訪問 FormData1. 概述FormData類型其實是在XMLHttpRequest 2級定義的,它是為序列化表以及創建與表單格式相同的數據(當然是用於

Linux學習筆記文件系統

type 個人 入口 鼠標 動態鏈接庫 資源 功能 系統文件 學習筆記 文件系統→rootfs:根文件系統FHS(Filesystem Hierarchy Standard):文件系統層次化標準一、/boot:系統啟動相關文件,如內核,initrd,以及grub(bootl

系統學習redis三——redis數據類型string類型及操作

例子 原來 等於 code 上一個 test 類型 一個 字符 redis數據類型介紹 redis數據類型有string類型、hash類型、list類型、set類型、zset類型等。 string類型及操作 string是最簡單的類型,一個key對應一個value,stri