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.

主站蜘蛛池模板: 国产精品免费露脸视频| 日本少妇又色又爽又高潮| 免费看av在线网站网址| 欧美a在线视频| 精品人妻一区二区三区蜜桃AⅤ | 人妻一区二区三区无码精品一区| 久久久久国产精品熟女影院| 色综合成人| 国产AV无码专区亚洲A∨毛片| 永久在线精品免费视频观看| 日韩精品欧美国产在线| 99视频有精品视频免费观看| 激情午夜婷婷| 国产一级视频在线观看网站| 999国内精品视频免费| 免费毛片a| 97视频精品全国免费观看| 一级一毛片a级毛片| 久久一色本道亚洲| 91成人试看福利体验区| 亚洲三级影院| av一区二区三区在线观看| 国产激爽爽爽大片在线观看| 国产成人你懂的在线观看| 美女黄网十八禁免费看| 伊人久久精品亚洲午夜| 亚洲日韩精品欧美中文字幕| 久久国产精品国产自线拍| 亚洲成人免费在线| 五月丁香伊人啪啪手机免费观看| 性网站在线观看| 国产成人午夜福利免费无码r| 日韩国产一区二区三区无码| 色丁丁毛片在线观看| 国产精品无码AV中文| 国产成人综合久久精品尤物| 91国内在线视频| 久久精品中文字幕免费| 小说区 亚洲 自拍 另类| 欧美α片免费观看| 欧美视频在线播放观看免费福利资源| 亚洲综合中文字幕国产精品欧美| 欧美午夜在线观看| 午夜限制老子影院888| 欧美伦理一区| 免费日韩在线视频| 国产黄在线免费观看| 国产欧美精品专区一区二区| 黄色不卡视频| 亚洲精品桃花岛av在线| 波多野结衣无码AV在线| 亚洲日韩每日更新| 国产日韩欧美在线播放| 国产午夜精品一区二区三| 亚洲AV成人一区二区三区AV| 1024国产在线| 亚洲综合在线网| 日韩成人在线网站| 中文精品久久久久国产网址 | 综合久久五月天| 亚洲福利片无码最新在线播放| 澳门av无码| www.亚洲国产| 中文字幕无线码一区| 男人天堂亚洲天堂| 美女裸体18禁网站| 成人福利在线看| 在线亚洲小视频| lhav亚洲精品| 久久香蕉国产线看观看式| 中文字幕在线播放不卡| 日韩 欧美 小说 综合网 另类| 国模沟沟一区二区三区| 亚洲欧美国产视频| 无码 在线 在线| 国产精品亚欧美一区二区三区| 国产精品久久久久久久伊一| 91视频青青草| 欧美日韩午夜视频在线观看| 色成人综合| 久久久久久午夜精品| 国产一二视频|