接口知识汇总:话说接口是如何联络主机和外设的?
本文主要讲解了串行口、并行口、USB接口如何通过信号进行通信,并且详述了USB硬件和软件结构与数据传输的方式。本文针对计算机接口知识进行了汇总。希望大家能够更加了解计算机的各种外设接口的通信。
在控制领域,想要对一个相对复杂的系统进行有效控制,要在设备之间建立一个相互联络和沟通的机制,计算机科学里称这种联络机制为“接口(Interface)”。譬如,当我们需要打印一份文件时,首先主机需要与打印机之间要建立联系,然后才能向打印机发送数据。那么,这是怎样一个过程呢?
握手信号,联系主机与外设的纽带
计算机接口的主要功能就是使数据通过接口使之能够在不同模块或系统间自由流动,达到数据共享的目的。在过去很长一个时期内,主机与打印机之间是通过并行口连接起来的,现在针式打印机仍然使用并行口,激光打印机和一部分喷墨打印机已经采用USB接口了。先来看看并行口是怎样进行数据交换的。
图1 并行口连接器
所谓并行口,是指数据在多条信号线上同时进行传送。标准的并行口为8位,也就是说只有8条数据线。那么,标准的并行口为何定义了25个针脚呢?原来,除了8根数据线,还有一系列的命令线、状态信号线和接地线(图1)。其中的命令线由主机发往打印机,而状态信号线则由打印机反馈给主机。命令线与状态线之间往往是成对出现的——一条命令线对应一条状态线,彼此接头的两个信号则被形象地称作握手(Handshaking)信号。
表1 SPP模式下并行口信号定义
通过握手信号,主控端可获得被控端的状态信息,从而决定下一步做什么了。譬如,当用户需要打印文件时,会向打印机发出nSELECT命令,如果打印机电源已经打开,则通过SELECT信号线传回“在线”状态信号。接下来,主机向打印机传输nSTORBE信号,同时将存放数据的发送到数据线上,一旦BUSY信号为低电平,则执行数据传输。此时,打印机输出nACK信号,表示完成了一个字节的数据传输任务,告诉主机可以开始传输下一个字节了(图2)。图2 并行口数据传输时序图
如果在打印过程中纸张用完,打印机发出缺纸信号,主机收到这个信号后,会在显示屏上显示出对应的信息,以通知用户放入纸张。有了这样一个机制,机器之间便可以自动地进行各种工作。
采用同步通信建立联系主机与外设的纽带握手信号的另一用途是对被控设备进行故障诊断。譬如电脑在启动过程中会向打印机发出控制命令nINT让打印机复位,如果应答信号nERROR为高电平,则说明打印机功能正常,否则意味着打印机出错了。
握手信号是联系主机与外设的纽带,通过握手信号你来我往的过程,主机便可获得外设必要信息,从而为数据传输做好准备。与并行口一样,标准串行口RS-232C也提供了握手信号。
握手信号是联系主机与外设的纽带,主机通过握手信号获得外设必要信息,为数据传输做好准备。那么,握手信号是不是在所有的计算机接口中都是必须的呢?回答是否定的。在鼠标和键盘使用PS/2接口中,就没有握手信号。键盘和鼠标也需要跟主机之间进行数据传输,没有握手信号,这些设备又是怎样与主机建立联系的呢?
我们先考察一下PS/2鼠标端口(图3)。PS/2端口用作鼠标接口时,只用6个插针中的4个,Pin1用于传送数据,Pin3接地,Pin4向鼠标供电,Pin5为鼠标提供时钟信号。与串行口、并行口相比,PS/2接口没有握手信号,但是有时钟信号,两者的差别就在这里。
图3 PS/2鼠标接口
难道说,时钟信号能够代替握手信号的一些功能吗?也不可以这么说。合理的解释是,这是两种完全不同的通信方式。并行口和串行口使用的通信方式称作“异步通信”,而PS/2接口则使用“同步通信”。
通信接口中是否使用时钟信号是区别同步通信还是异步通信的标志,同步通信的双方使用同一个时钟,而异步通信中无须这么做。尽管如此,无论同步通信还是异步通信,通信双方都必须相互协调,以一定的约定(协议)保持双方同步,否则就会造成数据的错误与混乱。
在异步通信方式中,收发双方取得同步的办法是采用在字符格式中设置起始位和停止位。在一个有效字符正式发送前,先发送一个起始位,而在字符结束时再发送一个停止位。接收器不断地检测或监视线路上信号的变化,当检测到有起始位时,便知道紧随其后的是有效字符位的到来,这才开始接收字符;当检测到停止位时,便停止接收。使用该方式进行通信时,发送器与接收器不需要相同的时钟,所以称之为异步通信。
而在同步通信方式中,传输信息的每一位都必须在收发两端严格保持同步,即所谓的“位同步”。因此,在同步通信中,收发两端需要同一个时钟源作为同步信号。
进行同步传送时,发送端须先发送一个同步字符去通知接收端串行数据的第一位何时到达,接着便以连续的形式发送信息,传输效率较高。而异步通信每传送一个字符要增加大约20%的附加信息位,传输效率较低。
同步通信除了具有通信效率高的优点之外,接口电路的结构也比较简单,而且更加易于管理。正因为如此,同步通信的应用也十分广泛。SMBus(System Management Bus,系统管理总线)就是一种同步通信接口,它只有两根信号线:一根双向数据线和一根时钟信号线。Windows中显示的各种设备的制造商名称和型号等信息,都是通过SMBus总线收集的。
图4 基于SMBus的CPU温度监控电路
SMBus的数据传输率为100kbps,虽然速度较慢,却以其结构简洁造价低廉的特点,成为业界普遍欢迎的接口标准。主板监控系统中传送各种传感器的测量结果,以及BIOS向监控芯片发送命令,都是利用SMBus实现的。PCI插槽上也给SMBus预留了两个引脚(A40为SMBus 时钟线,A41为SMBus 数据线),以便于PCI接口卡与主板设备之间交换信息。
USB接口是怎样进行通信的呢?
USB接口中既没有握手信号,也没有时钟信号,它是怎样进行通信的呢?
我们已经知道,传统的串行口、并行口通过握手信号进行通信,这些接口通常通过握手信号来联络主机和外设。我们也已经知道,通信双方可以同步或异步两种方式进行通信,两者最大的区别是,同步通信接口中有时钟信号线。
USB接口应用很广。可是,USB接口中既没有握手信号,也没有时钟信号,它是怎样在主机与外设之间建立联系的呢?又是如何交换数据的呢?为了深入理解USB接口的通信过程,先介绍USB的硬件和软件结构。
从物理结构上,USB系统是一个星形结构。USB系统包含三类硬件设备: USB主机(USB HOST)、 USB设备(USB DEVICE)和USB集线器(USB HUB)。USB总线上的物理连接是一个分层的星形拓扑,处于每个星形拓扑中央的是HUB集线器,在主机与HUB之间,HUB与HUB之间,HUB与设备之间都是点对点的连接。
图5 USB拓扑结构
USB HOST对USB系统进行管理、每毫秒产生一帧数据、发送配置请求对USB设备进行配置、管理和恢复总线上的错误。 USB HUB用于设备扩展连接,所有USB DEVICE都连接在USB HUB的端口上。USB DEVICE接收USB总线上的所有数据包,通过数据包的地址域来判断是不是发给自己的数据包:若地址不符,则简单地丢弃该数据包;若地址相符,则通过响应USB HOST的数据包与USB HOST进行数据传输。
从逻辑结构上看,每个USB逻辑设备都直接与USB HOST进行数据传输。与传统接口以硬件手段实现握手的方法不同,USB接口使用“软握手”方法。
USB的软握手机制是透过三个层次的驱动程序实现的,在这中间起到关键作用的是设备驱动程序,该程序在主机与设备之间建立起至少一个管道。管道有两种类型:流管道和消息管道。其中有一个最重要的消息管道是“缺省控制管道”,这个管道在设备一加电的时候就存在了,它提供设备的配置和状态等信息。主机与设备之间的联络就是通过消息管道实现的。
图6 USB软件结构
协议栈驱动程序的主要作用是将设备与相应的设备驱动程序连接起来。因为USB支持的设备很多,而每个具体的设备都有自己对应的设备驱动程序。对于某一具体设备来说,使用哪个驱动来管理,就要由协议栈驱动程序通过读取设备描述符进行挑选。选择好驱动程序之后,协议栈驱动程序还要给USB设备分配地址。
管道建立起来之后,数据的传输控制则由USB接口驱动程序负责完成了。在这里,主机占有绝对主导权,设备只能是“听命令行事”。设备发生事件时通过消息管道报告给主机,主机伺机向设备发送命令,开通流管道,发送或接收数据包。主机与设备之间以数据数据包的形式进行传送,显然这与网络上数据传输的方式相同,是一种异步数据传输模式。