UART協議詳解


【轉自】https://blog.csdn.net/zjy900507/article/details/79789671

 

UART使用的是 異步,串行通信。

    串行通信是指利用一條傳輸線將資料一位位地順序傳送。特點是通信線路簡單,利用簡單的線纜就可實現通信,降低成本,適用於遠距離通信,但傳輸速度慢的應用場合。
    異步通信以一個字符為傳輸單位,通信中兩個字符間的時間間隔多少是不固定的,然而在同一個字符中的兩個相鄰位間的時間間隔是固定的。 
    數據傳送速率用波特率來表示,即每秒鍾傳送的二進制位數。例如數據傳送速率為120字符/秒,而每一個字符為10位(1個起始位,7個數據位,1個校驗位,1個結束位),則其傳送的波特率為10×120=1200字符/秒=1200波特。

波特率:是衡量數據傳輸速率的指征。表示每秒鍾傳送的二進制位數(bit數)。例如資料傳送速率是120字符/秒,而每個字符是10位,則其傳送的波特率為10x120=1200字符/秒=1200波特。

假如在異步串行通信中,傳送一個字符,包括12位(其中有一個起始位,8個數據位,2個停止位),其傳輸速率是1200b/s,每秒所能傳送的字符數是1200/(1+8+1+2)=100個
    數據通信格式如下圖:


其中各位的意義如下:
    起始位:先發出一個邏輯”0”信號,表示傳輸字符的開始。
    數據位:可以是5~8位邏輯”0”或”1”。如ASCII碼(7位),擴展BCD碼(8位)。小端傳輸
    校驗位:數據位加上這一位后,使得“1”的位數應為偶數(偶校驗)或奇數(奇校驗)
    停止位:它是一個字符數據的結束標志。可以是1位、1.5位、2位的高電平。
    空閑位:處於邏輯“1”狀態,表示當前線路上沒有資料傳送。

    注:異步通信是按字符傳輸的,接收設備在收到起始信號之后只要在一個字符的傳輸時間內能和發送設備保持同步就能正確接收。下一個字符起始位的到來又使同步重新校准(依靠檢測起始位來實現發送與接收方的時鍾自同步的)

 



這里寫圖片描述
圖-1

示波器上解碼uart協議獲得的波形圖
圖-2 
上圖是uart協議傳輸一個”A”字符通過示波器的uart解碼而得到的波形示意圖。根據此圖來介紹一下uart的一些基本參數。 
波特率:此參數容易和比特率混淆,其實他們是由區別的。具體可以百度更清楚。但是我認為uart中的波特率就可以認為是比特率,即每秒傳輸的位數(bit)。一般選波特率都會有9600,19200,115200等選項。其實意思就是每秒傳輸這么多個比特位數(bit)。 
起始位:先發出一個邏輯”0”的信號,表示傳輸數據的開始。 
數據位:可以選擇的值有5,6,7,8這四個值,可以傳輸這么多個值為0或者1的bit位。這個參數最好為8,因為如果此值為其他的值時當你傳輸的是ASCII值時一般解析肯定會出問題。理由很簡單,一個ASCII字符值為8位,如果一幀的數據位為7,那么還有一位就是不確定的值,這樣就會出錯。 
校驗位:數據位加上這一位后,使得“1”的位數應為偶數(偶校驗)或奇數(奇校驗),以此來校驗數據傳送的正確性。就比如傳輸“A”(01000001)為例。 
1、當為奇數校驗:”A”字符的8個bit位中有兩個1,那么奇偶校驗位為1才能滿足1的個數為奇數(奇校驗)。圖-1的波形就是這種情況。 
2、當為偶數校驗:”A”字符的8個bit位中有兩個1,那么奇偶校驗位為0才能滿足1的個數為偶數(偶校驗)。 
此位還可以去除,即不需要奇偶校驗位。 
停止位:它是一幀數據的結束標志。可以是1bit、1.5bit、2bit的空閑電平。可能大家會覺得很奇怪,怎么會有1.5位~沒錯,確實有的。所以我在生產此uart信號時用兩個波形點來表示一個bit。這個可以不必深究。。。 
空閑位:沒有數據傳輸時線路上的電平狀態。為邏輯1。 
傳輸方向:即數據是從高位(MSB)開始傳輸還是從低位(LSB)開始傳輸。比如傳輸“A”如果是MSB那么就是01000001(如圖-2),如果是LSB那么就是10000010(如下圖的圖-4) 
uart傳輸數據的順序就是:剛開始傳輸一個起始位,接着傳輸數據位,接着傳輸校驗位(可不需要此位),最后傳輸停止位。這樣一幀的數據就傳輸完了。接下來接着像這樣一直傳送。在這里還要說一個參數。 
幀間隔:即傳送數據的幀與幀之間的間隔大小,可以以位為計量也可以用時間(知道波特率那么位數和時間可以換算)。比如傳送”A”完后,這為一幀數據,再傳”B”,那么A與B之間的間隔即為幀間隔。 
示波器上解碼uart協議獲得的波形圖 
圖-3

