異步通信以一個字符為傳輸單位,通信中兩個字符間的時間間隔多少是不固定的,然而在同一個字符中的兩個相鄰位間的時間間隔是固定的。當(dāng)波特率為9600bps時,傳輸一個bit的時間間隔大約為104.16us;波特率為115200bps時,傳輸一個bit的時間間隔大約為8us。
數(shù)據(jù)通信時序圖:
其中各位的意義如下:
起始位:先發(fā)出一個邏輯”0”信號,表示傳輸字符的開始;
數(shù)據(jù)位:可以是5~8位邏輯”0”或”1”;如ASCII碼(7位),擴展BCD碼(8位);小端傳輸,即LSB先發(fā),MSB后發(fā);
校驗位:數(shù)據(jù)位加上這一位后,使得“1”的位數(shù)應(yīng)為偶數(shù)(偶校驗)或奇數(shù)(奇校驗);
停止位:它是一個字符數(shù)據(jù)的結(jié)束標(biāo)志??梢允?位、1.5位、2位的高電平(用于雙方同步,停止位時間間隔越長,容錯能力越強);
空閑位:處于邏輯“1”狀態(tài),表示當(dāng)前線路上沒有數(shù)據(jù)傳送;
注:異步通信是按字符傳輸?shù)?,接收設(shè)備在收到起始信號之后只要在一個字符的傳輸時間內(nèi)能和發(fā)送設(shè)備保持同步就能正確接收。下一個字符起始位的到來又使同步重新校準(zhǔn)(依靠檢測起始位來實現(xiàn)發(fā)送與接收方的時鐘自同步的)。
(起始位和停止位)
(數(shù)據(jù)位)
(傳輸“A”)
上圖是uart協(xié)議傳輸一個”A”字符通過示波器的uart解碼而得到的波形示意圖。下面,根據(jù)此圖來介紹一下uart的一些基本參數(shù)。
波特率:此參數(shù)容易和比特率混淆,其實他們是由區(qū)別的。但是我認(rèn)為uart中的波特率就可以認(rèn)為是比特率,即每秒傳輸?shù)奈粩?shù)(bit)。一般選波特率都會有9600,19200,115200等選項。其實意思就是每秒傳輸這么多個比特位數(shù)(bit)。
起始位:先發(fā)出一個邏輯”0”的信號,表示傳輸數(shù)據(jù)的開始。
數(shù)據(jù)位:可以選擇的值有5,6,7,8這四個值,可以傳輸這么多個值為0或者1的bit位。這個參數(shù)最好為8,因為如果此值為其他的值時當(dāng)你傳輸?shù)氖茿SCII值時一般解析肯定會出問題。理由很簡單,一個ASCII字符值為8位,如果一幀的數(shù)據(jù)位為7,那么還有一位就是不確定的值,這樣就會出錯。
校驗位:數(shù)據(jù)位加上這一位后,使得“1”的位數(shù)應(yīng)為偶數(shù)(偶校驗)或奇數(shù)(奇校驗),以此來校驗數(shù)據(jù)傳送的正確性。就比如傳輸“A”(01000001)為例。
-
當(dāng)為奇數(shù)校驗:”A”字符的8個bit位中有兩個1,那么奇偶校驗位為1才能滿足1的個數(shù)為奇數(shù)(奇校驗)。
-
當(dāng)為偶數(shù)校驗:”A”字符的8個bit位中有兩個1,那么奇偶校驗位為0才能滿足1的個數(shù)為偶數(shù)(偶校驗)。
此位還可以去除,即不需要奇偶校驗位。
停止位:它是一幀數(shù)據(jù)的結(jié)束標(biāo)志??梢允?bit、1.5bit、2bit的空閑電平??赡艽蠹視X得很奇怪,怎么會有1.5位~沒錯,確實有的。所以我在生產(chǎn)此uart信號時用兩個波形點來表示一個bit,這個可以不必深究。
空閑位:沒有數(shù)據(jù)傳輸時線路上的電平狀態(tài),為邏輯1。
傳輸方向:即數(shù)據(jù)是從高位(MSB)開始傳輸還是從低位(LSB)開始傳輸。比如傳輸“A”如果是MSB,那么就是01000001;如果是LSB,那么就是10000010。
uart傳輸數(shù)據(jù)的順序就是:剛開始傳輸一個起始位,接著傳輸數(shù)據(jù)位,接著傳輸校驗位(可不需要此位),最后傳輸停止位。這樣一幀的數(shù)據(jù)就傳輸完了。接下來接著像這樣一直傳送。在這里還要說一個參數(shù)。
幀間隔:即傳送數(shù)據(jù)的幀與幀之間的間隔大小,可以以位為計量也可以用時間(知道波特率那么位數(shù)和時間可以換算)。比如傳送”A”完后,這為一幀數(shù)據(jù),再傳”B”,那么A與B之間的間隔即為幀間隔。
圖2
圖3
上兩圖和下兩圖傳送的數(shù)據(jù)和波特率都是一樣的,但是有幾個參數(shù)是故意設(shè)置反了從而形成對比。有助于更深入的理解UART。 圖4
來源:面包板社區(qū)版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系刪除。