通俗易懂的 UART 協議幀格式
看下面這個圖,大家已經知道今天的主角是 UART,我們通常說的串口,UART 包含 TTL 電平和 RS-232 電平兩種,嵌入式系統裏面,單片機的串口一般都是 TTL 電平。
今天的內容關於 UART 的幀格式,比較簡單,玩過單片機的小夥伴應該都知道。
UART 的英文全稱是:Universal Asynchronous Receiver/Transmitter,意爲通用異步收發傳輸器。
UART 因爲有兩根線數據線 TX 和 RX,可以以全雙工的形式進行發送和接收數據,同一時刻,兩條鏈路的發送器和接收器可以同時傳輸數據。
區別於全雙工的,還有另一種,是半雙工,因爲只有一根數據線,所以數據傳輸是這樣。
或者是下面這樣,同一時刻,只有一條鏈路在傳輸數據。
除了雙工形式,還有一種是半工,只有發送器到接收器這一個鏈路。
說完了 UART 的工作模式,下面進入主題——UART 幀格式,也可以稱之爲 UART 協議,單片機與 PC 之間的通信,爲了保證數據通信的可靠性,雙方都必須遵從 UART 協議。
UART 數據幀格式
其中各位的含義如下:
-
起始位:發送 1 位邏輯 0(低電平),開始傳輸數據。
-
數據位:可以是 5~8 位的數據,先發低位,再發高位,一般常見的就是 8 位(1 個字節),其他的如 7 位的 ASCII 碼。
-
校驗位:奇偶校驗,將數據位加上校驗位,1 的位數爲偶數(偶校驗),1 的位數 4 爲奇數(奇校驗)。
-
停止位:停止位是數據傳輸結束的標誌,可以是 1/1.5/2 位的邏輯 1(高電平)。
-
空閒位:空閒時數據線爲高電平狀態,代表無數據傳輸。
如果我們傳輸數據 0X33(00110011),那麼對應的波形就是如下這樣,因爲是 LSB 在前,所以 8 位數據依次是 11001100
發送 0X33 數據幀格式
如果再發其他數據,再依次循環這個過程即可。
UART 是異步傳輸,以 1 個字符爲傳輸單位,傳輸 2 個字符之間的時間間隔,比如傳輸 0X33 後再傳輸 0X35,這兩者時間間隔是未知的。
但是同一字符內相鄰位間的時間間隔是確定的,比如 0X33 低兩位的 1 和 1 之間的時間間隔是確定的,這涉及到 UART 傳輸速率的概念——波特率。
波特率的單位是 bps,全稱是 bit per second,意爲每秒鐘傳輸的 bit 數量。
波特率 9600bps,代表每秒鐘傳輸 bit 的數量爲 9600,那麼傳輸 1bit 數據的時間就是 1/9600=104us,波特率 115200bps,代表傳輸 1bit 數據的時間是 8us。
兩個串口之間是如何發送和接受數據呢?
首先,UART1 以 9600 波特率發送 0X33,先在數據線上放 1 個 104us 脈寬的低電平(起始位),然後是連續 2 個 104us 脈寬的高電平(2bit 邏輯 1),依次類推。
其次,UART2 以 9600 波特率接收 0X33,通過數這些數據的脈寬,來確認數據。
爲了確保數據傳輸的正確性,減少誤差,一般 UART1 和 UART2 之間的波特率差別小於 10%,一次最多隻能傳輸 1 個字節(8bit),也有效減小了累計誤差。
今天的文章內容到這裏就結束了,希望對你有幫助,我們下一期見。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/INgYi8HYagm3Ko7sIEzMBw