新聞中心

什么是uart

作者: 時(shí)間:2011-09-21 來源:網(wǎng)絡(luò) 收藏
UART是用于控制計(jì)算機(jī)與串行設(shè)備的芯片。有一點(diǎn)要注意的是,它提供了RS-232C數(shù)據(jù)終端設(shè)備接口,這樣計(jì)算機(jī)就可以和調(diào)制解調(diào)器或其它使用RS-232C接口的串行設(shè)備通信了。作為接口的一部分,UART還提供以下功能:
將由計(jì)算機(jī)內(nèi)部傳送過來的并行數(shù)據(jù)轉(zhuǎn)換為輸出的串行數(shù)據(jù)流。將計(jì)算機(jī)外部來的串行數(shù)據(jù)轉(zhuǎn)換為字節(jié),供計(jì)算機(jī)內(nèi)部使用并行數(shù)據(jù)的器件使用。在輸出的串行數(shù)據(jù)流中加入奇偶校驗(yàn)位,并對從外部接收的數(shù)據(jù)流進(jìn)行奇偶校驗(yàn)。在輸出數(shù)據(jù)流中加入啟停標(biāo)記,并從接收數(shù)據(jù)流中刪除啟停標(biāo)記。處理由鍵盤或鼠標(biāo)發(fā)出的中斷信號(hào)(鍵盤和鼠票也是串行設(shè)備)??梢蕴幚碛?jì)算機(jī)與外部串行設(shè)備的同步管理問題。有一些比較高檔的UART還提供輸入輸出數(shù)據(jù)的緩沖區(qū),現(xiàn)在比較新的UART是16550,它可以在計(jì)算機(jī)需要處理數(shù)據(jù)前在其緩沖區(qū)內(nèi)存儲(chǔ)16字節(jié)數(shù)據(jù),而通常的UART是8250。現(xiàn)在如果您購買一個(gè)內(nèi)置的調(diào)制解調(diào)器,此調(diào)制解調(diào)器內(nèi)部通常就會(huì)有16550 UART。

1.UART協(xié)議的工作特點(diǎn)
1.1數(shù)據(jù)采樣
UART協(xié)議是實(shí)現(xiàn)設(shè)備之間低速數(shù)據(jù)通信的標(biāo)準(zhǔn)協(xié)議。因發(fā)送時(shí)不需同時(shí)發(fā)送時(shí)鐘,故此協(xié)議為異步。UART鏈接典型為38400,9600波特 。
如圖1,UART字符格式為1個(gè)起始位,5~8個(gè)數(shù)據(jù)位,1個(gè)地址位或奇偶位(可選),1個(gè)停止位。
由于接收器、發(fā)送器異步工作,無需聯(lián)接接收和發(fā)送時(shí)鐘。接收器采取對輸入數(shù)據(jù)流高度采樣方式,通常采樣為16,并根據(jù)采樣值確定位值。按慣例,使用16個(gè)采樣值的中間三個(gè)值。
1.2 UART幀區(qū)分
UART一參數(shù)MAX-IDL,用來設(shè)置空閑字符的多少。一旦一字符在線上被接收,UART控制器開始計(jì)數(shù)接收到的空閑字符。若下一數(shù)據(jù)字符接收前,一MAX-IDL多個(gè)空閑字符被接收,則產(chǎn)生空閑時(shí)間,緩沖區(qū)被關(guān)閉。順次對CPU32+核心發(fā)出一中斷請求,要求從緩沖區(qū)接收數(shù)據(jù)。因此,MAX-IDL給UART模式提供一區(qū)分幀的便利方法。
空閑字符按以下公式計(jì)算其位數(shù):1(起始)+數(shù)據(jù)長度(5,6,7,8)+1(若奇偶校驗(yàn)被使用)+停止位(1)。例如,1個(gè)(起始),8位數(shù)據(jù),無校驗(yàn),1個(gè)停止位,則空閑字符MAX-IDL為10位。
1.3 UART地址識(shí)別
多站系統(tǒng)中,網(wǎng)絡(luò)上可能會(huì)有兩個(gè)以上的站,每個(gè)站有一特定的地址。圖2為此種結(jié)構(gòu)的兩個(gè)示例。由許多字符構(gòu)成的幀可被廣播,其第一字符做為目的地址。為實(shí)現(xiàn)此功能,UART幀被擴(kuò)展一位,以區(qū)別地址字符和正常數(shù)據(jù)字符。
UART可被設(shè)置為操作于一多站環(huán)境,此環(huán)境下,支持以下兩種模式:
自動(dòng)多站模式 當(dāng)?shù)刂酚趦蓚€(gè)預(yù)置值之一相匹配時(shí),UART控制器自動(dòng)檢查到來地址字符,接收隨后的數(shù)據(jù)。
非自動(dòng)多站模式 UART控制器接收所有數(shù)據(jù)。一地址字符總被寫入一新緩沖區(qū)。
綜上所述,UART協(xié)議采取一種通過數(shù)據(jù)采樣來確定位值的機(jī)理,具有簡單準(zhǔn)確的定幀模式,而且廣泛用于多站系統(tǒng)中,具有自動(dòng)多站和非自動(dòng)多站兩種模式,來區(qū)分地址和數(shù)據(jù)。
2.幾種重要寄存器
在嵌入式開發(fā)中,對寄存器的理解和正確配置至關(guān)重要。對MPC860的UART協(xié)議,有幾個(gè)重要寄存器,它們是:管足配置寄存器、波特率配置寄存器、通信處理命令寄存器、SCC通用模式寄存器、發(fā)送和接收緩沖區(qū)描述器、UART的特定參數(shù)、SCC協(xié)議專用模式寄存器、SCC協(xié)議事件寄存器、UART屏蔽寄存器。
管足配置寄存器一般是針對收、發(fā)兩根管足,有開漏寄存器、數(shù)據(jù)寄存器、數(shù)據(jù)方向寄存器,它們可被設(shè)置為具有串行信道輸出的能力和被設(shè)置為輸入輸出口。波特率配置寄存器負(fù)責(zé)把波特率指向所用的串口和配置波特率大小。通信處理命令寄存器主要用于判斷命令的發(fā)出是否和阻止傳送。SCC通用模式寄存器主要用于協(xié)議的選擇和傳輸格式的配置。發(fā)送和接收緩沖區(qū)描述器主要用于收發(fā)數(shù)據(jù)和判斷接收的是地址還是數(shù)據(jù),數(shù)據(jù)的錯(cuò)誤情況等。UART的特定參數(shù)用來部分初始化UART。SCC協(xié)議專用模式寄存器主要用于設(shè)置UART處于自動(dòng)多站和非自動(dòng)多站模式。事件寄存器主要用于判斷是收中斷還是發(fā)中斷。屏蔽寄存器主要用于收、發(fā)使能。
因此,對UART協(xié)議來說,上面幾種寄存器是很重要的,它們主要完成波特率配置,協(xié)議的選擇,收發(fā)判斷處理等。

