<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于A(yíng)RM9和μC/OS-II的SD卡文件系統設計與實(shí)現

基于A(yíng)RM9和μC/OS-II的SD卡文件系統設計與實(shí)現

作者: 時(shí)間:2012-07-31 來(lái)源:網(wǎng)絡(luò ) 收藏

摘要:主要針對貨車(chē)動(dòng)態(tài)稱(chēng)重中大量實(shí)時(shí)載重數據存取的需求而做的。該和μC/相結合的軟硬件平臺,了一種。卡的接口電路采用總線(xiàn)模式連接,軟件嵌入式操作系μC/,參照FAT32規范。實(shí)際應用表明,該設計能夠滿(mǎn)足大量數據的存取效率以及管理的技術(shù)指標。
關(guān)鍵詞:;SD卡文件系統;數據存取,μC/;文件管理

隨著(zhù)嵌入式式技術(shù)的不斷發(fā)展,ARM處理器憑借其高性能、廉價(jià)、耗能低的優(yōu)質(zhì)特性而得到廣泛應用。文中主要針對貨車(chē)動(dòng)態(tài)稱(chēng)重系統中大量實(shí)時(shí)載重數據存取的需求,在嵌入式處理器和μC/OS-II操作系統基礎上,設計了一種SD卡文件系統。該系統具有實(shí)時(shí)性強、存取速率高、易維護,易移植等特點(diǎn)。

1 硬件接口電路設計
本系統硬件開(kāi)發(fā)平臺處理器為S3C2440A,是三星公司推出的16/32位RISC微處理器,ARM920T內核,主頻400 MHz,最高可達533 MHz,內部具有豐富的系統外圍控制器和多種通信接口。SD卡支持SPI和SD兩種通信模式,S3C2440A具有SD卡接口,支持SD總線(xiàn)模式,所以不再像低端的ARM處理器那樣采用SPI模式,而是采用SD總線(xiàn)模式,這樣可以大大提高SD卡的讀寫(xiě)速度。S3C2440A與SD卡讀寫(xiě)器的接口電路如圖1所示。

本文引用地址:http://dyxdggzs.com/article/148683.htm

a.JPG


SD卡的DAT0~DAT3、CLK(時(shí)鐘線(xiàn))和CMD(命令線(xiàn))分別連接到S3C2440A的SDDATA0~SDDATA3、SDCLK和SDCMD引腳。SD卡支持單線(xiàn)和寬總線(xiàn)的數據傳輸,寬總線(xiàn)數據一次傳4位,數度更快,因此,此設計采用寬總線(xiàn)方式。

2 SD卡文件系統的設計與實(shí)現
μC/OS-II是一種可移植的,可植入ROM的,可裁剪的,搶占式的,實(shí)時(shí)多任務(wù)小型的嵌入式操作系統,它采用可剝離式內核實(shí)施任務(wù)調度,實(shí)時(shí)性很強,而且每個(gè)任務(wù)具有唯一的優(yōu)先級,能夠保證就續表中任務(wù)優(yōu)先級最高的任務(wù)優(yōu)先執行。μC/OS-II大部分代碼是用移植性很高的C語(yǔ)言編寫(xiě)的,只極少部分與處理器密切相關(guān)的部分代碼用匯編語(yǔ)言編寫(xiě),因此只需要做很少的工作就可以很方便地將它移植到各種不同構架的微處理器上。

b.JPG


