1. 程式人生 > >URAT

URAT

UART定義:

UART是一種通用序列資料匯流排,用於非同步通訊。該匯流排雙向通訊,可以實現全雙工傳輸和接收。在嵌入式設計中,UART用來主機與輔助裝置通訊,如汽車音響與外接AP之間的通訊,與PC機通訊包括與監控偵錯程式和其它器件,如EEPROM通訊。

計算機與UART:

因為計算機內部採用並行資料,不能直接把資料發到Modem,必須經過UART整理才能進行非同步傳輸,其過程 為:CPU先把準備寫入序列裝置的資料放到UART的暫存器(臨時記憶體塊)中,再通過FIFO(First Input First Output,先入先出佇列)傳送到序列裝置,若是沒有FIFO,資訊將變得雜亂無章,不可能傳送到Modem。

它是用於控制計算機與序列 裝置的晶片。有一點要注意的是,它提供了RS-232C資料終端裝置介面,這樣計算機就可以和調變解調器或其它使用RS-232C介面的序列裝置通訊了。 作為介面的一部分,UART還提供以下功能:將由計算機內部傳送過來的並行資料轉換為輸出的序列資料流。將計算機外部來的序列資料轉換為位元組,供計算機內 部並行資料的器件使用。在輸出的序列資料流中加入奇偶校驗位,並對從外部接收的資料流進行奇偶校驗。在輸出資料流中加入啟停標記,並從接收資料流中刪除啟 停標記。處理由鍵盤或滑鼠發出的中斷訊號(鍵盤和滑鼠也是序列裝置)。可以處理計算機與外部序列裝置的同步管理問題。有一些比較高檔的UART還提供輸入 輸出資料的緩衝區,現在比較新的UART是16550,它可以在計算機需要處理資料前在其緩衝區記憶體儲16位元組資料,而通常的UART是8250。現在如 果您購買一個內建的調變解調器,此調變解調器內部通常就會有16550 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的晶片做電平轉換工作的),可不能盲目地將兩串列埠相連。

UART如何通訊:

UART首先將接收到的並行資料轉換成序列資料來傳輸。訊息幀從一個低位起始位開始,後面是5~8個數據位,一個可用的奇偶位和一個或幾個高位停止位。接 收器發現開始位時它就知道資料準備傳送,並嘗試與傳送器時鐘頻率同步。如果選擇了奇偶,UART就在資料位後面加上奇偶位。奇偶位可用來幫助錯誤校驗。

在接收過程中,UART從訊息幀中去掉起始位和結束位,對進來的位元組進行奇偶校驗,並將資料位元組從序列轉換成並行。UART也產生額外的訊號來指示傳送和接收的狀態。例如,如果產生一個奇偶錯誤,UART就置位奇偶標誌。

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

UART通訊協議:

UART作為非同步串列埠通訊協議的一種,工作原理是將傳輸資料的每個字元一位接一位地傳輸。

其中各位的意義如下:

起始位:先發出一個邏輯”0”的訊號,表示傳輸字元的開始。

資料位:緊接著起始位之後。資料位的個數可以是4、5、6、7、8等,構成一個字元。通常採用ASCII碼。從最低位開始傳送,靠時鐘定位。

奇偶校驗位:資料位加上這一位後,使得“1”的位數應為偶數(偶校驗)或奇數(奇校驗),以此來校驗資料傳送的正確性。

停止位:它是一個字元資料的結束標誌。可以是1位、1.5位、2位的高電平。 由於資料是在傳輸線上定時的,並且每一個裝置有其自己的時鐘,很可能在通訊中兩臺裝置間出現了小小的不同步。因此停止位不僅僅是表示傳輸的結束,並且提供 計算機校正時鐘同步的機會。適用於停止位的位數越多,不同時鐘同步的容忍程度越大,但是資料傳輸率同時也越慢。

空閒位:處於邏輯“1”狀態,表示當前線路上沒有資料傳送。

波特率:是衡量資料傳送速率的指標。表示每秒鐘傳送的二進位制位數。例如資料傳送速率為120字元/秒,而每一個字元為10位,則其傳送的波特率為10×120=1200位/秒=1200波特。

UART的作用

1. 傳送/接收邏輯

傳送邏輯對從傳送FIFO 讀取的資料執行“並→串”轉換。控制邏輯輸出起始位在先的序列位流,並且根據控制暫存器中已程式設計的配置,後面緊跟著資料位(注意:最低位 LSB 先輸出)、奇偶校驗位和停止位。

在檢測到一個有效的起始脈衝後,接收邏輯對接收到的位流執行“串→並”轉換。此外還會對溢位錯誤、奇偶校驗錯誤、幀錯誤和線中止(line-break)錯誤進行檢測,並將檢測到的狀態附加到被寫入接收FIFO 的資料中。

