<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è) > 嵌入式系統 > 設計應用 > 基于單片機的CF卡文件存儲

基于單片機的CF卡文件存儲

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

隨著(zhù)計算機應用技術(shù)的飛速發(fā)展,移動(dòng)設備得到了廣泛的應用。其中(Compact Flash)卡誕生于1994年,是最早推出的閃存卡,在眾多產(chǎn)品中其普及率也最高。由于卡具有價(jià)格低廉、體積小、容量大、高速等特點(diǎn),因此被廣泛地應用于數碼相機、PDA和筆記本電腦等當前十分熱門(mén)的消費類(lèi)電子產(chǎn)品中。卡在其他領(lǐng)域中也得到了廣泛的應用。如本文所述內容就是將CF卡應用于動(dòng)態(tài)腦電圖系統中腦電信號。

由于CF卡中存儲的腦電圖信號要能夠從PC機上讀取出來(lái),所以必須把腦電圖信號以相應的格式存儲。下面將介紹采用C8051F020微控制器控制CF卡的存儲,并詳細地介紹其軟、硬件的設計。

1 C8051F020與CF卡的接口電路

C8051F020是完全集成的混合信號系統級MCU芯片,使用了Cygnal專(zhuān)利的高速、流水線(xiàn)結構以及與MCS-51指令集完全兼容的CIP-51微處理器內核,具有64條數字I/O引腳,片內有64KB可在系統編程的Flash存儲器,有4 352B的片內RAM,片內有看門(mén)狗定時(shí)器、VDD監視器和溫度傳感器等;片內的JTAG調試電路允許使用安裝在最終應用系統上的產(chǎn)品MCU進(jìn)行非侵入式、全速、在系統調試;其MCU都可在工業(yè)溫度范圍(-45℃-+85℃)內用2.7~3.6V的電壓工作;端口I/O、RST和JTAG引腳都兼容5V的輸入信號電壓。C8051F020其他功能可參考文獻。

CF卡有3種工作模式可供選擇:I/O模式、存儲器模式和IDE模式。CF卡的默認模式是存儲器模式,使用也最為普遍。如果使用存儲器模式則不需要配置任何寄存器。每一種模式的電路連接各不相同。在I/O模式和存儲器模式下,可以采用8位的訪(fǎng)問(wèn)方式,也可以采用16位的訪(fǎng)問(wèn)方式。本文所采用的是8位的存儲器模式,其接口電路如圖1所示。

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

8位的存儲器模式其接口電路


C8051F020的外部數據存儲器接口(EMIF)可用于訪(fǎng)問(wèn)片外存儲器和存儲器映射的I/O器件。若設置EMIF的配置寄存器EMIOCF的PRTSEL位為'1',可使EMIF位于端口7、6、5、4;設置EMD2位為'1',可使EMIF工作于非復用方式;設置EMDl~0為'01',可使EMIF工作于不帶塊選擇的分片方式。這樣P7口就為數據線(xiàn)D0~D7,P6口為A0~A7,P5口為A8~A15,P4.6、P4.7分別為讀(RD)、寫(xiě)(WE)線(xiàn)。

由于C8051F020是8位的,所以對CF卡的訪(fǎng)問(wèn)采用8位的方式較為方便。通過(guò)把-CE2設為'1'即可通過(guò)訪(fǎng)問(wèn)CF卡的D0~D7來(lái)存取數據。而-CEl可以作為CF卡的片選信號,通過(guò)設-CEl為'0'來(lái)選通CF卡,即-CEl接C8051F020的高位地址P5.7來(lái)線(xiàn)選CF卡。當CF卡插入其插座時(shí),CDl和CD2都連接到地(CND);C8051F020的P1.1、P1.2分別連到CDl和CD2,并可以通過(guò)檢測P1.1和P1.2來(lái)判斷CF卡是否插入CF卡插座。CF卡工作于存儲器模式下,-OE和-WE分別接C8051F020的讀(P1.6)、寫(xiě)(P1.7)線(xiàn)。當REG為'0'時(shí),訪(fǎng)問(wèn)CF卡的屬性寄存器;REG為'1'時(shí),CF卡在存儲器模式下對數據進(jìn)行讀寫(xiě)操作。

2 C8051F020對CF卡的數據讀寫(xiě)

圖1所示電路的CF卡在存儲器模式下有關(guān)數據讀寫(xiě)的一些寄存器地址如表1所示。

電路的CF卡在存儲器模式下有關(guān)數據讀寫(xiě)的一些寄存器地址


