計算機接口知識:串行口、并行口、USB接口是如何聯(lián)絡(luò)主機和外設(shè)的?
本文主要講述了計算機接口的基礎(chǔ)知識。詳細(xì)描述了串行口、并行口如何通過握手信號進(jìn)行通信,并介紹了USB的硬件和軟件結(jié)構(gòu)與數(shù)據(jù)傳輸的方式。
在控制領(lǐng)域,想要對一個相對復(fù)雜的系統(tǒng)進(jìn)行有效控制,要在設(shè)備之間建立一個相互聯(lián)絡(luò)和溝通的機制,計算機科學(xué)里稱這種聯(lián)絡(luò)機制為“接口(Interface)”。譬如,當(dāng)我們需要打印一份文件時,首先主機需要與打印機之間要建立聯(lián)系,然后才能向打印機發(fā)送數(shù)據(jù)。那么,這是怎樣一個過程呢?
握手信號,聯(lián)系主機與外設(shè)的紐帶
計算機接口的主要功能就是使數(shù)據(jù)通過接口使之能夠在不同模塊或系統(tǒng)間自由流動,達(dá)到數(shù)據(jù)共享的目的。在過去很長一個時期內(nèi),主機與打印機之間是通過并行口連接起來的,現(xiàn)在針式打印機仍然使用并行口,激光打印機和一部分噴墨打印機已經(jīng)采用USB接口了。先來看看并行口是怎樣進(jìn)行數(shù)據(jù)交換的。
圖1 并行口連接器
所謂并行口,是指數(shù)據(jù)在多條信號線上同時進(jìn)行傳送。標(biāo)準(zhǔn)的并行口為8位,也就是說只有8條數(shù)據(jù)線。那么,標(biāo)準(zhǔn)的并行口為何定義了25個針腳呢?原來,除了8根數(shù)據(jù)線,還有一系列的命令線、狀態(tài)信號線和接地線(圖1)。其中的命令線由主機發(fā)往打印機,而狀態(tài)信號線則由打印機反饋給主機。命令線與狀態(tài)線之間往往是成對出現(xiàn)的——一條命令線對應(yīng)一條狀態(tài)線,彼此接頭的兩個信號則被形象地稱作握手(Handshaking)信號。
表1 SPP模式下并行口信號定義
通過握手信號,主控端可獲得被控端的狀態(tài)信息,從而決定下一步做什么了。譬如,當(dāng)用戶需要打印文件時,會向打印機發(fā)出nSELECT命令,如果打印機電源已經(jīng)打開,則通過SELECT信號線傳回“在線”狀態(tài)信號。接下來,主機向打印機傳輸nSTORBE信號,同時將存放數(shù)據(jù)的發(fā)送到數(shù)據(jù)線上,一旦BUSY信號為低電平,則執(zhí)行數(shù)據(jù)傳輸。此時,打印機輸出nACK信號,表示完成了一個字節(jié)的數(shù)據(jù)傳輸任務(wù),告訴主機可以開始傳輸下一個字節(jié)了(圖2)。
圖2 并行口數(shù)據(jù)傳輸時序圖
如果在打印過程中紙張用完,打印機發(fā)出缺紙信號,主機收到這個信號后,會在顯示屏上顯示出對應(yīng)的信息,以通知用戶放入紙張。有了這樣一個機制,機器之間便可以自動地進(jìn)行各種工作。
采用同步通信建立聯(lián)系主機與外設(shè)的紐帶
握手信號的另一用途是對被控設(shè)備進(jìn)行故障診斷。譬如電腦在啟動過程中會向打印機發(fā)出控制命令nINT讓打印機復(fù)位,如果應(yīng)答信號nERROR為高電平,則說明打印機功能正常,否則意味著打印機出錯了。
握手信號是聯(lián)系主機與外設(shè)的紐帶,通過握手信號你來我往的過程,主機便可獲得外設(shè)必要信息,從而為數(shù)據(jù)傳輸做好準(zhǔn)備。與并行口一樣,標(biāo)準(zhǔn)串行口RS-232C也提供了握手信號。
握手信號是聯(lián)系主機與外設(shè)的紐帶,主機通過握手信號獲得外設(shè)必要信息,為數(shù)據(jù)傳輸做好準(zhǔn)備。那么,握手信號是不是在所有的計算機接口中都是必須的呢?回答是否定的。在鼠標(biāo)和鍵盤使用PS/2接口中,就沒有握手信號。鍵盤和鼠標(biāo)也需要跟主機之間進(jìn)行數(shù)據(jù)傳輸,沒有握手信號,這些設(shè)備又是怎樣與主機建立聯(lián)系的呢?
我們先考察一下PS/2鼠標(biāo)端口(圖3)。PS/2端口用作鼠標(biāo)接口時,只用6個插針中的4個,Pin1用于傳送數(shù)據(jù),Pin3接地,Pin4向鼠標(biāo)供電,Pin5為鼠標(biāo)提供時鐘信號。與串行口、并行口相比,PS/2接口沒有握手信號,但是有時鐘信號,兩者的差別就在這里。
圖3 PS/2鼠標(biāo)接口
難道說,時鐘信號能夠代替握手信號的一些功能嗎?也不可以這么說。合理的解釋是,這是兩種完全不同的通信方式。并行口和串行口使用的通信方式稱作“異步通信”,而PS/2接口則使用“同步通信”。
通信接口中是否使用時鐘信號是區(qū)別同步通信還是異步通信的標(biāo)志,同步通信的雙方使用同一個時鐘,而異步通信中無須這么做。盡管如此,無論同步通信還是異步通信,通信雙方都必須相互協(xié)調(diào),以一定的約定(協(xié)議)保持雙方同步,否則就會造成數(shù)據(jù)的錯誤與混亂。
在異步通信方式中,收發(fā)雙方取得同步的辦法是采用在字符格式中設(shè)置起始位和停止位。在一個有效字符正式發(fā)送前,先發(fā)送一個起始位,而在字符結(jié)束時再發(fā)送一個停止位。接收器不斷地檢測或監(jiān)視線路上信號的變化,當(dāng)檢測到有起始位時,便知道緊隨其后的是有效字符位的到來,這才開始接收字符;當(dāng)檢測到停止位時,便停止接收。使用該方式進(jìn)行通信時,發(fā)送器與接收器不需要相同的時鐘,所以稱之為異步通信。
而在同步通信方式中,傳輸信息的每一位都必須在收發(fā)兩端嚴(yán)格保持同步,即所謂的“位同步”。因此,在同步通信中,收發(fā)兩端需要同一個時鐘源作為同步信號。
進(jìn)行同步傳送時,發(fā)送端須先發(fā)送一個同步字符去通知接收端串行數(shù)據(jù)的第一位何時到達(dá),接著便以連續(xù)的形式發(fā)送信息,傳輸效率較高。而異步通信每傳送一個字符要增加大約20%的附加信息位,傳輸效率較低。
同步通信除了具有通信效率高的優(yōu)點之外,接口電路的結(jié)構(gòu)也比較簡單,而且更加易于管理。正因為如此,同步通信的應(yīng)用也十分廣泛。SMBus(System Management Bus,系統(tǒng)管理總線)就是一種同步通信接口,它只有兩根信號線:一根雙向數(shù)據(jù)線和一根時鐘信號線。Windows中顯示的各種設(shè)備的制造商名稱和型號等信息,都是通過SMBus總線收集的。
圖4 基于SMBus的CPU溫度監(jiān)控電路
SMBus的數(shù)據(jù)傳輸率為100kbps,雖然速度較慢,卻以其結(jié)構(gòu)簡潔造價低廉的特點,成為業(yè)界普遍歡迎的接口標(biāo)準(zhǔn)。主板監(jiān)控系統(tǒng)中傳送各種傳感器的測量結(jié)果,以及BIOS向監(jiān)控芯片發(fā)送命令,都是利用SMBus實現(xiàn)的。PCI插槽上也給SMBus預(yù)留了兩個引腳(A40為SMBus 時鐘線,A41為SMBus 數(shù)據(jù)線),以便于PCI接口卡與主板設(shè)備之間交換信息。
USB接口是怎樣進(jìn)行通信的呢?
USB接口中既沒有握手信號,也沒有時鐘信號,它是怎樣進(jìn)行通信的呢?
我們已經(jīng)知道,傳統(tǒng)的串行口、并行口通過握手信號進(jìn)行通信,這些接口通常通過握手信號來聯(lián)絡(luò)主機和外設(shè)。我們也已經(jīng)知道,通信雙方可以同步或異步兩種方式進(jìn)行通信,兩者最大的區(qū)別是,同步通信接口中有時鐘信號線。
USB接口應(yīng)用很廣。可是,USB接口中既沒有握手信號,也沒有時鐘信號,它是怎樣在主機與外設(shè)之間建立聯(lián)系的呢?又是如何交換數(shù)據(jù)的呢?為了深入理解USB接口的通信過程,先介紹USB的硬件和軟件結(jié)構(gòu)。
從物理結(jié)構(gòu)上,USB系統(tǒng)是一個星形結(jié)構(gòu)。USB系統(tǒng)包含三類硬件設(shè)備: USB主機(USB HOST)、 USB設(shè)備(USB DEVICE)和USB集線器(USB HUB)。USB總線上的物理連接是一個分層的星形拓?fù)?,處于每個星形拓?fù)渲醒氲氖荋UB集線器,在主機與HUB之間,HUB與HUB之間,HUB與設(shè)備之間都是點對點的連接。
圖5 USB拓?fù)浣Y(jié)構(gòu)
USB HOST對USB系統(tǒng)進(jìn)行管理、每毫秒產(chǎn)生一幀數(shù)據(jù)、發(fā)送配置請求對USB設(shè)備進(jìn)行配置、管理和恢復(fù)總線上的錯誤。 USB HUB用于設(shè)備擴(kuò)展連接,所有USB DEVICE都連接在USB HUB的端口上。USB DEVICE接收USB總線上的所有數(shù)據(jù)包,通過數(shù)據(jù)包的地址域來判斷是不是發(fā)給自己的數(shù)據(jù)包:若地址不符,則簡單地丟棄該數(shù)據(jù)包;若地址相符,則通過響應(yīng)USB HOST的數(shù)據(jù)包與USB HOST進(jìn)行數(shù)據(jù)傳輸。
從邏輯結(jié)構(gòu)上看,每個USB邏輯設(shè)備都直接與USB HOST進(jìn)行數(shù)據(jù)傳輸。與傳統(tǒng)接口以硬件手段實現(xiàn)握手的方法不同,USB接口使用“軟握手”方法。
USB的軟握手機制是透過三個層次的驅(qū)動程序?qū)崿F(xiàn)的,在這中間起到關(guān)鍵作用的是設(shè)備驅(qū)動程序,該程序在主機與設(shè)備之間建立起至少一個管道。管道有兩種類型:流管道和消息管道。其中有一個最重要的消息管道是“缺省控制管道”,這個管道在設(shè)備一加電的時候就存在了,它提供設(shè)備的配置和狀態(tài)等信息。主機與設(shè)備之間的聯(lián)絡(luò)就是通過消息管道實現(xiàn)的。
圖6 USB軟件結(jié)構(gòu)
協(xié)議棧驅(qū)動程序的主要作用是將設(shè)備與相應(yīng)的設(shè)備驅(qū)動程序連接起來。因為USB支持的設(shè)備很多,而每個具體的設(shè)備都有自己對應(yīng)的設(shè)備驅(qū)動程序。對于某一具體設(shè)備來說,使用哪個驅(qū)動來管理,就要由協(xié)議棧驅(qū)動程序通過讀取設(shè)備描述符進(jìn)行挑選。選擇好驅(qū)動程序之后,協(xié)議棧驅(qū)動程序還要給USB設(shè)備分配地址。
管道建立起來之后,數(shù)據(jù)的傳輸控制則由USB接口驅(qū)動程序負(fù)責(zé)完成了。在這里,主機占有絕對主導(dǎo)權(quán),設(shè)備只能是“聽命令行事”。設(shè)備發(fā)生事件時通過消息管道報告給主機,主機伺機向設(shè)備發(fā)送命令,開通流管道,發(fā)送或接收數(shù)據(jù)包。主機與設(shè)備之間以數(shù)據(jù)數(shù)據(jù)包的形式進(jìn)行傳送,顯然這與網(wǎng)絡(luò)上數(shù)據(jù)傳輸?shù)姆绞较嗤?,是一種異步數(shù)據(jù)傳輸模式。