1、UART使用的是 異步,串行通信。
串行通信是指利用一條傳輸線將資料一位位地順序傳送。特點是通信線路簡單,利用簡單的線纜就可實現通信,降低成本,適用於遠距離通信,但傳輸速度慢的應用場合。
異步通信以一個字符為傳輸單位,通信中兩個字符間的時間間隔多少是不固定的,然而在同一個字符中的兩個相鄰位間的時間間隔是固定的。
數據傳送速率用波特率來表示,即每秒鍾傳送的二進制位數。例如數據傳送速率為120字符/秒,而每一個字符為10位(1個起始位,7個數據位,1個校驗位,1個結束位),則其傳送的波特率為10×120=1200字符/秒=1200波特。
數據通信格式如下圖:
其中各位的意義如下:
起始位:先發出一個邏輯”0”信號,表示傳輸字符的開始。
數據位:可以是5~8位邏輯”0”或”1”。如ASCII碼(7位),擴展BCD碼(8位)。小端傳輸
校驗位:數據位加上這一位后,使得“1”的位數應為偶數(偶校驗)或奇數(奇校驗)
停止位:它是一個字符數據的結束標志。可以是1位、1.5位、2位的高電平。
空閑位:處於邏輯“1”狀態,表示當前線路上沒有資料傳送。
注:異步通信是按字符傳輸的,接收設備在收到起始信號之后只要在一個字符的傳輸時間內能和發送設備保持同步就能正確接收。下一個字符起始位的到來又使同步重新校准(依靠檢測起始位來實現發送與接收方的時鍾自同步的)
2、UART工作原理
發送數據過程:空閑狀態,線路處於高電平;當收到發送指令后,拉低線路的一個數據位的時間T,接着數據按低位到高位依次發送,數據發送完畢后,接着發送奇偶校驗位和停止位,一幀數據發送完成。
數據接收過程:空閑狀態,線路處於高電平;當檢測到線路的下降沿(高電平變為低電平)時說明線路有數據傳輸,按照約定的波特率從低位到高位接收數據,數據接收完畢后,接着接收並比較奇偶校驗位是否正確,如果正確則通知后續設備接收數據或存入緩沖。
由於UART是異步傳輸,沒有傳輸同步時鍾,為了保證數據的正確性,UART采用16倍數據波特率的時鍾進行采樣。每個數據有16個時鍾采樣,取中間的采樣值,以保證采樣不會滑碼或誤嗎。一般UART一幀的數據位數為8,這樣即使每個數據有一個時鍾的誤差,接收端也能正確地采樣到數據。
UART的接收數據時序為:當檢測到數據的下降沿時,表明線路上有數據進行傳輸,這是計數器CNT開始計數,當計數器為24=16+8時,采樣的值為第0位數據;當計數器的值為40時,采樣的值為第一位數據,依次類推,進行后面6個數據的采樣。如果需要進行奇偶校驗,則當計數器的值為152時,采樣的值即為奇偶位;當計數器的值為168時,采樣的值為“1”表示停止位,數據接收完成。
一個標准的10位異步串行通信協議(1個起始位、1個停止位和8個數據位)收發時序,如下圖所示: