UART傳輸協(xié)議與時(shí)序
通用異步收發(fā)傳輸器(UniversalAsynchronousReceiver/Transmitter),通常稱作UART,是一種異步收發(fā)傳輸器。將數(shù)據(jù)由串行通信與并行通信間作傳輸轉(zhuǎn)換,作為并行輸入成為串行輸出的芯片UART是一種通用串行數(shù)據(jù)總線,用于異步通信。該總線雙向通信,可以實(shí)現(xiàn)全雙工傳輸和接收。
1、UART通信協(xié)議
UART作為異步串口通信協(xié)議的一種,工作原理是將傳輸數(shù)據(jù)的每個(gè)字符一位接一位地傳輸。
其中每一位(Bit)的意義如下:
起始位:先發(fā)出一個(gè)邏輯”0”的信號,表示傳輸字符的開始。
數(shù)據(jù)位:緊接著起始位之后。數(shù)據(jù)位的個(gè)數(shù)可以是4、5、6、7、8等,構(gòu)成一個(gè)字符。通常采用ASCII碼。從最低位開始傳送,靠時(shí)鐘定位。
奇偶校驗(yàn)位:數(shù)據(jù)位加上這一位后,使得“1”的位數(shù)應(yīng)為偶數(shù)(偶校驗(yàn))或奇數(shù)(奇校驗(yàn)),以此來校驗(yàn)數(shù)據(jù)傳送的正確性。
停止位:它是一個(gè)字符數(shù)據(jù)的結(jié)束標(biāo)志??梢允?位、1.5位、2位的高電平。由于數(shù)據(jù)是在傳輸線上定時(shí)的,并且每一個(gè)設(shè)備有其自己的時(shí)鐘,很可能在通信中兩臺設(shè)備間出現(xiàn)了小小的不同步。因此停止位不僅僅是表示傳輸?shù)慕Y(jié)束,并且提供計(jì)算機(jī)校正時(shí)鐘同步的機(jī)會。適用于停止位的位數(shù)越多,不同時(shí)鐘同步的容忍程度越大,但是數(shù)據(jù)傳輸率同時(shí)也越慢。
空閑位:處于邏輯“1”狀態(tài),表示當(dāng)前線路上沒有數(shù)據(jù)傳送。UART協(xié)議傳輸時(shí)序如圖1所示:
圖1.UART協(xié)議傳輸時(shí)序
2、UART工作原理
發(fā)送數(shù)據(jù)過程:空閑狀態(tài),線路處于高電位;當(dāng)收到發(fā)送數(shù)據(jù)指令后,拉低線路一個(gè)數(shù)據(jù)位的時(shí)間T,接著數(shù)據(jù)按低位到高位依次發(fā)送,數(shù)據(jù)發(fā)送完畢后,接著發(fā)送奇偶校驗(yàn)位和停止位(停止位為高電位),一幀數(shù)據(jù)發(fā)送結(jié)束。
接收數(shù)據(jù)過程:空閑狀態(tài),線路處于高電位;當(dāng)檢測到線路的下降沿(線路電位由高電位變?yōu)榈碗娢唬r(shí)說明線路有數(shù)據(jù)傳輸,按照約定的波特率從低位到高位接收數(shù)據(jù),數(shù)據(jù)接收完畢后,接著接收并比較奇偶校驗(yàn)位是否正確,如果正確則通知后續(xù)設(shè)備準(zhǔn)備接收數(shù)據(jù)或存入緩存。
由于UART是異步傳輸,沒有傳輸同步時(shí)鐘。為了能保證數(shù)據(jù)傳輸?shù)恼_性,UART采用16倍數(shù)據(jù)波特率的時(shí)鐘進(jìn)行采樣。每個(gè)數(shù)據(jù)有16個(gè)時(shí)鐘采樣,取中間的采樣值,以保證采樣不會滑碼或誤碼。一般UART一幀的數(shù)據(jù)位數(shù)為8,這樣即使每個(gè)數(shù)據(jù)有一個(gè)時(shí)鐘的誤差,接收端也能正確地采樣到數(shù)據(jù)。
UART的接收數(shù)據(jù)時(shí)序?yàn)椋寒?dāng)檢測到數(shù)據(jù)的下降沿時(shí),表明線路上有數(shù)據(jù)進(jìn)行傳輸,這時(shí)計(jì)數(shù)器CNT開始計(jì)數(shù),當(dāng)計(jì)數(shù)器為24=16+8時(shí),采樣的值為第0位數(shù)據(jù);當(dāng)計(jì)數(shù)器的值為40時(shí),采樣的值為第1位數(shù)據(jù),依此類推,進(jìn)行后面6個(gè)數(shù)據(jù)的采樣。如果需要進(jìn)行奇偶校驗(yàn),則當(dāng)計(jì)數(shù)器的值為152時(shí),采樣的值即為奇偶位;當(dāng)計(jì)數(shù)器的值為168時(shí),采樣的值為“1”表示停止位,一幀數(shù)據(jù)接收完成。
一個(gè)標(biāo)準(zhǔn)的10位異步串行通信協(xié)議(包含1個(gè)起始位、1個(gè)停止位和8個(gè)數(shù)據(jù)位)收發(fā)時(shí)序,如圖2所示
圖2.10位標(biāo)準(zhǔn)串行通信協(xié)議收發(fā)時(shí)序圖
3、UART波特率發(fā)生器
波特率是衡量數(shù)據(jù)傳輸速率的指標(biāo),表示每秒傳送數(shù)據(jù)的字符數(shù),單位為Baud。UART的接收和發(fā)送是按照相同的波特率進(jìn)行收發(fā)的。波特率發(fā)生器產(chǎn)生的時(shí)鐘頻率不是波特率時(shí)鐘頻率,而是波特率時(shí)鐘頻率的16倍,目的是為在接收時(shí)進(jìn)行精確地采樣,以提取出異步的串行數(shù)據(jù)。根據(jù)給定的晶振時(shí)鐘和要求的波特率,可以算出波特率分頻計(jì)數(shù)值。