UART串口通信協(xié)議有哪些?
雖然 USB 幾乎完全取代那些舊電纜和連接器,但 UART 絕對不會成為過去。您會發(fā)現(xiàn)許多 DIY 電子項(xiàng)目都使用 UART。
將 GPS 模塊、藍(lán)牙模塊和 RFID 讀卡器模塊連接到您的 Raspberry Pi、Arduino、ESP32 或其他微控制器 MCU。
UART 是通用異步接收器/發(fā)送器。它不同于 SPI、I2C 那樣的通信協(xié)議,而是微控制器中的物理電路,或者說是獨(dú)立的 IC。UART 的主要用途是傳輸和接收串行數(shù)據(jù)。
UART 的優(yōu)點(diǎn)之一是它只使用兩條線在設(shè)備之間傳輸數(shù)據(jù)。UART 背后的原理很容易理解。
UART 通信簡介
在 UART 通信中,兩個 UART 直接相互通信。發(fā)送端 UART 將來自微控制器設(shè)備的并行數(shù)據(jù)轉(zhuǎn)換為串行形式,將其串行數(shù)據(jù)傳輸?shù)浇邮斩? UART。
然后接收端 UART 將串行數(shù)據(jù)轉(zhuǎn)換回并行數(shù)據(jù)。在兩個 UART 之間傳輸數(shù)據(jù)只需要兩根線。數(shù)據(jù)從發(fā)送端 UART 的 Tx 引腳流向接收端 UART 的 Rx 引腳。
串口RS232
通用異步收發(fā)傳輸器(Universal Asynchronous Receiver/Transmitter),通常稱作UART。UART是一種通用的數(shù)據(jù)通信協(xié)議,也是異步串行通信口(串口)的總稱,它在發(fā)送數(shù)據(jù)時將并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù)來傳輸,在接收數(shù)據(jù)時將接收到的串行數(shù)據(jù)轉(zhuǎn)換成并行數(shù)據(jù)。它包括了RS 232、RS499、RS423、RS422和RS485等接口標(biāo)準(zhǔn)規(guī)范和總線標(biāo)準(zhǔn)規(guī)范。
串口簡介
串口作為常用的三大低速總線(UART、SPI、IIC)之一,在設(shè)計(jì)眾多通信接口和調(diào)試時占有重要地位。但UART和SPI、IIC不同的是,它是異步通信接口,異步通信中的接收方并不知道數(shù)據(jù)什么時候會到達(dá),所以雙方收發(fā)端都要有各自的時鐘,在數(shù)據(jù)傳輸過程中是不需要時鐘的,發(fā)送方發(fā)送的時間間隔可以不均勻,接受方是在數(shù)據(jù)的起始位和停止位的幫助下實(shí)現(xiàn)信息同步的。而SPI、IIC是同步通信接口,同步通信中雙方使用頻率一致的時鐘,在數(shù)據(jù)傳輸過程中時鐘伴隨著數(shù)據(jù)一起傳輸,發(fā)送方和接收方使用的時鐘都是由主機(jī)提供的。
UART通信只有兩根信號線,一根是發(fā)送數(shù)據(jù)端口線叫tx(Transmitter),一根是接收數(shù)據(jù)端口線叫rx(Receiver),如圖所示,對于PC來說它的tx要和對于FPGA來說的rx連接,同樣PC的rx要和FPGA的tx連接,如果是兩個tx或者兩個rx連接那數(shù)據(jù)就不能正常被發(fā)送出去和接收到,rx和tx都是相對自身主體來講的。UART可以實(shí)現(xiàn)全雙工,即可以同時進(jìn)行發(fā)送數(shù)據(jù)和接收數(shù)據(jù)。通信協(xié)議的分類
按照消息傳送的方向與時間關(guān)系,通信協(xié)議可分為以下3種。
單工通信
單工通信(Simplex Communication)是指消息只能單方向傳輸?shù)耐ㄐ欧绞健?
在單工通信中,發(fā)送端與接收端是固定的,即發(fā)送端只能發(fā)送信息,不能接收信息;接收端只能接收信息,不能發(fā)送信息。
例如:遙控器與電視、廣播站與收音機(jī)。
半雙工通信
半雙工通信(Half-duplex Communication)中的“雙工”表示通信的雙方都可以發(fā)送信息,而“半”表示雙方不能同時發(fā)送或同時接收信息,即對于同一個設(shè)備,同一時刻只能發(fā)信息或者收信息,不能在發(fā)信息的時候又收信息。
在這種工作方式下,發(fā)送端可以轉(zhuǎn)變?yōu)榻邮斩?接收端也可以轉(zhuǎn)變?yōu)榘l(fā)送端。但是在同一個時刻,信息只能在一個方向上傳輸。因此,也可以將半雙工通信理解為一種可以切換方向的單工通信。
例如:對講機(jī)。
全雙工通信
全雙工通信(Full duplex Communication):通信的雙方可以同時發(fā)送和接收數(shù)據(jù)。
UART是“Universal Asynchronous Receiver/Transmitter”,通用異步收發(fā)器的縮寫。在19世紀(jì)60年代,為了解決計(jì)算機(jī)和電傳打字機(jī)通信,Bell發(fā)明了 UART協(xié)議,將并行輸入信號轉(zhuǎn)換成串行輸出信號。因?yàn)閁ART簡單實(shí)用的特性,其已經(jīng)成為一種使用非常廣泛的通訊協(xié)議。我們?nèi)粘=佑|到的串口,RS232,RS485等總線,內(nèi)部使用的基本都是 UART協(xié)議 。
為了更好的理解和分析協(xié)議與總線的關(guān)系,我們通常把一個完整的通訊規(guī)范劃分成物理層,協(xié)議層以及應(yīng)用層。物理層只定義真實(shí)的信號特性(比如電壓,電流,驅(qū)動能力等),以及電信號與邏輯信號0和1的對應(yīng)關(guān)系;協(xié)議層不關(guān)心底層的0和1具體怎么實(shí)現(xiàn),只規(guī)定邏輯信號的協(xié)議規(guī)范以及通訊過程(例如起始,數(shù)據(jù)以及結(jié)束等);應(yīng)用層不關(guān)心數(shù)據(jù)是怎么獲取的,只定義數(shù)據(jù)表示的意義,以及如何實(shí)現(xiàn)具體的業(yè)務(wù)邏輯。
圖 1?1 通訊協(xié)議的分層實(shí)現(xiàn)
最簡單的UART協(xié)議應(yīng)用,通常物理層只需要兩根傳輸線,一根用于發(fā)送,一根用于接收,從而實(shí)現(xiàn)全雙工通訊。對于單向傳輸,也可以只使用一根傳輸線。此類應(yīng)用最典型的實(shí)例就是單片機(jī)的RX/TX端口互相連接,從而實(shí)現(xiàn)基于TTL電平的UART通訊。對于不同的傳輸距離以及可靠性的要求,替換不同的物理層實(shí)現(xiàn)既可以得到我們常見的RS232、RS485等通訊總線。
1.2. 不同的物理層實(shí)現(xiàn)
由于UART協(xié)議層的輸入是邏輯0/1信號,而邏輯0/1信號在物理層可以通過不同的電平標(biāo)準(zhǔn)來區(qū)分。針對不同的通訊需求,便可以使用不同的物理層實(shí)現(xiàn)。例如簡單的板內(nèi)通訊,或者常見的設(shè)備調(diào)試場景,使用簡單的LVTTL/TTL電平即可在兩個設(shè)備間進(jìn)行UART協(xié)議通訊。
圖 1?2 不同的物理層電平標(biāo)準(zhǔn)
通用的串口則使用的是RS232電平,可以增加傳輸距離,并且抵抗一定程度的信號干擾。付出的成本則是在物理層需要對應(yīng)的電平轉(zhuǎn)換芯片來實(shí)現(xiàn),發(fā)送端需要將內(nèi)部的高低電平信號轉(zhuǎn)換成電壓更高的+/-電壓信號,接收端需要將+/-電壓信號轉(zhuǎn)換成內(nèi)部的高低電平信號。
在工業(yè)通訊的場景下,為了進(jìn)一步提高傳輸距離,以及增強(qiáng)信號的可靠性,一般會采用RS485的電平標(biāo)準(zhǔn)。在發(fā)送端將普通的高低電平信號轉(zhuǎn)換成一對差分信號,在接收端將差分信號再轉(zhuǎn)換成普通的高低電平信號。另外,RS485允許總線上連接多達(dá)128收發(fā)器,而TTL或者RS232則是點(diǎn)對點(diǎn)的連接。
1.2.1.基于TTL的UART通訊
基于TTL的UART通訊,是UART協(xié)議應(yīng)用最簡單的使用場景。即直接把數(shù)字I/O輸出的高低電平作為實(shí)際的物理信號進(jìn)行傳輸。在物理連接上,只需要設(shè)備共地,通過一根信號線即可完成單向的設(shè)備通訊。如果需要雙向全雙工,使用兩根信號線即可。
圖 1?3 基于TTL的UART通訊
為了對比不同物理層實(shí)現(xiàn)的差別,我們可以觀察發(fā)送相同數(shù)據(jù)時,不同物理層的實(shí)際信號有何不同。這里以發(fā)送字符‘D‘為例,通過璞石示波器,直接觀察TTL實(shí)現(xiàn)傳輸?shù)男盘?探頭接地端連接設(shè)備共地端,探頭信號端連接上圖藍(lán)色信號線),可以獲得如圖1?4所示的信號波形。從波形可以看出,當(dāng)沒有數(shù)據(jù)傳輸時,UART信號會一直保持在高電平(具體信號幅度由I/O的供電電壓決定),數(shù)據(jù)傳輸時信號發(fā)生跳變,傳輸完成后信號重新回到空閑的高電平狀態(tài)。
圖 1?4 TTL的UART信號波形
1.2.2.基于RS232的UART通訊
為了增強(qiáng)驅(qū)動能力,以增加傳輸距離和可靠性,RS232總線采用了雙極性電壓信號來進(jìn)行物理傳輸。信號在發(fā)送/接收之前,通過電平轉(zhuǎn)換芯片實(shí)現(xiàn)內(nèi)部信號和總線信號的互相轉(zhuǎn)換。連接方式和TTL電平完全相同,整個物理層只是多了一層電平轉(zhuǎn)換。
圖 1?5 基于RS232的UART通訊
同樣以發(fā)送字符‘D‘為例,璞石示波器的探頭連接到信號端,可以采集到如圖1?6所示的實(shí)際波形??梢钥闯?,RS232波形在空閑時為負(fù)電壓,當(dāng)有數(shù)據(jù)傳輸時,信號開始在正負(fù)電壓之間跳變,傳輸完成后重新回到空閑的負(fù)電壓狀態(tài)。
圖 1?6 RS232的UART波形
1.2.3.基于RS485的UART通訊
RS485為復(fù)雜的工業(yè)環(huán)境而設(shè)計(jì),和其它UART協(xié)議的物理層相比,RS485總線最大的特點(diǎn)就是使用了差分信號傳輸。信號在發(fā)送之前,通過RS485的收發(fā)器把單端信號轉(zhuǎn)換成差分信號,再發(fā)送到總線上進(jìn)行傳輸;同樣在接收之前,總線上的差分信號通過收發(fā)器的轉(zhuǎn)換變成單端信號再送給UART控制器進(jìn)行接收。在RS485總線上,如果希望進(jìn)行全雙工的雙向通訊,需要兩對差分信號線(即4根信號線)。如果只進(jìn)行半雙工的雙向通訊,則僅需要一對差分信號即可。