UART RS232 COM
UART是通用異步收發(fā)器(異步串行通信口)的英文縮寫,它包括了RS232、RS499、RS423、RS422和RS485等接口標(biāo)準(zhǔn)規(guī)范和總線標(biāo)準(zhǔn)規(guī)范,即UART是異步串行通信口的總稱。
而RS232、RS499、RS423、RS422和RS485等,是對應(yīng)各種異步串行通信口的接口標(biāo)準(zhǔn)和總線標(biāo)準(zhǔn),它規(guī)定了通信口的電氣特性、傳輸速率、連接特性和接口的機(jī)械特性等內(nèi)容。實(shí)際上是屬于通信網(wǎng)絡(luò)中的物理層(最底層)的概念,與通信協(xié)議沒有直接關(guān)系。而通信協(xié)議,是屬于通信網(wǎng)絡(luò)中的數(shù)據(jù)鏈路層(上一層)的概念。
COM口是PC(個(gè)人計(jì)算機(jī))上,異步串行通信口的簡寫。由于歷史原因,IBM的PC外部接口配置為RS232,成為實(shí)際上的PC界默認(rèn)標(biāo)準(zhǔn)。所以,現(xiàn)在PC機(jī)的COM口均為RS232。

UART(Universal Asynchronous Receiver/Transmitter)即通用異步收發(fā)傳輸器,工作于數(shù)據(jù)鏈路層。包含了RS-232、RS-422、RS-485串口通信和紅外(IrDA) 等等。UART協(xié)議作為一種低速通信協(xié)議,廣泛應(yīng)用于通信領(lǐng)域等各種場合。UART基本可分為并口通信及串口通信兩種。


異步串口通信協(xié)議作為UART的一種,工作原理是將傳輸數(shù)據(jù)的每個(gè)字符一位接一位地傳輸。圖一給出了其工作模式:

圖 一

