UART簡介
通用非同步收發傳輸器(Universal Asynchronous Receiver/Transmitter),通常稱作UART。UART通訊在工作中相當常見,項目中需要產生uart訊號,在部落格中記錄下。uart是非同步通訊,因為它只有一根線就可以資料的通訊。不像SPI,I2C等同步傳輸訊號。所以串口的傳輸速度和其它協議的速度相比是比較慢的。下面具體講解一些uart協議以及是如何通訊的。
圖-1
圖-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之間的間隔即為幀間隔。
圖-3
圖-4
上兩圖和下兩圖傳送的資料和傳輸速率都是一樣的,但是有幾個參數是故意設定反了從而形成對比。有助於更深入的理解UART。