目录
一、标准并行端口(SPP)
1.1 并行端口导论
1.2 硬件特性
1.3 端口地址
1.4 软件寄存器(SPP)
1.4.1 双向端口
1.4.2 并行端口用于8比特输入
1.4.3并行端口IRQ的使用
1.5 编程
二、增强型并行端口(EPP)
2.1 增强型并行端口
2.2 EPP硬件特性
2.3 EPP握手(Hand shake)
2.4 EPP软件寄存器
三、扩展功能端口(ECP)
3.1 扩展能力端口入门
3.2 ECP硬件特性
3.3 ECP握手
3.4 RLE——运行长编码
3.5 ECP软件寄存器
3.6 ECP扩展控制寄存器(ECR)
3.6.1 ECP的配置寄存器A(cnfgA)
3.6.2 ECP的配置寄存器B(cnfgB)
一、 并行端口
1.1 并行端口导论
并行端口在接口设计工程中是最常用的。
该端口在任何规定时间内将允许输入达到9比特,输出达到12比特。
在PC机后部常常可以见到作为D型25脚阴性连接的端口,或者是D—型25引脚的阳性连接。这将是一个RS—232串行端口和一个完全不同的端口。
关于RS-232串行端口的大量资料可以查看网终止提供的信息。
网址为:ities/siliconValley/Bay/8302/serial.htm。
在1994所以前,连接比如打印机、扫描仪、CD-ROM等设备还没有设置并行端口如何工作的标准。一些人在他们的驱动器中使用TTL(Transistor to Transistor Logic)技术,然而多数人(尤其是最近)使用CMOS(Comp Lementary Metal Dxide Semiconductors)技术。 IEEE 1284-1994标准,说明了五种工作模式,它们是: 1、 兼容模式
2、 半字节模式(本文档中没有对该项进行描述)
3、 字节模式(本文档中没有对该项进行描述)
4、 EPP模式(增强型并行端口模式)
5、 ECP模式(扩展能力模式)
其目的是为了设计新型的驱动器和设备,他们之间能够彼此兼容且向下兼容并行端口(SPP),兼容模式,半字节模式和字节模式仅使用于并行端口卡上的标准硬件。而EPP模式和ECP模式需要运行速度更快的附加硬件,并且仍旧向后兼容标准并行端口。
正如通常所知“兼容模式”或是Centronics模式,仅以每秒50K字节的典型速度传送数据,但是能够达到每秒150K字节。为了接收数据,你必须把这种模式设为半字节式或字节模式。半字节模式在反方向能够输入一个半字节(4比特),例如从设备到计算机。字节模式使用并行双向的特点(仅在某些卡中有此特性)能够在反方向输入一个字节(8比特)数据。
扩展型和增强型并行端口使用附加硬件以控制握手。为输出一比特数据到打印机(或者是其它设备上)可使用兼容模式,软件必须是有以下功能:
∙ 写字节到数据端口
∙ 检查,确定打印机是否忙?如果忙,打印机不按收任何数据;如这样写的任何数据将被丢失。
∙ 设置选取通脉冲(引脚1)为低。来通知打印机在数据线上的数据正确。(引脚2-9)
∙ 在设置选通脉冲为低之后,等待大约5微秒后,重新设置选通脉冲为高。(step 3)
这就限制了端口可能运行的速度,EPP和ECP端口通过硬件检查确认打印机是否忙,产生一个造通脉冲来解决这一不是。这意味着仅有一个I/O指令需要执行,这样速度就提高了。这些类型的端口,一秒中大约能输出1Mb,ECP端口还具有使用DMA通道的优点,这样不需执行I/O指令数据就能够被传输。
1.2 硬件特性
下面是D型25脚连接器(插孔)和(Centronics 34脚连接器)到“引脚输出”表D型25脚连接器是计算机并行端口最常用的连接器,而Centronics连接器常见用于打印机。IEEE 1284标准明确说明了三种不同类型用于计算机并行端口的连接器,第一种类型为1284型A,它是D型25脚常用于计算机后部的连接器。第二种类型为1284型B,它是广泛用于打印机的36引脚Centronics连接器。IEEE 1284型C也为36引脚连接器,类似与Centronics连接器,但形状较小一点,该类型的连接器据说有一个接线柱弹簧锁(Clip latch)较好的电
气特性,且易于安装,它还包括两个以上的信号引脚,这种信号被用来查看其它设备是否连接好,是否有电。1284型C连接器,被再次要求进行重新设计,因此在不久的将来,我们将会看到新型的连接器。
表一:D-型25脚并行端口连接器的引脚分配。
Pin No (D-型25) | Pin No (centronics) | SPP Signal | direction Register Hardware In/out Inverted |
1 | 1 | NStroke | In/out | controt | Yes |
2 | 2 | Data 0 | Out | Data | |
3 | 3 | D1 | O | D | |
4 | 4 | D2 | O | D | |
5 | 5 | D3 | O | D | |
6 | 6 | D4 | O | D | |
7 | 7 | D5 | 高狄O | D | |
8 | 8 | D6 | O | D | |
9 | 9 | D7 | O | D | |
10 | 10 | 大功率发光二极管NAck | In | Status | |
11 | 11 | Busy | In | S | Yes |
12 | 12 | Paper-out /Paper-end | In | S | |
13 | 13 | Select | In | S | |
14 | 14 | n Auto-Linefeed | In/out | Control | |
15 | 32 | n Error/n Fault | In | Status | |
16 | 31 | n Initialize | In/out | Control | |
17 | 36 | n select-printer/n select-In | In/out | Control | Yes |
18-25 | 19-30 | Ground | Gnd | | |
| | | | | |
上表中在信号名前使用“n”提醒注意该信号的低有效。例如:n Error表示当该线上信号为低时打印机出错,该线通常为高,表示打印机正常工作。“Hardware Inverted ”(硬件反向)意味着信号是通过打印机卡硬件实现反向的。例如Busy线,施加于该引脚的信号为+5v(逻辑1)目被状态寄存器读取,该信号应在相应的位置被回复为逻辑0。
1.3 端口地址
打印机/并行端口有3个常用的地址,已在下表2中列出。3BCh基址如今不是被典型使用的,但当并行端口连接视频卡时就使用该地址。固定用于LPT1 & LPT2的基址典型地为378h & 278h,小写字符h表示为16进制数,在不同机器中这些地址允许改变。
表二:端口地址
Address Notes:
3BCh-3BFh 具体用于视频卡的并行端口—不支持ECP地址
大庆教育论坛
378h—37Fh 常用于LPT1
278h—27Fh 常用于LPT2
最初打开计算机时,BIOS(Basic Input/ Output System)将确定端口的数目,并分配设备标号LPT1,LPT2,LPT3给它们。BIOS首先查看地址3BCh,如果在此处发现了一个并行端口,该端口将被分配作为LPT1。然后查看地址378h,如在此处发现并行端口,将把下一个空闲的设备标号分配给它,该标号可能为LPT1前提为在3BCh处没有接口卡;或者为LPT2,在3BCh处有接口卡,最后将访问的地址为378h,进行和其它两端口一样的处理,这样就有可能使LPT2所对应的地址为378h,而不是所期望的278h。
对于已分配设备LPT1,LPT2&LPT3而言,人们不用担心与他们的计算机接口设备。大多数时间基址是被用于端口接口而不是LPT1等,然而如你想到LPT1或其他在线打印机设备对应的地址,你可查阅BIOS提供的表,当BIOS分配地址给你的打印机设备时,它在内存中特定位置保存下来这些地址,因此我们可以查询到他们。
表三:在BIOS数据区的LPT地址
Start Address | Function |
0000:0408 | LPT1的基址 |
0000:040A | LPT2的基址 |
0000:040C | LPT3的基址 |
0000:040E | LPT4的基址(注1) |
| |
注1:在BIOS数据区的地址0000:040E可能在PS/2被用作扩展的基本输入输出系统数据区和新的Bioses。
上表了列出了人们可以在BIOS数据区查到打印机端口的地址,每一地址占用2个字节,下面的C语言的例子,演示了如何去读这些位置以得到你的打印端口地址。
#include<stdio.h>
#include<doso.h>
void main(void)
{ unsigned int far*ptraddr;/*pointer to location of Brt Address */
unsigned int address; A Address of Port*/
int a;
ptraddr=(unsigned int far*)0x00000408;
for(a=0;a<3;a++)
{address=*ptraddr;
if(address=0) printf(“No port found for LPT%d\n”,a+1);
else printf(“address assigned to LPT%d is xh\n”,a+1,address);
*ptraddr++;}
}
1.4 软件寄存器——标准并行端口(SPP)
表3:软件寄存器
Offset | name | Read/write | Bit No | Properties(特性) |
Base+0 | Data Port | Write | Bit 7 | Data 7 |
| | (Note-1) | Bit 6 | Data 7 |
| | 注1 | Bit 5 | Data 5 |
| | | Bit 4 | Data 4 |
| | | Bit 3 | Data 3 |
| | | Bit 2 | Data 2 |
| | | Bit 1 | Data 1 |
| | | Bit 0 | Data 0 |
Base+1 | Status Port | Read Only | Bit 7 | Busy |
| | | Bit6 | Busy |
| | | Bit 5 | Paper out |
| | | Bit 4 | Select in |
| | | Bit 3 | Error |
| | | Bit 2 | IRQ(Not) |
| | | Bit 1 | Reserved |
| | | Bit 0 | Reserved |
Base+2 | Control port | Read/write | Bit 7 | Unused |
| | | Bit6 | Unused |
| | | Bit 5 | Enable | 水泥电阻
| | | Bit 4 | Bi-Directional Port |
| | | Bit 3 | Enable IRQ Via Ack |
| | | Bit 2 | Select Printer |
| | | Bit 2 | Initialize Printer |
| | | Bit 1 | Auto-linefeed |
| | | Bit 0 | Strobe |
| | | | |
注1:如果端口为双向的,则读写选择可由数据寄存器来完成。
基址常被称为数据端口或数据寄存器,它仅用于在并行端口数据线(引脚2-9)输出数据。该端口通常反为写端口,如你从该端口读入,你得到最近发送的字节,可是如果你的端口是双向的,你能在这个地址上收得数据,想得到更多的详细资料,请参阅“双向端口”。状态端口/寄存器(基址+1)为一只读端口,任何写入该端口的数据均被忽略,该端口由5条输入线(引脚10、11、12、13、爬墙党15),一个IRQ状态寄存器和2反向位组成。请注意位7(Busy中国实验方剂学忙)是一个低有效输入,例如如果位7偶尔为“0”,这意味着在引脚11上为+5v。同样地位2(IRQ not),如果位2为“1”,没有中断发生。控制端口(基址+2)打算用作为一个只写端口,当打印机联接到并行端口,使用四条“控制线controls”他们是选通脉冲,自动Linefeed,初始化和选择打印机,这些控制信号除初始化外都被反向。