999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于SD卡的FAT32文件系統設計與實現

2017-07-20 14:32:50李敏侯亞玲劉穎
物聯網技術 2017年7期

李敏++侯亞玲++劉穎

摘 要:為解決嵌入式系統中便攜式存儲設備的大容量數據存儲問題,并便于對數據進行查詢、讀取及分析,系統采用具備SD卡插座的Cortex M3處理器平臺,分析了SD卡的驅動實現,并按照FAT32文件系統規范進行文件系統設計。設計使用c語言進行開發,通過系統采集實時溫度,并將數據按照一定的格式規范存儲在SD卡的文件中;通過讀取SD卡進行數據的查詢、讀取。經反復測試,系統運行穩定,數據的存儲及讀取都很可靠,且軟件便于移植,可應用于大容量數據采集的系統中。

關鍵詞:SD卡;FAT32文件系統;SPI;ds18b20

中圖分類號:TP39;TN915.41 文獻標識碼:A 文章編號:2095-1302(2017)07-00-03

0 引 言

隨著嵌入式技術的飛速發展,很多嵌入式系統都需要大容量的存儲設備,用于數據存儲。而當前,常用的存儲設備有U盤、移動硬盤、Flash芯片、SD卡等,它們各有優缺點。綜合考慮在系統設計時的性價比、功耗及體積等要求時,SD卡無疑是一個非常好的選擇。隨著存儲技術的發展,其容量也越來越大,可以達到32 G以上,且支持SPI接口,同時SD卡有幾種不同的體積可供選擇,可滿足不同的設計及應用要求。

具備SPI接口的嵌入式系統只需4個I/O接口就可以擴展達32 G以上的外部存儲器,存儲容量不等,設備更換方便,程序在不同的設備上移植也更簡單。基于以上優點,SD卡在嵌入式市場得到廣泛應用,成為存儲設備的首選。然而SD卡中的數據以塊的形式進行存儲,不便于數據的組織管理,為了能夠在PC端有效的對數據進行存儲、管理、查詢及讀取,需要對SD卡進行文件系統的設計。一般而言,PC端可直接對其進行格式化后直接使用,而在嵌入式系統中,需要設計FAT文件系統對其進行數據管理。

1 SD卡驅動設計

SPI有9個引腳,支持兩種操作模式,即SD卡模式(SDIO通信)和SPI模式[1]。SD卡模式允許4線的高速數據傳輸模式,但需要MCU帶SD卡控制器,設計中會增加產品的硬件成本;SPI模式通過SPI總線接口與SD卡通信。

設計中采用的MCU為Cortex M3,它是一種低功耗、內核架構為ARM7的控制器,自帶SPI控制器。處理器平臺SD卡硬件連接電路均已完成,采用SPI連接方式。

系統使用SPI模式。系統上電后,設置SD卡模式轉換為SPI模式。在SD卡收到復位命令(CMO)時,CS引腳被拉低,進入SPI模式。上電后,因為SD卡內部供電電壓上升時間需要大約64個CLK,還需要10個CLK用于SD卡同步,在發送CMO指令前,發送至少74個系統CLK,初始化時,CLK最大不得超過400 kHz。

通過SD卡初始化就可以知道SD卡的類型,讀寫數據。SD卡讀取數據通過 CMD17實現,具體過程如下:

(1)發送 CMD17;

(2)接收卡響應 R1;

(3)接收數據起始令牌 0XFE;

(4)接收數據;

(5)接收 2 個字節的 CRC,如果不使用CRC,這兩個字節在讀取后可以丟掉。

(6)禁止片選之后發送8個CLK;

SD卡的寫和讀數據過程基本相同,寫數據通過CMD24實現[2],具體過程如下:

(1)發送CMD24;

(2)接收卡響應R1;

(3)發送寫數據起始令牌0XFE;

(4)發送數據;

(5)發送2 B的偽CRC;

(6)禁止片選之后多發8個CLK。

2 FAT32文件系統介紹

為了有效管理寫入SD卡的數據,使SD卡在PC機端能夠被有效訪問,必須將SD卡中的數據以文件形式存儲,需要在SD卡中創建常用的文件系統。目前,SD卡的容量越來越大,因此設計中采用FAT32文件系統。

在設計中使用了FATFS,它是一種開源免費且專用于小型嵌入式系統的文件系統模塊,硬件獨立性強,是Windows系統兼容的文件系統格式,其代碼特點與平臺無關,支持長文件名、多種大小的扇區[3]。基于此特點,FATFS的使用非常廣泛,其層次結構如圖1所示。

應用層用戶只需調用FATFS模塊提供給用戶接口函數,就可在PC機上對SD卡進行讀寫操作[4]。中間層FATFS模塊實現了FAT文件的讀/寫協議,使用中一般不做修改,可直接將相關頭文件包含在應用程序中。編寫移植代碼的是FATFS模塊提供的底層接口,包括存儲媒介讀/寫接口以及提供文件創建修改時間的實時時鐘。在FATFS源碼包中,需要修改的是與平臺相關的代碼diskio.c,即FATFS和disk I/O模塊接口層文件[5]。

FATFS模塊在移植時,只需修改2個文件,即ffconf.h 和 diskio.c。FATFS模塊的所有配置項都存放在ffconf.h中,可以通過配置一些選項來滿足設計的需求。對于SD卡的一些操作特性,可修改ffconf.h中的宏定義來實現,比如宏_FS_READONLY將其設置為0,即表示對SD卡進行讀寫權限的操作,_USE_MKFS為1表示使能SD卡的格式化操作等。

FATFS的移植主要分為3個步驟:

(1)在 integer.h 里定義好數據的類型;

(2)根據對SD卡的功能需要,通過 ffconf.h配置FATFS的相關功能;

(3)函數編寫:打開 diskio.c以進行底層驅動編寫,實現 6個接口函數的編寫,如圖2所示。

通過上述步驟就可以完成FATFS的移植。

3 FAT32文件系統設計

FAT32文件系統的設計包括以下步驟:

(1)程序初始化。定義兩個結構體變量,其類型分別為DIR與FILINFO[6]。其中,DIR結構體表示文件夾目錄相關信息,例如文件夾cewen,文件夾下有文件wendu1.txt,wendu2.txt,wendu3.txt以及文件夾cw。DIR用來存儲LM、limin的目錄信息,FILINFO用來存儲limin1.txt,limin2.txt,limin3.txt。

DIR cewendir;//臨時目錄信息

FILE fileinfo;//臨時文件信息

(2)程序初始化中要初始化內存,因為文件信息分配的內存空間大,一般存儲在內部RAM中,也可存放在外部RAM中。先初始化內存,再申請fata所用到的變量分配內存空間。

mem_init(SRAMIN);//初始化內部內存池

exfuns_init( );//為FATFS相關變量申請內存[7]

(3)掛載SD卡。只有掛載了SD卡,才能使用,即尋找是否存在。

f_mount(0,fs[0]);//掛載SD卡

(4)打開SD卡下的文件夾,函數為FRESULT f_opendir (DIR *dj,/* 指向一個空白的結構體,用來存儲要打開的文件信息,用到初始化定義的DIR型變量*/const TCHAR *path /*指向文件夾名稱的指針,即打開文件的路徑 */)。函數返回0 ,表示打開文件成功,否則表示打開失敗[8]。

res=f_opendir ( &cewen, "0:/"); //打開 0:/cewen文件夾,文件夾的信息保存在結構體cewendir變量中,res為0,打開成功

(5)讀取文件信息。在讀取文件信息之前,先要申請相關變量信息的內存。

fileinfo.lfsize=_MAX_LFN*2+1; //長文件名最大長度

fileinfo.lfname=mymalloc(SRAMIN,fileinfo.lfsize);//為長文件緩存區分配內存

(6)只有成功打開文件夾,才能讀取或更改文件夾下的文件,與Windows系統下的使用原理一樣。判斷通過res進行,即if(res==FR_OK){讀取文件夾}

(7)讀取文件夾函數為:FRESULT f_readdir (DIR *dj,/*指向讀取的文件夾信息結構體的指針,打開文件夾后,文件夾的信息已存入信息結構體 */FILINFO *fno,/* 指向文件信息結構體,用來存儲讀取到的文件信息*/)。重復調用此函數可讀取文件夾內的所有文件,當所有的文件讀取結束后[9],函數返回一個空字符串到f_name[ ]中(文件信息結構體中的一個變量,存放名稱)

