<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于單片機的CF卡文件存儲

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

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

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

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

          1 C8051F020與CF卡的接口電路

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

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

          本文引用地址:http://www.ex-cimer.com/article/171868.htm

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


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

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

          2 C8051F020對CF卡的數(shù)據(jù)讀寫

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

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


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

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

          流程


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

          在CF卡讀寫時,分別向第2、3、4、5、6個寄存器寫入CF卡需要訪問的扇區(qū)位置,其寫入模式有2種:即CHS(Cylinder/Head/Sector)模式和LBA(Logical Block Address)模式。通過設(shè)置第6個寄存器的第6位LBA確定其模式:即如果LBA=0,則為CHS模式;如果LBA=I,則為LBA模式。

          由CHS模式到LBA模式的轉(zhuǎn)換如下:

          由CHS模式到LBA模式的轉(zhuǎn)換

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

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

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

          在格式化后的CF卡中,F(xiàn)AT文件系統(tǒng)由如下4部分組成:

          0區(qū):保留區(qū)(引導(dǎo)區(qū))。
          1區(qū):FAT區(qū)。
          2區(qū):根目錄區(qū)(FAT32中存在的是浮動的FDT表)。
          3區(qū):文件、目錄與數(shù)據(jù)區(qū)(下面簡稱數(shù)據(jù)區(qū))。

          引導(dǎo)區(qū)中包含了整個FAT文件系統(tǒng)的重要信息,即BPB(BIOS Parameter Block)。下面為BPB的幾個重要數(shù)據(jù)結(jié)構(gòu):

          BPB的幾個重要數(shù)據(jù)結(jié)構(gòu)


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

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

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

          因此數(shù)據(jù)區(qū)所占用的扇區(qū)數(shù):

          DataSec=BPB.TotSecl6-FirstDataSec (5)

          根目錄的第一個扇區(qū)地址(在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卡有多個分區(qū),則(3)~(8)式計算出的參數(shù)只是相對當前分區(qū)而言的,且數(shù)據(jù)區(qū)所占用的簇數(shù)為:

          CntofClus=DataSec/BPB.SecPerClus (9)

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

          若給定一個簇的序號N(N≥2),則在數(shù)據(jù)區(qū)對應(yīng)該簇的第一個扇區(qū)序號為:

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

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

          FAT與數(shù)據(jù)區(qū)的對應(yīng)關(guān)系


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

          數(shù)據(jù)結(jié)構(gòu)


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

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

          4 討論

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

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



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

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();