為了增強軟件的可移植性,易維護性,程序設計時(shí)采用層次化,模塊化設計。模塊化結構如圖2所示,除了用來(lái)進(jìn)行管理的操作系統外,共分為4個(gè)模塊,包括SD卡底層驅動(dòng),文件系統,API接口,用戶(hù)應用程序。底層驅動(dòng)完成SD卡初始化,以及實(shí)質(zhì)上的讀寫(xiě)功能;文件系統采用PC機普遍支持的FAT32文件系統規范來(lái)設計,完成文件的創(chuàng )建,讀寫(xiě),刪除功能;API接口封裝文件系統提供的函數,供上層應用使用;用戶(hù)應用程序通過(guò)調用文件系統提供的API函數,完成相應的功能。各個(gè)模塊的具體實(shí)現下面會(huì )做以說(shuō)明。
2.1 底層驅動(dòng)設計
2.1.1 SD卡初始化
SD卡讀寫(xiě)操作都是命令的,通過(guò)向SD卡發(fā)送命令并讀取命令的響應來(lái)實(shí)現對SD卡的控制。在SD卡讀寫(xiě)之前,首先要進(jìn)行初始化操作。這是確保SD卡能進(jìn)行正常數據讀寫(xiě)的前提,SD卡初始化完成了SD卡上電,確認,設置邏輯地址,使其進(jìn)入傳輸狀態(tài)以及設置總線(xiàn)帶寬幾大主要工作。需要注意的是,在發(fā)送使SD卡空閑命令CMD0之前至少等待74個(gè)時(shí)鐘,確保SD卡進(jìn)入SD總線(xiàn)模式。SD卡初始化代碼編寫(xiě)如下:
c.JPG
d.JPG
2.1.2 SD卡讀寫(xiě)實(shí)現
初始化完戚之后,就可對SD卡進(jìn)行讀寫(xiě)操作,通過(guò)設置SDI數據控制寄存器SDIDCON來(lái)確定SD卡的讀寫(xiě)長(cháng)度,讀操作時(shí)數據長(cháng)度作沒(méi)有明確限制,寫(xiě)操作時(shí),每次寫(xiě)的長(cháng)度必須為BLOCK的倍數。SD卡的讀寫(xiě)可以一次性讀寫(xiě)單塊數據,也可以一次性讀寫(xiě)多塊數據,多塊數據的讀寫(xiě)結束時(shí),要發(fā)送CMD12結束指令。主要實(shí)現函數:Write_Card_Block()-寫(xiě)入單塊數據;Write_Card_Data()-寫(xiě)入多塊數據;Read_Card_Block()-讀多塊數據;Read_Card-Data()-讀多塊數據。
2.2 文件系統設計
2.2.1 FAT32文件系統概述
Windows95 OSR2和Windows 98開(kāi)始支持FAT32文件系統,它是對早期DOS的FAT文件系統的增強,由于文件系統的核心一文件分配表FAT擴充為32位,所以稱(chēng)為FAT32文件系統。FAT32包含DBR、保留扇區、FAT1、FAT2(第一個(gè)FAT的備份)、根目錄、數據區5部分。DBR(Dos Boot Rec ord)是操作系統引導記錄區;保留扇區是為了對DBR作備份或留待以后升級時(shí)用;文件分配表區共保存了兩個(gè)相同的FAT表,文件所占用的存儲空間(簇鏈)及空閑空間的管理都是通過(guò)FAT實(shí)現的;FAT32根目錄區(ROOT區)不再是固定區域、固定大小,可看作是數據區的一部分;數據區用來(lái)存放真正要記錄的文件數據,本系統定義的一簇為4K個(gè)字節。
2.2.2 文件系統初始化
文件系統初始主要是讀取SD卡的DBR扇區(0扇區),并分析該扇區內容,從而獲取每扇區字節數,每簇扇區數,FAT開(kāi)始扇區號,根目錄開(kāi)始扇區號等關(guān)鍵信息,為文件的創(chuàng )建,讀寫(xiě)等操作做準備,文件系統初始化函數代碼如下:
e.JPG
2.2.3 文件創(chuàng )建
SD卡上創(chuàng )建文件或目錄的過(guò)程就是在文件目錄表FDT中申請登記項的過(guò)程,為此程序設計時(shí)定義了如下結構體:
f.JPG
g.JPG
在文件目錄項FDT中申請登記項動(dòng)作就是通過(guò)對上述結構體的操做來(lái)完成的,操作流程,也是文件創(chuàng )建流程如圖3所示,當把SD卡插入卡插槽時(shí),系統首先初始化SD卡,即讀取SD卡的DBR扇區(0扇區)獲取相關(guān)信息,接下來(lái)打開(kāi)所要創(chuàng )建文件的路徑,如果路徑不存在,創(chuàng )建該路徑,如果存在,搜尋FAT表,找空閑簇。再接下來(lái)把要創(chuàng )建的文件的相關(guān)信息(文件名,文件大小,創(chuàng )建時(shí)間,屬性等)填入上述結構體,把該結構體寫(xiě)入文件目錄項FDT,相應的扇區寫(xiě)入數據,最后更新FAT鏈表。文件創(chuàng )建實(shí)現函數為FAT32_Creat_File()。