if(res==FR_OK) {while(1){res = f_readdir(&lmdir,&fileinfo);//遍歷文件

if(res!=FR_OK || fileinfo.fname[0]==0)

{ Show_Str(60,130,200,16,"出錯了",16,0);break;}//讀取出錯或遍歷結束,則退出

fn=(u8*)(*fileinfo.lfname?fileinfo.lfname:fileinfo.fname); printf(fn);//輸出文件名} }

以上步驟是對于文件夾及文件的操作,以下步驟為文件的讀寫操作:

(1)打開或新建一個文件(返回值為0則成功)。

FRESULT f_open (

FIL *fp,/* 指向一個用來存儲文件對象的空結構體指針*/

const TCHAR *path, /* 指向文件名的指針,即路徑*/

BYTE mode /* 讀取方式*/

讀取方式的使用:

FA_READ讀模式(讀寫同時生效)

FA_WRITE寫模式(讀寫同時生效)

FA_OPEN_EXISTING默認打開方式

FA_OPEN_ALWAYS打開文件,如果不存在,則建立一個新文件;用此種方式可以用f_lseek在文件后追加數據。

FA_CREATE_NEW新建文件,如果文件已存在,則新建失敗

FA_CREATE_ALWAYS新建文件,如果文件已存在,覆蓋舊文件。

新建一個文件:

res=f_open(&fsrc,"0:/dongman.txt",FA_OPEN_ALWAYS); //打開,新建文件測試

if(res==FR_OK)

{

POINT_COLOR=0x2299; Show_Str(60,170,200,16,"新建文件成功!",16,0);}

f_close(&fsrc);

(2)讀取文件(讀取成功返回0)。

FRESULT f_read (

FIL *fp/* 指向文件對象結構體指針*/

void *buff/* 指向存儲讀取到的數據的緩沖區的指針 */

UINT btr/* 準備讀取的字節數 */

UINT *br /* 讀取到的字節數 */

f_read函數執行完后,*br值用來存放讀取到的字節數,br

res=f_open(&fsrc,"0:/limin2.txt",FA_READ); // 打開,新建文件測試

if(res==FR_OK)

{

USART1_SendStr("文件內容:");

USART1_SendStr("\r\n");

while(1){

res=f_read(&fsrc,pr,256,&br);

if(res ||br < 256)

break;

USART1_SendStr(pr);

USART1_SendStr("\r\n");

Show_Str(60,170,200,16,"讀取成功!",16,0); } }

f_close(&fsrc); //關閉文件,不論是打開還是新建,一定要關閉。

4 系統總體設計

系統主控核心為Cortex-M3,搭載DS18B20溫度傳感器[10],實現溫度的實時測量,每5 s測量一次溫度,將測量的數據寫入SD卡的wendu.txt文件中。設計中需要實現的功能模塊為DS18B20測溫的驅動實現,SD卡驅動實現,SD卡fate32文件系統實現及主控任務實現,系統設計總流程如圖3所示。

圖3 系統設計總流程圖

在設計中,SD卡Fate32文件系統的實現步驟全面可行,系統上電后,會依次初始化各相關模塊。SD卡首先檢測是否插接正常并給予提示。系統檢測到SD卡,會掛接SD卡到主控系統并在SD卡根目錄中創建一個名為wendu.txt的測溫記錄文檔(如果已經存在,則直接打開該文檔)。準備工作完成后,系統開始循環測溫,并將每一次測溫結果以及RTC時間格式化寫入文檔中。可設定文檔大小,如果寫入信息超過500 K,則關閉現打開文檔,重新建立文檔記錄。

5 結 語

經測試,系統工作穩定,SD卡插接正常可穩定打開,也可以FAT32格式進行格式化。通過軟件設計,可在SD卡中創建文件、打開文件、關閉文件及刪除文件,所采集的數據能夠正常寫入文件中,并可結合RTC寫入當前數據的采集時間供后續分析使用。SD卡可在PC端打開,提供采集的文本信息。設計中使用溫度采集進行測試,也可按需求采集具體所需數據。FAT32文件系統的實現設計可移植性良好,可移植于單片機及各類控制器的信息采集存儲系統中。

參考文獻

[1]王淵,楊婧.一種基于SD卡的口令認證密鑰協商方案[J].信息安全與通信保密,2014(10):88-92.

[2]劉智勇,陳鵬飛,宿磊,等.基于STM32芯片的U盤/SD卡文件傳輸技術研究[J].現代電子技術,2014,37(18):107-109.

[3]石長華,謝恩.基于FAT32文件系統和SD卡的陶瓷窯爐測溫儀設計[J].激光雜志,2014(7):100-103.

[4]樊海洋,王立鵬,安曉捧,等.FAT32文件系統數據恢復技術的研究[J].科技信息,2013(36).

[5]夏昀.基于FAT32文件系統的安全存儲方案[D].上海:上海交通大學,2013.

[6]楊明極,陳方縣,吳學君.嵌入式系統中SD卡的FAT32文件系統的設計[J].電聲技術,2010,34(4):36-39.

[7]顧春洋,李鑫,張強.基于SD卡的FAT32文件系統設計與實現[J].產業與科技論壇,2013,12(2):96-98.

[8]楊書凱.劉慧.一種用于高速數據采集的改進FAT32文件系統[J].信息技術與信息化,2011(6):68-70.

[9]何諧. FAT32文件系統在Cortex-M3音樂播放器中的應用[J].單片機與嵌入式系統應用,2013,13(6):71-73.

[10]袁杰,江祖敏.基于FAT32的文件隱藏方法及在Linux上的實現[J].電子設計工程,2012,20(13):15-18.

主站蜘蛛池模板: 婷婷久久综合九色综合88| 亚洲精品卡2卡3卡4卡5卡区| 久久黄色毛片| 91精品人妻互换| 日本免费福利视频| www成人国产在线观看网站| 69av免费视频| 国产在线观看一区精品| yjizz国产在线视频网| 国产在线精彩视频二区| 亚洲美女一级毛片| 天天做天天爱夜夜爽毛片毛片| 久久免费看片| 国产精品浪潮Av| 国产Av无码精品色午夜| 91精品视频在线播放| 午夜福利免费视频| 毛片一级在线| 国产在线视频导航| 国产v欧美v日韩v综合精品| 视频一区视频二区日韩专区| 精品五夜婷香蕉国产线看观看| 99手机在线视频| 无码内射在线| 思思热精品在线8| 国产日本欧美亚洲精品视| 国产精品无码影视久久久久久久| 欧美精品高清| 狠狠v日韩v欧美v| 国产网站免费观看| 亚洲欧美日韩中文字幕在线一区| 日本成人在线不卡视频| 色综合中文综合网| 亚洲第一区欧美国产综合| 亚洲国产系列| 国产欧美日韩免费| 夜夜拍夜夜爽| a亚洲天堂| 欧美天堂在线| 日韩无码黄色网站| 在线观看欧美精品二区| 日韩午夜福利在线观看| 2021最新国产精品网站| 欧美综合成人| 亚洲人在线| 操美女免费网站| 在线观看视频99| 丝袜久久剧情精品国产| 免费中文字幕在在线不卡| 第一页亚洲| 久久先锋资源| 日韩无码精品人妻| 91网站国产| 重口调教一区二区视频| 九九香蕉视频| 欧美日本在线观看| 波多野结衣在线一区二区| 国产精品任我爽爆在线播放6080 | 国产精品网拍在线| 久久亚洲高清国产| 青青草一区| 亚洲最大福利网站| 2021精品国产自在现线看| 亚洲Av激情网五月天| 五月婷婷综合在线视频| 精品国产www| 亚洲黄网视频| 欧美亚洲综合免费精品高清在线观看 | 黄片一区二区三区| 亚洲经典在线中文字幕| 午夜久久影院| 国产精品区网红主播在线观看| 天天综合色网| 久久亚洲黄色视频| 亚洲国产综合精品一区| 国产一区二区三区在线观看免费| 国产色婷婷| 国产成人h在线观看网站站| 午夜天堂视频| 久久久久中文字幕精品视频| 伊人网址在线| 伊人蕉久影院|