《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 業(yè)界動(dòng)態(tài) > 基于單片機(jī)的CF卡復(fù)制系統(tǒng)

基于單片機(jī)的CF卡復(fù)制系統(tǒng)

2008-07-24
作者:馬 淵, 謝 立, 陳國(guó)斌, 劉

  摘 要: 介紹了CF卡的物理結(jié)構(gòu)和工作原理" title="工作原理">工作原理,給出了CF卡之間復(fù)制的原理圖和復(fù)制流程,并實(shí)現(xiàn)了CF卡扇區(qū)之間的復(fù)制工作。
  關(guān)鍵詞: CF卡 單片機(jī) 扇區(qū) 復(fù)制


  隨著閃存技術(shù)的不斷發(fā)展,閃存卡(Flash Memory)以它卓越的容量體積比、便攜性和易操作性等優(yōu)勢(shì),已經(jīng)取代軟盤(pán)、光盤(pán)而成為移動(dòng)存儲(chǔ)領(lǐng)域中應(yīng)用最為廣泛的存儲(chǔ)設(shè)備。閃存卡是一種非揮發(fā)性存儲(chǔ)介質(zhì),它具有功耗低、密度高、體積小、掉電后數(shù)據(jù)不丟失、可擦除、可靠性高、單位存儲(chǔ)容量?jī)r(jià)格便宜等特點(diǎn)。另外,閃存卡因?yàn)闆](méi)有像硬盤(pán)一樣的機(jī)械結(jié)構(gòu),顯著降低了發(fā)生故障和被損壞的可能性,因此還經(jīng)常被現(xiàn)在的一些室外工控機(jī)" title="工控機(jī)">工控機(jī)用作主系統(tǒng)設(shè)備。閃存卡有很多種類(lèi)型,主要有CF卡、SD卡、MMC卡、記憶棒、SM卡、XD卡等,其中,CF卡應(yīng)用最為常見(jiàn)[2~5]。
  由于CF卡的非機(jī)械結(jié)構(gòu)及其體積小、穩(wěn)定性高的特點(diǎn),使它在具有一些特殊用途的工控機(jī)(如安裝在戶外或者移動(dòng)車(chē)上的工控機(jī))中比普通硬盤(pán)具有更好的應(yīng)用前景,以至于越來(lái)越多的工控機(jī)用CF卡代替硬盤(pán)裝載系統(tǒng)和存儲(chǔ)數(shù)據(jù)。但當(dāng)CF卡損壞后,重裝系統(tǒng)比較麻煩,而且有些系統(tǒng)驅(qū)動(dòng)程序可能拿不到,所以設(shè)計(jì)一種CF卡之間的復(fù)制系統(tǒng),實(shí)現(xiàn)了兩塊相同的CF卡之間的備份,從而避免了重新安裝系統(tǒng)和驅(qū)動(dòng)程序,節(jié)約了用戶的時(shí)間。此外,現(xiàn)今的CF卡讀卡器只能對(duì)Windows系統(tǒng)文件進(jìn)行復(fù)制操作,無(wú)法有效地復(fù)制操作系統(tǒng)和驅(qū)動(dòng)文件。而這里設(shè)計(jì)的這套CF卡復(fù)制系統(tǒng)也可實(shí)現(xiàn)CF卡之間的文件系統(tǒng)和數(shù)據(jù)的復(fù)制。
1 CF卡物理結(jié)構(gòu)
  CF卡的全稱為“Compact Flash”卡。Compact Flash技術(shù)是Compact Flash協(xié)會(huì)提出的一種與PC機(jī)ATA接口標(biāo)準(zhǔn)兼容的技術(shù)。CF卡采用間距50mil的50針腳雙列封裝,其電氣特性符合ATA規(guī)范[3]。CF卡內(nèi)部集成了單片機(jī)控制器和閃存單元??刂破鲉卧糜谠谕獠恐鳈C(jī)與內(nèi)部閃存單元之間進(jìn)行數(shù)據(jù)交換" title="數(shù)據(jù)交換">數(shù)據(jù)交換和傳遞。內(nèi)部閃存單元的數(shù)量可根據(jù)CF卡的容量大小進(jìn)行相應(yīng)地增減。目前CF卡最大存儲(chǔ)容量可達(dá)到2~3GB。CF卡的結(jié)構(gòu)如圖1所示。