h.JPG


2.2.4 文件讀寫(xiě)
文件系統對SD卡上文件的管理都是以簇為單位進(jìn)行的。要讀文件,就要首先找到文件,查找文件就是把文件名和文件目錄項FDT中的文件名匹配。如果匹配不成功,說(shuō)明該文件不存,此時(shí)就可以利用函數FAT32_Creat_Flie()創(chuàng )建。如果匹配成功讀就找到了該文件,在匹配成功的那個(gè)目錄登記項中找到該文件的起始簇號,知道了該起始簇號,就可以根據FAT表中的簇鏈關(guān)系找到到第2簇,第3簇,直到最后一簇文件結束。寫(xiě)文件時(shí),由于FAT2是FAT1的備份,要保證兩者的一致性,就要對它們做同樣的寫(xiě)操作。主要的函數有:FAT32_Open_File()-打開(kāi)文件;FAT32_Read_File()-讀文件;FAT32_Write_File()-寫(xiě)文件;FAT32_Close_File()-關(guān)閉文件。
2.2.5 文件刪除
FAT32文件系統中所謂的刪除實(shí)際上只是把文件名稱(chēng)的第一個(gè)字母改成一個(gè)特殊字符(在文件目錄登記項上做一個(gè)刪除標記),把文件在FAT表中占用的簇標記為空簇,但文件包含的數據仍在磁盤(pán)上,下次將新的文件保存到磁盤(pán)時(shí),這些簇可能被新的文件使用,從而覆蓋原來(lái)的數據。因此,只要不保存新的文件,被刪除文件的數據實(shí)際上仍舊完整無(wú)缺地保存在磁盤(pán)上。文件刪除函數為:FAT32_DeleteFile()。
2.3 API接口設計
API接口模塊要是向用戶(hù)應用程序提供文件的創(chuàng )建讀寫(xiě)刪除功能,該模塊通過(guò)調用文件系統的相關(guān)函數來(lái)實(shí)現。主要的借口函數有:OS_ CreateFile()-創(chuàng )建文件;OS_OpenFile()-打開(kāi)文件;OS_WriteFile()-文件寫(xiě)入數據;OS_WriteFile()-讀文件數據;OS_CloseFile()-關(guān)閉文件;OS_DeleteFile-刪除文件。
2.4 用戶(hù)應用程序設計
該模塊通過(guò)直接運用文件系統提供的API接口函數完成對稱(chēng)重數據信息的操作,只需要對μC/OS-II操作系統直接負責,并不需要考慮文件系統的具體實(shí)現問(wèn)題以及底層硬件驅動(dòng)問(wèn)題。

3 結束語(yǔ)
本設計作為貨車(chē)車(chē)載動(dòng)態(tài)稱(chēng)重系統的數據存儲模塊,采用容量大、體積小、性?xún)r(jià)比高的存儲介質(zhì)SD卡來(lái)存儲長(cháng)時(shí)間段的測量數據,對FAT32進(jìn)行了裁剪,并結合SD卡的底層的讀寫(xiě)程序,從而實(shí)現了嵌入式SD卡文件系統,這樣就能很方便通過(guò)上位機對SD卡記錄貨車(chē)稱(chēng)重數據進(jìn)行查詢(xún),綜合分析以及備份。同時(shí)該方法為其它數據采集系統提供了一種非易失性存儲器的解決方案,采集到的數據會(huì )以標準文件的格式記錄到SD卡上,便于文件的統一管理。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>