UART

UART

通用異步收發傳輸器(Universal Asynchronous Receiver/Transmitter),通常稱作UART。它將要傳輸的資料在串列通信並行通信之間加以轉換。作為把並行輸入信號轉成串列輸出信號的晶片,UART通常被集成於其他通訊接口的連結上。

具體實物表現為獨立的模組化晶片,或作為集成於微處理器中的周邊設備。一般是RS-232C規格的,與類似Maxim的MAX232之類的標準信號幅度變換晶片進行搭配,作為連線外部設備的接口。在UART上追加同步方式的序列信號變換電路的產品,被稱為USART(Universal Synchronous Asynchronous Receiver Transmitter)。

基本介紹

  • 中文名:通用異步收發傳輸器
  • 外文名:Universal Asynchronous Receiver/Transmitter
  • 原理:串並轉換和並串轉換
  • 套用:通信領域
  • 學科:通信工程
  • 定義:異步收發傳輸器
定義,通信協定,基本結構,工作原理,傳送接收,波特率產生,數據收發,中斷控制,FIFO 操作,迴環操作,串列紅外協定,功能,UART 型號,通信速度,運用,通信領域,計算機,

定義

UART是一種通用串列數據匯流排,用於異步通信。該匯流排雙向通信,可以實現全雙工傳輸和接收。在嵌入式設計中,UART用於主機與輔助設備通信,如汽車音響與外接AP之間的通信,與PC機通信包括與監控調試器和其它器件,如EEPROM通信。

通信協定

UART作為異步串口通信協定的一種,工作原理是將傳輸數據的每個字元一位接一位地傳輸。
其中各位的意義如下:
起始位:先發出一個邏輯”0”的信號,表示傳輸字元的開始。
資料位:緊接著起始位之後。資料位的個數可以是4、5、6、7、8等,構成一個字元。通常採用ASCII碼。從最低位開始傳送,靠時鐘定位。
奇偶校驗位:資料位加上這一位後,使得“1”的位數應為偶數(偶校驗)或奇數(奇校驗),以此來校驗資料傳送的正確性。
停止位:它是一個字元數據的結束標誌。可以是1位、1.5位、2位的高電平。 由於數據是在傳輸線上定時的,並且每一個設備有其自己的時鐘,很可能在通信中兩台設備間出現了小小的不同步。因此停止位不僅僅是表示傳輸的結束,並且提供計算機校正時鐘同步的機會。適用於停止位的位數越多,不同時鐘同步的容忍程度越大,但是數據傳輸率同時也越慢。
空閒位:處於邏輯“1”狀態,表示當前線路上沒有資料傳送。
波特率:是衡量資料傳送速率的指標。表示每秒鐘傳送的符號數(symbol)。一個符號代表的信息量(比特數)與符號的階數有關。例如傳輸使用256階符號,每8bit代表一個符號,資料傳送速率為120字元/秒,則波特率就是120baud,比特率是120*8=960bit/s。這兩者的概念很容易搞錯。

基本結構

⑴輸出緩衝暫存器,它接收CPU從數據匯流排上送來的並行數據,並加以保存。
⑵ 輸出移位暫存器,它接收從輸出緩衝器送來的並行數據,以傳送時鐘的速率把數據逐位移出,即將並行數據轉換為串列數據輸出
⑶ 輸入移位暫存器,它以接收時鐘的速率把出現在串列數據輸入線上的數據逐位移入,當數據裝滿後,並行送往輸入緩衝暫存器,即將串列數據轉換成並行數據。
⑷ 輸入緩衝暫存器,它從輸入移位暫存器中接收並行數據,然後由CPU取走。
控制暫存器,它接收CPU送來的控制字,由控制字的內容,決定通信時的傳輸方式以及數據格式等。例如採用異步方式還是同步方式,數據字元的位數,有無奇偶校驗,是奇校驗還是偶校驗,停止位的位數等參數。
狀態暫存器。狀態暫存器中存放著接口的各種狀態信息,例如輸出緩衝區是否空,輸入字元是否準備好等。在通信過程中,當符合某種狀態時,接口中的狀態檢測邏輯將狀態暫存器的相應位置“1”,以便讓CPU查詢。

工作原理

傳送接收

傳送邏輯對從傳送FIFO 讀取的數據執行“並→串”轉換。控制邏輯輸出起始位在先的串列位流,並且根據控制暫存器中已編程的配置,後面緊跟著數據位(注意:最低位 LSB 先輸出)、奇偶校驗位和停止位。
在檢測到一個有效的起始脈衝後,接收邏輯對接收到的位流執行“串→並”轉換。此外還會對溢出錯誤、奇偶校驗錯誤、幀錯誤和線中止(line-break)錯誤進行檢測,並將檢測到的狀態附加到被寫入接收FIFO 的數據中。

波特率產生

波特率除數(baud-rate divisor)是一個22 位數,它由16 位整數和6 位小數組成。波特率發生器使用這兩個值組成的數字來決定位周期。通過帶有小數波特率的除法器,在足夠高的系統時鐘速率下,UART 可以產生所有標準的波特率,而誤差很小。