其中各位的意義如下:
起始位:先發(fā)出一個(gè)邏輯”0”的信號(hào),表示傳輸字符的開始。
資料位:緊接著起始位之后。資料位的個(gè)數(shù)可以是4、5、6、7、8等,構(gòu)成一個(gè)字符。通常采用ASCII碼。從最低位開始傳送,靠時(shí)鐘定位。
奇偶校驗(yàn)位:資料位加上這一位后,使得“1”的位數(shù)應(yīng)為偶數(shù)(偶校驗(yàn))或奇數(shù)(奇校驗(yàn)),以此來校驗(yàn)資料傳送的正確性。
停止位:它是一個(gè)字符數(shù)據(jù)的結(jié)束標(biāo)志??梢允?位、1.5位、2位的高電平。
空閑位:處于邏輯“1”狀態(tài),表示當(dāng)前線路上沒有資料傳送。
波特率:是衡量資料傳送速率的指針。表示每秒鐘傳送的二進(jìn)制位數(shù)。例如資料傳送速率為120字符/秒,而每一個(gè)字符為10位,則其傳送的波特率為10×120=1200字符/秒=1200波特。

在嵌入式系統(tǒng)或者計(jì)算機(jī)中,并非直接對串口直接進(jìn)行,而是通過SCI (串行通訊接口)模塊對其進(jìn)行控制。(注:“SCI”首先由Motorola微串口微控制器而得名,SCI另一種說法是“UART控制器”)常用的許多芯片中都包含了SCI ,例如ARM的S3C2410X芯片內(nèi)嵌了3個(gè)串行接口控制器,而Nios等軟核芯片則可以用選用UART(RS232) 的IP對UART進(jìn)行控制。PC機(jī)則常用 16650 UART,16750 UART等控制串口。

如果實(shí)現(xiàn)一個(gè)軟件UART時(shí),在UART檢查端口管腳的串行活動(dòng)時(shí),需要占用大量時(shí)間,讓應(yīng)用程序停滯,這會(huì)使得軟件UART沒有意義。好在情況并非如此,我們來看看標(biāo)準(zhǔn)的10位異步串行協(xié)議(包含一個(gè)起始位,一個(gè)停止位和8個(gè)數(shù)據(jù)位)收發(fā)一個(gè)字符時(shí)的情況(如圖1所示)。


圖1:標(biāo)準(zhǔn)的10位異步串行協(xié)議收發(fā)字符時(shí)的時(shí)序圖。

在啟動(dòng)一次發(fā)送或接收操作之后,串行UART(不論是軟件還是硬件形式的UART)并不需要連續(xù)監(jiān)控I/O線。在發(fā)送一個(gè)字符時(shí),每個(gè)位周期,UART只需驅(qū)動(dòng)一次發(fā)送信號(hào)線的狀態(tài),從起始位到8個(gè)數(shù)據(jù)位直到結(jié)束位依次設(shè)置每個(gè)位的電平。在接收一個(gè)字符時(shí),UART在第一個(gè)下降沿開始工作,之后只需在每個(gè)位時(shí)隙的中央對接收線上的信號(hào)狀態(tài)進(jìn)行一次采樣。

我們可以用一對狀態(tài)機(jī)來表征軟件UART的行為,一個(gè)狀態(tài)機(jī)用于發(fā)送字符,另一個(gè)用于接收字符。對一個(gè)全雙工的UART而言,這兩個(gè)狀態(tài)機(jī)是并行運(yùn)行的,需要兩個(gè)獨(dú)立的定時(shí)器中斷。這兩個(gè)狀態(tài)機(jī)都有主動(dòng)和被動(dòng)兩種模式。發(fā)送狀態(tài)機(jī)在收到一個(gè)需發(fā)送的字符時(shí)跳出空閑狀態(tài),在結(jié)束位發(fā)送之后回到空閑狀態(tài)。接收狀態(tài)機(jī)在檢測到接收線上的一個(gè)下降沿時(shí)跳出空閑狀態(tài)。在檢測到這個(gè)初始的低電平狀態(tài)之后(該狀態(tài)指示起始位已經(jīng)開始),開始對位時(shí)隙進(jìn)行遞減計(jì)數(shù),同時(shí)按要求采樣信號(hào)線上的每個(gè)信號(hào)位,包括停止位。

為了避免不必要地占用主應(yīng)用過多的時(shí)間,UART狀態(tài)機(jī)應(yīng)該由一些周期性的基于定時(shí)器的中斷來激活。接收線上初始下降沿的檢測需要利用一個(gè)邊沿觸發(fā)的外部中斷單獨(dú)處理。如果一個(gè)狀態(tài)機(jī)的定時(shí)器被設(shè)置為每個(gè)比特周期發(fā)出一個(gè)中斷請求,那么該狀態(tài)機(jī)在每次中斷被觸發(fā)時(shí)能夠執(zhí)行任何需要的操作(而且如果需要,還能進(jìn)入到下一個(gè)狀態(tài))。用于實(shí)現(xiàn)狀態(tài)機(jī)的代碼應(yīng)盡可能優(yōu)化,因?yàn)橹灰浖ART處于活動(dòng)狀態(tài),這些代碼就會(huì)在后臺(tái)連續(xù)運(yùn)行。



關(guān)鍵詞: uart

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