前言:
計算機與計算機之間或者計算機與外部設備之間的信息交換稱爲通信。計算機的通信有兩種方式:並行通信和串行通信。在通信的過程中,如果能夠同時傳送數據的所有位(位數由機器的字長決定),就稱爲並行通信;如果數據是逐位順序傳送,則稱爲串行通信。計算機與外設間的接口按照通信 方式的不同,相應地分爲並行接口和串行接口。並行通信和串行通信是指接口與外部設備一側的通信方式,與CPU之間的通信都是並行通信的。
一、並行通信
並行接口的特點:
由於多數的I/O設備,特別是系統基本的I/O設備都採用並行數據傳送,因此並行接口的應用十分普遍。一般來講,並行接口有如下特點。
(1)以數據字節或字爲單位進行數據傳輸,兩個功能模塊間有多位數據同時進行數據傳送,速度快、效率高。
(2)適合近距離傳送。由於並行通信需要的數據線路比較多,造價高,且容易產生干擾。因此並行通信通常都用於近距離、高速數據交換的場合。
(3)並行傳送中,8位、16位或4字節的數據是同時傳輸的,因此在並行接口與外部設備進行數據交換時,即使之需要傳送一位,也是一次輸入/輸出8位、16位或4字節。
(4)串行傳送的信息有固定格式要求,並行傳送的信息不要求固定格式。
二、串行通信
串行通信是指兩個功能模塊只通過一條或兩條數據線進行數據交換。發送方將數據分解爲二進制位,一位接一位地順序通過單條數據線發送,接收方則一位一位地從單條數據線上接收,並將其重新組裝成一個數據。串行通信數據線路少,造價低,適合於遠距離傳送。但由於數據是一位一位傳送的,故速度慢。
1.串行數據傳送方式
串行通信是一位一位通過同一信號線進行數據傳送的方式。按照數據流的方向可分爲3種基本傳送方式:全雙工、半雙工和單工。
如果串行通信的通路只有一條,此時發送信息和接收信息就不能同時進行,只能採用分時使用線路的方法。比如A在發送信息時,B只能接收;而當B發送信息時,則A只能接收。這種串行通信的工作方式稱爲半雙工通信方式。
如果有兩條通路,則發送信息和接收信息就可以同時進行,當A發送信息、b接收信息,b也能夠同時利用另一條通路發送信息而由A接收。這種通信的方式稱爲全雙工。
除了半雙工和全雙工外,還有一種單工的通信方式,它只允許一個方向傳送信息,而不允許反向傳輸。這種方式在實際應用中較少見。
2.調製與解調
計算機在通信時發送接收的信息均是數字信號,其佔用的頻帶很寬,約爲幾MHZ甚至更高;但目前長距離通信時採用的傳統電話線路頻帶很窄,大約僅有4KHZ。直接傳送必然會造成信號的嚴重畸變,大大降低了通信的可靠性。所以在長距離通信時,爲了確保數據的正常傳送,一般都要在傳送之前把信號轉換成適合傳送的形式,傳送到目的地後再恢復成原始信號。這個轉換工作可利用調制解調器(MODEM)來實現。
在發送站,調制解調器把“1”和“0”的數字脈衝信號調製在載波信號上;承載了數字信號的載波信號在普通電話網絡系統中傳送;在目的站,調制解調器把承載了數字信息的載波信號再恢復成原來的“1”和“0”數字脈衝信號。
信號的調製方法主要有三種:調頻、調幅和調相。當調製信號爲數字信號時,這三種調製方法又分別稱爲頻移鍵控法FSK(frequency shift keying)、幅度鍵控法ASK(Amplitude shift keying)和相移鍵控法PSK(phase shift keying)。
(1)調頻就是把數字信號的“1”和”0“調製成不同頻率的模擬信號,例如用1200HZ的信號表示”0“,用2400HZ的信號表示”1“。接收方根據載波信號的頻率就可知道傳輸的信息是”1“還是”0“。
(2)調幅就是把數字信號的“1”和“0”調製成不同幅度的模擬信號,但頻率保持不變。例如把載波信號的幅度大於8V時表示“0”,載波信號的幅度小於3V時表示“1”。
(3)調相就是把數字信號的“1”和“0”調製成不同相位的模擬信號,但頻率和幅度均保持不變。例如把載波信號的相位爲0°時表示“0”,載波信號的相位爲180°時表示“1”。
3.同步通信和異步通信
串行通信的數據是逐位傳送的,發送方發送的每一位都具有固定的時間間隔,這就要求接收方也要按照發送方同樣的時間間隔來接收每一位。不僅如此,接收方還要確定一個信息組的開始和結束。爲此,串行通信對數據格式做了嚴格的規定。不同的串行通信方式具有不同的數據格式。
1)同步通信
所謂同步通信,是指在約定的通信速率下,發送端和接收端的時鐘信號頻率和相位始終保持一致(同步)。這就保證了通信雙方在發送和接收數據時具有完全一致的定時關係。
2)異步通信
異步通信是指通信中兩個字符之間的時間間隔是不固定的,而在一個字符內各位的時間間隔是固定的。
異步通信規定字符有 起始位(start bit)、數據位(data bit)、奇偶校驗位(parity)、停止位(stop bits)組成。
由於CPU與接口之間按並行方式傳輸,接口與外設之間按串行方式傳輸,因此,在串行接口中,必須要有“接收移位寄存器”(串→並)和“發送移位寄存器”(並→串)。
顯然,如果用通用IO口模擬UART總線,則需一個輸入口,一個輸出口。
IIC總線是荷蘭飛利浦PHILIPS開發的一種高效,實用,可靠的雙向二線制(也有3線制,家電很少用)串行數據傳輸結構總線,該總線使各電路分割成各種功能的模塊,並進行軟件化設計,各個功能模塊電路內都有集成一個IIC總線接口電路,因此都可以掛接在總線上,很好的解決了衆多功能IC與CPU之間的輸入輸出接口,使其連接方式變得十分簡單。
IIC總線上的器件分爲主控器和被控器兩大類它們之間只要在正常工作,總有一個IIC在總線上發送信息數據(一般是在開機後cpu首先像各個功能模塊電路發出自檢信號,得到各個功能模塊電路正常反饋的數據信號後機器才進入正常工作狀態)。
串行外圍設備接口SPI(serial peripheral interface)總線技術是Motorola公司推出的一種同步串行接口
USART (Universial Serial Asynchronous Receive Transmit)通用串行異步接受/發送,其實它就是UART。
兩者都是串行口線。但不同的是,SPI總線似乎是分爲SD(DATA)I和SC(CONTROL)I兩種。SPI是同步的,需要額外的同步脈衝,速率可以很高,有些器件甚至超過20M。SDI有一條數據線,雙向傳輸,方向靠命令字來區別,SPI爲三線:SO、SI、SCK,SO、SI均爲單向傳輸,其中SCK爲同步時鐘,其傳輸速率可變,可以軟件模擬實現;而SCI,有兩條數據線,分別是輸入輸出。SPI 均有一條時鐘線。但是SPI如果應用與高速場合,只能在板級使用,不宜傳輸過遠,我們平時看到的SPI和IIC一般都是芯片之間的接口,很少看到有長電纜使用。
而USART是沒有時鐘線,數據線有兩條。波特率在收發兩端分別設置,51的串口就屬於這一類。UART是異步的,不需要時鐘,波特率相對不高;鑑於此,uart因爲格式個波特率是雙方協商好的,而且速率不高,所以可以在傳輸線上傳輸,加上其他的轉換還可以變成差動的傳輸更遠距離。
而UART要達到某一固定波特率對晶振有要求,比如說24M的晶振可以用T2實現9600BAUD,但不能用T1來交替實現19200和9600BAUD。
如果用通用IO口模擬I2C總線,並實現雙向傳輸,則需一個輸入輸出口(SDA),另外還需一個輸出口(SCL)。