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