2.波特率的產生

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

3. 資料收發

傳送時,資料被寫入傳送FIFO。如果UART 被使能,則會按照預先設定好的引數(波特率、資料位、停止位、校驗位等)開始傳送資料,一直到傳送FIFO 中沒有資料。一旦向傳送FIFO 寫資料(如果FIFO 未空),UART 的忙標誌位BUSY 就有效,並且在傳送資料期間一直保持有效。BUSY 位僅在傳送FIFO 為空,且已從移位暫存器傳送最後一個字元,包括停止位時才變無效。即 UART 不再使能,它也可以指示忙狀態。BUSY 位的相關庫函式是UARTBusy( )

在UART 接收器空閒時,如果資料輸入變成“低電平”,即接收到了起始位,則接收計數器開始執行,並且資料在Baud16 的第8 個週期被取樣。如果Rx 在Baud16 的第8 週期仍然為低電平,則起始位有效,否則會被認為是錯誤的起始位並將其忽略。

如果起始位有效,則根據資料字元被程式設計的長度,在 Baud16 的每第 16 個週期對連續的資料位(即一個位週期之後)進行取樣。如果奇偶校驗模式使能,則還會檢測奇偶校驗位。

最後,如果Rx 為高電平,則有效的停止位被確認,否則發生幀錯誤。當接收到一個完整的字元時,將資料存放在接收FIFO 中。

4. 中斷控制

出現以下情況時,可使UART 產生中斷:

FIFO 溢位錯誤

線中止錯誤(line-break,即Rx 訊號一直為0 的狀態,包括校驗位和停止位在內)

奇偶校驗錯誤

幀錯誤(停止位不為1)

接收超時(接收FIFO 已有資料但未滿,而後續資料長時間不來)

傳送

接收

由於所有中斷事件在傳送到中斷控制器之前會一起進行“或運算”操作,所以任意時刻 UART 只能向中斷產生一箇中斷請求。通過查詢中斷狀態函式UARTIntStatus( ),軟體可以在同一個中斷服務函式裡處理多箇中斷事件(多個並列的if 語句)。

5. 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 和中斷例程會自動搞定一切。

6. 迴環操作

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

7. 序列紅外協議

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

如圖所示,為UART 的IrDA SIR 模組基本應用電路。D1 為紅外發射管,Q2 為紅外接收管。

UART的基本結構及埠介紹

⑴輸出緩衝暫存器,它接收CPU從資料匯流排上送來的並行資料,並加以儲存。

⑵ 輸出移位暫存器,它接收從輸出緩衝器送來的並行資料,以傳送時鐘的速率把資料逐位移出,即將並行資料轉換為序列資料輸出。

⑶ 輸入移位暫存器,它以接收時鐘的速率把出現在序列資料輸入線上的資料逐位移入,當資料裝滿後,並行送往輸入緩衝暫存器,即將序列資料轉換成並行資料。

⑷ 輸入緩衝暫存器,它從輸入移位暫存器中接收並行資料,然後由CPU取走。

⑸控制暫存器,它接收CPU送來的控制字,由控制字的內容,決定通訊時的傳輸方式以及資料格式等。例如採用非同步方式還是同步方式,資料字元的位數,有無奇偶校驗,是奇校驗還是偶校驗,停止位的位數等引數。

⑹狀態暫存器。狀態暫存器中存放著介面的各種狀態資訊,例如輸出緩衝區是否空,輸入字元是否準備好等。在通訊過程中,當符合某種狀態時,介面中的狀態檢測邏輯將狀態暫存器的相應位置“1”,以便讓CPU查詢。

UART設計思想:

資料傳送的思想是,當啟動位元組傳送時,通過TxD先發起始位,然後發資料位和奇偶數效驗位,最後再發停止位,傳送過程由傳送狀態機控制,每次中斷只發送1個位,經過若干個定時中斷完成1個位元組幀的傳送。

資料接收的思想是,當不在位元組幀接收過程時,每次定時中斷以3倍的波特率監視RxD的狀態,當其連續3次取樣電平依 次為1、0、0時,就認為檢測到了起始位,則開始啟動一次位元組幀接收,位元組幀接收過程由接收狀態機控制,每次中斷只接收1個位,經過若干個定時中斷完成1 個位元組幀的接收。

為了提高串列埠的效能,在傳送和接收上都實現了FIFO功能,提高通訊的實時性。FIFO的長度可以進行自由定義,適應使用者的不同需要。

波特率的計算按照計算公式進行,在設定最高波特率時一定要考慮模擬串列埠程式程式碼的執行時間,該定時時間必須大於模擬串列埠的程式的規定時間。微控制器的執行速度越快,則可以實現更高的串列埠通訊速度