1.接口的类型
在实际应用中,按照外部设备的工作原理和应用方式的不同,开发出了多种多样的输入/输出接口,可以按照不同标准对其进行分类。
(1)按通用性分类,有通用接口和专用接口。通用接口是可供多种外设使用的标准接口,专用接口则是为某类外设或应用专门设计的。
(2)按外设与接口间的数据传送方式,可分为串行接口和并行接口。主机与接口由内部的系统总线负责数据传输,数据总是并行传送的。在并行接口中,外设和接口间传送数据的宽度是一个字节(或字)的所有位,一次传输的信息量大,但数据线的根数将随着数据宽度的增加而增加。在串行接口中,外设和接口间的数据是一位一位串行传送的,一次传输的信息量小,但只需一根数据线。所以,并行接口适合近距离设备与主机间的传输;串行接口比较适合在远程终端和计算机网络等设备离主机较远的场合下使用。
(3)按主机访问外设的控制方式,可分为程序查询式接口、程序中断接口、DMA接口,以及更复杂一些的通道控制器等。
(4)按功能的灵活性,可分为可编程接口和不可编程接口。可编程接口的功能是可变的,通过编程可使同一接口执行多种不同的功能;不可编程接口则只能用硬连线逻辑来实现固定的功能。
(5)按输入/输出的信号类型不同,可分为数字接口和模拟接口。数字接口的输入/输出全为数字信号,以上列举的并行接口和串行接口都是数字接口。而模/数转换器和数/模转换器中包含模拟信号,则属于模拟接口。
2.接口的基本组成
(3)按数据处理的功能进行分类。
除了输入设备和输出设备外,还有外存储器设备、多媒体设备、网络通信设备和外围处理机设备等多种类型。
2.工作特点
输入/输出接口电路的内部的基本组成和外部的连接方式可以用如图7.1所示的框图来表示。由图可见,主机对外部设备的控制信息看成输出数据,外部设备提供给主机读取的状态和数据信息则是输入数据,若在接口中为数据信息、控制信息和状态信息分设相应的寄存器,赋以不同的端口地址,这些信息便按照I/O控制信息的要求分时地由主机或外设使用数据总线传送到各自的寄存器中去,再由对方读取并进行后续操作。
图7.1 接口与主机、外设间的连接
需要说明的是,“接口”与“端口”是两个不同的概念。端口是指接口电路中可以被CPU直接访问的寄存器,若干个端口加上相应的控制逻辑电路才组成接口。接口中存放数据信息的寄存器称为数据端口,存放控制命令的寄存器称为控制端口,存放状态信息的寄存器称为状态端口。CPU通过输入指令可以从有关端口中读取信息,通过输出指令可以把信息写入有关端口。
3.接口的功能
结合介绍过的计算机系统的控制指令、各种输入输出设备所要完成的工作任务和特点,以及图7.1所示接口的基本组成,可以看出,接口大致具有如下功能:
(1)设备识别与选择
每台外设在生产时都会设置自己的通用和专用标识,主机也会给接口电路分配I/O地址,主机可利用这一功能从多台外设中识别和选择要进行信息交换的设备。
(2)数据缓冲与控制(传输协议)
外部设备的数据处理速度往往与主机差别很大,即便速度相同由于不是共用时钟信号,两者间也是很难同步运行的。通常在接口电路中设置一至几个数据缓冲寄存器和控制器,使两者间能够有效地发送和接受各种数据信息。
(3)控制命令和状态信息传递
CPU需要启动某一外设时,首先要通过接口中的命令寄存器向外设发出启动命令,外设准备就绪时,则有“准备好”的状态信息送回接口中的状态寄存器供CPU读取。此后,主机与外设间才能开始数据信息的交换。
(4)数据转换与传输
每台设备的数据格式往往有所不同,接口电路应按照对方要求进行数据转换,才能成为对方能够读懂的有效数据信息。如串行/并行转换、模/数转换、以及二进制码与ASCII码之间的转换等。
除了上述功能外,通常接口还具有检错纠错、中断、时序控制等功能
端口的编址与寻址
前面已经提到,接口中通常都设置了一些用于数据、控制和状态缓存的寄存器,这些寄存器就是能够让CPU直接访问的I/O端口。为了便于CPU对外部设备的快速识别和选择,必须对接口中所有可访问的寄存器(I/O端口)进行编址。常用的编址方式主要有两种,一种是I/O端口与主存储器统一的编址方式,另一种是I/O端口与主存储器彼此独立的编址方式。
1.统一编址方式
统一编址方式是将主存地址空间分出一部分地址用于对I/O端口进行编址,也就是I/O端口使用了原本属于主存地址对其进行编址。此方式无需设置专门的输入输出指令,只要用一般的访问主存的指令就可以访问I/O端口。由于这种方法是将I/O端口映射到主存空间的某些地址上,所以又称为存储映射I/O方式。
在统一编址方式下,I/O端口访问和主存访问指令相同,所以它的保护机制可由分段或分页存储管理来实现,而无需另外专门的保护机制。这种存储器映射方式给编程提供了非常大的灵活性。任何对内存存取的指令都可用来访问位于主存空间中的I/O端口,并且所有有关主存的寻址方式都可用于I/O端口的寻址。例如,可用MOV指令实现寄存器和I/O端口的数据传送,可用AND、OR或TEST等指令直接操作I/O接口中的控制寄存器或状态寄存器。此外,由于外设和I/O寄存器的数目几乎不受限制,这种编制方式还便于扩大系统吞吐量,这在大型控制或数据通信系统等特殊场合很有用。但是,统一编址使I/O占用了一部分主存空间的地址,主存空间减少了。而且,由于在识别I/O端口时全部地址线都需参与地址译码,使译码电路变得复杂,译码所需时间变长,使执行外设寻址的操作时间相对增长了。
2.独立编址方式
独立编址方式则是将I/O端口单独进行编址,使I/O端口和存储空间的地址空间互相独立。采用这种编址方式,CPU访问I/O端口时必须使用专用的I/O指令。当CPU使用I/O指令时,其指令的地址字段直接或间接的指示出端口地址。这些端口地址被接口电路中的地址译码器接收并且进行译码,符合者就是CPU所指定的外设寄存器,该外设寄存器将被CPU访问。目前以x86系列微处理器为核心的微机一般都采用的是I/O独立编址方式,其I/O地址空间由216(64K)个地址编号组成,每个编号可以寻址一个8位的I/O端口,两个连续的8位端口可看成一个16位端口,四个连续的8位端口则可作为一个32位端口处理。所以,64K个I/O地址空间最多能提供64K个8位端口、32K个16位端口、16K个32位端口等总容量不超过64KB的不同端口的组合。
标准的外部接口概述
输入/输出接口与主机内部所有模块的连接是通过计算机的系统总线完成的,接口与外部设备连接的部分则是系统总线通过接口向外的延伸,它是采用标准的接口实现连接的。通常,称它为外部接口。相对内部总线,它又被称为外总线。
按数据传送方式,外部接口分为串行接口和并行接口,简称为串口和并口。随着计算机在多媒体技术领域的广泛应用,外设与主机间的高速的并且大数据流的传送需求,推动了接口技术的发展,原来由传统的串、并口完成的功能现在已经越来越多地被新的接口类型所替代。
1.串行接口
串行接口又称之为通信口或COM端口,主要用于需要与系统进行双向通信的设备。由于系统总线中的数据均为并行数据,输出的数据必须在串行接口中进行并行数据到串行数据的转换,反之,输入的数据必须在串行接口中进行串行数据到并行数据的转换。
串行接口只需要一对信号线来传输数据,主要用于传输速度不高,传输距离较长的场合。目前几乎所有计算机都采用EIA RS-232C作为串行接口标准,它包括了按位串行传输的电气和机械方面的规定。完整的RS-232C接口有25根线,采用一个25芯插头座,但大多数情况下只需使用其中的3至5根即可正常工作,其中最主要的是“发送数据”和“接收数据”线,它们用来在两个系统之间串行传送信息,传送速率在50、75至19200bps之间。
对串行接口的使用是通过对其控制寄存器和状态寄存器进行的。先由主机对串行接口的控制寄存器中发出指令,设置好串行接口的工作方式,如同步还是异步、数据传送速率、奇偶校验方式以及字符长度等,然后,再发送命令使之开始工作。数据传送期间,主机可根据状态寄存器了解串口的工作状态,并据此确定下一步操作。
这里以Intel公司的8251芯片为例来说明串行接口芯片的组成和用法,Intel 8251的结构如图7.2所示。从图中可以看到,它由接收器、发送器、调制解调控制、读/写控制逻辑和I/O缓冲器等5部分组成。其中I/O缓冲器又可细划为状态缓冲器、发送数据/命令缓冲器和接收数据缓冲器3部分。从使用角度看,由于Intel 8251是一个可编程的多功能通讯接口电路,在使用前必须用方式指令和命令指令对其初始化操作。
图7.2 Intel 8251内部组成框图
方式指令是把规定的8位信息(D7~D0)送入控制寄存器,以指定其工作方式。其中D1和D0确定了同步传送或异步传送的方式及其波特率,D3和D2确定了每个字符的长度,D5和D4确定了对奇偶校验位的规定,D7和D6在异步方式下确定了对停止位的规定及在同步方式下的具体规定。
命令指令是把规定的8位信息(D7~D0)送入控制寄存器,以使其进入运行状态,能执行发送或接收数据的操作。其中D0位为TxEN(允许发送位,为1允许发送,为0禁止发送),D1位为DTR(数据终端准备好,为1时,将迫使 /DTR输出为0),D2位为RxE(允许接收位,为1允许接收,为0禁止接收),D3位为SBBK(发送中止字符,为1迫使TxD为低,为0正常工作),D4位为ER(错误标志复位,为1使PE、OE、FE复位),D5位为RTS(请求发送,为1迫使/RTS输出为低),D6位为IR(内部复位,为1使8251返回到方式指令格式),D7位为EH(同步传送时,使8251进入搜索方式,为1允许搜索同步字符)。如何在程序中使用串行接口将到输入输出方式一节说明。
2.并行接口
串行接口按位传送数据,传送速率较低,且由于主机是按字或字节处理数据,使用串行接口时需要进行并行到串行的转换。对速度较高的设备,如打印机等,采用并行数据传送方式比较合适。我们以Intel公司的8255芯片来说明并行接口的组成和用法。
如图7.3所示的Intel 8255A是一种典型的并行输入/输出芯片。它有24根输入/输出信号线,在IBM PC/AT中,曾作为连接键盘、开关、喇叭等的接口。
图7.3 并行输入/输出芯片8255A
通过对8255A芯片内的状态寄存器写入命令,可使它完成许多功能。但最简单的使用是如图中所示的把它作为三个互相独立的端口A、B和C,这里的每个端口都对应了一个8位的锁存寄存器。要设置某个端口的信号,CPU仅仅需要在数据线上发出并保持一个8位的数据,直到成功地改写了该端口对应的寄存器。为把某个端口用作输入端口,CPU只需要读入对应寄存器的数据。
8255A的另外一种操作模式可以用来和外部设备进行“握手”。例如,为输出数据到某个无法随时接收数据的设备,8255A可以把数据放到某个输出端口,然后等待设备发过来的脉冲,表示设备已经接收了当前数据,并准备接收下一个数据。锁定这些脉冲信号并将其送往CPU所必需的逻辑电路已经包括在8255A的硬件中。
从8255A的功能图中我们可以看到,除了三个端口的24根信号线之外,它还有8根直接和数据总线相连的信号线、片选信号线、读信号线和写信号线、两根地址信号线、以及用来初始化芯片的信号线。两根信号线用于选定分别对应于端口A、B、C和状态寄存器的四个内部寄存器之一。状态寄存器用来指定哪个端口用于输入,哪个端口用于输出,或者是其它功能。一般情况下,两根地址信号和地址总线的低两位连接。
3.USB
USB中文名称是通用串行总线,但它不是一种新的总线标准,而是应用在PC领域的接口技术。它的出现使很多外设不再需要专用的接口,从而大大节省了重要的系统资源。
从1994年发表了USBV0.7版本以后,到现在已经发展为3.0版本,成为目前电脑中的标准扩展接口。目前主板中主要是采用USB2.0和USB3.0,各USB版本间能很好的兼容。USB2.0协议可以提供速率为480Mbps的全双工高速传输,而USB3.0协议可以提供高达5Gbps全双工高速传输。USB用一个4针插头作为标准插头,采用菊花链形式可以把所有的外设连接起来,最多可以连接127个外部设备,并且不会损失带宽。USB需要主机硬件、操作系统和外设三个方面的支持才能工作。目前的主板一般都采用支持USB功能的控制芯片组,主板上也安装有USB接口插座,而且除了背板的插座之外,主板上还预留有USB插针,可以通过连线接到机箱前面作为前置USB接口以方便使用。而且USB接口还可以通过专门的USB连机线实现双机互连,并可以通过Hub扩展出更多的接口。USB具有传输速度快,使用方便,支持热插拔,连接灵活,独立供电等优点,可以连接鼠标、键盘、打印机、扫描仪、手机、数码相机、移动硬盘等几乎所有的外部设备。
4.IEEE1394
IEEE1394以前称之为火线(Fire wire),是1986年由苹果电脑公司针对高速数据传输所开发的一种传输介面,并于1995年获得美国电机电子工程师协会(IEEE)认可,成为正式标准。IEEE1394可以在一个端口上连接多达63个设备,设备间采用树形或菊花链拓扑结构。
IEEE1394标准定义了两种总线模式,即:Backplane模式和Cable模式。其中Backplane模式支持12.5、25、50Mb/s的传输速率;Cable模式支持100、200、400Mb/s的传输速率。早期的IEEE1394a标准已经达到了200Mb/s的传输速率,目前最新的IEEE1394b标准能达到800Mb/s的传输速率。
IEEE1394是横跨PC及家电产品平台的一种通用界面,适用于大多数需要高速数据传输的产品,如高速外置式硬盘、DVD-ROM、扫描仪、打印机、数码相机、摄影机等。IEEE1394分为有供电功能的6针A型接口和无供电功能的4针B型接口。A型接口可以通过转接线兼容B型,但是B型转换成A型后则没有供电的能力。6针的A型接口在Apple的电脑和周边设备上使用很广,而在消费类电子产品以及PC上多半都是采用的简化过的4针B型接口,需要配备单独的电源适配器。