CF卡1個(gè)扇區為512B,這些數據都是從表1中的第0個(gè)寄存器中讀出,而且每次讀寫(xiě)數據最小為1個(gè)扇區,但也可以設置從第2個(gè)寄存器中讀出,1次讀寫(xiě)幾個(gè)扇區。

C8051F020對CF卡讀扇區數據的過(guò)程是:首先讀取第7個(gè)寄存器的狀態(tài)字,如果為50H表示沒(méi)有錯誤,并且CF卡已經(jīng)準備好;然后再分別向第2、3、4、5、6個(gè)寄存器寫(xiě)入相應的數據指定需要讀寫(xiě)的扇區;最后向第7個(gè)寄存器寫(xiě)20H或21H,讀取狀態(tài)字為58H后讀取數據,其流程如圖2所示。

流程


C8051F020對CF卡向指定扇區寫(xiě)數據的命令是30H或31H,其操作亦與讀數據相似,只不過(guò)在寫(xiě)入數據后要等到CF卡中數據穩定并進(jìn)入空閑狀態(tài)才能結束這一過(guò)程。

在CF卡讀寫(xiě)時(shí),分別向第2、3、4、5、6個(gè)寄存器寫(xiě)入CF卡需要訪(fǎng)問(wèn)的扇區位置,其寫(xiě)入模式有2種:即CHS(Cylinder/Head/Sector)模式和LBA(Logical Block Address)模式。通過(guò)設置第6個(gè)寄存器的第6位LBA確定其模式:即如果LBA=0,則為CHS模式;如果LBA=I,則為L(cháng)BA模式。

由CHS模式到LBA模式的轉換如下:

由CHS模式到LBA模式的轉換

其中LBA是邏輯塊地址,Cn是柱面號,HpC是每個(gè)柱面的磁頭數,Hn是磁頭數,Sn是扇區號,SpH是每個(gè)磁頭(簇)的扇區數。
3 CF卡的存儲

FAT(File Allocation Table)文件系統產(chǎn)生于20世紀70年代末到80年代初,是微軟的MS-DOS操作系統所支持的文件系統。目前FAT文件系統有3種類(lèi)型:FATl2、FATl6和FAT32。它們的不同是在磁盤(pán)上實(shí)際的FAT結構中每個(gè)記錄(Entry)所占的位數不同。FATl2占12位(1.5字節),FATl6占16位(2字節),FAT32占32位(4字節)。每一個(gè)記錄中的數據都按照低字節在前、高字節在后排列。

在CF卡格式化時(shí),首先要了解CF卡的容量等一系列信息。通過(guò)對CF卡寫(xiě)入命令ECH就可以讀出1個(gè)扇區,其中包含了該CF卡的一些參數的信息,如容量、默認的柱面數、默認的磁頭數、每個(gè)扇區的字節數、每個(gè)磁道的扇區數和CF卡上總的扇區數等。這為格式化CF卡提供了重要的數據。

在格式化后的CF卡中,FAT文件系統由如下4部分組成:

0區:保留區(引導區)。
1區:FAT區。
2區:根目錄區(FAT32中存在的是浮動(dòng)的FDT表)。
3區:文件、目錄與數據區(下面簡(jiǎn)稱(chēng)數據區)。

引導區中包含了整個(gè)FAT文件系統的重要信息,即BPB(BIOS Parameter Block)。下面為BPB的幾個(gè)重要數據結構:

BPB的幾個(gè)重要數據結構


在FAT32格式下,BPBqRootEntCnt為'0',因此RootDirSec總是為'0'。

如果BPB.FATSzl6不為'0',就可以根據下面公式計算數據區的第一個(gè)扇區地址。

FirstDataSec=BPB.ResvdSecCnt+(BPB.NumFATs*BPB.FATSzl6)+RootDirSec (4)

因此數據區所占用的扇區數:

DataSec=BPB.TotSecl6-FirstDataSec (5)

根目錄的第一個(gè)扇區地址(在FATl2、FATl6下):

FirstRootDirSec=BPB.ResvdSecCnt+(BPB.NumFATs*BPB.FATSzl6)
如果BPB.FATSzl6為'0',則BPB.FATSz32一定不為'0',則有:

FirstDataSec=BPB.ResvdSecCnt+fBPB.NumFATs*BPB.FATSz32)+RootDirSec (6)

DataSec=BPB.TotSec32-FirstDataSec (7)

FirstRootDirSec=BPB.ResvdSecCnt+(BPB.NumFATs*BPB.FATSz32) (8)

如果CF卡有多個(gè)分區,則(3)~(8)式計算出的參數只是相對當前分區而言的,且數據區所占用的簇數為:

CntofClus=DataSec/BPB.SecPerClus (9)

在格式化CF卡時(shí),根據CF卡容量的大小決定FAT數據結構中的一些參數,再由式(9)算出數據區總的簇數,并根據總簇數的大小確定FAT形式。一般來(lái)說(shuō),如果CntofClus4 084簇,則可以格式化成FATl2的形式;如果≥4 084簇而65 524簇,則可以格式化成FATl6的形式;如果≥65 524簇,則格式化成FAT32的形式。

若給定一個(gè)簇的序號N(N≥2),則在數據區對應該簇的第一個(gè)扇區序號為:

FirstSecofClus=((N-2)*BPB.SecPerClus)+FirstDataSec (10)

式(10)表示了FAT與數據區的對應關(guān)系,如圖3所示。在FAT區每一個(gè)記錄的位置與數據區中的一簇數據相對應,同時(shí),這個(gè)記錄又存儲著(zhù)下一簇序號,從而一個(gè)件在FAT區形成一個(gè)鏈表。至于每一簇的序號在FAT中的存儲位置,可以根據格式化的形式(FATl2、FAT16、FAT32)確定。設每一記錄占i個(gè)字節,則第N個(gè)記錄在N×i的位置上。

FAT與數據區的對應關(guān)系


文件的結束符在FATl2下為0xFFF,在FATl6下為0xFFFF,在FAT32下為0x0FFFFFFF。如果在寫(xiě)入時(shí)遇到損壞的簇,則在對應位置寫(xiě)損壞的標志(FATl2下為0xFF5FATl6下為0xFFF7,FAT32下為0x0FFFFFF7),并且在{表中跳過(guò)這一損壞的簇。在刪除一個(gè)文件時(shí),要把該文{在FAT區的鏈表全部寫(xiě)'0',釋放空間。這樣,該鏈表中所對應的數據區又可以被新的文件分配。 一個(gè)FAT的目錄項或文件項通常占用32字節,并存儲該目錄或文件的相關(guān)信息。其數據結構如下:

數據結構


這個(gè)數據結構中12字節的名字是目錄名還是文件名,由成員Attr決定。如果是目錄Attr可設為10H;如果j文件,Attr可設為20H,也可以是幾個(gè)屬性的組合;如果為長(cháng)文件名,Attr可設為OFH。有關(guān)詳細的長(cháng)文件名可參見(jiàn)文獻。

成員FstClusHI和FstClusL0記錄了文件第一簇數據對應FAT中的記錄序號,即圖3中第一簇的序號,從而可以根據鏈表查找下一簇數據。在FATl2和FATl6下,成員FstClusHI總為'0'。

4 討論

本文只介紹了動(dòng)態(tài)腦電圖系統的有關(guān)文件存儲的部分,C8051F020的功能并沒(méi)有得到充分利用。實(shí)際上C8051F020還要完成系統的其他很多功能。用戶(hù)可以根據自己系統的實(shí)際需要選擇合適的。本系統在設計時(shí)著(zhù)重考慮系統的功耗、體積、速度等方面的因素,所以C8051F020采用非復用的方式,以求節省1片鎖存器對低位地址的鎖存。
CF卡在寫(xiě)入文件時(shí),由于要記錄24小時(shí)的腦電圖信號。為了防止異常發(fā)生使文件寫(xiě)入失敗,可以定時(shí)地更新FAT區該文件的記錄鏈表和所存放文件數據結構的根目錄區或數據區中該文件的大小。只有保存了這些信息,所寫(xiě)入的數據才能正常地讀取。 此外,在寫(xiě)入文件時(shí),如果遇到一個(gè)扇區寫(xiě)入失敗,則整個(gè)簇都不能用。為此:(1)必須查找下一個(gè)未占用的簇,再把這一簇中已經(jīng)正確寫(xiě)入的扇區中的數據復制到下一簇中。這樣緩沖區中只要保存一個(gè)扇區的腦電信號就可以。(2)先對這一簇進(jìn)行檢測,確定沒(méi)有錯誤后再向該簇寫(xiě)人數據。這種方法雖然比較簡(jiǎn)單,但占用系統的時(shí)間比較多,且在檢測到?jīng)]有錯誤后也不能完全保證下一次寫(xiě)入時(shí)不發(fā)生錯誤。所以第一種方法的可靠性要高。

實(shí)驗證明,SanDisk和EagleTec等公司的不同容量的CF卡用于本系統中都能夠正確地對采集到的腦電圖信號進(jìn)行存取。



關(guān)鍵詞: 存儲 文件 CF 單片機 基于

評論


相關(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>