S3C2410的UART控制(RS232)
一、UART簡(jiǎn)介
UART(Universal Asynchronous Receiver/Transmitter)即通用異步收發(fā)傳輸器,工作于數(shù)據(jù)鏈路層。包含了RS-232、RS-422、RS-485串口通信和紅外(IrDA)等等。UART協(xié)議作為一種低速通信協(xié)議,廣泛應(yīng)用于通信領(lǐng)域等各種場(chǎ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)),以此來(lái)校驗(yàn)資料傳送的正確性。
停止位:它是一個(gè)字符數(shù)據(jù)的結(jié)束標(biāo)志。可以是1位、1.5位、2位的高電平。由于數(shù)據(jù)是在傳輸線上定時(shí)的,并且每一個(gè)設(shè)備有其自己的時(shí)鐘,很可能在通信中兩臺(tái)設(shè)備間出現(xiàn)了小小的不同步。因此停止位不僅僅是表示傳輸?shù)慕Y(jié)束,并且提供計(jì)算機(jī)校正時(shí)鐘同步的機(jī)會(huì)。適用于停止位的位數(shù)越多,不同時(shí)鐘同步的容忍程度越大,但是數(shù)據(jù)傳輸率同時(shí)也越慢。
空閑位:處于邏輯“1”狀態(tài),表示當(dāng)前線路上沒有資料傳送。
波特率:是衡量資料傳送速率的指針。表示每秒鐘傳送的二進(jìn)制位數(shù)。例如資料傳送速率為120字符/秒,而每一個(gè)字符為10位,則其傳送的波特率為10×120=1200字符/秒=1200波特
2:RS-232簡(jiǎn)介
RS-232串口通信是UART采用頻繁的一種,一般的PC機(jī)上都帶有兩個(gè)基于RS-232的串口。
RS-232(ANSI/EIA-232標(biāo)準(zhǔn))是IBM-PC及其兼容機(jī)上的串行連接標(biāo)準(zhǔn)。RS-232只限于PC串口和設(shè)備間點(diǎn)對(duì)點(diǎn)的通信。它有兩種模式DB-9(9針接口) 和DB-25(25針接口),支持全雙工通信。
RS-232完成通信一般使用3根線:(1)地線,(2)發(fā)送,(3)接收。由于串口通信是異步的,端口能夠在一根線上發(fā)送數(shù)據(jù)同時(shí)在另一根線上接收數(shù)據(jù)。其他線用于握手,但是不是必須的。串口通信最重要的參數(shù)是波特率、數(shù)據(jù)位、停止位和奇偶校驗(yàn)。其模型圖(DB-9)如下:
RS-232針腳的功能:
數(shù)據(jù): 地線:
TXD(pin 3):串口數(shù)據(jù)輸出(Transmitter)GND(pin 5):地線
RXD(pin 2):串口數(shù)據(jù)輸入(Receiver)
握手:
RTS(pin 7):發(fā)送數(shù)據(jù)請(qǐng)求
CTS(pin 8):清除發(fā)送
DSR(pin 6):數(shù)據(jù)發(fā)送就緒
DCD(pin 1):數(shù)據(jù)載波檢測(cè)
DTR(pin 4):數(shù)據(jù)終端就緒
其他
RI(pin 9):鈴聲指示
3:握手協(xié)議
RS-232通行方式允許簡(jiǎn)單連接三線:Tx、Rx和地線。但是對(duì)于數(shù)據(jù)傳輸,雙方必須對(duì)數(shù)據(jù)定時(shí)采用使用相同的波特率。盡管這種方法對(duì)于大多數(shù)應(yīng)用已經(jīng)足夠,但是對(duì)于接收方過載的情況這種使用受到限制。這時(shí)需要串口的握手功能。RS-232有三種最常用握手形式:軟件握手、硬件握手和Xmodem。
對(duì)于軟件握手和硬件握手就不做討論,主要了解bootloader中用到的Xmodem傳輸協(xié)議
Xmodem
XMODEM協(xié)議是一種使用撥號(hào)調(diào)制解調(diào)器的個(gè)人計(jì)算機(jī)通信中廣泛使用的異步文件運(yùn)輸協(xié)議。這種協(xié)議以128字節(jié)塊的形式傳輸數(shù)據(jù),并且每個(gè)塊都使用一個(gè)校驗(yàn)和過程來(lái)進(jìn)行錯(cuò)誤檢測(cè)。如果接收方關(guān)于一個(gè)塊的校驗(yàn)和與它在發(fā)送方的校驗(yàn)和相同時(shí),接收方就向發(fā)送方發(fā)送一個(gè)認(rèn)可字節(jié)。然而,這種對(duì)每個(gè)塊都進(jìn)行認(rèn)可的策略將導(dǎo)致低性能,特別是具有很長(zhǎng)傳播延遲的衛(wèi)星連接的情況時(shí),問題更加嚴(yán)重。
4:S3C2410中UART的數(shù)據(jù)資料
S3C2410中提供三個(gè)獨(dú)立的異步收發(fā)串口,能運(yùn)轉(zhuǎn)在中斷或DMA模式下。系統(tǒng)支持最高波特率230.4K bps,每個(gè)UART 信道都包含兩個(gè)16位的FIFOs(first in first out)用于收發(fā)。每個(gè)串口都包含可編程的波特率,紅外收發(fā),1~2個(gè)停止位,5~8個(gè)數(shù)據(jù)位,和奇偶校正位,UART由波特率發(fā)生器,收發(fā)單位和控制單元構(gòu)成。
自動(dòng)控制流模式(AFC)
S3C2410的UART0和UART1都可以通過各自的nRTS和nCTS信號(hào)來(lái)實(shí)現(xiàn)自動(dòng)流控。
禁止自動(dòng)流控制可以通過寫UMCONn register and control the signal of nRTS by software
在自動(dòng)流控(AFC)模式下nRTS取決于接收端的狀態(tài),而nCTS控制了發(fā)送端的操作。具體地說(shuō):只有當(dāng)nCTS有效時(shí)(表明接收方的FIFO已經(jīng)準(zhǔn)備就緒來(lái)接收資料了),UART才會(huì)將FIFO中的資料發(fā)送出去。在UART接收資料之前,只要當(dāng)接收FIFO有至少2-byte空余的時(shí)候,nRTS就會(huì)被置為有效。
NOTE:UART 2doesnot supportAFC function, because the S3C2410X has no nRTS2 and nCTS2
中斷/DMA請(qǐng)求產(chǎn)生
S3C2410的每個(gè)UART都有7種狀態(tài),分別是:溢出覆蓋(Overrun)錯(cuò)誤、奇偶校驗(yàn)錯(cuò)誤、幀出錯(cuò)、斷線錯(cuò)誤、接收就緒、發(fā)送緩沖空閑、發(fā)送移位器空閑。它們?cè)赨ART狀態(tài)寄存器 UTRSTATn / UERSTATn 中有相應(yīng)的標(biāo)志位。
波特率發(fā)生器
每個(gè)UART控制器都有各自的波特率發(fā)生器來(lái)產(chǎn)生發(fā)送和接收資料所用的序列時(shí)鐘,波特率發(fā)生器的時(shí)鐘源可以CPU內(nèi)部的系統(tǒng)時(shí)鐘,也可以從CPU的 UCLK 管腳由外部取得時(shí)鐘信號(hào),并且可以通過 UCONn 選擇各自的時(shí)鐘源。
波特率產(chǎn)生的具體計(jì)算方法如下:
當(dāng)選擇CPU內(nèi)部時(shí)鐘時(shí):
UBRDIVn=(int)(PCLK/(bps*16))-1,bps為所需要的波特率值,PCLK為CPU內(nèi)部外設(shè)總線(APB)的工作時(shí)鐘。
當(dāng)需要得到更精確的波特率時(shí),可以選擇由 UCLK 引入的外部時(shí)鐘來(lái)生成。
UBRDIVn=(int)(UCLK/(bps*16))-1
LoopBack操作模式
S3C2410CPU的UART提供了一種測(cè)試模式,也就是這里所說(shuō)的LoopBack模式。在設(shè)計(jì)系統(tǒng)的具體應(yīng)用時(shí),為了判斷通訊故障是由于外部的數(shù)據(jù)鏈路上的問題,還是CPU內(nèi)驅(qū)動(dòng)程序或CPU本身的問題,這就需要采用LoopBack模式來(lái)進(jìn)行測(cè)試。在LoopBack模式中,資料發(fā)送端TXD在UART內(nèi)部就從邏輯上與接收端RXD連在一起,并可以來(lái)驗(yàn)證資料的收發(fā)是否正常
UART控制寄存器
1:ULCONn (UARTLine Control Register)
保留位[7]
紅外模式選擇位【6】0 = Normal mode operation(基本模式)
1 = Infra-Red Tx/Rx mode(紅外模式)
奇偶校正模式選擇[5:3]0xx = No parity (不設(shè)置)
100 = Odd parity (奇校正)
101 = Even parity (偶校正)
110 = Parity forced/checked as 1
111 = Parity forced/checked as 0
停止位設(shè)置[2]0 = One stop bit per frame(每禎一個(gè)停止位)
1 = Two stop bit per frame (每禎兩個(gè)停止位)
數(shù)據(jù)位長(zhǎng)度[1:0] 00 = 5-bits 01 = 6-bits