數據收發

傳送時,數據被寫入傳送FIFO。如果UART 被使能,則會按照預先設定好的參數(波特率、數據位、停止位、校驗位等)開始傳送數據,一直到傳送FIFO 中沒有數據。一旦向傳送FIFO 寫數據(如果FIFO 未空),UART 的忙標誌位BUSY 就有效,並且在傳送數據期間一直保持有效。BUSY 位僅在傳送FIFO 為空,且已從移位暫存器傳送最後一個字元,包括停止位時才變無效。即 UART 不再使能,它也可以指示忙狀態。BUSY 位的相關庫函式是UARTBusy( )
在UART 接收器空閒時,如果數據輸入變成“低電平”,即接收到了起始位,則接收計數器開始運行,並且數據在Baud16 的第8 個周期被採樣。如果Rx 在Baud16 的第8 周期仍然為低電平,則起始位有效,否則會被認為是錯誤的起始位並將其忽略。
如果起始位有效,則根據數據字元被編程的長度,在 Baud16 的每第 16 個周期(即一個位周期之後)對連續的數據位進行採樣。如果奇偶校驗模式使能,則還會檢測奇偶校驗位
最後,如果Rx 為高電平,則有效的停止位被確認,否則發生幀錯誤。當接收到一個完整的字元時,將數據存放在接收FIFO 中。

中斷控制

出現以下情況時,可使UART 產生中斷:
  • FIFO 溢出錯誤
  • 線中止錯誤(line-break,即Rx 信號一直為0 的狀態,包括校驗位和停止位在內)
  • 幀錯誤(停止位不為1)
  • 接收逾時(接收FIFO 已有數據但未滿,而後續數據長時間不來)
  • 傳送
  • 接收
  • 由於所有中斷事件在傳送到中斷控制器之前會一起進行“或運算”操作,所以任意時刻 UART 只能向中斷產生一個中斷請求。通過查詢中斷狀態函式UARTIntStatus( ),軟體可以在同一個中斷服務函數裡處理多箇中斷事件(多個並列的if 語句)。

FIFO 操作

FIFO 是“First-In First-Out”的縮寫,意為“先進先出”,是一種常見的佇列操作。 Stellaris 系列ARM 的UART 模組包含有2 個16 位元組的FIFO:一個用於傳送,另一個用於接收。可以將兩個FIFO 分別配置為以不同深度觸發中斷。可供選擇的配置包括:1/8、 1/4、1/2、3/4 和7/8 深度。例如,如果接收FIFO 選擇1/4,則在UART 接收到4 個數據時產生接收中斷。
傳送FIFO的基本工作過程: 只要有數據填充到傳送FIFO 里,就會立即啟動傳送過程。由於傳送本身是個相對緩慢的過程,因此在傳送的同時其它需要傳送的數據還可以繼續填充到傳送 FIFO 里。當傳送 FIFO 被填滿時就不能再繼續填充了,否則會造成數據丟失,此時只能等待。這個等待並不會很久,以9600 的波特率為例,等待出現一個空位的時間在1ms 上下。傳送 FIFO 會按照填入數據的先後順序把數據一個個傳送出去,直到傳送 FIFO 全空時為止。已傳送完畢的數據會被自動清除,在傳送FIFO 里同時會多出一個空位。
接收FIFO的基本工作過程: 當硬體邏輯接收到數據時,就會往接收FIFO 里填充接收到的數據。程式應當及時取走這些數據,數據被取走也是在接收FIFO 里被自動刪除的過程,因此在接收 FIFO 里同時會多出一個空位。如果在接收 FIFO 里的數據未被及時取走而造成接收FIFO 已滿,則以後再接收到數據時因無空位可以填充而造成數據丟失。
收發FIFO 主要是為了解決UART 收發中斷過於頻繁而導致CPU 效率不高的問題而引入的。在進行 UART 通信時,中斷方式輪詢方式要簡便且效率高。但是,如果沒有收發 FIFO,則每收發一個數據都要中斷處理一次,效率仍然不夠高。如果有了收發FIFO,則可以在連續收發若干個數據(可多至14 個)後才產生一次中斷然後一併處理,這就大大提高了收發效率。
完全不必要擔心FIFO 機制可能帶來的數據丟失或得不到及時處理的問題,因為它已經幫你想到了收發過程中存在的任何問題,只要在初始化配置UART 後,就可以放心收發了, FIFO 和中斷例程會自動搞定一切。

迴環操作

UART 可以進入一個內部迴環(Loopback)模式,用於診斷或調試。在迴環模式下,從Tx 上傳送的數據將被Rx 輸入端接收。

串列紅外協定

在某些 Stellaris 系列 ARM 晶片里,UART 還包含一個 IrDA 串列紅外(SIR)編碼器/ 解碼器模組。IrDA SIR 模組的作用是在異步UART數據流和半雙工串列SIR 接口之間進行轉換。片上不會執行任何模擬處理操作。SIR 模組的任務就是要給UART 提供一個數字編碼輸出和一個解碼輸入。UART 信號管腳可以和一個紅外收發器連線以實現IrDA SIR物理層連線。

功能

在手機設計和測試階段被用來控制CPU與其餘部分的訊息傳送。
UART是通用異步收發器(異步串列通信口)的英文縮寫,它包括了RS232、RS449、RS423、RS422RS485等接口標準規範和匯流排標準規範,即UART是異步串列通信口的總稱。 而RS232、RS449、RS423、RS422和RS485等,是對應各種異步串列通信口的接口標準和匯流排標準,它規定了通信口的電氣特性、傳輸速率、連線特性和接口的機械特性等內容。實際上是屬於通信網路中的實體層(Physical Layer)的概念,與通信協定沒有直接關係。而通信協定,是屬於通信網路中的資料連結層(Data Link Layer)的概念。 COM是PC(個人計算機)上,異步串列通信口的簡寫。由於歷史原因,IBM的PC外部接口配置為RS232,成為實際上的PC界默認標準。所以,現在PC機的COM均為RS232。若配有多個異步串列通信口,則分別稱為COM1、COM2... 。

UART 型號

一些早期用於 UART 的代表性 IC 型號如下表
ModelDescription
EXAR XR21V1410
Z8440
2000 kbit/s. Async,Bisync,SDLC,HDLC,X.25.CRC. 4 位元組接收緩衝區, 2 位元組傳送緩衝區,DMA.
Intel8251
USART,異步通信最高 19.2kbit/s,同步通信最高 64kbit/s
NSINS8250
緩衝區只有 1 位元組的老舊型式
Motorola 6850
6522
6551
Rockwell 65C52
16450
具有兩組 UART, 代號 164 = 82 x 2 暗示了它的特性。 以下 16 開頭的都有兩組 UART
16550
推出後發現 FIFO 存在 bug,隨即以 16550A 取代
16550A
16 位元組緩衝區,可設為 TL=1,4,8,14; 標準最高速度 115.2 kbit/s, 也有可達 230.4 或 460.8 kbit/s 的,支援 DMA
16C552
16650
32 位元組緩衝區,最高速度 460.8 kbit/s
16750
64 位元組傳送緩衝區, 56 位元組接收緩衝區,最高速度 921.6 kbit/s
16850
128 位元組緩衝區,最高速度 460.8 kbit/s 或 1500 kbit/s
16C850
16950
Hayes ESP
1 k 位元組緩衝區

通信速度

數據傳輸可以首先從最低有效位(LSB)開始。然而,有些UART允許靈活選擇先傳送最低有效位或最高有效位(MSB)。
微控制器中的UART傳送數據的速度範圍為每秒幾百位到1.5Mb。例如,嵌入在ElanSC520微控制器中的高速UART通信的速度可以高達1.152Mbps。UART波特率還受傳送和接收線對距離(線長度)的影響。
市場上有隻支持異步通信和同時支持異步與同步通信的兩種硬體可用於UART。前者就是UART名字本身的含義,在摩托羅拉微控制器中被稱為串列通信接口(SCI);Microchip微控制器中的通用同步異步收發器(USART)和在富士通微控制器中的UART是後者的兩個典型例子。

運用

通信領域

UART首先將接收到的並行數據轉換成串列數據來傳輸。訊息幀從一個低位起始位開始,後面是5~8個數據位,一個可用的奇偶位和一個或幾個高位停止位。接收器發現開始位時它就知道數據準備傳送,並嘗試與傳送器時鐘頻率同步。如果選擇了奇偶,UART就在數據位後面加上奇偶位。奇偶位可用來幫助錯誤校驗。
在接收過程中,UART從訊息幀中去掉起始位和結束位,對進來的位元組進行奇偶校驗,並將數據位元組從串列轉換成並行。UART也產生額外的信號來指示傳送和接收的狀態。例如,如果產生一個奇偶錯誤,UART就置位奇偶標誌。奇偶校驗位適用於檢驗傳輸是否正確的。

計算機

UART是計算機中串列通信連線埠的關鍵部分。在計算機中,UART相連於產生兼容RS232規範信號的電路。RS232標準定義邏輯“1”信號相對於地為-3到-15伏,而邏輯“0”相對於地為+3到+15伏。所以,當一個微控制器中的UART相連於PC時,它需要一個RS232驅動器來轉換電平。
Uart這裡指的是TTL電平的串口;RS232指的是RS232電平的串口。
TTL電平是5V的,而RS232是負邏輯電平,它定義+5~+12V為低電平,而-12~-5V為高電平。
Uart串口的RXD、TXD等一般直接與處理器晶片的引腳相連,而RS232串口的RXD、TXD等一般需要經過電平轉換(通常由Max232等晶片進行電平轉換)才能接到處理器晶片的引腳上,否則這么高的電壓很可能會把晶片燒壞。
我們平時所用的電腦的串口就是RS232的,當我們在做電路工作時,應該注意下外設的串口是Uart類型的還是RS232類型的,如果不匹配,應當找個轉換線(通常這根轉換線內有塊類似於Max232的晶片做電平轉換工作的),可不能盲目地將兩串口相連。

相關詞條

熱門詞條

聯絡我們