版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、本科畢業(yè)論文(設(shè)計(jì))題目: 基于uTenux操作系統(tǒng)的 FatFs文件系統(tǒng)移植 學(xué)院: 數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院 完成日期: 2013 年 6 月 2 日基于uTenux操作系統(tǒng)的 FatFs文件系統(tǒng)移植摘要:隨著嵌入式技術(shù)的發(fā)展,尤其是ARM技術(shù)的不斷更新,推出了cortex系列芯片,使得嵌入式設(shè)備的功能日益壯大,逐漸由單片機(jī)的時(shí)代過渡到微控制器的時(shí)代,對(duì)數(shù)據(jù)的訪問量有了顯著提高,這就要求數(shù)據(jù)操作層次清晰、透明度提高、可維護(hù)性、接口的標(biāo)準(zhǔn)化、移植性、靈活的操作和數(shù)據(jù)存儲(chǔ)的可靠性等都提出了越來越高的要求,所以有必要引入文件系統(tǒng)來完成數(shù)據(jù)存儲(chǔ)和管理的功能,為用戶提供按名存取數(shù)據(jù)的接口,從而可以避免由
2、程序開發(fā)人員直接訪問內(nèi)存所帶來的不安全性。本論文基于uTenux操作系統(tǒng)移植FatFS文件系統(tǒng),詳細(xì)論述了文件系統(tǒng)的實(shí)現(xiàn)原理,通過移植使得FatFS能在uTenux操作系統(tǒng)上運(yùn)行。實(shí)現(xiàn)文件和目錄創(chuàng)建、打開、讀取、寫入、關(guān)閉等功能。關(guān)鍵字:微控制器;uTenux;FatFS;ARM目錄1 緒論11.1 實(shí)時(shí)操作系統(tǒng)簡(jiǎn)介11.1.1 實(shí)時(shí)操作系統(tǒng)的概念11.1.2 常見的實(shí)時(shí)微控制器操作系統(tǒng)及其對(duì)比11.2 嵌入式文件系統(tǒng)簡(jiǎn)介21.2.1 文件系統(tǒng)概述21.2.2 嵌入式文件系統(tǒng)一般體系結(jié)構(gòu)31.2.3 文件系統(tǒng)概述41.3 嵌入式文件系統(tǒng)的必要性52 uTenux實(shí)時(shí)操作系統(tǒng)63 FatFS文件
3、系統(tǒng)的移植73.1 FAT協(xié)議介紹73.1.1 FAT協(xié)議概述73.1.2 FAT 保留區(qū)83.1.3 FAT表區(qū)103.1.4 FAT目錄區(qū)103.1.5 FAT數(shù)據(jù)區(qū)113.2 FatFS文件系統(tǒng)的配置113.3 FatFS文件系統(tǒng)結(jié)構(gòu)分析143.3.1 FatFS模塊結(jié)構(gòu)143.3.2 FatFS定義的結(jié)構(gòu)體153.4 SD卡接口173.4.1 SD協(xié)議173.4.2 SD命令183.5 FatFS文件系統(tǒng)的移植193.5.1 開發(fā)環(huán)境uT/Stdio193.5.2 構(gòu)建移植環(huán)境203.5.3 初始化213.5.4 讀寫函數(shù)234 移植結(jié)果的測(cè)試245 總結(jié)與展望26參考文獻(xiàn)28致謝29
4、1 緒論1.1 實(shí)時(shí)操作系統(tǒng)簡(jiǎn)介 實(shí)時(shí)操作系統(tǒng)的概念實(shí)時(shí)操作系統(tǒng)(Real-time Operation System,RTOS):系統(tǒng)能夠及時(shí)響應(yīng)外部事件的請(qǐng)求,在規(guī)定的時(shí)間內(nèi)完成對(duì)該事件的處理,并控制所有實(shí)時(shí)任務(wù)協(xié)調(diào)一致的運(yùn)行的嵌入式操作系統(tǒng)。在工業(yè)控制、航空航天、實(shí)時(shí)檢測(cè)等流程控制要求非常精確的領(lǐng)域,必須要在指定的時(shí)間內(nèi)做出指定的響應(yīng),這時(shí)就需要實(shí)時(shí)操作系統(tǒng)來控制。我們常常說的嵌入式操作系統(tǒng)都是嵌入式實(shí)時(shí)操作系統(tǒng),比如uTenux、uC/OS-II。 常見的實(shí)時(shí)微控制器操作系統(tǒng)及其對(duì)比1. uTenux微控制器操作系統(tǒng)uTenux是一款優(yōu)秀的開源免費(fèi)的實(shí)時(shí)微控制器操作系統(tǒng),是由大連悠龍軟
5、件科技有限公司開發(fā)與維護(hù)。Tenux是由T-Engine Linux 的縮寫構(gòu)成,Tenux具有(a)T-Engine的開源高實(shí)時(shí)性內(nèi)核T-Kernel為內(nèi)核;(b)Linux上豐富的開源中間件為中間件;(c)Eclipse+GNU開源開發(fā)工具為基礎(chǔ)工具;(d)打造適合中國(guó)電子產(chǎn)品市場(chǎng)的開源嵌入式實(shí)時(shí)操作系統(tǒng)及方便的集成開發(fā)環(huán)境。uTenux適用于微控制器(Cortex M/ARM 7,ROM:大于64K),它的內(nèi)核是uT-Kernel,具有豐富緊湊的中間件,比如FATFS、LWIP、FLTK。適用產(chǎn)品:小型物聯(lián)網(wǎng)控制終端,比如機(jī)器人、智能儀表、小型數(shù)控機(jī)床、PLC、相機(jī)等。它的特點(diǎn)有:(1)
6、 所有源碼公開、完全免費(fèi)(2) 占有日本60%市場(chǎng)的成熟實(shí)時(shí)微內(nèi)核 (3) 支持函數(shù)和軟中斷兩種方式(4) 搶占式實(shí)時(shí)多任務(wù)操作系統(tǒng)(5) 不需要MMU,占用ROM/RAM少(6) 可以支持所有32位ARM7/9和Cortex M系列的微控制器(7) 可配置任意多個(gè)任務(wù)、任務(wù)的優(yōu)先級(jí)最多255個(gè)2. uCOS微控制器操作系統(tǒng)uC/OS II (Micro Control Operation System Two)是一個(gè)可以基于ROM運(yùn)行的、可裁減的、搶占式、實(shí)時(shí)多任務(wù)內(nèi)核,具有高度可移植性,特別適合于微處理器和控制器,是和很多商業(yè)操作系統(tǒng)性能相當(dāng)?shù)膶?shí)時(shí)操作系統(tǒng)(RTOS)。為了提供最好的移植性
7、能,uC/OS II最大程度上使用ANSI C語(yǔ)言進(jìn)行開發(fā),并且已經(jīng)移植到近40多種處理器體系上,涵蓋了從8位到64位各種CPU (包括DSP)。uC/OS II可以簡(jiǎn)單的視為一個(gè)多任務(wù)調(diào)度器,在這個(gè)任務(wù)調(diào)度器之上完善并添加了和多任務(wù)操作系統(tǒng)相關(guān)的系統(tǒng)服務(wù),如信號(hào)量、郵箱等。其主要特點(diǎn)有公開源代碼,代碼結(jié)構(gòu)清晰、明了,注釋詳盡,組織有條理,可移植性好,可裁剪,可固化。內(nèi)核屬于搶占式,最多可以管理60個(gè)任務(wù)。從1992年開始,由于高度可靠性、魯棒性和安全性,uC/OS II已經(jīng)廣泛使用在從照相機(jī)到航空電子產(chǎn)品的各種應(yīng)用中。3. uTenux和ucos的對(duì)比(1) uTenux有固定和可變尺寸內(nèi)存
8、池管理;ucos只有固定尺寸內(nèi)存池。(2) uTenux的郵箱支持消息隊(duì)列和任務(wù)等待隊(duì)列,因此發(fā)送多個(gè)消息都可以;ucos的郵箱只能發(fā)送一條消息,很簡(jiǎn)單。(3) uTenux中有專門定義中斷處理程序的系統(tǒng)調(diào)用-tk_def_int,很方便,而ucos中就沒有。(4) uTenux有Trace、Hook等調(diào)試功能,而ucosii沒有。(5) uTenux的任務(wù)堆棧等需要內(nèi)存的地方,可以由系統(tǒng)自動(dòng)分配也可以開發(fā)人員手工分配;但ucos只能手工分配。(6) uTenux的任務(wù)、信號(hào)量等系統(tǒng)對(duì)象采用ID方式實(shí)現(xiàn),用戶看不到內(nèi)部的數(shù)據(jù)結(jié)構(gòu),對(duì)于安全性比較好,使用也方便;而ucos是用戶定義每個(gè)系統(tǒng)對(duì)象的
9、變量。(7) uTenux的任務(wù)間通信機(jī)制比ucos多了好幾種,比如集合點(diǎn)端口等,而且每個(gè)通信機(jī)制都支持任務(wù)隊(duì)列和消息隊(duì)列。(8) uTenux V1.5的易用性沒有ucos的強(qiáng),幸好uTenux已經(jīng)意識(shí)到自己的問題,向ucos的易用性學(xué)習(xí),在模仿中超越對(duì)手。(9) uTenux 終身開源免費(fèi),無論是學(xué)習(xí)、商用、修改再發(fā)布,而ucos只有學(xué)習(xí)時(shí)是開源免費(fèi)的,商用必須付費(fèi)。綜上所述,學(xué)習(xí)uTenux的意義大于ucos。1.2 嵌入式文件系統(tǒng)簡(jiǎn)介 文件系統(tǒng)概述文件系統(tǒng)是操作系統(tǒng)的重要組成部分,用于控制對(duì)數(shù)據(jù)、文件及設(shè)備的存儲(chǔ)2。它提供對(duì)文件和目錄的分層組織形式、數(shù)據(jù)緩沖以及對(duì)文件的存儲(chǔ)權(quán)限的控制。
10、文件系統(tǒng)必須提供必要的用來創(chuàng)建、刪除文件、讀文件和寫文件等相應(yīng)的系統(tǒng)調(diào)用。文件的存儲(chǔ)通過目錄完成,所以對(duì)目錄的操作是文件系統(tǒng)功能的一部分,文件系統(tǒng)應(yīng)具有以下功能:提供對(duì)文件和目錄的分層組織形式;建立與刪除文件的能力;文件的動(dòng)態(tài)增長(zhǎng)和數(shù)據(jù)保護(hù)。硬盤的出現(xiàn)推動(dòng)了針對(duì)桌面操作系統(tǒng)的文件系統(tǒng)的發(fā)展,同樣,嵌入式存儲(chǔ)設(shè)備特別是flash的出現(xiàn),也推動(dòng)了嵌入式文件系統(tǒng)的發(fā)展。 嵌入式文件系統(tǒng)一般體系結(jié)構(gòu)在嵌入式文件系統(tǒng)中,嵌入式系統(tǒng)可以針對(duì)特殊的目的定制,特別是隨著ASOS(為應(yīng)用定制的嵌入式操作系統(tǒng))的發(fā)展,對(duì)嵌入式操作系統(tǒng)的系統(tǒng)功能完整性和可伸縮性提出了更高的要求。所以不得不采取一種靈活的系統(tǒng)體系結(jié)構(gòu)
11、,對(duì)于操作系統(tǒng)來說,文件系統(tǒng)是一個(gè)獨(dú)立的子包含的整體,可以靈活的加載和卸載,這一切操作對(duì)操作系統(tǒng)內(nèi)核的功能沒有任何影響。嵌入式文件系統(tǒng)系統(tǒng)體系結(jié)構(gòu)從上到下一般有3層,如圖1.1所示。圖1.1 嵌入式操作系統(tǒng)體系結(jié)構(gòu)最上一層是文件系統(tǒng)的核心,使文件系統(tǒng)實(shí)現(xiàn)的核心算法,提供了用戶可見的所有API函數(shù),以供用戶操作數(shù)據(jù),這一層是文件系統(tǒng)功能的集合。第二層是高速緩沖管理,高速緩沖區(qū)的大小直接關(guān)系到文件系統(tǒng)的處理效率,高效的緩沖區(qū)處理算法能大幅提高數(shù)據(jù)的處理效率;同時(shí)它為文件系統(tǒng)提供了與硬件無關(guān)的接口,為文件系統(tǒng)的層次性提供了基礎(chǔ)。最下面一層是設(shè)備驅(qū)動(dòng)程序,涉及到具體的硬件。設(shè)備驅(qū)動(dòng)程序的另一個(gè)重要任務(wù)
12、就是提供統(tǒng)一設(shè)備驅(qū)動(dòng)接口。文件系統(tǒng)和操作系統(tǒng)內(nèi)核的關(guān)系主要體現(xiàn)在三方面:實(shí)時(shí)時(shí)鐘、信號(hào)量和中斷管理。用時(shí)鐘實(shí)現(xiàn)外設(shè)任務(wù)的等待延時(shí);用信號(hào)量實(shí)現(xiàn)外設(shè)的同步和互斥;用中斷管理機(jī)制管理外設(shè)的中斷處理程序。 文件系統(tǒng)概述目前,嵌入式文件系統(tǒng)解決方案比較多,由于嵌入式設(shè)備的多樣性,相應(yīng)文件系統(tǒng)的實(shí)現(xiàn)也有針對(duì)各種設(shè)備的,如只讀存儲(chǔ)器、可讀存儲(chǔ)器、Flash存儲(chǔ)器等。嵌入式文件系統(tǒng)也是要針對(duì)嵌入式操作系統(tǒng)的。1. FatFSFatFS是一個(gè)開源免費(fèi)通用的文件系統(tǒng)模塊,用于在小型嵌入式系統(tǒng)中實(shí)現(xiàn)FAT文件系統(tǒng)。FatFs 的編寫遵循ANSI C,因此不依賴于硬件平臺(tái)。它可以嵌入到便宜的微控制器中,如8051、
13、PIC、AVR、SH、Z80、H8、ARM等等。它是window兼容的FAT文件系統(tǒng),平臺(tái)依賴性小,易于移植,代碼和工作區(qū)占用非常小,有多種配置選項(xiàng)。通過配置FatFS可以使得FatFS占用的RAM達(dá)到44字節(jié),代碼空間的占用可以小到2K-4K,在這樣小的空間中它還能支持FAT32,這是以文件的寫功能的限制為代價(jià)的。 FatFS是標(biāo)準(zhǔn)FAT文件系統(tǒng)的小型嵌入式文件系統(tǒng),它是一個(gè)自由軟件,可以用于教育、研究、商業(yè)。在使用過程中不用擔(dān)心被限制。用戶可以修改,重新發(fā)布以個(gè)人的身份。但是必須在源代碼中包含這個(gè)版權(quán)申明。文件分配表FAT(File Allocation Table)用來跟蹤硬盤上每個(gè)文件
14、的數(shù)據(jù)庫(kù),而FAT表存儲(chǔ)關(guān)于簇的信息。FAT表示microsoft在FAT文件系統(tǒng)中用于磁盤數(shù)據(jù)(文件)索引和定位引進(jìn)的一種鏈?zhǔn)浇Y(jié)構(gòu)。在FAT文件系統(tǒng)中,文件的存儲(chǔ)依照FAT表制定的簇鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu)來進(jìn)行。同時(shí),F(xiàn)AT文件系統(tǒng)將組織數(shù)據(jù)時(shí)使用的目錄也抽象為文件,以簡(jiǎn)化對(duì)數(shù)據(jù)的管理。FAT分區(qū)格式是microsoft最早支持的分區(qū)格式,依據(jù)FAT表中的每個(gè)簇鏈的所占位數(shù)分為FAT12、FAT16、FAT32三種形式,但其基本存儲(chǔ)方式是相似的。如圖1.2所示。圖1.2 FatFs模塊結(jié)構(gòu)2. uC/FSuC/FS是uCOS的文件系統(tǒng),它是由Micrium公司新開發(fā)的一個(gè)產(chǎn)品,主要應(yīng)用在使用uCOS內(nèi)
15、核的嵌入式系統(tǒng)中。uC/FS是一個(gè)用于能提供基礎(chǔ)訪問功能的FAT格式的文件系統(tǒng),是一個(gè)高效率的庫(kù),為高速、多功能及內(nèi)存使用進(jìn)行優(yōu)化。它用ANSI C編寫,由不同的層次結(jié)構(gòu)組成,包括API層、文件系統(tǒng)層、邏輯區(qū)塊層、設(shè)備驅(qū)動(dòng)和硬件層。總之,在上述的嵌入式文件系統(tǒng)中,F(xiàn)atFS和uC/FS都用于小容量閃存設(shè)備,功能都比較齊全。但是uC/FS是屬于擁有知識(shí)產(chǎn)權(quán)的技術(shù),是商業(yè)產(chǎn)品,而FatFS則完全是開源免費(fèi)的,用戶可以隨時(shí)下載所有全代碼,更改和再發(fā)布。隨著NAND FAlsh作為嵌入式系統(tǒng)中大容量存儲(chǔ)介質(zhì)的普及應(yīng)用,F(xiàn)atFS文件系統(tǒng)作為開源代碼的項(xiàng)目,得到芯片產(chǎn)商,項(xiàng)目開發(fā)人員的一致好評(píng)。所以在本
16、項(xiàng)目中選擇FatFS作為目標(biāo)文件系統(tǒng)。1.3 嵌入式文件系統(tǒng)的必要性嵌入式系統(tǒng)過去主要用于工業(yè)控制領(lǐng)域,對(duì)效率的比較高,對(duì)于數(shù)據(jù)處理不夠重視,引入文件系統(tǒng)不但沒有必要而且會(huì)降低效率,所以很多嵌入式系統(tǒng)應(yīng)用都沒有加載操作系統(tǒng)。隨著嵌入式處理器性能的不斷升級(jí),嵌入式系統(tǒng)的功能不斷加強(qiáng),用戶的需求也和功能復(fù)雜度的增加,許多嵌入式系統(tǒng)都面臨著處理大量數(shù)據(jù)的問題;另外對(duì)于應(yīng)用程序開發(fā)人員直接訪問內(nèi)存具有很大的風(fēng)險(xiǎn)性,需要對(duì)內(nèi)存的訪問進(jìn)行封裝。綜上所述在嵌入式操作系統(tǒng)內(nèi)核和應(yīng)用程序之間加一個(gè)文件系統(tǒng)成為必然趨勢(shì)。2 uTenux實(shí)時(shí)操作系統(tǒng)uTenux實(shí)時(shí)操作系統(tǒng)的體系結(jié)構(gòu)如圖2.1所示。圖2.1 uTe
17、nux實(shí)時(shí)操作系統(tǒng)的體系結(jié)構(gòu)Board:為uTenux所支持的處理器有ARM7、ARM9、CortexMx(x為0-4),用到的外設(shè)環(huán)境有通用輸入輸出端口(GPIO)、同步串口(SPI)、異步串口(UART)、存儲(chǔ)設(shè)備(NandFlash/SD)、USB接口等。uT/Kernel:為uTenux的核心部分,主要包括了三個(gè)部分uT/OS是操作系統(tǒng)內(nèi)核,包含了系統(tǒng)調(diào)用的所有API函數(shù);uT/SM是終端函數(shù),設(shè)備管理函數(shù);uT/DS為調(diào)試所需要的函數(shù),主要包括內(nèi)核狀態(tài)查詢函數(shù);uT/Lib:為操作系統(tǒng)移植相關(guān)部分,uT/CPU指的是系統(tǒng)的啟動(dòng)代碼,執(zhí)行CPU的初始化;uT/DEV這的是開發(fā)板上一系列
18、外設(shè)的的初始化和配置文件;uT/TM指的是串口打印函數(shù),這是為了開發(fā)人員方便使用而設(shè)置的。Stand C Lib:標(biāo)準(zhǔn)的C語(yǔ)言庫(kù),uTenux操作系統(tǒng)支持標(biāo)準(zhǔn)的C語(yǔ)言庫(kù)。目前支持C99標(biāo)準(zhǔn)庫(kù)。uT/Subass:是uTenux上的一系列中間件,介于應(yīng)用程序和操作系統(tǒng)之間。包括GUI圖形界面;FatFS文件系統(tǒng);LWIP網(wǎng)絡(luò)模塊等等;IDE/ICE:分別表示uTenux所支持的開發(fā)環(huán)境,燒寫工具等。3 FatFS文件系統(tǒng)的移植3.1 FAT協(xié)議介紹 FAT協(xié)議概述每個(gè)分區(qū)(卷)都是一個(gè)獨(dú)立的文件系統(tǒng);FAT文件系統(tǒng)將分區(qū)分為四個(gè)區(qū)域,保留區(qū)、FAT表區(qū)、目錄區(qū)、數(shù)據(jù)區(qū)。FAT表區(qū):FAT(Fil
19、e Allocation Table)是文件分配表的簡(jiǎn)稱,它是FAT文件系統(tǒng)最重要也是最根本的部分。文件分配表記錄了一個(gè)個(gè)鏈表,記錄了每個(gè)文件片段的直接后繼的地址,從而將一個(gè)個(gè)的文件片段連接起來,形成一個(gè)完整的文件。一個(gè)FAT鏈表記錄了一個(gè)完整的文件。為了便于對(duì)數(shù)據(jù)的管理,F(xiàn)AT文件系統(tǒng)將目錄也抽象為文件,這個(gè)目錄下的所有文件稱為這個(gè)目錄文件的內(nèi)容。FAT文件系統(tǒng)存儲(chǔ)文件的基本單位是簇,也就是說一個(gè)文件片段就是一個(gè)簇。簇是文件系統(tǒng)中數(shù)據(jù)區(qū)的概念,一個(gè)分區(qū)(卷)中簇的多少,決定了這個(gè)文件系統(tǒng)中文件分配表中每個(gè)一個(gè)簇鏈所占用的位數(shù),根據(jù)文件分配表每一個(gè)簇項(xiàng)所占用的位數(shù)將文件系統(tǒng)分為FAT12、FA
20、T16、FAT32三種形式,但原理基本相同。一個(gè)簇包含2的n次冪個(gè)扇區(qū),每個(gè)扇區(qū)是512個(gè)字節(jié)或者是512的倍數(shù)。扇區(qū)是在文件系統(tǒng)中可以統(tǒng)一使用的邏輯地址。保留區(qū):保留區(qū)位于整個(gè)卷的最前面,記錄了這個(gè)文件系統(tǒng)的一些基本的參數(shù),比如扇區(qū)的大小,簇的大小,文件系統(tǒng)的類型,F(xiàn)AT表是否有備份,每張F(tuán)AT表的大小,目錄區(qū)的大小等。目錄區(qū):如果說FAT表區(qū)是記錄的每個(gè)簇的直接后繼的話,那么目錄區(qū)則記錄了這個(gè)鏈表的頭結(jié)點(diǎn),以及一些其他的文件屬性,每天記錄占用32個(gè)字節(jié)。數(shù)據(jù)區(qū):用來以簇為單位存放文件內(nèi)容。一個(gè)文件是以鏈表的形式存放在卷中,數(shù)據(jù)區(qū)的每個(gè)簇都是這個(gè)鏈表一個(gè)結(jié)點(diǎn)的上內(nèi)容。綜上,保留區(qū)記錄了整個(gè)文
21、件系統(tǒng)基本參數(shù),以及剩余簇的數(shù)量。FAT表區(qū)充當(dāng)了一個(gè)鏈表的next結(jié)點(diǎn)。目錄區(qū)記錄了每一個(gè)文件和目錄的基本屬性,以及每個(gè)文件的開始簇號(hào)。數(shù)據(jù)區(qū)存放了每一個(gè)結(jié)點(diǎn)的內(nèi)容。每次的文件訪問,文件系統(tǒng)都會(huì)從目錄區(qū)的第一條(根目錄)開始讀取,查找鏈表進(jìn)入文件或選擇指定的文件。 FAT 保留區(qū)保留區(qū)位于分區(qū)(卷)的第一個(gè)扇區(qū),同時(shí)也屬于FAT文件系統(tǒng)基本區(qū)域的保留區(qū)。這個(gè)扇區(qū)又叫做“啟動(dòng)扇區(qū)”、“保留扇區(qū)”、“0扇區(qū)”。眾多的說法都是一個(gè)意思,該扇區(qū)是FAT卷的第一個(gè)扇區(qū)。這個(gè)區(qū)域最重要的就是BPB(BIOS Parameter Block),F(xiàn)AT32的BPB內(nèi)容和FAT12、FAT16的內(nèi)容在BPB_
22、Toset32區(qū)域以前完全一致,而從偏移36開始它們的內(nèi)容才有所區(qū)別,這么做是為了啟動(dòng)扇區(qū)中存放一個(gè)完整的FAT12、FAT16或FAT32的BPB內(nèi)容,以達(dá)到最好的兼容性。表3.1 FAT保留區(qū)各字段含義名稱偏移byte大小byte描述BS_jmpBoot03跳轉(zhuǎn)指令,指向啟動(dòng)代碼,有兩種形式BS_OEMName38標(biāo)志字符串,建議值為“MSWIN4.1”BPB_BytsPerSec112每個(gè)扇區(qū)的字節(jié)數(shù),512取得最好兼容性BPB_SecPerClus131每個(gè)簇的扇區(qū)數(shù),必須為2的n次冪,簇大小必須小于32kBPB_RsvdSecCnt142保留區(qū)中扇區(qū)的數(shù)目,F(xiàn)AT12/16為1,F(xiàn)A
23、T32為32BPB_NumFATs161FAT表的份數(shù)。建議為2,這樣就會(huì)有一個(gè)備份FAT表BPB_RootEntCnt172在此卷中總共目錄的項(xiàng)數(shù),乘以32必須是512的倍數(shù)BPB_TotSec16192此卷中扇區(qū)總數(shù),若為0那么BPB_Tot32必須為非0BPB_Media211存儲(chǔ)介質(zhì)的類型,固定存儲(chǔ)介質(zhì)0xF8,移動(dòng)的為0xF0BPB_FATSz16222一個(gè)FAT表所占用的扇區(qū)數(shù),對(duì)于FAT32為0BPB_SecPerTrk242每磁道的扇區(qū)數(shù),用于BIOS的0x13中斷BPB_NumHeads262磁頭數(shù),用于BIOS的0x13中斷BPB_HiddSec284在卷之前的扇區(qū)數(shù),用于
24、BIOS的0x13中斷BPB_TotSec32324對(duì)于FAT32類型,為此卷的扇區(qū)總數(shù)結(jié)束標(biāo)志151010x55結(jié)束標(biāo)志251110xAA從偏移36開始FAT12/FAT16的內(nèi)容開始不同于FAT32,表3.2為FAT12/FAT16的內(nèi)容:表3.2 FAT12/FAT16的內(nèi)容名稱偏移 (byte)大小(byte)描述BS_DrvNum361用于BIOS中斷0x13得到磁盤驅(qū)動(dòng)器參數(shù)BS_Reserved1371保留供NT使用BS_BootSig381擴(kuò)展引導(dǎo)標(biāo)記,用于指明后期的3個(gè)域可用BS_VolID394卷標(biāo)序列號(hào),此域往往由日期和時(shí)間組成,用于檢測(cè)磁盤BS_VolLab4311磁盤
25、卷標(biāo),此域必須與根目錄中11字長(zhǎng)的卷標(biāo)一致BS_FilSysType548文件系統(tǒng)類型標(biāo)記,此域?yàn)閷?shí)際的字符串FAT32的內(nèi)容。如下表3.3所示。表3.3 FAT32的內(nèi)容名稱偏移 (byte)大小(byte)描述BPB_FATSz32364一個(gè)FAT表所占的扇區(qū)數(shù)BPB_ExtFlags402Bit0-3:不小于0的活動(dòng)FAT數(shù)目BPB_FSVer422高位為主版本號(hào),低位為此版本號(hào)BPB_RootClus444根目錄所在的第一個(gè)簇號(hào),通常為2BPB_FSInfo482保留區(qū)中FAT32卷FSINFO結(jié)構(gòu)所占扇區(qū)數(shù),通常為1BPB_BkBootSec502保留區(qū)中引導(dǎo)記錄的備份數(shù)據(jù)所占的扇區(qū)
26、數(shù),通常為1BPB_Reserved5212保留BS_DrvNum641同F(xiàn)AT12/16的定義BS_Reserved1651同F(xiàn)AT12/16的定義BS_BootSig661同F(xiàn)AT12/16的定義BS_VolID674同F(xiàn)AT12/16的定義BS_VolLab7111同F(xiàn)AT12/16的定義BS_FilSysType828同F(xiàn)AT12/16的定義,通常設(shè)為“FAT32” FAT表區(qū)FAT表是文件系統(tǒng)一個(gè)重要的數(shù)據(jù)結(jié)構(gòu),每一個(gè)FAT表項(xiàng)綁定一個(gè)數(shù)據(jù)區(qū)的簇,即FAT表的表項(xiàng)數(shù)目與數(shù)據(jù)區(qū)的簇的數(shù)目相等,所以簇的數(shù)目決定了FAT表項(xiàng)所占的位數(shù),如占12位則文件系統(tǒng)為FAT12,占16位則為FAT1
27、6,占32位則為FAT32,其中不允許出現(xiàn)其他的數(shù)字。順序的第一個(gè)FAT表項(xiàng)對(duì)應(yīng)數(shù)據(jù)區(qū)的第一個(gè)簇,第二個(gè)表項(xiàng)對(duì)應(yīng)數(shù)據(jù)區(qū)的第二個(gè)簇。就像每一袋鼠都有一個(gè)袋子一樣,都可以用來存放自己的后繼者。簇的袋子就是對(duì)應(yīng)的FAT表項(xiàng)。FAT表項(xiàng)相當(dāng)于鏈表的next結(jié)點(diǎn),那么文件片段簇4的直接后繼,就應(yīng)該讀取FAT表中的第4個(gè)表項(xiàng),得到的值則為直接后繼的簇號(hào)。對(duì)于特殊的表項(xiàng)值進(jìn)行了如下定義。以FAT32為例,如表3.4所示。表3.4 FAT表區(qū)各個(gè)字段的含義序號(hào)FAT表項(xiàng)值含義10x0000 0000表示本表項(xiàng)對(duì)應(yīng)的簇為空簇,為可用簇20x0000 00020xFFFF FFEF以用簇,表示本表項(xiàng)對(duì)應(yīng)的下一個(gè)簇
28、的簇號(hào)30xFFFF FFF7表示本表項(xiàng)對(duì)應(yīng)的簇為壞簇40xFFFF FFF8置于FAT表的第一個(gè)表項(xiàng),作為磁盤標(biāo)識(shí)符50xFFFF FFFF設(shè)置FAT表的第二個(gè)表項(xiàng),表示第一個(gè)簇被占用60xFFFF FFF80xFFFF FFFF表示本表項(xiàng)對(duì)應(yīng)的簇為最后一個(gè)節(jié)點(diǎn)從表3.4可以看出,F(xiàn)AT表的第一和第二表項(xiàng)都有默認(rèn)值,作為識(shí)別使用,所以文件系統(tǒng)沒有簇0和簇1,簇的命名是直接從簇2開始的。 FAT目錄區(qū)所有鏈表的根源都來自于目錄區(qū),目錄區(qū)存放了一條條記錄,表示各個(gè)目錄和文件的基本屬性。每條記錄占32個(gè)字節(jié)。對(duì)于FAT32,目錄區(qū)和數(shù)據(jù)區(qū)沒有明顯的界線,數(shù)據(jù)和目錄是混合在一起的,每次寫數(shù)據(jù)時(shí)都是先
29、用最小的空閑簇。每條記錄的各個(gè)字段的含義如表3.5所示。表3.5 目錄區(qū)各個(gè)字段的含義名稱偏移 (byte)大小(byte)描述DIR_Name011短文件名DIR_Attr111文件屬性:只讀(x01)、隱藏 (0x02)、系統(tǒng)(0x04)、卷標(biāo)(0x08)、 目錄(0x10)、歸檔(0x20)、長(zhǎng)文件名(0x0F)DIR_NTRes121保留給Window NT使用DIR_CrtTimeTenth131文件創(chuàng)建時(shí)間的毫秒戳,精度為2毫秒DIR_CrtTime142文件創(chuàng)建時(shí)間DIR_CrtDate162文件創(chuàng)建日期DIR_LstAccDate182最后訪問日期,只有日期DIR_FstClu
30、sHI202該目錄或文件的簇號(hào)的高位字DIR_WrtTime222最后寫的時(shí)間,文件被創(chuàng)建被認(rèn)做寫DIR_WrtDate242最后寫的日期,文件被創(chuàng)建被認(rèn)做寫DIR_FstClusLO262該目錄或文件簇號(hào)的低位字DIR_FileSize284文件大小,由32-byte雙字組成 FAT數(shù)據(jù)區(qū)文件是被分割成一個(gè)個(gè)的簇大小的片段,保存在數(shù)據(jù)區(qū)的不同地方。簇是文件存儲(chǔ)的基本單位,即使是一個(gè)只有一個(gè)字節(jié)的文件也要占用一個(gè)簇的空間。3.2 FatFS文件系統(tǒng)的配置FatFS文件系統(tǒng)是高度可裁剪的,可以根據(jù)功能的需求,容量的需求,效率的需求,在ffconf.h中配置需要的功能。函數(shù)和緩沖區(qū)的配置選項(xiàng)有:_
31、FS_TINY、_FS_READONLY、_FS_MINIMIZE、_USE_STRFUNC、_USE_MKFS、_USE_FORWARD、_USE_FASTSEEK。本地命名空間的配置選項(xiàng)有:_CODE_PAGE、_USE_LFN、_MAX_LFN、_LFN_UNICODE、_FS_RPATH。物理驅(qū)動(dòng)的配置選項(xiàng)有:_VOLUMES、_MAX_SS、_MULTI_PARTITION、_USE_ERASE。系統(tǒng)配置的配置選項(xiàng)有:_WORD_ACCESS、_FS_REENTRANT、_FS_TIMEOUT、_SYNC_t、_FS_SHARE。1. _FS_TINY0:為正常模式(默認(rèn)),1:為微
32、型模式。當(dāng)_FS_TINY被設(shè)置為1時(shí),F(xiàn)atFs使用扇區(qū)緩沖來代替正常模式的下文件中的私有緩沖區(qū)。這樣可以為每一個(gè)文件結(jié)構(gòu)類型減少512個(gè)字節(jié)的空間開銷。并且還會(huì)移除一些功能函數(shù)。2. _FS_READONLY0:可讀可寫(默認(rèn)),1:只讀。設(shè)置_FS_READONLY為1時(shí),將會(huì)移除關(guān)于寫的函數(shù),f_write, f_sync, f_unlink, f_mkdir, f_chmod, f_rename,f_truncate and useless f_getfree3. _FS_MINIMIZE可設(shè)置為03 。0為默認(rèn)值。_FS_MINIMIZE選項(xiàng)定義了文件系統(tǒng)的最小級(jí)別。通過移除一些函
33、數(shù),將文件系統(tǒng)分為四個(gè)級(jí)別。0:支持所有功能1:f_stat, f_getfree, f_unlink, f_mkdir, f_chmod, f_truncate and f_rename are removed。2:f_opendir and f_readdir are removed in addition to 1。3:f_lseek is removed in addition to 2。4. _USE_STRFUNC0:禁止(默認(rèn)) 12:使能。通過設(shè)置_USE_STRFUNC來使能和禁止字符串函數(shù)功能。5. _USE_MKFS0:禁止(默認(rèn))1:使能。通過_USE_MKFS來使能f
34、_mkfs(格式化)函數(shù)。此時(shí)_USER_MKFS需要設(shè)置為1,并且_FS_READONLY需要設(shè)置為0。6. _USE_FORWARD0:禁止(默認(rèn))1:使能。通過設(shè)置_USER_FORWARD來使能f_forward函數(shù),需要設(shè)置_USER_FORWARD為1:,并且_FS_TINY設(shè)置為17. _USE_FASTSEEK0:禁止(默認(rèn))1:使能。使能快速定位功能,需要設(shè)置_USE_FASTSEEK為1。8. _CODE_PAGE936:為簡(jiǎn)體中文,0為ASCII。這個(gè)選項(xiàng)精確的規(guī)定了可以使用的OEM字符集,不正確的設(shè)置將會(huì)使文件打開失敗。9. _USE_LFN03可以用來設(shè)置,默認(rèn)為0。
35、_USE_LFN用來選擇支持長(zhǎng)文件名的方式。此處配置為1。0:禁止使用長(zhǎng)文件名,_MAX_LFN和_LFN_UNICODE將不起作用。1:使能長(zhǎng)文件名功能,使用BSS段的靜態(tài)緩沖區(qū)。重入功能將不能被使用。2:使能長(zhǎng)文件名功能,使用動(dòng)態(tài)的棧緩沖區(qū)。3:使能長(zhǎng)文件名功能,使用動(dòng)態(tài)的堆緩沖區(qū)。10. _MAX_LFN12255可以被設(shè)置,用來表示最大長(zhǎng)文件名的長(zhǎng)度。長(zhǎng)文件名的工作緩沖區(qū)占用(_MAX_LFN+1)*2字節(jié)。如果使能了長(zhǎng)文件名,unicode操作函數(shù)ff_convert()和ff_wtoupper()必須被添加。如果使用了是堆緩沖區(qū),那么內(nèi)存控制函數(shù)ff_memalloc()和ff_m
36、emfree()必須被添加。11. _LFN_UNICODE0:ANSI/OEM(默認(rèn)),1:unicode。FatFs API要切換字符編碼形式為Union時(shí),將LEN和LFN_UNICODE為1。12. _FS_RPATH02可以被設(shè)置,默認(rèn)為0。_FS_RPAH用來配置相對(duì)路徑的特性。0:禁止使用相對(duì)路徑,移除相關(guān)的函數(shù)。1:使能相對(duì)路徑特性,可以使用f_chdirve()和f_chdir()兩個(gè)函數(shù)。2:在1的基礎(chǔ)上增加了f_getcwd()函數(shù)。注意:讀取路徑函數(shù)f_readdir()將會(huì)受到這個(gè)選項(xiàng)的影響。13. _VOLUMES默認(rèn)為1。整個(gè)文件系統(tǒng)有幾個(gè)邏輯驅(qū)動(dòng)器(分區(qū))。14
37、. _MAX_SS512(默認(rèn))、1024、2048、4096。扇區(qū)被設(shè)置的最大字節(jié)數(shù)。在硬盤上將會(huì)一直被設(shè)置為512,但是一個(gè)大的分區(qū)可能會(huì)要求,比如在板上flash、軟盤、光盤。如果_MAX_SS大于512,那么disk_ioctl中的GET_SECTOR_SIZE必須生效。15. _MULTI_PARTITION0:?jiǎn)畏謪^(qū),每個(gè)分區(qū)都會(huì)被綁定到一個(gè)屋里驅(qū)動(dòng)號(hào)上。而且只能掛載第一個(gè)分區(qū)。1/2:使能多分區(qū)功能,每一個(gè)分區(qū)都會(huì)去試圖分開在VolToPart中。16. _USE_ERASE0:禁止(默認(rèn)),1:使能。使能扇區(qū)擦除功能,需要設(shè)置_USE_ERASE為1,且必須使disk_ioct
38、l()函數(shù)中的CTRL_EARSE_SECTOR命令生效。17. _WORD_ACCESS01可以被設(shè)置,0為默認(rèn)值。_WORD_ACCESS選項(xiàng)定義了選擇哪一種存儲(chǔ)方式在FAT分區(qū)(卷)中來處理字操作。0為字節(jié)存儲(chǔ),能夠兼容所有的平臺(tái)。1為字存儲(chǔ)。當(dāng)字節(jié)順序?yàn)榇蠖嘶蛘邲]有字對(duì)齊時(shí),必須使用字節(jié)存儲(chǔ)。18. _FS_REENTRANT0:禁止(默認(rèn)),1:使能。_FS_REENTRANT選項(xiàng)用來配置FatFs的重入(線程安全訪問)功能模塊。0:禁止重入,_SYNC_t和_FS_TMEOUT失去作用。1:使能重入,用戶可以提供同步操作,ff_req_grant,ff_rel_grant,ff_d
39、el_syncobj函數(shù)必須被提供。19. _FS_TIMEOUT設(shè)置操作最大所允許的響應(yīng)時(shí)間,在_FS_TIMEOUT個(gè)滴答周期后,發(fā)送timeout信號(hào)。20. _SYNC_t操作系統(tǒng)依所依賴的關(guān)于同步操作的結(jié)構(gòu),比如有:HANDLE,OS_EVENT*,ID等等。21. _FS_SHARE0:禁止(默認(rèn)),大于0:一個(gè)文件所允許打開的次數(shù)。使能文件共享特性,需要設(shè)置_FS_SHARE為大于等于1的數(shù)。這個(gè)值將是所允許同時(shí)打開的文件數(shù)目。3.3 FatFS文件系統(tǒng)結(jié)構(gòu)分析3.3.1 FatFS模塊結(jié)構(gòu)FatFS文件系統(tǒng)由上下兩層組成,上層是文件系統(tǒng)的核心,通過實(shí)現(xiàn)文件系統(tǒng)的操作接口實(shí)現(xiàn)了文
40、件系統(tǒng)的FAT原理。底層是文件系統(tǒng)的基礎(chǔ),主要定義了一些底層扇區(qū)的讀寫、及控制函數(shù)。如圖3.1所示。應(yīng)用程序文件系統(tǒng)層文件操作功能函數(shù)(ff.c)文件操作底層接口函數(shù)(diskio.c)操作系統(tǒng)時(shí)間管理信號(hào)量操作STDIOGPIOUARTRTC芯片、外設(shè)及其對(duì)應(yīng)的外設(shè)庫(kù)圖3.1 FatFS模塊結(jié)構(gòu) 3.3.2 FatFS定義的結(jié)構(gòu)體FatFS文件系統(tǒng)用到了基本的四個(gè)結(jié)構(gòu)體類型,分別為FATFS、FIL、DIR、FILINFO。1. FATFS定義了文件系統(tǒng)的一些基本屬性,主要是文件系統(tǒng)保留區(qū)的的信息。1) fs_type 0表示沒有掛載2) drv 物理驅(qū)動(dòng)器號(hào)3) csize 每個(gè)簇的扇區(qū)數(shù)
41、4) n_fats 本文件系統(tǒng)共有幾個(gè)fat表5) wflag 緩沖win寫滿標(biāo)識(shí),如果為1的話必須回寫6) fsi_flag fsinfo結(jié)構(gòu)寫滿標(biāo)識(shí),如果為1的話必須回寫7) id 文件系統(tǒng)的掛載ID8) n_rootdir根目錄下的入口個(gè)數(shù)9) ssize 每個(gè)扇區(qū)的字節(jié)數(shù),僅在_MAX_SS不等于512時(shí)有效10) _SYNC_t在多線程中實(shí)現(xiàn)同步操作的結(jié)構(gòu),只有在使能重入配置時(shí)才有效11) last_clust 最后一個(gè)存儲(chǔ)的簇號(hào),在只讀模式下無效12) free_clust 空閑簇的數(shù)目,在文件系統(tǒng)中有專門的扇區(qū)來存放空閑的簇的數(shù)目,在只讀模式下無效13) fsi_sector f
42、sinfo結(jié)構(gòu)的扇區(qū),在只讀模式下無效14) cdir 用來記錄當(dāng)前文件的起始簇號(hào),在使能相對(duì)路徑時(shí)才有效15) n_fatnet 最大的簇號(hào)16) fsize 一張fat表所占用的扇區(qū)數(shù)17) fatbase fat表區(qū)的起始扇區(qū)號(hào)18) dirbase 目錄區(qū)的起始扇區(qū)號(hào)19) database 數(shù)據(jù)區(qū)的起始扇區(qū)號(hào)20) winsect 當(dāng)前在win緩沖區(qū)中存放的扇區(qū)號(hào)21) win 磁盤存儲(chǔ)窗口,微型文文件系統(tǒng)沒有這個(gè)緩沖區(qū)2. FIL定義了文件的讀寫信息,包括讀寫指針的位置,當(dāng)前所在簇,當(dāng)前扇區(qū),文件的大小等。1) fs 指向自身所在的文件系統(tǒng)的指針2) id 此文件系統(tǒng)掛載的ID3)
43、 flag 文件狀態(tài)標(biāo)志4) padl5) fptr 文件讀寫指針,0:表示文件剛打開6) fsize 此文件的大小7) sclust 文件的起始簇號(hào),當(dāng)文件大小為0時(shí),起始簇號(hào)也為08) clust 當(dāng)前所在的簇9) desct 當(dāng)前的所在扇區(qū)號(hào)10) dir_sect 扇區(qū)包含的目錄入口,只有在讀寫模式下才有效11) dir_ptr 在win緩沖區(qū)中指向目錄入口的指針,只有在讀寫模式下才有效12) cltbl 指向簇鏈接表的指針,當(dāng)文件打開時(shí)為null,只有在使能快速查找功能時(shí)才有效13) lockid 文件鎖定號(hào)(在信號(hào)量表中的索引)14) buf 文件的讀寫緩沖區(qū)3. DIR目錄結(jié)構(gòu)體
44、定義了目錄的一些基本信息1) fs 指向自身所在的文件系統(tǒng)的指針2) id 此文件系統(tǒng)掛載的ID3) index 當(dāng)前讀寫索引號(hào)4) sclust 起始簇號(hào)5) clust 當(dāng)前所在簇的粗豪6) sect 當(dāng)前扇區(qū)號(hào)7) dir 在win緩沖區(qū)中指向短文件名得起始地址8) fn 指向SFN的指針,指向短文件名9) lfn 指向長(zhǎng)文件名得工作緩沖區(qū),只有在使能長(zhǎng)文件名的時(shí)候才可以使用10) lfn_idx 最后一個(gè)匹配的長(zhǎng)文件名索引號(hào),0xFFFF:表示沒有長(zhǎng)文件名,只有在使能長(zhǎng)文件名得時(shí)候才能使用4. FILINFO文件的屬性結(jié)構(gòu)體,定義了文件的基本屬性,創(chuàng)建日期,修改日期,訪問日期等等1)
45、fsize 文件的大小2) fdate 文件的修改日期3) ftime 文件的修改時(shí)間4) fattrib 文件的基本屬性5) fname 短文件名6) lfname 指向長(zhǎng)文件名得指針7) lfsize 記錄長(zhǎng)文件名得長(zhǎng)度3.4 SD卡接口 SD協(xié)議SD卡是基于flash的存儲(chǔ)卡。SD卡和MMC卡的區(qū)別在于初始化的過程不同。SD卡的通信協(xié)議包括SD和SPI兩類。SD卡使用卡內(nèi)智能控制模塊進(jìn)行FALSH操作控制,包括協(xié)議、安全算法、數(shù)據(jù)存儲(chǔ)、ECC算法、缺陷處理和分析、電源管理、時(shí)鐘管理。SD卡結(jié)構(gòu)如圖3.2所示。SD卡Flash模塊SD卡控制芯片數(shù)據(jù)輸入/輸出SD總線/SPI總線接口控制圖3
46、.2 SD卡接口圖SD總線協(xié)議是基于命令和數(shù)據(jù)位流的方式的,有一個(gè)起始位開始,以一個(gè)停止位結(jié)束。命令命令是開始操作的標(biāo)記。命令從主機(jī)發(fā)送一個(gè)卡(尋址命令)或所有連接的卡(廣播命令)。命令在CMD線上串行傳送。響應(yīng)響應(yīng)是從尋址卡或所有連接的卡(同步)發(fā)送給主機(jī)用來響應(yīng)接受到的命令的標(biāo)記。命令在CMD線上串行傳送。響應(yīng)標(biāo)記(token)根據(jù)內(nèi)容不同具有四種格式,標(biāo)記長(zhǎng)度。長(zhǎng)度為48位或136位。數(shù)據(jù)塊的CRC算法采用16位的CCITT多項(xiàng)式。數(shù)據(jù)數(shù)據(jù)可以通過數(shù)據(jù)線在卡和主機(jī)間雙向傳送。 SD命令SD卡的命令長(zhǎng)度為48位,命令格式如下表3.6所示。表3.6 命令結(jié)構(gòu)01bit5.bit0bit31b
47、it0bit6bit01起始位Host命令編號(hào)參數(shù)CRC7結(jié)束位SD卡命令集分為基本命令、讀塊命令、寫塊命令、擦除命令、寫保護(hù)命令、鎖命令、應(yīng)用命令7類,每個(gè)類支持一個(gè)卡功能集合操作。用的命令如表3.7所示。表3.7 常用的SD卡命令命令索引類型參數(shù)響應(yīng)縮寫描述CMD0bc-GO_IDLE_STATE重置所有卡到空閑狀態(tài)CMD8bcr31:12保留 11:8電壓7:0模式R7SEND_IF_COND發(fā)送SD卡的接口環(huán)境ACMD41bcr31:1OCRR3SD_APP_OP_COND請(qǐng)求條件寄存器OCRCMD2bcr31:0數(shù)據(jù)位R2ALL_SEND_CID請(qǐng)求標(biāo)識(shí)寄存器CIDCMD3bcr31
48、:0數(shù)據(jù)位R6SENG_ELATIVE_ADDR要求提供新的地址RCACMD7ac31:16RCA15:0數(shù)據(jù)位R1bSELEC/DESELECT_CARD選擇或者取消卡3.5 FatFS文件系統(tǒng)的移植FatFS文件系統(tǒng)具有很好的移植性和層次性,能夠在所有的支持C標(biāo)準(zhǔn)系統(tǒng)下運(yùn)行。目前FatFS在微控制器領(lǐng)域廣泛應(yīng)用,相關(guān)的資源比較多。本節(jié)討論FatFS文件系統(tǒng)在uTenux上移植和一些注意事項(xiàng)。導(dǎo)體(ST)的STM32f407ZG,SD卡選擇的為MicroSD卡,容量為2G。把FatFS編譯進(jìn)uTenux內(nèi)核,然后通過J-Link燒寫到開發(fā)板SRAM中,復(fù)位加載內(nèi)核。本次移植工作采用的是宿主機(jī)
49、+目標(biāo)板的開發(fā)模式。宿主機(jī)為PC+Win7,目標(biāo)板為意法半FatFs具備清晰的層次結(jié)構(gòu),這種層次結(jié)構(gòu)使得文件系統(tǒng)與硬件相關(guān)的部分都包含在diskio.c中,即只需要按照disk.h編寫出對(duì)應(yīng)的disk.c即可使文件系統(tǒng)運(yùn)行起來。 開發(fā)環(huán)境uT/Stdio本次移植工作是在uT/Studio1 V3.1上進(jìn)行開發(fā)編譯的。在微控制器的開發(fā)過程中,大學(xué)生和小企業(yè)因?yàn)槌杀驹颍荒苜?gòu)買商業(yè)軟件,這時(shí)可以使用悠龍軟件的開源免費(fèi)的開發(fā)環(huán)境工具-uT/Studio 工具鏈,其中包含了Eclipse 集成開發(fā)環(huán)境、ARM 公司針對(duì)微控制器優(yōu)化的GNU 編譯器及其二進(jìn)制工具集、MSYS 最小POSIX系統(tǒng)工具集。
50、推薦使用的仿真器是J-Link ICE V8,其中包括了FlashROM 的燒寫工具和在線調(diào)試工具等。下載相關(guān)代碼:(1)從下載uT/Studio V3.1安裝包,并參照軟件包中的uT-Studio_V_CuT-Studio_Editionmanual手冊(cè)進(jìn)行uT/Studio安裝。(2)從 下載uTenux V1.500R160 源代碼。(3)從/fsw/ff/00index_e.html 下載FatFs R0.09源代碼。(4)從意法半導(dǎo)體(ST)官網(wǎng)下載SD卡庫(kù)。3.5.2 構(gòu)建移植環(huán)境將uTenux V1.5工程導(dǎo)入uT/Studio中,建立相關(guān)目錄
51、,如表3.8所示。表3.8新建目錄和文件序號(hào)目錄子目錄子目錄子目錄說明1include2sbs3midfatfsFatfs、sd卡頭文件4subass5midfatfs6build7app_stm32f4makefile8src源文件9diskio.c新建文件1.將FatFs源代碼和SD卡庫(kù)中的.h文件復(fù)制到include/sbs/midfatfs目錄下。將FatFs源代碼和SD卡庫(kù)中的.c文件復(fù)制到include/sbs/midfatfs目錄下。2.修改數(shù)據(jù)類型:為了使整個(gè)工程都遵循C99標(biāo)準(zhǔn),需要修改添加進(jìn)來的程序文件,并將之前的類型定義文件integer.h刪除,修改規(guī)則如表3.9所示。注意:(1)將所有源數(shù)據(jù)類型替換為對(duì)應(yīng)的目標(biāo)數(shù)據(jù)類型,注意不要將注釋或字符串替換。(2)將#include”integer.h”替換為#include”ts_basic.h”;將#include替換為#include”ts_basic.h”;將option*.c 中#incliude“./ff.h”替換為#include“ff.h”。(3)將sdcard.c中bool類型的聲明刪除。(4)將integer.h文件刪除。 需要修改的文件有includesbsmidfatfs*.h, subassmidfatfssrc*.c, subass midfatfssrco
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版商業(yè)建筑外墻改造與拆除一體化服務(wù)合同3篇
- 2025版土地承包經(jīng)營(yíng)權(quán)轉(zhuǎn)包合同(含農(nóng)業(yè)保險(xiǎn))2篇
- 二零二五版物流運(yùn)輸保證合同印花稅繳納規(guī)定2篇
- 2025年度木材產(chǎn)業(yè)鏈上下游合作發(fā)展合同4篇
- 2025年寬帶網(wǎng)絡(luò)安全協(xié)約
- 2025年壓瘡預(yù)防護(hù)理服務(wù)合同
- 2025年委托招標(biāo)合同
- 2025年卵巢囊腫手術(shù)協(xié)議
- 2025年度木材加工行業(yè)安全監(jiān)管合作協(xié)議3篇
- 2025年加盟運(yùn)營(yíng)推廣合作協(xié)議
- 眼的解剖結(jié)構(gòu)與生理功能課件
- 小學(xué)網(wǎng)管的工作總結(jié)
- 2024年銀行考試-興業(yè)銀行筆試參考題庫(kù)含答案
- 泵站運(yùn)行管理現(xiàn)狀改善措施
- 2024屆武漢市部分學(xué)校中考一模數(shù)學(xué)試題含解析
- SYT 0447-2014《 埋地鋼制管道環(huán)氧煤瀝青防腐層技術(shù)標(biāo)準(zhǔn)》
- 浙教版七年級(jí)下冊(cè)科學(xué)全冊(cè)課件
- 弧度制及弧度制與角度制的換算
- 瓦楞紙箱計(jì)算公式測(cè)量方法
- DB32-T 4004-2021水質(zhì) 17種全氟化合物的測(cè)定 高效液相色譜串聯(lián)質(zhì)譜法-(高清現(xiàn)行)
- DB15T 2724-2022 羊糞污收集處理技術(shù)規(guī)范
評(píng)論
0/150
提交評(píng)論