單片機(jī)CF卡接口設(shè)計(jì)
這套系統(tǒng)除了包括單片機(jī)和CF卡這兩個(gè)必不可少的元件以外,另外還包括一個(gè)LCD液晶顯示屏,其功能主要是用于顯示程序執(zhí)行中各種參數(shù)的狀態(tài)(如串口是否能正常工作)。液晶顯示屏是一個(gè)很好的硬件調(diào)試監(jiān)視器,尤其是在沒有仿真器的條件下,它可以方便地設(shè)立程序斷點(diǎn),監(jiān)視程序的執(zhí)行,實(shí)時(shí)顯示各個(gè)狀態(tài)參數(shù)。
為了更有效地測(cè)試CF卡的海量存儲(chǔ)功能,系統(tǒng)中還設(shè)置了一個(gè)RS-232接口,以便與PC機(jī)之間進(jìn)行通信。另外,考慮到在線調(diào)試CF卡驅(qū)動(dòng)程序的時(shí)候需要多次燒寫單片機(jī)的程序存儲(chǔ)器,特別又設(shè)置了一個(gè)ISP下載線接口。這樣一來,不用仿真器和燒寫器而僅使用ISP并口下載線就可以對(duì)整個(gè)系統(tǒng)進(jìn)行在線調(diào)試,大大方便了驅(qū)動(dòng)程序的開發(fā)與調(diào)試。
嚴(yán)格遵循ATA標(biāo)準(zhǔn)的CF卡設(shè)備對(duì)軟件的編制有非常標(biāo)準(zhǔn)化的方法,而且基于CFA的協(xié)議,CF卡硬件上的向下兼容性也保證了軟件設(shè)計(jì)上的兼容性。CF卡工作在內(nèi)存映射下的讀寫程序邏輯框圖如圖3所示。值得指出的是,不同于一般的Flash存儲(chǔ)器,CF卡采用IDE標(biāo)準(zhǔn)的讀寫方式,它的尋址方式、讀寫方式,甚至命令都與普通的ATA硬盤相符合。也就是說,CF是在模擬硬盤的讀寫,按照扇區(qū)、磁道、柱面來尋址。同硬盤一樣,CF卡不能夠?qū)ξ徊僮?,它的一次性吞吐量為一個(gè)扇區(qū),也就是512個(gè)字節(jié)。CF卡在設(shè)計(jì)之初,之所以要采取類似硬盤的讀寫方式,是因?yàn)檫@種方法的存儲(chǔ)速度快、可靠,并能節(jié)省資源。本設(shè)計(jì)并不需要在CF上面建立文件系統(tǒng),這樣可以充分利用CF卡存儲(chǔ)量大、速度快的特點(diǎn),同時(shí)也可使軟件的編制更為簡(jiǎn)化。
圖3 讀寫CF卡程序的邏輯框圖
實(shí)驗(yàn)步驟與結(jié)果
測(cè)試讀寫CF卡是否成功的方法是:先用串口調(diào)試助手把PC機(jī)上的一個(gè)ASCII文件通過串口發(fā)送到CF卡的特定扇區(qū),然后將剛剛寫入的數(shù)據(jù)讀出,并通過串口發(fā)送到PC機(jī)的串口調(diào)試助手的終端上。如果發(fā)送與接收到的文件數(shù)據(jù)是一致的,那么就說明對(duì)CF卡的讀寫操作成功。
首先要測(cè)試串口是否能正常工作,因?yàn)橹挥性诖谡9ぷ鞯那疤嵯?,才能?duì)CF卡的讀寫功能程序進(jìn)行測(cè)試。先將一個(gè)簡(jiǎn)單的串口調(diào)試程序用ISP下載線下載到單片機(jī)上運(yùn)行,通過串口調(diào)試助手的終端顯示測(cè)試結(jié)果,確定串口調(diào)試助手發(fā)送到單片機(jī)上的數(shù)據(jù)能夠被正確返回。
在確定串口在電氣特性上沒有問題了之后,就可以通過ISP接口,將事先編好的CF卡讀寫測(cè)試程序下載到單片機(jī)上運(yùn)行。在PC機(jī)上選擇一個(gè)約4M大小的 ASCII碼文件,預(yù)計(jì)它將充滿CF卡的8000個(gè)扇區(qū),將其通過串口調(diào)試助手發(fā)送到單片機(jī)上。在單片機(jī)上運(yùn)行的這個(gè)小程序是一個(gè)伺服進(jìn)程,它一直在檢測(cè)是否有數(shù)據(jù)通過串口傳過來。一旦有數(shù)據(jù)過來,它就會(huì)調(diào)用中斷,將接收到的數(shù)據(jù)存入CF卡相鄰的扇區(qū)內(nèi)。這樣就完成了對(duì)CF卡的寫操作。寫操作之后可以立即對(duì)同一地址進(jìn)行讀操作,這也正是CF卡的讀寫機(jī)制與其它普通Flash存儲(chǔ)器不同的地方,單片機(jī)從先前存入扇區(qū)的首地址開始,讀出剛剛寫入的數(shù)據(jù),并將其送出到串口,發(fā)送到PC機(jī)的串口調(diào)試助手終端上。經(jīng)過驗(yàn)證,原先發(fā)送的數(shù)據(jù)和反饋回來的內(nèi)容一致,由此判定, CF卡程序編寫正確。
CF 卡讀寫設(shè)計(jì)的難點(diǎn)主要在于對(duì)扇區(qū)的訪問,由于CF卡由ATA控制器和Flash存儲(chǔ)器兩部分構(gòu)成,系統(tǒng)訪問Flash存儲(chǔ)器的速度遠(yuǎn)遠(yuǎn)小于訪問內(nèi)存的速度,如果系統(tǒng)頻繁訪問CF卡,勢(shì)必會(huì)影響系統(tǒng)的實(shí)時(shí)性和工作效率,所以必須考慮CF卡讀寫程序的設(shè)計(jì)技巧。根據(jù)存儲(chǔ)器訪問的局部性原理,CPU存取數(shù)據(jù)所訪問的存儲(chǔ)單元都趨向于聚集在一個(gè)較小的連續(xù)區(qū)域。從時(shí)間上看,如果一個(gè)信息項(xiàng)正在被訪問,那么在近期它很可能還會(huì)被再次訪問。從空間上看,在最近將用到的信息很可能與目前正在使用的信息在空間地址上是臨近的。在本系統(tǒng)的程序設(shè)計(jì)中,開辟了一個(gè)扇區(qū)的內(nèi)存空間TempSect,用于存儲(chǔ)最近訪問過的扇區(qū)數(shù)據(jù)。另外還設(shè)置了兩個(gè)全局變量SaveSectorNum和SectorDirty:SaveSectorNum保存最近備份的扇區(qū)編號(hào); SectorDirty說明備份數(shù)據(jù)是否與CF卡中的相應(yīng)數(shù)據(jù)一致,如果一致,其值為0,否則為1。這樣不但可以減少讀寫CF卡的次數(shù),而且提高了訪問速度,滿足嵌入式操作系統(tǒng)的實(shí)時(shí)性要求。
結(jié)語
本文對(duì)單片機(jī)直接讀寫CF卡進(jìn)行了介紹,重點(diǎn)闡述了軟硬件的實(shí)現(xiàn)思路、測(cè)試方法以及一些針對(duì)CF卡的編程思想。隨著嵌入式處理器在通信、航空航天、醫(yī)療設(shè)備、消費(fèi)類電子產(chǎn)品等領(lǐng)域的蓬勃發(fā)展,基于CF卡的嵌入式數(shù)據(jù)存儲(chǔ)系統(tǒng)的應(yīng)用前景一定會(huì)十分廣闊。
評(píng)論