用增強并口EPP協(xié)議擴展計算機的ISA接口
利用微機開發(fā)便攜式的數(shù)據(jù)采集、控制系統(tǒng)一直是微機應(yīng)用系統(tǒng)開發(fā)者十分關(guān)心的課題。特別在是基于筆記本電腦的數(shù)據(jù)采集和控制系統(tǒng)中,這一點顯得尤為重要。傳統(tǒng)的數(shù)據(jù)采集和控制系統(tǒng)是針對臺式機或者工控機設(shè)計的,一般都做成了標準的插卡,如A/D卡、D/A卡、RS232擴展卡等等,用戶根據(jù)自己的實際需要選取合適的插卡,安裝在自己的計算機中,再編寫所需要的程序。但是在基于筆記本電腦的應(yīng)用系統(tǒng)中,由于其沒有擴展槽,如果用戶自己不再配一個擴展箱,就不能配置現(xiàn)成的插卡。擴展箱的主要功能是擴展筆記本電腦的各種外圍接口,即把筆記本電腦的功能擴展為與一個臺式機相同的功能。它需要單獨的電源供應(yīng),體積比筆記本電腦本身大,又比筆記本重的多,價格在人民幣7000~10000元左右。如果能夠找到一種便捷的方法,為筆記本電腦提供一個標準的總線接口,如ISA接口,那么現(xiàn)在市場上大部分的插卡都可以用在筆記本電腦上,不僅為用戶節(jié)約了一個擴展箱投資,而且還為用戶提供了更加廣闊的選擇余地。本文提出了解決該問題的一個完整的技術(shù)方案。
1 EPP并口
最初的計算機并口只是為打印機設(shè)計的,數(shù)據(jù)只是單向傳輸。IBM公司引進了PS/2設(shè)計后,并口開始支持雙向數(shù)據(jù)傳輸,但是PS/2實際上并沒有成為一個為業(yè)界廣泛認可的雙向并口模式。1992年,由Intel、Xicom和Zenith公司共同制定了EPP1.7標準。以后IEEE又發(fā)展了IEEE1284的EPP標準。實際上EPP的標準共有三個,即EPP1.7、EPP1.9和IEEE1284,這些標準并不完全兼容,特別是EPP1.7和IEEE1284之間,不過這些對用戶的使用并沒有太大的影響。文獻[1]即是IEEE1284標準,其中規(guī)定了并口各種模式的詳細的時序圖,包括SPP、PS/2、ECP和EPP模式。作者根據(jù)IEEE1284上規(guī)定的時序圖進行了時序設(shè)計,而計算機上提供的EPP版本是EPP1.7或EPP1.9,實際使用中它們沒有不匹配的地方。
2 用EPP擴展ISA接口的總體設(shè)計
計算機主板上一般有2~3個ISA插槽,可以擴充一些ISA插卡。大多數(shù)基于ISA標準的微機數(shù)據(jù)采集和控制只用到了ISA接口的數(shù)據(jù)線、地址線、AEN、ALE、#IOR、#IOW等信號,有的也用到了中斷和DMA的信號。只要了解這些信號之間的時序關(guān)系,我們完全可以自己用邏輯器件“制造”出ISA接口,文獻[2]介紹了用單片機擴展總線的技術(shù),包括ISA、STD總線等。作者曾經(jīng)用并口的SPP模式和80C196單片機擴展出了計算機的ISA接口,但是IO讀寫速度只能達到20KB/s左右,總體的效果不太理想。ECP和EPP都能進行高速雙向數(shù)據(jù)通訊,但是ECP的實現(xiàn)遠比EPP復(fù)雜的多,其性能和EPP卻大致相當(dāng),所以最終的方案采用了EPP模式。由于單片機是一個單任務(wù)的串行控制器,如果它只是用來擴展ISA接口,那么可以達到比較高的速度;否則,ISA總線的速度會大大降低,最后變得失去使用價值,所以最終的外設(shè)芯片不能采用單片機,只能采用DSP或者大規(guī)模的可編程邏輯器件。作者選用了后一種方案。
用EPP擴展ISA口的硬件核心是一片可編程邏輯器件,如CPLD,它一方面負責(zé)與計算機通過EPP協(xié)議進行雙向數(shù)據(jù)通訊,另一方面負責(zé)產(chǎn)生ISA接口時序,系統(tǒng)體系相當(dāng)簡潔而高效,電路原理如圖1所示。EPP的數(shù)據(jù)線D0~D7和信號線nWrite、nDstrb、nAstrb、nInit、nWait、Intr直接與CPLD的雙向I/O線相連。另外,EPP沒有定義標準并口的第12、13、15三個引腳,這些引腳用戶可以靈活使用。電路圖上并口的第13腳和CPLD連了起來,可以提供其他的功能。CPLD提供了ISA接口的D0~D7,A0~A15,ALE,AEN,#IOR,#IOW,IRQ、IORDY等信號。擴展的ISA接口提供了16根地址線,可以尋址64K的IO空間,這比計算機所提供的IO空間(1K)大了許多倍。用戶可以專門設(shè)計具有64K尋址能力的數(shù)據(jù)采集和控制板,也可以用只有1K尋址能力的數(shù)據(jù)采集和控制板,在這種情況下,地址線的高6位被忽略了,但這并不影響系統(tǒng)的正常使用。
3 硬件操作方法
EPP協(xié)議定義的并行口提供了四種傳送周期:數(shù)據(jù)寫周期、數(shù)據(jù)讀周期、地址寫周期和地址讀周期。數(shù)據(jù)周期一般用于計算機和外設(shè)間的數(shù)據(jù)傳送,地址周期一般用于傳送地址、通道、命令和控制等信息。實際上,數(shù)據(jù)周期和地址周期并沒有那么嚴格的界限,可以把地址周期看做另一種數(shù)據(jù)周期,二者并沒有太大的區(qū)別。圖2是EPP數(shù)據(jù)寫周期的時序圖,圖中的nIOW信號實際上在進行EPP數(shù)據(jù)寫時并不會產(chǎn)生,只不過是為了表示所有的操作都發(fā)生在一個IO周期內(nèi),只有這樣,才能使EPP獲得ISA總線的數(shù)據(jù)操作速度。圖2中的nDataStrobe信號如果換為nAddStrobe信號,就是EPP地址寫周期。圖3是EPP地址讀周期,也是發(fā)生在一個IO周期內(nèi)。
EPP定義了一個計算機用于控制外設(shè)初始化的信號:nInit,如果用戶不希望控制外設(shè)的初始化,則可以不處理這個信號;用戶也可以挪用nInit信號做其他的用途,在本設(shè)計方案的地址周期中,如果nInit為高,則表示該地址對應(yīng)ISA接口的高8位地址,否則,對應(yīng)低8位地址。用這種辦法解決了用8位的EPP地址擴展16位的ISA地址的難題。實踐證明,這是一個方便實用的解決方法。
用EPP擴展ISA接口,最根本的任務(wù)是把EPP的數(shù)據(jù)讀寫周期快速地轉(zhuǎn)化為ISA的IO讀寫周期。在ISA的時序中[3],時鐘的頻率是4.77MHz,典型的一個ISA周期要用4個時鐘周期,即大概1μs的時間。在EPP的讀周期中,EPP首先發(fā)出讀命令,然后等待ISA的數(shù)據(jù)響應(yīng),如果ISA仍然以4個時鐘來進行IO讀操作,那么EPP很有可能會由于超時而發(fā)生時序錯誤,數(shù)據(jù)也必然會錯。解決這個問題可以用提高ISA接口的時鐘頻率的辦法,如提高到8MHz甚至是16MHz,但是這樣的話ISA卡可能會來不及響應(yīng)而發(fā)生數(shù)據(jù)錯誤,所以這種方法不可??;另一種方法是改造ISA接口的時序,使得既能滿足ISA卡的時序要求,又不至于造成EPP的超時錯誤。仔細分析ISA的IO讀時序,CPU在T1發(fā)出地址信號并發(fā)出ALE信號,在T2發(fā)出讀命令,在T3采樣READY信號,以決定是否產(chǎn)生等待周期,如果不需要等待,則在T4讀取數(shù)據(jù),完成整個讀周期??梢园l(fā)現(xiàn),對于本系統(tǒng),T1周期是可以省略的,因為CPLD可以在EPP的地址周期內(nèi)設(shè)定要尋址的IO地址,而沒有必要在ISA周期內(nèi)再發(fā)送地址,這樣ISA的IO讀周期就從4個時鐘減少到3個時鐘;如果可以保證ISA卡設(shè)備可以在一個時鐘內(nèi)送出有效的數(shù)據(jù),則T3也可以省略,這樣一個ISA讀周期實際上只占用了兩個時鐘,不會造成EPP的超時錯誤。對EPP數(shù)據(jù)寫周期,因為CPLD可以先把數(shù)據(jù)寫到緩沖中,首先保證EPP時序,再把數(shù)據(jù)從緩沖寫到ISA設(shè)備中去,所以不會造成超時錯誤。ISA的讀寫時序經(jīng)過這樣的簡化處理后,可以滿足ISA設(shè)備和EPP兩方面的時序要求。
4 CPLD的編程
系統(tǒng)選用的CPLD是ALTERA公司的MEP7064,它有64個宏單元,1250個可用門,就可以完成EPP和ISA的接口任務(wù)。文獻[4]詳細介紹了ALTERA公司的CPLD器件,在這里就不再介紹器件的性能和使用方法了。僅給出用VHDL語言寫的控制程序如下(部分信號的意義請參照前面的電路原理圖)。
Process (clk)
Type ISAType is (Idle,RD,WR);
Variable ISA: ISAType;
Variable IOR: STD_LOGIC;
Variable IOW: STD_LOGIC;
Variable EPPBuf: STD_LOGIC_VECTOR (7 downto 0);
Begin
Case ISA is
When Idle =>
If IOR=‘1’ then
#IORD <= ‘0’;
IOR=‘0’;
ISA := RD;
Elseif IOW=‘1’ then
#IOWR <= ‘0’;
ISADataBuf<=EPPBuf;
IOW:=‘0’;
ISA:=WR;
End if;
When RD =>
EPPBuf:=ISADataBus;
#IORD<=‘1’;
ISA:=Idle;
When WR =>
#IOWR <=‘1’;
ISA:=Idle;
End case;
End;
End Process;
5 計算機對EPP/ISA的操作
計算機通過EPP協(xié)議用CPLD擴展出ISA接口,現(xiàn)有的ISA卡就可以通過ISA接口、CPLD和EPP協(xié)議間接地連到了計算機上。對于ISA卡的使用者而言,無論從硬件的角度還是從軟件的角度來看,都好象是這塊ISA卡直接插在計算機的ISA槽內(nèi),其速度也完全能夠達到應(yīng)用的要求。EPP協(xié)議的用戶編程接口是協(xié)議定義的幾個IO口地址。以并口基地址為378H為例,378H是SPP數(shù)據(jù)口,379H是SPP狀態(tài)口,37AH是SPP控制口,37BH是EPP地址口,37CH是EPP數(shù)據(jù)口。對ISA卡的操作順序是:首先通過設(shè)置nInit為高和寫EPP地址口來設(shè)置ISA卡的高8位地址,再通過設(shè)置nInit為低和寫EPP地址口來設(shè)置ISA卡的低8位地址,就可以通過EPP數(shù)據(jù)口對ISA卡進行讀寫操作了。作者本人做出的系統(tǒng)對單一的地址進行操作時,寫操作的速度可以達到1000~1200 KB/s,最高可以達到1310KB/s,讀操作的速度可達800~1100KB/s,完全能滿足數(shù)據(jù)采集和控制的要求。如果是對多個地址進行操作,由于設(shè)置地址要占用一個或者兩個EPP地址周期,所以數(shù)據(jù)傳輸速度會有所損失。
6 與其它通訊方案的比較
(1)RS232串口:最通用的一種連接方法。但是它支持數(shù)據(jù)傳輸速率最大為10~20KB/s,對于一般的數(shù)據(jù)采集和控制系統(tǒng)而言顯得有些慢。
(2)SPP:數(shù)據(jù)通訊速度比串口快,可以達到150 KB/s。但是SPP用做數(shù)據(jù)輸入時很麻煩,用多次IO才能完成一次完整的數(shù)據(jù)讀取,速度要犧牲很多,況且外設(shè)的設(shè)計并不比EPP簡單。所以,如果選擇了并口方案,就不能選擇SPP模式,除非用戶僅僅是做數(shù)據(jù)輸出并且對速度沒有很高的要求。
(3)ECP:與EPP相比ECP最大的優(yōu)勢是它支持DMA操作,如果系統(tǒng)工作時有大批量的數(shù)據(jù)要傳輸,用ECP模式可以大大減輕計算機CPU的負擔(dān),提高系統(tǒng)的整體性能。但是獲得ECP的高性能的代價是必須重新設(shè)計比EPP復(fù)雜得多的接口軟件(指CPLD的控制軟件),同時計算機軟件方面還必須要編寫硬件驅(qū)動程序,這對于一般的計算機應(yīng)用系統(tǒng)開發(fā)者而言還是一個不小的困難。
(4)PCMCIA(the Personal Computer Memory Card Industry Association):發(fā)展了信用卡大小的外設(shè)與PC機連接的標準。最初,PCMCIA標準僅對于內(nèi)存卡,現(xiàn)在已擴展到I/O設(shè)備。數(shù)據(jù)能以最大5MB/s的速率傳輸。但PCMCIA卡不支持DMA,這就增加了數(shù)據(jù)采集和CPU處理之間的時間。因而,目前的PCMCIA I/O卡需大容量緩存。PCMCIA設(shè)備的另一缺點是尺寸太?。ㄗ畲蟪叽纾福叮恚?times;54mm×10mm),不能用于控制數(shù)據(jù)采集系統(tǒng)中的一些模擬電路部分。
(5)USB(Universal Serial Bus):支持12Mbps的數(shù)據(jù)傳輸速度,支持127個外圍設(shè)備,支持PNP(Plug and Play),支持熱插拔,并且總線本身可以提供用戶系統(tǒng)電源。信號傳輸采用差分方式,可以抑制比較強的共模干擾。USB具有很大的發(fā)展前途。在未來的計算機上,可能不再提供RS232串口,可能不再提供并口,但絕對不可能沒有USB接口。USB的使用不象并口那樣簡潔,它必須要有專用的接口芯片的支持才能用在系統(tǒng)中。不少芯片商已經(jīng)提供了USB的產(chǎn)品,如USB HUB、USB接口、USB單片機等等。當(dāng)然用戶自己也可以把USB協(xié)議寫到PLD芯片中去,使接口和系統(tǒng)融為一體。
綜上所述,采用EPP擴展計算機的ISA接口是一種新穎的計算機外設(shè)設(shè)計方案,它具有非常高的性能價格比,能夠達到絕大多數(shù)基于ISA接口的數(shù)據(jù)采集和控制系統(tǒng)的通訊速度要求。這種方案大大擴展了筆記本電腦對于ISA接口設(shè)備的適應(yīng)能力,省去了用戶對擴展箱的需求。僅僅改寫該系統(tǒng)的CPLD程序和計算機的控制程序就可以提供新的功能,如做成雙ISA接口系統(tǒng),或者改造成STD、STE總線系統(tǒng)等等,而系統(tǒng)的硬件不需做任何的改動。EPP的確是一種有前景的實用接口技術(shù),值得微機外設(shè)設(shè)計者和使用者采用。
評論