Intel Xscale PXA255嵌入式處理器與CF卡的
本設計僅采用一個(gè)CF卡插槽,使用Socket0的I/O地址空間,而且CF卡采用True IDE模式。則訪(fǎng)問(wèn)地址空間為0x20000000-0x24000000時(shí),PC Card/CF卡控制器將同時(shí)驅動(dòng)信號SA_A25:0、nPREG和nPSKTSEL,并使用nPIOW和nPIOR信號作為讀寫(xiě)控制信號。True IDE模式支持8位存取,也支持16位存取。
在True IDE模式下,某些信號有特殊的含義,必須采用True IDE模式下特有的設置方法。如表1所示,nCE1是任務(wù)文件寄存器片選信號,低電平有效;nCE2是交替狀態(tài)(Alternate Status)寄存器和設備控制(Device Control)寄存器片選信號,也是低電平有效。因為實(shí)際操作中,極少使用交替狀態(tài)寄存器和設備控制寄存器,所以對CF卡的操作實(shí)際就是對任務(wù)文件寄存器的操作。因此,一般設置nCE1=0,nCE2=1。實(shí)現方法:在CPLD中設置nCE1=SA_A4,nCE2=not SA_A4。這樣設置是有根據的。表1是True IDE模式下I/O編碼表。主機操作CF卡時(shí),系統僅使用地址總線(xiàn)A2:0,用于選擇組成任務(wù)文件寄存器的8個(gè)寄存器之一。而地址總線(xiàn)A10:3由主機接地。因此,nCE1=SA_A4即nCE1=0;nCE2=not SA_A4即nCE2=1。表1中,-CE1=0時(shí),對應的8個(gè)寄存器統稱(chēng)為任務(wù)文件寄存器。
需要注意的是,在True IDE模式下,nOE不是讀使能信號,而是CF卡True IED模式的使能信號。CF卡上電時(shí),若nOE(PIN9)為0,則CF卡自動(dòng)進(jìn)入True IDE模式;若nOE=1則進(jìn)入PC Card 模式。當電源一直接通時(shí),熱拔插CF卡將會(huì )使其從原來(lái)的True IDE模式重新配置成PC Card模式。因此,熱插拔過(guò)程中,為了使CF卡工作在True IDE模式,需要在CF卡加電啟動(dòng)的時(shí)侯,同時(shí)將nOE信號接地。實(shí)現的方法:在CPLD中將nOE置0。True IDE模式下,nWE也不用作寫(xiě)使能信號,而應該由主機將之接地。處理方法:在CPLD中將其只置為1。
還有一點(diǎn)需要注意的是: Reset信號在True IDE 模式下低電平有效,而在其它模式下高電平有效。將Reset信號接到PXA255的系統復位信號Reset_SYS。
True IDE模式下,PXA255處理器與CF卡的硬件接口電路如圖3所示。
在圖3中,D15:0為數據總線(xiàn)。RDnWR信號用來(lái)控制數據總線(xiàn)的方向(系統處于讀狀態(tài)時(shí),RDnWR=1;系統處于寫(xiě)狀態(tài)時(shí),RDnWR=0)。nPSKTSEL信號用作數據總線(xiàn)的傳輸使能。SA_A10:0(CF_A10:0)為地址總線(xiàn)。在True IDE 模式下,CF卡的PSKTSEL引腳是主從(Master/Slave)選擇信號:當PSKTSEL懸空時(shí),CF卡是Slave設備;當PSKTSEL=0時(shí),CF卡是Master設備。設計僅采用一個(gè)CF卡插槽,所以將PSKTSEL接地。在TRUE IDE模式下,REG信號沒(méi)有用處,應該接電源VCC。IREQ是中斷請求信號。利用IREQ信號,PXA255處理器可以判斷CF卡是否處于讀寫(xiě)忙狀態(tài),對CF卡進(jìn)行讀寫(xiě)之前利用此引腳判斷CF卡是否空閑。nWAIT信號用于指示讀寫(xiě)操作正在進(jìn)行,請求處理器等待。
3. CF卡熱插拔、即插即用功能的實(shí)現
在自身設計上,CF卡注重軟硬件兩方面的配合。軟硬件的協(xié)同設計可以實(shí)現CF卡熱插拔、即插即用的功能。
一是硬件提供判斷條件。CF卡硬件電路提供了兩個(gè)用來(lái)檢測CF卡是否存在的引腳(nCD1和nCD2)。nCD1和nCD2的有效電平均為低電平,當主機檢測到與其相連的nCD1和nCD2引腳同時(shí)為低電平時(shí),可判斷出CF卡與主機相連;當主機檢測到與其相連的nCD1和nCD2兩個(gè)引腳不同時(shí)為低電平,則可判斷出CF卡未與主機相連。
表1:True IDE模式I/O編碼
二是軟件。首先定義全局變量(如:Cf_IsInsert),用于記錄CF卡是否與主機相連:當Cf_IsInsert為0時(shí)表示CF卡未與主機相連;當Cf_IsInsert為1時(shí)表示CF卡與主機相連。然后,在每次操作CF卡之前都先檢測CF卡的nCD1和nCD2引腳。當檢測到nCD1和nCD2引腳同時(shí)為低電平(有卡插入)且Cf_IsInsert為0時(shí),復位CF卡,重新檢測CF卡的FAT表,統計還有多少剩余空間可以分配。檢測完畢后,置變量Cf_IsInsert為1,然后設置MECR寄存器CIT比特位。當檢測到nCD1和nCD2引腳同時(shí)為低電平,且Cf_IsInsert為1時(shí),設置MECR寄存器CIT比特位,繼續CF卡的正常操作。當檢測到nCD1和nCD2引腳為高時(shí)(無(wú)卡插入),停止CF卡操作,清除MECR寄存器CIT比特位,置變量Cf_IsInsert為0。
讀/寫(xiě)CF卡扇區程序的編寫(xiě)方法
CF卡的讀寫(xiě)是以一個(gè)扇區為基本單位的。在讀寫(xiě)一個(gè)扇區之前必須先指明當前需要讀寫(xiě)的柱面、頭和扇區或LBA地址,然后發(fā)送讀寫(xiě)命令。一個(gè)扇區的512字節需要一次性連續讀出或者寫(xiě)入。主機讀/寫(xiě)CF卡上一個(gè)文件的過(guò)程是這樣的:
1.CF卡初始化。CF卡上電復位和統計剩余空間的大小。
2.CF卡內部控制器向CF卡某些寄存器填寫(xiě)必要的信息。如向扇區號寄存器填寫(xiě)讀寫(xiě)數據的起始扇區號或LBA地址、向扇區數寄存器填寫(xiě)讀寫(xiě)數據所占的扇區個(gè)數、設置CF卡的扇區尋址方式等。
3.向CF卡的命令寄存器寫(xiě)入操作CF卡的命令。如寫(xiě)操作向CF卡的命令寄存器寫(xiě)入30H,讀操作向CF卡的命令寄存器寫(xiě)入20H。
4.CF卡有數據傳輸請求之后,主機讀寫(xiě)CF卡的數據寄存器,從而實(shí)現從CF卡數據緩沖讀出數據或向CF卡數據緩沖寫(xiě)入數據。
5.在執行以上操作的過(guò)程中,每執行一步,都應該檢測狀態(tài)寄存器,確定CF卡的當前狀態(tài),從而確定下一步應該執行什么操作(參考狀態(tài)寄存器的BIT位的意義,編寫(xiě)檢測代碼)。
本文小結
前面詳細介紹了CF卡的工作原理、PXA255處理器的PC Card/CF卡控制器的特性,給出了基于PXA255處理器的嵌入式導航設備存儲系統的一種實(shí)現方案。目前,該設計已經(jīng)在印刷電路板上實(shí)現,運行穩定可靠。
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
評論