之前一直使用UART作為單片機之間以及和計算機的簡單通信,但一直沒有研究過該協議的內部原理。今天剛買了一個邏輯分析儀,於是使用該分析儀對UART數據進行分析,以便更好的理解UART協議原理。
UART協議雖然速率較低,但協議簡單,實現起來很便捷。
首先,需要了解UART協議的幾個參數,解釋如下:
波特率:即每秒可以傳輸的碼元個數
起始位:先發出一個邏輯”0”的信號,表示傳輸數據的開始。
數據位:可以選擇的值有5,6,7,8這四個值,可以傳輸這么多個值為0或者1的bit位。這個參數最好為8,因為如果此值為其他的值時當你傳輸的是ASCII值時一般解析肯定會出問題。理由很簡單,一個ASCII字符值為8位,如果一幀的數據位為7,那么還有一位就是不確定的值,這樣就會出錯。
校驗位:數據位加上這一位后,使得“1”的位數應為偶數(偶校驗)或奇數(奇校驗),以此來校驗數據傳送的正確性。就比如傳輸“A”(01000001)為例。
1、當為奇數校驗:”A”字符的8個bit位中有兩個1,那么奇偶校驗位為1才能滿足1的個數為奇數(奇校驗)。
2、當為偶數校驗:”A”字符的8個bit位中有兩個1,那么奇偶校驗位為0才能滿足1的個數為偶數(偶校驗)。
此位還可以去除,即不需要奇偶校驗位。
停止位:它是一幀數據的結束標志。可以是1bit、1.5bit、2bit的空閑電平。
空閑位:沒有數據傳輸時線路上的電平狀態。為邏輯1。
傳輸方向:即數據是從高位(MSB)開始傳輸還是從低位(LSB)開始傳輸。
這里配置以下:波特率115200,數據位8位,停止位1,無校驗位
因為波特率為115200,因此碼元寬度為1s/115200=8.68us
使用邏輯分析儀測的波形圖如下:
上圖中每一個白點都代表數據的一位,每8個點構成一組數據。每組數據的前面都有一個低電平位表示起始,數據的末尾都有一個高電平代表數據的結束。采用16進制的顯示,可以看出獲取的數據分別為“0x30”,“0x65”,"0x6E","0x64","0x0D","0x0A"。將這些數據轉換為ASCII字符為:"0","e","n","d","\r","\n"。