《電子技術應用》
您所在的位置:首頁 > 其他 > 業界動態 > 基于C8051F020的CF卡文件存儲

基于C8051F020的CF卡文件存儲

2009-10-10
作者:楊榮騫 陸堯勝

  摘? 要: C8051F020是一種混合信號ISP Flash微控制器,采用數據和地址總線非復用方式。而CF卡工作于8位存儲器模式下由C8051F020控制其操作,且其文件系統采用FAT形式。本文詳細地介紹了FAT形式下引導區、FAT區、根目錄區和數據區相關的一些計算,以及在CF卡中的文件存儲過程。

  關鍵詞: C8051F020? CF卡? FAT? 文件存儲

?

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

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

1?C8051F020與CF卡的接口電路

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

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

?

?

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

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

2?C8051F020對CF卡的數據讀寫

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

?

?

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

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

?

?

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

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

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

  

?

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

3??CF卡的文件存儲

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

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

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

  0區:保留區(引導區)。

  1區:FAT區。

  2區:根目錄區(FAT32中存在的是浮動的FDT表)。

  3區:文件、目錄與數據區(下面簡稱數據區)。

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

  typedef struct FAT

{

  unsigned short BytsPerSec;//每個扇區所包含的字節數

  unsigned char SecPerClus;//每一簇所包含的扇區數

  unsigned short RsvdSecCnt;//保留區所占用的扇區數

  unsigned char NumFATs;//FAT數據結構的個數

  unsigned short RootEntCnt;//在FAT12和FAT16格式

                //下,根目錄中32位目錄的個數

  unsigned short TotSec16;//16位表示的總扇區數

  unsigned short FATSz16;//1個FAT數據結構所

              //占用的扇區數

  unsigned short SecPerTrk;//每一磁道中所包含的扇區數

  unsigned short NumHeads;//每一磁道中所包含的磁頭數

  unsigned long? TotSec32;//32位表示的總扇區數

} BPB;

  根據上面的數據結構可以計算根目錄、數據區等在CF卡中的位置。

在根目錄區中,每一個目錄或文件的記錄占32個字節。根據FAT數據結構,可以計算出根目錄占用的扇區數:

  RootDirSec=((BPB.RootEntCnt*32)+(BPB.BytsPer-Sec-1))/BPB.BytsPerSec????(3)

  在FAT32格式下,BPB.RootEntCnt為‘0’,因此RootDirSec總是為‘0’。

  如果BPB.FATSz16不為‘0’,就可以根據下面公式計算數據區的第一個扇區地址。

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

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

  DataSec=BPB.TotSec16-FirstDataSec                   (5)

  根目錄的第一個扇區地址(在FAT12、FAT16下):

  FirstRootDirSec=BPB.ResvdSecCnt+(BPB.NumFATs*BPB.FATSz16)

  如果BPB.FATSz16為‘0’,則BPB.FATSz32一定不為‘0’,則有:

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

  DataSec=BPB.TotSec32-FirstDataSec?????                 (7)

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

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

  CntofClus=DataSec/BPB.SecPerClus?????                  (9)

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

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

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

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

?

?

  文件的結束符在FAT12下為0xFFF,在FAT16下為0xFFFF,在FAT32下為0x0FFFFFFF。如果在寫入時遇到損壞的簇,則在對應位置寫損壞的標志(FAT12下為0xFF7,FAT16下為0xFFF7,FAT32下為0x0FFFFFF7),并且在鏈表中跳過這一損壞的簇。在刪除一個文件時,要把該文件在FAT區的鏈表全部寫‘0’,釋放空間。這樣,該鏈表中所對應的數據區又可以被新的文件分配。

  一個FAT的目錄項或文件項通常占用32字節,并存儲該目錄或文件的相關信息。其數據結構如下:

  這個數據結構中12字節的名字是目錄名還是文件名,由成員Attr決定。如果是目錄Attr可設為10H;如果是文件,Attr可設為20H,也可以是幾個屬性的組合;如果為長文件名,Attr可設為0FH。有關詳細的長文件名可參見文獻[3]。

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

4?討? 論

  本文只介紹了動態腦電圖系統的有關文件存儲的部分,C8051F020的功能并沒有得到充分利用。實際上C8051F020還要完成系統的其他很多功能。用戶可以根據自己系統的實際需要選擇合適的單片機。本系統在設計時著重考慮系統的功耗、體積、速度等方面的因素,所以C8051F020采用非復用的方式,以求節省1片鎖存器對低位地址的鎖存。

  CF卡在寫入文件時,由于要記錄24小時的腦電圖信號。為了防止異常發生使文件寫入失敗,可以定時地更新FAT區該文件的記錄鏈表和所存放文件數據結構的根目錄區或數據區中該文件的大小。只有保存了這些信息,所寫入的數據才能正常地讀取。

  此外,在寫入文件時,如果遇到一個扇區寫入失敗,則整個簇都不能用。為此:(1)必須查找下一個未占用的簇,再把這一簇中已經正確寫入的扇區中的數據復制到下一簇中。這樣緩沖區中只要保存一個扇區的腦電信號就可以。(2)先對這一簇進行檢測,確定沒有錯誤后再向該簇寫入數據。這種方法雖然比較簡單,但占用系統的時間比較多,且在檢測到沒有錯誤后也不能完全保證下一次寫入時不發生錯誤。所以第一種方法的可靠性要高。

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

參考文獻

1 C8051F020/1/2/3 Mixed-Signal ISP FLASH MCU Family.CYGNAL Integrated Products Inc.2003

2 CF+ and CompactFlash Specification Revision 2.0.CompactFlash Association.2003

3?Microsoft Extensible Firmware Initiative FAT32 File System Specification.Microsoft Corporation.2000

4?Stephan Defond-Müller,Application Note CompactFlash/Flash ATA Products.Mitsubishi Electric Europe B.V.2000

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
主站蜘蛛池模板: xxxx日日摸夜夜添夜夜添视频 | 特黄特黄视频 | 国产亚洲一区呦系列 | 欧美国产成人免费观看永久视频 | 午夜免费观看体验区入口 | 名优写真一区二区在线 | 欧美日韩大片 | 亚洲另类z0zx | 色偷偷.com| 香港三级日本三人妇孕妇 | 欧美日韩在线一区二区三区 | 国产精品成人h视频 | 成人精品视频 成人影院 | 成年美女黄网站色大片免费看 | 精品欧美一区二区三区在线观看 | 天天插天天透 | 欧美午夜激情影院 | 免费亚洲视频在线观看 | 日韩精品1区 | 中文字幕亚洲欧美 | 网站免费满18成年在线观看 | 中文字幕一区二区三区5566 | 黄色在线看网站 | 日本黄色大片网站 | 黄色片黄色片黄色片黄色片黄色片 | 99艾草视频在线播放 | 国产一区二三区 | 国产精品亚洲午夜不卡 | 欧美四区 | 综合激情区视频一区视频二区 | 免费观看成人羞羞视频网站观看 | 欧美中文综合在线视频 | 一级a毛片免费观看久久精品 | 亚洲精品高清国产麻豆专区 | 亚州黄色网址 | 亚洲综合色视频在线观看 | 日韩视频第1页 | 久久精品免费观看视频 | 精品一区在线 | 特一级黄色 | 激情文学综合丁香 |