2 CF卡基本工作原理
  CF卡可以工作在三種模式下:(1)PC卡ATA I/O模式;(2)PC卡ATA存儲(chǔ)模式;(3)實(shí)IDE模式。其中,實(shí)IDE模式和硬盤(pán)的驅(qū)動(dòng)器完全匹配。
  CF卡有兩種尋址模式:CHS(柱面/磁頭/扇區(qū))尋址模式和LBA(邏輯塊地址)尋址方式。CHS尋址模式是通過(guò)柱面、磁頭和扇區(qū)尋址的,最小的尋址單位是一個(gè)扇區(qū)。在CHS尋址模式下,主機(jī)通過(guò)輸入柱面、磁頭和扇區(qū)號(hào)碼尋址某一個(gè)扇區(qū);而在LBA尋址方式下,CF卡按照連續(xù)序列的邏輯扇區(qū)編號(hào)進(jìn)行尋址,主機(jī)不必知道CF卡的物理幾何結(jié)構(gòu),而且能訪問(wèn)的扇區(qū)從0柱面、0磁頭、1扇區(qū)開(kāi)始,但無(wú)法訪問(wèn)系統(tǒng)的隱藏扇區(qū)[5]。
  CF卡有50個(gè)引腳,主要用到的引腳有:A10~A0,十一根地址線,在PC卡ATA存儲(chǔ)模式下,僅用到A2~A0三根地址線,用于尋址CF卡內(nèi)部控制器中的寄存器空間;D15~D0,CF卡的十六根數(shù)據(jù)線,具體傳輸數(shù)據(jù)時(shí)可選擇16位或8位傳輸;-CE1、-CE2引腳,用于指示是CF卡的字節(jié)操作還是字操作;-REG是寄存器選擇信號(hào),這個(gè)信號(hào)在內(nèi)存周期中使用,用來(lái)區(qū)分是普通內(nèi)存還是屬性寄存器;-OE是讀信號(hào);-WE是寫(xiě)信號(hào)。
  單片機(jī)和內(nèi)部閃存空間進(jìn)行數(shù)據(jù)交換是通過(guò)CF卡的八個(gè)屬性寄存器實(shí)現(xiàn)的。在PC卡ATA存儲(chǔ)模式下,CF卡屬性寄存器組的具體功能和地址分配見(jiàn)表1[1,4]。


  CF-ATA的基本命令有30余條,主要有數(shù)據(jù)的傳輸命令,包括扇區(qū)、緩沖區(qū)的讀寫(xiě)命令等。下面以讀命令為例說(shuō)明CF卡工作過(guò)程及其信號(hào)時(shí)序。
  在CF卡上電初始化后,主機(jī)判斷CF卡是否空閑,具體的就是查詢CF卡狀態(tài)寄存器" title="狀態(tài)寄存器">狀態(tài)寄存器的RDY位,如果為0,表示CF卡空閑,可以準(zhǔn)備接收命令。然后,主機(jī)向CF卡填寫(xiě)地址寄存器塊的信息,包括扇區(qū)數(shù)寄存器、扇區(qū)號(hào)寄存器、柱面號(hào)寄存器(低和高字節(jié))、磁頭寄存器等,選擇訪問(wèn)的扇區(qū)地址。接著,主機(jī)向CF卡命令寄存器中寫(xiě)入讀(20h)命令。CF卡收到讀命令后,驅(qū)動(dòng)器設(shè)置狀態(tài)寄存器的BSY位,CF卡把一個(gè)扇區(qū)的數(shù)據(jù)調(diào)入到扇區(qū)緩沖區(qū)中;然后驅(qū)動(dòng)器設(shè)置狀態(tài)寄存器的DRQ位,清除BSY位。這樣,主機(jī)就可以從扇區(qū)緩沖區(qū)中循環(huán)讀出一個(gè)扇區(qū)的數(shù)據(jù)。扇區(qū)緩沖區(qū)的數(shù)據(jù)讀出后,驅(qū)動(dòng)器設(shè)置BSY位,同時(shí)清除DRQ信號(hào)。然后再以此方式讀出下一個(gè)扇區(qū)的數(shù)據(jù)[5]
3 CF卡復(fù)制系統(tǒng)的設(shè)計(jì)
  CF卡復(fù)制系統(tǒng)的硬件設(shè)計(jì)采用89S52作為CPU,一片74HC373作為地址鎖存器,一片74HC138作為譯碼器。系統(tǒng)中擴(kuò)展一塊RAM作為存放CF卡數(shù)據(jù)的中轉(zhuǎn)站,用于兩塊CF卡之間進(jìn)行數(shù)據(jù)交換和復(fù)制。單片機(jī)和CF卡以及其它器件的連接如圖2所示。P0.0~P0.7作為數(shù)據(jù)線,與擴(kuò)展的RAM以及CF卡進(jìn)行數(shù)據(jù)交換和傳輸。由于單片機(jī)僅有八根數(shù)據(jù)線,因此CF卡采用字節(jié)讀寫(xiě)方式,以方便與單片機(jī)進(jìn)行數(shù)據(jù)交換。擴(kuò)展的RAM的低八位地址線由單片機(jī)的數(shù)據(jù)線P0.0~P0.7經(jīng)過(guò)鎖存器輸入后控制,而最高兩位地址線則由P2.0~P2.1控制。單片機(jī)的P2.2~P2.4用于連接CF卡的地址線A0~A2,用于尋址CF卡屬性寄存器。單片機(jī)的讀寫(xiě)信號(hào)使能端和CF卡的讀寫(xiě)使能端相連。74HC138譯碼器用于控制兩塊CF卡和RAM的選通信號(hào)。


  在這里,讓CF卡工作在PC卡ATA存儲(chǔ)模式下,并且使用LBA(邏輯塊地址)尋址方式進(jìn)行數(shù)據(jù)讀寫(xiě)。讀寫(xiě)數(shù)據(jù)的軟件流程圖如圖3所示。先給系統(tǒng)上電,判斷CF卡是否準(zhǔn)備好。然后往CF卡的屬性寄存器中填入讀寫(xiě)扇區(qū)的起始地址和讀寫(xiě)的扇區(qū)數(shù),再往命令寄存器中填寫(xiě)讀命令。填寫(xiě)完屬性寄存器后,單片機(jī)通過(guò)不斷查詢CF卡狀態(tài)寄存器的DRQ位,來(lái)判斷數(shù)據(jù)是否準(zhǔn)備好,一旦準(zhǔn)備好就從CF卡的扇區(qū)緩沖區(qū)中循環(huán)讀出512字節(jié)的數(shù)據(jù)到外部RAM中存放起來(lái)。然后類(lèi)似地把RAM中的一個(gè)扇區(qū)的數(shù)據(jù)寫(xiě)入到另外一塊CF卡的相應(yīng)扇區(qū)中去。


  該復(fù)制設(shè)備系統(tǒng)中兩塊CF卡的容量不等,該系統(tǒng)是把32MB的CF卡內(nèi)容復(fù)制到256MB的CF卡中去。該系統(tǒng)版圖中還包括了和計(jì)算機(jī)相連的串口" title="串口">串口調(diào)試系統(tǒng),使得可以通過(guò)計(jì)算機(jī)串口實(shí)時(shí)監(jiān)測(cè)CF卡復(fù)制進(jìn)程和成功與否。
  該CF卡復(fù)制系統(tǒng)可以對(duì)兩塊同樣容量的CF卡進(jìn)行完全或者部分復(fù)制,并且還可以將小容量的CF卡的數(shù)據(jù)復(fù)制到大容量的CF卡中去。對(duì)于不同廠家生產(chǎn)的CF卡,該系統(tǒng)在復(fù)制時(shí)也無(wú)任何問(wèn)題。通過(guò)該系統(tǒng)把裝有Windows NT嵌入式系統(tǒng)的CF卡復(fù)制到另外一塊CF卡后,復(fù)制的新卡也能夠成功啟動(dòng)工控機(jī),并且原有安裝的程序和驅(qū)動(dòng)程序以及所有的數(shù)據(jù)都完全被成功復(fù)制。


參考文獻(xiàn)
1 Compact Flash Association.CF+ and CompactFlash Specification Revision 3.0. http://www.compactflash.org/cfspc3_0.pdf
2 張亦楠, 岳春生, 姜 龍. ARM7系統(tǒng)中實(shí)現(xiàn)CF卡存儲(chǔ)的文件系統(tǒng)設(shè)計(jì).單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2003(5):43~44
3 林海虹, 劉 慧.CF卡與雙核DSP的實(shí)現(xiàn).電子技術(shù)應(yīng)用, 2002;28(12):23~25
4 王海軍,卜祥元,安建平. 便攜式、低功耗體電信號(hào)采集存儲(chǔ)系統(tǒng)研究.單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2003(8):60~63
5 程擁強(qiáng),郭鳳龍,朱 勁. 單片機(jī)對(duì)CF存儲(chǔ)卡文件讀寫(xiě)的實(shí)現(xiàn). 計(jì)算機(jī)應(yīng)用,2003;23(9):146~148

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。