全雙工(Full Duplex)是指在發送數據的同時也能夠接收數據,兩者同步進行,這好像我們平時打電話一樣,說話的同時也能夠聽到對方的聲音。目前的網卡一般都支持全雙工。
半雙工(Half Duplex),所謂半雙工是指一段時間內,只有一種動作發生,例如一條窄路,而只有一輛車可以通行,當當前有兩輛車相對時,在這種情況下,只有一輛車先開,等到另一輛車的頭部再開,這個例子生動地說明了原始半雙工。原因。早期對講機、早期集線器等設備都是基於半雙工產品的。隨着技術的不斷進步,半雙工會逐漸退出歷史舞台。
半雙工需要“交警”來控制道路的方向,否則如果兩個方向的數據同時發送,就會出現“碰撞”了。在網絡中,交警被稱為"CSMA/CD" 也就是"載波監聽多點接入/沖突檢查",這是一種用來輔助避免碰撞的訪問方法。如果確實發生了碰撞,也要做出正確的反應。
單工通信是指通信線路上的數據按單一方向傳送。

1、串行傳輸
優點:使用的數據線少,在遠距離通信中可以節約通信成本。
缺點:因為每次只能傳輸一位數據,所以傳輸速度比較低。
2、並行傳輸
優點:因為可以多位數據一起傳輸,所以傳輸速度很快。
缺點:內存有多少位,就要用多少數據線,所以需要大量的數據線,成本很高
這是網上引用的,這段話在幾年前可以說很完美,串行傳輸速度慢的原因是技術限制,時鍾頻率比較低。
隨着技術的發展,時鍾頻率越來越高,並行導線之間的相互干擾越來越嚴重。並行接口因為有多條並行且緊密的導線,但時鍾頻率提高的一定程度時,傳輸的數據已經無法恢復。而串口因為導線少,線間干擾容易控制,反而可以通過不斷提高時鍾頻率來提高傳輸速率。
而且並行設備的成本往往高於串行設備,所以現在許多高速設備都采用串行方式。
同步通信/異步通信:
同步通信與異步通信區別:
同步通信要求接收端時鍾頻率和發送端時鍾頻率一致,發送端發送連續的比特流;
異步通信時不要求接收端時鍾和發送端時鍾同步,發送端發送完一個字節后,可經過任意長的時間間隔再發送下一個字節。
同步通信效率高,異步通信效率較低。
同步通信較復雜,雙方時鍾的允許誤差較小;異步通信簡單,雙方時鍾可允許一定誤差。
同步通信可用於點對多點,異步通信只適用於點對點。
異步通信:異步通信是指通信中兩個字符(8位)之間的時間間隔是不固定的,而在一個字符內各位的時間間隔是固定的。
在異步通信中,每接收一個字符,接收方都要重新與發送主同步一次,所以接收端的同步時鍾信號並不需要嚴格地與發送方同步,只要它們在一個字符的傳輸時間范圍內能保持同步即可,這意味着南時鍾信號漂移的要求要比同步信號低得多,硬件成本也要低的多,但是異步傳送一個字符,要增加大約20%的附加信息位,所以傳送效率比較低。異步通信方式簡單可靠,也容易實現,故廣泛地應用於各種微型機系統中。
由於數據是二進制的,它可以用線路上的兩種狀態表示,正電壓(通常為+5V)代表二進制的1,負電壓(-5V)代表二進制的0。為了正確地讀取位,必須使用某種同步和定時方案。異步通信在發送字符的首尾設置起始位和停止位,所以通信雙方無需使用同一時鍾,字符以一幀一幀的方式發送,每幀以起始位為開始,以停止位為幀的結束。接收器起始位為基准,使用與發送器相同頻率的的本地局部時鍾即可實現在一個字符內的同步(字符與字符間是異步的),異步通信一般要求收發雙方的波特率相同。傳輸的起始——停止模式意味着對於每一新字符傳輸都重新開始,這就消除了在上次傳輸中可能產生的任何定時差異。
雖然異步技術使用簡單,但起始和停止位是額外開銷,浪費了帶寬。同步通信技術可以發送大數據塊,比如說從1500到4096個字節。它在每幀的開始加上同步字符,通信雙方必須使用同一時鍾,傳輸時將每N位划分為一個時間片,在同一個時間片內一方發送,一方接收。接收端將檢測到的同步字符后的數位當成實際信息來處理。在無信息傳送時同步字符后的數位被填充成空字符,因為同步傳輸不允許有間隙。故同步通信無論是在字符與字符之間,還是在字符內部的位之間都是同步的。以太網使用Manchester信號編碼方案,與數據一起發送時鍾脈沖。
電平信號和差分信號
(1)、電平信號和差分信號是用來描述通信線路傳輸方式的。也就是說如何在通信線路上表達 1 和 0.
(2)、電平信號的傳輸線中有一個參考電平線(一般是 GND),然后信號線上的信號值是由信號線電平和參考電平線的電壓差決定。
(3)、差分信號的傳輸線中沒有參考電平,所有都是信號線。然后 1 和 0 的表達靠信號線之間的電壓差。
總結:電平信號的 2 根通信線之間的電平差異容易受到干擾,傳輸容易失敗;差分信號不容易受到干擾因此傳輸質量比較穩定,現代通信一般都使用差分信號,電平信號幾乎沒有了。
總結 2:看起來似乎相同根數的通信線下,電平信號要比差分信號要快;但是實際還是差分信號快,因為差分信號抗干擾能力強,因此 1 個發送周期更短。
並行接口和串行接口
(1)、串行、並行主要是考慮通信線的根數,就是發送方和接收方同時可以傳遞的信息量的多少
(2)、譬如在電平信號下,1 根參考電平線+1 根信號線可以傳遞 1 位二進制;如果我們有 3根線(2 根信號線+1 根參考線)就可以同時發送 2 位二進制;如果想同時發送 8 位二進制就需要 9 根線。
(3)、在差分信號下,2 根線(彼此差分)可以同時發送 1 位二進制;如果需要同時發送 8 位二進制,需要 16 根線。
總結:聽起來似乎並行接口比串行接口要快(串行接口一次只能發送 1 位二進制,而並行接口一次可以發送多位二進制)要更優秀;但是實際上串行接口才是王道,用的比較廣。因為更省信號線,而且對傳輸線的要求更低、成本更低;而且串行時可以通過提高通信速度來提高總體通信性能,不一定非得要並行。
總結:異步、串行、差分,譬如 USB 和網絡通信更勝一籌。
在很多設備上,不方便接太多線,比如接8根數據線,也不方便接同步時鍾信號(這個后面再說),於是一種異步串行通信就誕生了。
相對來說,異步串口通信,就只需要一根線就可以發送數據了。在對速率要求不高的情況,使用一根線發送數據是帶來大大的方便和實用價值的。
那么問題來了,怎么樣才能保證一根線就能發送正常的數據呢。也就說發送方發送的數據,接收方是怎么知道是什么數據呢。為了能正常發送數據和接收正確的數據,那異步串口通信就需要滿足以下幾個條件:

經理:我要用一根線就能傳輸數據,你來給我定個標准。
研發:好。
經理:只有一根線,我怎么知道數據什么時候開始呢。
研發:就一根線,默認是高電平,那就有一個起始位吧。當檢測到有低電平的時候,就是開始有一個字節的數據發送了,起始位之后,先是字節的最低位,傳送一個字節。
經理:可是,就一根線,過來的數據會不會有干擾,容易出錯呀。
研發:行呀,那就在字節數據后再加一個校驗位。可以作奇校驗,偶校驗,1校驗,0校驗,無校驗。
經理:嗯 ,很不錯。有起始位就應該有停止位,那我們就再加個停止位在后面吧。
研發:。。。。。。。。。
經理:傳輸一串數據,對方要怎么知道數據的拆分呢,怎么按時間或頻率去解讀數據位,校驗位呢。
研發:這樣吧,雙方約定一個波特率吧,定義一個每個位占用多長的時間,這樣雙方按這個波特率就可以處理了。
經理:這個比特率呀。。。
研發:老板,是波特率。
經理:我知道,是比特率嘛。
研發:這個波特率呢,是指1S鍾可以傳輸多個位,也就知道一個位占用多長時間。這樣就解決傳輸的問題了。
經理:那萬一傳輸過程,數據太快,判斷失誤停不下來怎么辦。
研發:那就把停止位可以調節為1個停止位或者2個停止位。這樣就可以停下來了。
經理:嗯,聽着不錯。就這樣辦吧。
於是,串口通信就這樣出來了。
在串口的通信參數上,就有了波特率,數據位,停止位,校驗位這幾個參數來確保串口通信的正確性和穩定上。當然,這只是某個方面保證串口通信的正確性和穩定性,不代表設備間通信的正確性和穩定性。
串口通信主要為分232,485,422 通信三種方式。
RS232 電平和 TTL 電平
(1)電平信號是用信號線電平減去參考線電平得到電壓差,這個電壓差決定了傳輸值是 1 還是 0.
(2)在電平信號時多少 V 代表 1,多少 V 代表 0 不是固定的,取決於電平標准。譬如 RS232電平中-3V~-15V 表示 1;+3~+15V 表示 0;TTL 電平則是+5V 表示 1,0V 表示 0.
(3)不管哪種電平都是為了在傳輸線上表示 1 和 0.區別在於適用的環境和條件不同。RS232的電平定義比較大,適合干擾大、距離遠的情況;TTL 電平電壓范圍小,適合距離近且干擾小的情況。
(4)我們台式電腦后面的串口插座就是 RS232 接口的,在工業上用串口時都用這個,傳輸距離小於 15 米;TTL 電平一般用在電路板內部兩個芯片之間。
(5)對編程來說,RS232 電平傳輸還是 TTL 電平是沒有差異的。所以電平標准對硬件工程師更有意義,而軟件工程師只要略懂即可。(把 TTL 電平和 RS232 電平混接是不可以的)