這里寫圖片描述 
圖-4 
上兩圖和下兩圖傳送的數據和波特率都是一樣的,但是有幾個參數是故意設置反了從而形成對比。有助於更深入的理解UART。

這里寫圖片描述
圖-1

示波器上解碼uart協議獲得的波形圖
圖-2 
上圖是uart協議傳輸一個”A”字符通過示波器的uart解碼而得到的波形示意圖。根據此圖來介紹一下uart的一些基本參數。 
波特率:此參數容易和比特率混淆,其實他們是由區別的。具體可以百度更清楚。但是我認為uart中的波特率就可以認為是比特率,即每秒傳輸的位數(bit)。一般選波特率都會有9600,19200,115200等選項。其實意思就是每秒傳輸這么多個比特位數(bit)。 
起始位:先發出一個邏輯”0”的信號,表示傳輸數據的開始。 
數據位:可以選擇的值有5,6,7,8這四個值,可以傳輸這么多個值為0或者1的bit位。這個參數最好為8,因為如果此值為其他的值時當你傳輸的是ASCII值時一般解析肯定會出問題。理由很簡單,一個ASCII字符值為8位,如果一幀的數據位為7,那么還有一位就是不確定的值,這樣就會出錯。 
校驗位:數據位加上這一位后,使得“1”的位數應為偶數(偶校驗)或奇數(奇校驗),以此來校驗數據傳送的正確性。就比如傳輸“A”(01000001)為例。 
1、當為奇數校驗:”A”字符的8個bit位中有兩個1,那么奇偶校驗位為1才能滿足1的個數為奇數(奇校驗)。圖-1的波形就是這種情況。 
2、當為偶數校驗:”A”字符的8個bit位中有兩個1,那么奇偶校驗位為0才能滿足1的個數為偶數(偶校驗)。 
此位還可以去除,即不需要奇偶校驗位。 
停止位:它是一幀數據的結束標志。可以是1bit、1.5bit、2bit的空閑電平。可能大家會覺得很奇怪,怎么會有1.5位~沒錯,確實有的。所以我在生產此uart信號時用兩個波形點來表示一個bit。這個可以不必深究。。。 
空閑位:沒有數據傳輸時線路上的電平狀態。為邏輯1。 
傳輸方向:即數據是從高位(MSB)開始傳輸還是從低位(LSB)開始傳輸。比如傳輸“A”如果是MSB那么就是01000001(如圖-2),如果是LSB那么就是10000010(如下圖的圖-4) 
uart傳輸數據的順序就是:剛開始傳輸一個起始位,接着傳輸數據位,接着傳輸校驗位(可不需要此位),最后傳輸停止位。這樣一幀的數據就傳輸完了。接下來接着像這樣一直傳送。在這里還要說一個參數。 
幀間隔:即傳送數據的幀與幀之間的間隔大小,可以以位為計量也可以用時間(知道波特率那么位數和時間可以換算)。比如傳送”A”完后,這為一幀數據,再傳”B”,那么A與B之間的間隔即為幀間隔。 
示波器上解碼uart協議獲得的波形圖 
圖-3

這里寫圖片描述 
圖-4 
上兩圖和下兩圖傳送的數據和波特率都是一樣的,但是有幾個參數是故意設置反了從而形成對比。有助於更深入的理解UART。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM