分类:
2009-05-25 20:24:34
最初的并口设计是单向传输数据的,也就是说数据在某一时刻只能实现输入或者输出。后来IBM又开发出了一种被称为SPP(Standard Parallel Port)的双向并口技术,它可以实现数据的同时输入和输出,这样就将原来的半互动并口变成了真正的双方互动并口; Intel、 Xircom 及Zenith于1991年共同推出了EPP(Enhanced Parallel Port,增强型并口),允许更大容量数据的传输(500~1000byte/s),其主要是针对要求较高数据传输速度的非打印机设备,例如存储设备等;紧接着EPP的推出,1992年微软和惠普联合推出了被称为ECP(Extended Capabilities Port,扩展并行口)的新并口标准,和EPP不同,ECP是专门针对打印机而制订的标准;发布于1994年的IEEE 1284涵盖了EPP和ECP两个标准,但需要操作系统和硬件都支持该标准,这对现在的硬件而言已不是什么问题了。目前我们所使用的并口都支持EPP和ECP这两个标准,而且我们可以在BIOS当中自己设置并口的工作模式。
标准的PC并口有25针和37针两种,分别称为D-subh和Centronics,具体管脚定义见表4.1-4.3。
标准的PC并口使用3个8位的端口寄存器,这些端口寄存器与并行口管脚存在对应关系,我们可以通过这三个端口寄存器去监控并口管脚。这三个端口寄存器依次是数据寄存器、状态寄存器和控制寄存器。
数据端口或称数据寄存器保存了写入数据输出端口的一字节信息。数据端口可以写入数据,也可以读出数据(即可擦写);写进去的当然是我们希望从数据端口引脚输出的数据,不过读进来的也只是我们上次写进去的数据,或是原来保留在里面的数据,并不是从端口引脚输入PC的数据。
表4.1 SPP模式下的信号定义 1
数据寄存器(基地址) | |||||
位 |
引脚:D-sub |
信号名 |
信号源 |
是否在连接器处倒相 |
引脚:Centronics |
D0 |
2 |
数据位0 |
PC |
否 |
2 |
D1 |
3 |
数据位1 |
PC |
否 |
3 |
D2 |
4 |
数据位2 |
PC |
否 |
4 |
D3 |
5 |
数据位3 |
PC |
否 |
5 |
D4 |
6 |
数据位4 |
PC |
否 |
6 |
D5 |
7 |
数据位5 |
PC |
否 |
7 |
D6 |
8 |
数据位6 |
PC |
否 |
8 |
D7 |
9 |
数据位7 |
PC |
否 |
9 |
状态端口或称状态寄存器保存的是5个输入(S3-S7)的逻辑状态。S0-S2位不出现在并口连接器中。除了S0以外,状态寄存器是只读的,读出数据信息是状态端口引脚上的逻辑状态。S0是支持EPP传输并口的超时标志信息,可以用软件方法清零。在许多并口中,状态输入接有上拉电阻。其定义如下:
表4.2 SPP模式下的信号定义 2
状态寄存器(基地址+1) | |||||
位 |
引脚:D-sub |
信号名 |
信号源 |
是否在连接器处倒相 |
引脚:Centronics |
S0 |
|
Time-Out |
|
|
|
S1 |
|
未使用 |
|
|
|
S2 |
|
未使用 |
|
|
|
S3 |
15 |
nError |
外设 |
否 |
32 |
S4 |
13 |
Select |
外设 |
否 |
13 |
S5 |
12 |
Paper Out |
外设 |
否 |
12 |
S6 |
10 |
nAck |
外设 |
否 |
10 |
S7 |
11 |
Busy |
外设 |
是 |
11 |
注:有些PC上,0、1、2位均未定义 |
控制端口或称控制寄存器保存了C0-C3的4位控制信息。一般来说,这些位被用来输出,然而大多数SPP中,控制位为集电极开路/漏极开路模式,也就是说,它们同样可以用作输入。要从控制位上读取外部逻辑信号,首先先向相应位输出写入“1”,然后读取控制寄存器的值即可。但是,为了提高交换速度,大多数支持EPP和ECP的接口中,控制位工作在不能用作输入的推拉模式下。在一些多模式接口中,控制位采用的是改进型的推拉模式,可以用作输入。其定义如下:
表4.3 SPP模式下的信号定义 3
控制寄存器(基地址+2) | |||||
位 |
引脚:D-sub |
信号名 |
信号源 |
是否在连接器处倒相 |
引脚:Centronics |
0 |
1 |
nStrobe |
PC |
是 |
1 |
1 |
14 |
nAutoLF |
PC |
是 |
14 |
2 |
16 |
nInit |
PC |
否 |
31 |
3 |
17 |
nSelectIn |
PC |
是 |
36 |
注: 连接器中没有提供的附加位有: 4:中断启用:为1时,IRQ从nAck送往系统的中断控制器;为0时,IRQ不送往中断控制器。 5:双向控制端口的方向控制位:为0时,输出启动;为1时,不能输出;控制端口可以读取外部逻辑电平。 6、7:未定义。 |
1. 对于PC自带的并口(我们称之为原生并口),必须在BIOS中设置为ECP或EPP模式;
2. 上面几个表中的基地址一般如下:并口1为0x378,并口2为0x278,他们都是计算机自带的标准并口。当我们的PC机没有自带并口时,需要采用一些转换器,此时基地址将由转换器的驱动具体指定。如我的PC上装的PCI转并口设备模拟的并口的基地址为0xC400;
3. 数据寄存器对应的引脚属于输入/输出口,状态寄存器对应的引脚属于输入口,控制寄存器对应的引脚属于输出口;
4. 根据模式的不同,并口的信号定义也不同,从第三章开始讨论的并口管脚的顺序都是针对SPP模式下的信号定义;
本节简单列下EPP模式下的信号定义,读者可以略过。
表4.4 EPP模式下的信号及寄存器定义
虚拟机软件采用VMware,主机端OS为Linux XP,从机为Redhat 9。
当PC上已经有并口设备时,问题比较简单,只需按照以下步骤:
1. 在虚拟机内客户操作系统关机的情况下,点击VM -> Setting…,在Hardware标签底下选择Add按钮添加Parallel Port,添加后的界面如下:
图4.1 VMware下添加并口后的界面
2. 启动虚拟机,则可以在Linux底下正常使用并口,并口地址为0x0378->0x037A。
当PC端没有并口设备时,我们一般会使用转并口设备,如PCMCIA转并口、USB转并口等,我这边使用PCI转并口。安装步骤如下:
1. 在硬件上接好PCI转并口卡,并安装好PCI转并口卡的厂商自带的驱动,此时通过PC端的设备管理器,可以看到一个PCI_COM和一个PCI_LPT(如下图),但并口号为LPT3,并口地址为0xC400->0xC407。
图4.2 windows 设备管理器的截图
2. 在LPT3右键点击 属性,在其 端口设备 标签里更改 LPT端口号 为LPT1;
3. 依照上一节 原生并口 的方法在虚拟机底下安装并口。安装后虚拟机底下并口地址为0x378-0x37A。
1. 从我的安装经验来看,似乎虚拟机底下只支持LPT1设备。因此,不管是原生并口还是转并口设备在主机环境下都必须更改并口号为LPT1。以PCI转并口为例,在上一节中若未将并口号由LPT3改为LPT1,则虚拟机启动时会提示如下图:
图4.3 VMware底下的错误提示框
2. 不管主机端的并口地址为多少,在虚拟机内部均被虚拟为首地址0x0378。仍以PCI转并口为例,在主机端其实际地址为0xC400->0xC407,但在虚拟机内部仍被模拟为LPT1,0x378-0x37A。
3. 当不确定并口是否可用时,推荐在主机(windows)下使用H-JTAG工具进行测试。
4. 其它转并口设备或其它主从机环境我没有试过,有兴趣的可以参考本文档进行安装。若有任何其它心得,欢迎与我联系。