UART接口介紹
通用異步收發傳輸器,通常稱作UART,是一種異步收發傳輸器,是電腦硬件的一部分。它將要傳輸的資料在串行通信與並行通信之間加以轉換。作為把並行輸入信號轉成串行輸出信號的芯片,UART通常被集成於其他通訊接口的連結上。
UART是一種通用串行數據總線,用於異步通信。該總線雙向通信,可以實現全雙工傳輸和接收。在嵌入式設計中,UART用於主機與輔助設備通信,如汽車音響與外接AP之間的通信,與PC機通信包括與監控調試器和其它器件,如EEPROM通信。
UART通信協議
UART用一條傳輸線將數據一位位地順序傳送,以字符為傳輸單位,通信中兩個字符間的時間間隔多少是不固定的, 然而在同一個字符中的兩個相鄰位間的時間間隔是固定的。
數據傳送速率用波特率來表示, 指單位時間內載波參數變化的次數, 或每秒鍾傳送的二進制位數,如每秒鍾傳送240個字符,而每個字符包含10位(1個起始位, 1個停止位, 8個數據位),這時的波特率為2400Bd。
傳輸時序如下圖:
在UART中,信號線上共有兩種狀態, 分別用邏輯1(高電平)和邏輯0(低電平)來區分
在空閑時, 數據線應該保持在邏輯高電平狀態
其中各位的意義如下:
起始位(Start Bit):先發出一個邏輯0信號, 表示傳輸字符的開始
數據位(Data Bits):可以是5~8位邏輯0或1. 如ASCII碼(7位), 擴展BCD碼(8位)小端傳輸
校驗位(Parity Bit):數據位加上這一位后, 使得1的位數應為偶數(偶校驗)或奇數(奇校驗)
停止位(Stop Bit):它是一個字符數據的結束標志。 可以是1位、1.5位、2位的高電平
空閑位:處於邏輯1狀態,表示當前線路上沒有資料傳送
UART基本結構
輸出緩沖寄存器,它接收CPU從數據總線上送來的並行數據,並加以保存。
輸出移位寄存器,它接收從輸出緩沖器送來的並行數據,以發送時鍾的速率把數據逐位移出,即將並行數據轉換為串行數據輸出。
輸入移位寄存器,它以接收時鍾的速率把出現在串行數據輸入線上的數據逐位移入,當數據裝滿后,並行送往輸入緩沖寄存器,即將串行數據轉換成並行數據。
輸入緩沖寄存器,它從輸入移位寄存器中接收並行數據,然后由CPU取走。
控制寄存器,它接收CPU送來的控制字,由控制字的內容,決定通信時的傳輸方式以及數據格式等。例如采用異步方式還是同步方式,數據字符的位數,有無奇偶校驗,是奇校驗還是偶校驗,停止位的位數等參數。
狀態寄存器,狀態寄存器中存放着接口的各種狀態信息,例如輸出緩沖區是否空,輸入字符是否准備好等。在通信過程中,當符合某種狀態時,接口中的狀態檢測邏輯將狀態寄存器的相應位置“1”,以便讓CPU查詢。
UART通信速率
數據傳輸可以首先從最低有效位(LSB)開始。然而,有些UART允許靈活選擇先發送最低有效位或最高有效位(MSB)。微控制器中的UART傳送數據的 速度范圍為每秒幾百位到1.5Mb。
例如,嵌入在ElanSC520微控制器中的高速UART通信的速度可以高達1.152Mbps。UART波特率還受發送和接收線對距離(線長度)的影響。
目前,市場上有只支持異步通信和同時支持異步與同步通信的兩種硬件可用於UART。前者就是UART名字本身的含義,在摩托羅拉微控制器中被稱為串行通信 接口(SCI)。
Microchip微控制器中的通用同步異步收發器(USART)和在富士通微控制器中的UART是后者的兩個典型例子。
UART工作原理
發送數據過程:空閑狀態,線路處於高電位;當收到發送數據指令后,拉低線路一個數據位的時間T,接着數據按低位到高位依次發送,數據發送完畢后,接着發送奇偶校驗位和停止位(停止位為高電位),一幀數據發送結束。
接收數據過程:空閑狀態,線路處於高電位;當檢測到線路的下降沿(線路電位由高電位變為低電位)時說明線路有數據傳輸,按照約定的波特率從低位到高位接收數據,數據接收完畢后,接着接收並比較奇偶校驗位是否正確,如果正確則通知后續設備准備接收數據或存入緩存。
由於UART是異步傳輸,沒有傳輸同步時鍾。為了能保證數據傳輸的正確性,UART采用16倍數據波特率的時鍾進行采樣。每個數據有16個時鍾采樣,取中間的采樣值,以保證采樣不會滑碼或誤碼。
一般UART一幀的數據位數為8,這樣即使每個數據有一個時鍾的誤差,接收端也能正確地采樣到數據。
UART的接收數據時序為:當檢測到數據的下降沿時,表明線路上有數據進行傳輸,這時計數器CNT開始計數,當計數器為24=16+8時,采樣的值為第0位數據。
當計數器的值為40時,采樣的值為第1位數據,依此類推,進行后面6個數據的采樣。如果需要進行奇偶校驗,則當計數器的值為152時,采樣的值即為奇偶位;當計數器的值為168時,采樣的值為“1”表示停止位,一幀數據接收完成。