摘 要:本文討論了在單片機下進(jìn)行cf卡接口設(shè)計的方法,根據(jù)pcmcia制定的ata標(biāo)準(zhǔn)開發(fā)了直接讀寫cf卡的驅(qū)動程序,并介紹了cf卡驅(qū)動程序的編程技巧?! ∫浴 。悖妗】ǎǎ悖铮恚穑幔悖簟。妫欤幔螅琛。悖幔颍洌┦菍iT為海量存儲而設(shè)計的專用設(shè)備,其標(biāo)準(zhǔn)由國際cfa (compact flash?。幔螅螅铮悖椋幔簦椋铮睿┞?lián)合會維護和管理。cf卡中不僅有海量存儲專用的flash芯片,還包括一個片上智能控制器,這樣就為計算機宿主機提供了一個高級的應(yīng)用接口來方便地對其進(jìn)行讀寫控制與操作。這個接口讓宿主計算機能夠像讀取硬盤那樣,用硬盤操作專用命令對cf進(jìn)行控制。cf卡每一個字段(512字節(jié))都有一個強勁的糾錯碼。cf卡具有體積小、存儲量大、安全可靠、價格低廉、讀寫速度快的優(yōu)點,越來越被消費者所認(rèn)可,眾多的娛樂電子設(shè)備生產(chǎn)廠商都支持cf卡接口。目前許多消費類嵌入式系統(tǒng)產(chǎn)品,如數(shù)碼攝像機、數(shù)碼照相機、掌上電腦、pda、手機、mp3播放器上面都加入了對cf卡的支持。所以,在設(shè)計嵌入式系統(tǒng)的時候,加入對cf卡的支持是非常有意義的。cf卡的接口技術(shù)分為memory模式、i/o模式和ide模式。本文討論了在單片機下進(jìn)行cf卡接口設(shè)計的方法,并利用標(biāo)準(zhǔn)cf卡ata標(biāo)準(zhǔn)開發(fā)了直接讀寫cf卡的驅(qū)動程序,實現(xiàn)了在單片機下對cf卡的直接讀寫,為海量存儲設(shè)備應(yīng)用于普通的嵌入式系統(tǒng)提供了條件?! 。悖婵▍f(xié)議簡介 ?。悖妫峤M織目前推出的cf卡協(xié)議能夠?qū)崿F(xiàn)66mb/s的存取速率。該協(xié)議詳細(xì)規(guī)定了cf卡的三種讀寫模式,還規(guī)定了cf卡的幾何尺寸和各種電器參數(shù),從而實現(xiàn)了對cf卡的標(biāo)準(zhǔn)化。 系統(tǒng)設(shè)計 本文中選用的是sandisk公司生產(chǎn)的cf卡,其內(nèi)部的結(jié)構(gòu)框圖如圖1所示。cf卡與單片機的接口設(shè)計必須在基于特定功能的前提下進(jìn)行,主要考慮以下幾個方面的內(nèi)容:cf卡與宿主機之間的電氣兼容性,cf卡傳輸模式的選擇,以及cf卡數(shù)據(jù)位的選擇。 圖1 ?。悖婵▋?nèi)部的結(jié)構(gòu)框圖 硬件設(shè)計 硬件設(shè)計主要應(yīng)考慮cf卡的數(shù)據(jù)傳輸、地址選擇,及其讀寫控制信號。在本系統(tǒng)中,宿主機使用了常見的at89s52。cf卡與單片機之間有著非常標(biāo)準(zhǔn)的接口,4根地址線,8根數(shù)據(jù)線,1根讀信號線和1根寫信號線,總共只需占用單片機的14根i/o口線。硬件cf卡相關(guān)的功能框圖如圖2所示?! D2 單片機實現(xiàn)cf卡讀寫的硬件結(jié)構(gòu)框圖 這套系統(tǒng)除了包括單片機和cf卡這兩個必不可少的元件以外,另外還包括一個lcd液晶顯示屏,其功能主要是用于顯示程序執(zhí)行中各種參數(shù)的狀態(tài)(如串口是否能正常工作)。液晶顯示屏是一個很好的硬件調(diào)試監(jiān)視器,尤其是在沒有仿真器的條件下,它可以方便地設(shè)立程序斷點,監(jiān)視程序的執(zhí)行,實時顯示各個狀態(tài)參數(shù)?! 榱烁行У販y試cf卡的海量存儲功能,系統(tǒng)中還設(shè)置了一個rs-232接口,以便與pc機之間進(jìn)行通信。另外,考慮到在線調(diào)試cf卡驅(qū)動程序的時候需要多次燒寫單片機的程序存儲器,特別又設(shè)置了一個isp下載線接口。這樣一來,不用仿真器和燒寫器而僅使用isp并口下載線就可以對整個系統(tǒng)進(jìn)行在線調(diào)試,大大方便了驅(qū)動程序的開發(fā)與調(diào)試?! ≤浖O(shè)計 嚴(yán)格遵循ata標(biāo)準(zhǔn)的cf卡設(shè)備對軟件的編制有非常標(biāo)準(zhǔn)化的方法,而且基于cfa的協(xié)議,cf卡硬件上的向下兼容性也保證了軟件設(shè)計上的兼容性。cf卡工作在內(nèi)存映射下的讀寫程序邏輯框圖如圖3所示。值得指出的是,不同于一般的flash存儲器,cf卡采用ide標(biāo)準(zhǔn)的讀寫方式,它的尋址方式、讀寫方式,甚至命令都與普通的ata硬盤相符合。也就是說,cf是在模擬硬盤的讀寫,按照扇區(qū)、磁道、柱面來尋址。同硬盤一樣,cf卡不能夠?qū)ξ徊僮?,它的一次性吞吐量為一個扇區(qū),也就是512個字節(jié)。cf卡在設(shè)計之初,之所以要采取類似硬盤的讀寫方式,是因為這種方法的存儲速度快、可靠,并能節(jié)省資源。本設(shè)計并不需要在cf上面建立文件系統(tǒng),這樣可以充分利用cf卡存儲量大、速度快的特點,同時也可使軟件的編制更為簡化?! D3 讀寫cf卡程序的邏輯框圖 實驗步驟與結(jié)果 測試讀寫cf卡是否成功的方法是:先用串口調(diào)試助手把pc機上的一個ascii文件通過串口發(fā)送到cf卡的特定扇區(qū),然后將剛剛寫入的數(shù)據(jù)讀出,并通過串口發(fā)送到pc機的串口調(diào)試助手的終端上。如果發(fā)送與接收到的文件數(shù)