摘 要: 提出了用EPP协议和CPLD扩展笔记本电脑的ISA接口的方法,给出了详细的技术解决方案。扩展的ISA接口可以达到1310 kB/s的双向通讯速度,与ISA本身的速度相当。用户可以通过扩展的ISA接口直接使用市场上的基于ISA的接口卡。
关键词: ISA 标准并口 增强并口(EPP)复杂的可编程逻辑器件
利用微机开发便携式的数据采集、控制系统一直是微机应用系统开发者十分关心的课题。特别是在基于笔记本的数据采集和控制系统中,这一点显得尤为重要。传统的数据采集和控制系统是针对台式机或者工控机设计的,一般都做成了标准的插卡,如A/D卡、D/A卡、RS232扩展卡等。用户根据自己的实际需要选取合适的插卡,安装在自己的计算机中,再编写所需要的程序。但是在基于笔记本的应用系统中,由于笔记本电脑没有扩展槽,如果用户自己不再配一个扩展箱,就不能配置现成的插卡。扩展箱的主要功能是扩展笔记本的各种外围接口,即把笔记本的功能扩展为与一个台式机相同的功能。它需要单独的电源供应,体积比笔记本电脑本身大,又比笔记本重的多,价格在人民币7000~10000元左右。如果能够找到一种便捷的方法,为笔记本电脑提供一个标准的总线接口,如ISA接口,那么现在市场上大部分的插卡都可以用在笔记本上,不仅为用户节约了一个扩展箱投资,而且还为用户提供了更加广阔的选择余地。本文提出了解决该问题的一个完整的技术方案。
1 EPP并口
最初的计算机并口只是为打印机设计的,数据只是单向传输。IBM公司引进了PS/2设计后,并口开始支持双向数据传输,但是PS/2实际上并没有成为一个业界广泛认可的双向并口模式。1992年,由Itel,Xicom和Zenith公司共同制定了EPP1.7标准。以后IEEE又发展了IEEE1284的EPP标准。实际上EPP的标准共有三个,即EPP1.7、EPP1.9和IEEE1284,这些标准并不完全兼容,特别是EPP1.7和IEEE1284之间,不过这些对用户的使用并没有太大的影响。文献[1]即是IEEE1284标准,其中规定了并口各种模式的详细的时序图,包括SPP、PS/2、ECP和EPP模式。作者根据IEEE1284上规定的时序图进行了时序设计,而计算机上提供的EPP版本是EPP1.7或EPP1.9,实际使用中它们没有什么不能匹配的地方。
2 用EPP扩展ISA接口的总体设计
计算机主板上一般有2~3个ISA插槽,可以扩充一些ISA插卡。大多数基于ISA标准的微机数据采集和控制只用到了ISA接口的数据线、地址线、AEN、ALE、#IOR、#IOW等信号,有的也用到了中断和DMA的信号。只要了解这些信号之间的时序关系,我们完全可以自己用逻辑器件“制造”出ISA接口,文献[2]介绍了用单片机扩展总线的技术,包括ISA、STD总线等。作者曾经用并口的SPP模式和80C196单片机扩展出了计算机的ISA接口,但是IO读写只能达到20kB/s左右,总体的效果不太理想。ECP和EPP都能进行高速双向数据通讯,但是ECP的实现远比EPP复杂的多,其性能和EPP却大致相当,所以最终的方案采用了EPP模式。由于单片机是一个单任务的串行控制器,如果单片机只是用来扩展ISA接口,那么可以达到比较高的速度;否则,ISA总线的速度会大大降低,最后变得失去使用价值,所以最终的外设芯片不能采用单片机,只能采用DSP或者大规模可编程逻辑器件。作者选用了后一种方案。
用EPP扩展ISA口的硬件核心是一片可编程逻辑器件,如CPLD,它一方面负责与计算机通过EPP协议进行双向数据通讯,另一方面负责产生ISA接口时序,系统体系相当简洁而高效,电路原理如图1所示。EPP的数据线D0~D7和信号线nWrite、nDstrb、nAstrb、nInit、nWait、Intr直接与CPLD的双向I/O线相连。另外,EPP没有定义标准并口的第12、13、15三个引脚,这些引脚用户可以灵活使用。电路图上并口的第13脚和CPLD连了起来,可以提供其他的功能。CPLD提供了ISA接口的D0~D77、A0~A15、ALE、AEN、#IOR、#IOW、IRQ、IORDY等信号。扩展的ISA接口提供了16根地址线,可以寻址64K的IO空间,这比计算机所提供的IO空间(1K)大了许多倍。用户可以专门设计具有64K寻址能力的数据采集和控制板,也可以用只有1K寻址能力的数据采集和控制板,在这种情况下,地址线的高6位被忽略了,但这并不影响系统的正常使用。
3 硬件操作方法
EPP协议定义的并行口提供了四种传送周期:数据写周期、数据读周期、地址写周期和地址读周期。数据周期一般用于计算机和外设间的数据传送,地址周期一般用于传送地址、通道、命令和控制等信息。实际上,数据周期和地址周期并没有那么严格的界限,可以把地址周期看做另一种数据周期,二者并没有太大的区别。图2是EPP数据写的时序图,图中的nIOW信号实际上在进行EPP数据写时并不会产生,只不过是为了表示所有的操作都发生在一个IO周期内,只有这样,才能使EPP获得ISA总线的数据操作速度。图2中的nAddStrobe信号如果换为nAddStrobe信号,就是EPP地址写周期。图3是EPP地址读周期,也是发生在一个IO周期内。
EPP定义了一个计算机用于控制外设初始化的信号:nInit,如果用户不希望控制外设的初始化,则可以不处理这个信号;用户也可以挪nInit信号做其他的用途,在本设计方案的地址周期中,如果nInit为高,则表示该地址对应ISA接口的高8位地址,否则,对应低8位地址。用这种办法解决了用8位的EPP地址扩展16位的ISA地址的难题。实践证明,这是一个方便实用的解决方法。
用EPP扩展ISA接口,最根本的任务是把EPP的数据读写周期快速地转化为ISA的IO读写周期。在ISA的时序中,时钟的频率是4.77MHz,典型的一个ISA周期要用4个时钟周期,即大概1μs的时间。在EPP的读周期中,EPP首先发出读命令,然后等待ISA的数据响应,如果ISA仍然以4个时钟来进行IO读操作,那么EPP很有可能会由于超时而发生时序错误,数据也必然会错。解决这个问题可以用提高ISA接口的时钟频率的办法,如提高到8MHz甚至是16MHz,但是这样的话ISA卡可能会来不及响应而发生数据错误,所以这种方法不可取;另一种方法是改造ISA接口的时序,使得既能满足ISA卡的时序要求,又不至于造成EPP的超时错误。仔细分析ISA的IO读时序,CPU在T1发出地址信号并发出ALE信号,在T2发出读命令,在T3采样READY信号,以决定是否产生等待周期,如果不需要等待,则在T4读取数据,完成整个读周期。可以发现,对于本系统,T1周期是可以省略的,因为CPLD可以在EPP的地址周期内设定要寻址的IO地址,而没有必要在ISA周期内再发送地址,这样ISA的IO读周期就从4个时钟减少到3个时钟;如果可以保证ISA卡设备可以在一个时钟内送出有效的数据,则T3也可以省略,这样一个ISA读周期实际上只占用了两个时钟,不会造成EPP的超时错误。对EPP数据写周期,因为CPLD可以先把数据写到缓冲中,首先保证EPP时序,再把数据从缓冲写到ISA设备中去,所以不会造成超时错误。ISA的读写时序经过这样的简化处理后,可以满足ISA设备和EPP两方面的时序要求。
4 CPLD的编程
系统选用的CPLD是ALTERA公司的MEP7064,它有64个宏单元,1250个可用门,就可以完成EPP和ISA的接口任务。文献[4]详细介绍了ALTERA公司的CPLD器件,在这里就不再介绍器件的性能和使用方法了。仅给出用VHDL语言写的控制程序如下(部分信号的意义请参照图1)。
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='I'then
#IORD <=‘0’
IOR;='0'
ISA:=RD
Elseif IOW='1'then
#IOWR <=‘0’
ISADataBuf<=EPPBuf
IOW='0'
ISA=WR
End if
When WR=>
EPPBuf:=ISADataBus;
#IORD<=‘1’
ISA:=IDLE;
When WR =>
#IOWR <=‘1’
ISA=Idle
End case;
End
End Process
5 计算机对EPP/ISA的操作
计算机通过EPP协议用CPLD扩展出ISA接口,现有的ISA卡就可以通过ISA接口、CPLD和EPP协议间接地连到了计算机上。对于ISA卡的使用者而言,无论从硬件的角度还是从软件的角度来看,都好象是这块ISA卡直接插在计算机的ISA槽内,其速度也完全能够达到应用的要求。EPP协议的用户编程接口是协议定义的几个IO口地址。以并口基地址为378H为例,378H是SPP的数据口,379H是SPP的状态口,37AH是SPP的控制口,37BH是EPP的地址口,37CH是EPP的数据口。对ISA卡的操作顺序是:首先通过设置nInit为高和写EPP地址口来设置ISA卡的高8位地址,再通过设置nInit为低和写EPP地址口来设置ISA卡的低8位地址,就可以通过EPP数据口对ISA卡进行读写操作了。作者本人做出的系统对单一的地址进行操作时,写操作的速度可以达到1000~1200 kB/s,最高可以达到1310 kB/s,读操作可以达到800~1100kB/s,完全能满足数据采集和控制的要求。如果是对多个地址进行操作,由于设置地址要占用一个或者两个EPP地址周期,所以数据传输速度会有所损失。
6 与其它通讯方案的比较
·RS232串口:是最通用的一种连接方法。但是它支持数据传输速率最大为10~20kB/s,对于一般的数据采集和控制系统而言显得有些慢。
·SPP:数据通讯速度比串口快,可以达到150 kB/s。但是SPP用做数据输入时很麻烦,用多次IO才能完成一次完整的数据读取,速度要牺牲很多,况且外设的设计并不比EPP简单。所以,如果选择了并口方案,就不能选择SPP模式,除非用户仅仅是做数据输出并且对速度没有很高的要求。
·ECP:与EPP相比ECP最大的优势是它支持DMA操作,如果系统工作时有大批量的数据要传输,用ECP模式可以大大减轻计算机CPU的负担,提高系统的整体性能。但是获得ECP的高性能的代价是必须重新设计比EPP复杂得多的接口软件(指CPLD的控制软件),同时计算机软件方面还必须要编写硬件驱动程序,这对于一般的计算机应用系统开发者而言还是一个不小的困难。
·PCMCIA(the Personal Computer Memory Card Industry Association):发展了信用卡大小的外设与PC机连接的标准。最初,PCMCIA标准仅对于内存卡,现在已扩展到I/O设备。数据可以最大5MB/s的速率传输。但PCMCIA卡不支持DMA,这就增加了数据采集和CPU处理之间的时间。因而,目前的PCMCIA I/O卡需大容量缓存。PCMCIA设备的另一缺点是尺寸太小(最大尺寸86mm×54mm×10mm),不能用于控制数据采集系统中的一些模拟电路部分。
· USB(Universal Serial Bus):支持12Mbps的数据传输速度,支持127个外围设备,支持pnp(Plug and Play),支持热插拔,并且总线本身可以提供用户系统电源。信号传输采用差分方式,可以抑制比较强的共模干扰。USB具有很大的发展前途。在未来的计算机上,可能不再提供RS232串口,可能不再提供并口,但绝对不可能没有USB接口。USB的使用不象并口那样简洁,它必须要有专用的接口芯片的支持才能用在系统中。不少芯片商已经提供了USB的产品,如USB HUB、USB接口、USB单片机等等。当然用户自己也可以把USB协议写到PLD芯片中去,使接口和系统融为一体。
用EPP扩展计算机的ISA接口是一种新颖的计算机外设设计方案,性能价格比非常高,能够达到绝大多数的基于ISA接口的数据采集和控制系统的通讯速度要求。这种方案大大扩展了笔记本电脑对于ISA接口设备的适应能力,省去了用户对扩展箱的需求。仅仅改写该系统的CPLD程序和计算机的控制程序就可以提供新的功能,如做成双ISA接口系统,或者改造成STD、STE总线系统等等,而系统的硬件不需做任何的改动。