422 詳細解析!

串口通信232/485/422 詳細解析!

1. 什麼是串口通信?

常見的串口通信一般是指異步串行通信。這裡就要說一下同步和異步的區別了。

先講一下串行通信的概念。那麼,與串行通信相對的是什麼呢?

與串行通信相對的是並行通信。數據傳輸一般都是以字節傳輸的,一個字節8個位。拿一個並行通信舉例來說,也就是會有8根線,每一根線代表一個位。

一次傳輸就可以傳一個字節,而串口通信,就是傳數據只有一根線傳輸,一次只能傳一個位,要傳一個字節就需要傳8次。

串口通信232/485/422 詳細解析!

在很多設備上,不方便接太多線,比如接8根數據線,也不方便接同步時鐘信號(這個後面再說),於是一種異步串行通信就誕生了。

相對來說,異步串口通信,就只需要一根線就可以發送數據了。在對速率要求不高的情況,使用一根線發送數據是帶來大大的方便和實用價值的。

那麼問題來了,怎麼樣才能保證一根線就能發送正常的數據呢。也就說發送方發送的數據,接收方是怎麼知道是什麼數據呢。

為了能正常發送數據和接收正確的數據,那異步串口通信就需要滿足以下幾個條件:

串口通信232/485/422 詳細解析!

也就是雙方必要約定一種暗號,也許當時發送這個通信的小組是這樣討論的。

經理:我要用一根線就能傳輸數據,你來給我定個標準。

研發:好。

經理:只有一根線,我怎麼知道數據什麼時候開始呢。

研發:就一根線,默認是高電平,那就有一個起始位吧。當檢測到有低電平的時候,就是開始有一個字節的數據發送了,起始位之後,先是字節的最低位,傳送一個字節。

經理:可是,就一根線,過來的數據會不會有干擾,容易出錯呀。

研發:行呀,那就在字節數據後再加一個校驗位。可以做奇校驗,偶校驗,1校驗,0校驗,無校驗。

經理:嗯 ,很不錯。有起始位就應該有停止位,那我們就再加個停止位在後面吧。

研發:......

經理:傳輸一串數據,對方要怎麼知道數據的拆分呢,怎麼按時間或頻率去解讀數據位,校驗位呢。

研發:這樣吧,雙方約定一個波特率吧,定義一個每個位佔用多長的時間,這樣雙方按這個波特率就可以處理了。

經理:這個比特率呀

研發:老闆,是波特率。

經理:我知道,是比特率嘛。

研發:這個波特率呢,是指1S鍾可以傳輸多個位,也就知道一個位佔用多長時間。這樣就解決傳輸的問題了。

經理:那萬一傳輸過程,數據快太,判斷失誤停不下來怎麼辦。

研發:那就把停止位可以調節為1個停止位或者2個停止位。這樣就可以停下來了。

經理:嗯,聽著不錯。就這樣辦吧。

於是,串口通信就這樣出來了。

在串口的通信參數上,就有了波特率,數據位,停止位,校驗位這幾個參數來確保串口通信的正確性和穩定上。當然,這只是某個方面保證串口通信的正確性和穩定性,不代表設備間通信的正確性和穩定性。

2. 串口通信主要為分232,485,422 通信三種方式

說一下這三種通信方式的區別:

232:

串口通信232/485/422 詳細解析!

232 通信主要是由RX,TX,GND三根線組成。

RX與TX,TX接RX,GND接GND。這樣還是比較好理解吧。因為發送和接收分別是由不同的線處理的,也就是能同時發送數據和接收數據,這就是所謂的全雙工。

在這裡擴展一下,串口通信還有一個功能叫做全功能串口通信,也叫標準串口。因為在兩個設備間進行數據傳輸,有些設備處理速度比較快,有些數據比較慢。

為了保證數據能正常傳輸,在RX,TX的基礎上,還增加了幾個控制引腳,本來好端端就R,T,G,三根線,湊著就湊齊了9個引腳,召喚出了DB9這個東西。

串口通信232/485/422 詳細解析!

485:

485是為了解決232通信距離的問題。原理什麼之類的就不多講了。反正232通信距離就是不長。485主要是以一種差分信號進行傳輸,只需要兩根線,+,-兩根線,或者也叫A,B兩根線。A,B兩根線的差分電平信號就是作為數據信號傳輸。

那麼問題來了,那是不是就沒有RX和TX的概念了。是的,發送和接收就不能分開了。發送和接收都是靠這兩根的來傳輸,也就是每次只能作發送或者只能作接收,這就是半雙工的概念了,這在效率上就比232弱很多了。

就像對講機一樣,經常是某個人講完之後,都要說一個over,確保當前說完了,等待對方回覆。

串口通信232/485/422 詳細解析!

485就是這樣犧牲了232全雙工的效率來達到自己傳輸距離遠的代價。那有沒有即保留了232的全雙工,又可以像485這樣提高傳輸距離呢,於是,422出來了。

422:

422呢,有些標註為485-4;而485就標註為485-2。有什麼區別呢?就是為了好記呢。485-2就是2根線,485-4就是4根線。

串口通信232/485/422 詳細解析!

422就是把232的RX分成兩根線,RX+,RX-,把TX分成TX+,TX-。這樣就可以同時發送和同時接收了,還可以像485這樣,有較遠的傳輸距離。

3. 波特率(baud rate)和比特率(bit rate)

理解了串口中這些既熟悉又陌生的術語之後,我們再來看看波特率(baud rate)。

說實話,在數據通信中,比特率(bit rate)比較容易理解,就是一定時間內,能夠傳輸多少個bit。例如bps,就是bit per second的縮寫。那什麼是波特率呢?

在通信中,波特率也稱作符號速率(symbol rate),指的的是“數據變化”的速率。說著很拗口,我們舉個例子:

在計算機系裡,小楊和小李是一對好基友,不過小楊是學霸、小李是學渣。所以,期末考試到了,小楊決定“鼎力相助”。怎麼辦呢?

二人約定,考試時,小楊攜帶黑色和白色兩支筆,根據兩支筆出現的情況,表示A、B、C、D四種答案,即:

白色的筆沒有出現 黑色的筆沒有出現 A

白色的筆沒有出現 黑色的筆出現 B

白色的筆出現 黑色的筆沒有出現 C

白色的筆出現 黑色的筆出現 D

同時約定,在考試開始1小時之後,小楊從第1道選擇題開始,以每分鐘更換一次的速度,更換答案。小李按照這個速度,以及大家的約定,通過觀察兩支筆出現的情況,獲得答案。

確實是個好方法,不過仔細想想,這其實是一個典型的異步通信過程。通信的過程中,答案更新的速度(每分鐘1次),就是我們所說的baud rate(或者symbol rate),即1 bd per minute(可以把bd看著baud的單位)。

與此同時,每次更新,傳遞了多少信息呢?表面上看是A、B、C、D,本質上是由白和黑所代表的兩個bit,00、01、10或者11。因此,每次更新傳遞2個bit的信息,所以bit rate就是2 bits per minute。

上面的例子中,通信的波特率和比特率是不同的,分別為1和2(per minute),而有些通信系統,例如我們所熟知的串口通信,它們卻是一樣的,例如我們說115200的波特率,實際上的比特率也是115200。因為一次只傳輸1個bit(0或者1)。


分享到:


相關文章: