非同步通訊原理解析
UART TTL RS232 RS485
- UART:非同步傳輸器
- TTL:電晶體-電晶體-邏輯電平
- RS232:一種全雙工通訊格式
- RS485:一種半雙工通訊格式
串列埠通訊常見的名詞就是上面幾位,真正的承擔串列埠通訊的是UART,TTL/232/485只是電平定義不同。因此研究串列埠通訊主要是明白UART的工作原理。
UART:
由上面的UART結構框圖我們可以看到,一個UART包括髮送緩衝區S-SBUF,接收緩衝區R-SBUF,傳送埠SEN,接收埠RCV,傳送完成置位TI,接收完成置位RI。當然UART包含的不止這些,還有設定暫存器與時鐘輸入,不過僅就理解其原理而言,前面幾個就夠了。
那麼具體怎麼用UART呢?當我們需要傳送資料的時候,只需要將資料放到S-SBUF裡面,在UART檢測到資訊進入S-SBUF後,會自動將資料按位傳送到SEN引腳上,資料傳送就完成了。但是為了便於對端RCV引腳接收,UART在傳送資料時會遵循一個約定俗成的規律,為什麼這麼做呢,細心的朋友可能注意到了,當傳輸結束時,SEN會將引腳拉倒高電平,此後會一直保持高電平的狀態直到下次資料傳輸前,那麼我在傳輸前將SEN拉倒低電平可以告訴對端RCV我現在已經準備傳輸資料了,讓其做好接受準備。RCV在接受到負跳變以後,就啟動接收資料的工作。我們也將其啟動時的低電平稱為起始位,結束時的高電平稱為終止位。
RS232
RS232的通訊原理與UART一模一樣,實際上,232晶片僅僅起到了一個電平轉換的過程,即將0v上升到3到15v,將5V下降到-3到-15v。
RS485
RS485與232存在區別,雖然本質上還是UART的通訊原理,但是將全雙工變成了半雙工。
從上圖中可以看到,不管是SEN還是RCV資料,都會同時將A/B兩個通訊線佔用,這就意味著我們在同一時間段內只能選擇傳送資料,或者接受資料。二選一,不能同時傳送接受。485晶片給我們提供了一個引腳用來控制此時刻我們是選擇傳送,還是選擇接受。
這個時候考慮以下幾種情況:
- 左傳送,右接受:OK 沒問題。
- 左接受,右傳送:OK 沒問題。
- 左接受,右接受:這個時候相當於匯流排空閒,也沒問題。
- 左傳送,右傳送:這個時候就出現問題了,會出現通訊線電平競爭,通訊崩潰
那麼如何避免電平競爭,那就必須保障在同一時刻只有一端傳送資料。如何做到這一點,有兩種辦法:一是以量保質;二是以效保質。
以量保質
以量保質的意思是給每一端安裝兩個UART與RS485,其中一個專門用來發送,另一個專門用來接收。
以效保質
以效保質的意思是我們給總線上連線的所有裝置定一個管理者,這個管理者享有匯流排的控制權,由它來依次給各個裝置傳送通訊質量,然後各個裝置來回應,這個管理者就是我們通常所說的主站,其他裝置統稱從站。
這個時候還有一個問題就是我們怎麼保障主站從站不會同時傳送資料能,這時候可以在程式上進行設定,我們在主站傳送資料後設置一段等待時間,這個時間應該足夠從站處理並返回資料,在等待時間內,主站將不會再發送任何資料。如果過了等待時間後從站依舊未返回資訊,那麼可以發出報警訊號,提示該從站的通訊出現異常。