最近幾天,有不少粉絲問我,局哥,什么時(shí)候可以寫一篇關(guān)于UART協(xié)議的文章啊?網(wǎng)上的太繁雜,想偷個(gè)懶,你直接給介紹總結(jié)一下吧。那么今天就介紹一下UART協(xié)議,后面也會(huì)抽時(shí)間介紹一些其他的常用協(xié)議。
UART簡介
UART全稱universal asynchronous receiver transmitter,翻譯過來就是通用異步收發(fā)器(一般也很少有人這么叫啦)。UART的應(yīng)用場(chǎng)景非常廣泛,比如上位機(jī)與下位機(jī)之間的通信,各種外接模塊,比如GPS和藍(lán)牙模塊等等。UART作為串行通信,利用一條傳輸線將數(shù)據(jù)按bit進(jìn)行順序傳送,特點(diǎn)是通信線路簡單,利用簡單的線纜就可實(shí)現(xiàn)通信,降低成本,適用于遠(yuǎn)距離通信,但傳輸速度慢的應(yīng)用場(chǎng)合。
物理層
在物理層上,UART協(xié)議只有三條信號(hào)線:TX,RX和GND。看到這兒看官您就要問了,為什么沒有時(shí)鐘線?對(duì),UART協(xié)議就是這么任性,不需要時(shí)鐘線,那么它是怎么通信的呢?下面的協(xié)議層章節(jié)會(huì)做詳細(xì)的介紹。
UART使用標(biāo)準(zhǔn)的TTL/CMOS邏輯電平(0~5V,0~3.3V,0~2.5V或0~1.8V)來表示數(shù)據(jù),1表示高電平,0表示低電平。為了提高抗干擾能力、提高傳輸?shù)木嚯x,通常也會(huì)TTL/CMOS邏輯電平轉(zhuǎn)換為RS-232邏輯電平,3~15V表示0,-3~-15V表示1。
舉個(gè)例子,對(duì)于傳輸數(shù)據(jù)0x55,即二進(jìn)制的01010101,RS232和TTL的區(qū)別如下;
協(xié)議層
波特率
協(xié)議層上,首先來介紹一下波特率的概念。波特率可以被理解為一個(gè)設(shè)備在單位時(shí)間內(nèi)發(fā)送(或接收)了多少碼元的數(shù)據(jù),它是對(duì)符號(hào)傳輸速率的一種度量,表示單位時(shí)間內(nèi)傳輸符號(hào)的個(gè)數(shù)(傳符號(hào)率)。說白了,波特率是串口數(shù)據(jù)的傳輸速度,即Bit/s,常見的波特率有:9600,19200,38400,57600,115200。假設(shè)目前UART的配置為,1個(gè)起始位,8個(gè)數(shù)據(jù)位,0個(gè)校驗(yàn)位,1個(gè)停止位,那么9600的波特率,可以計(jì)算出每一位數(shù)據(jù)的時(shí)間寬度為104us,那么傳輸一個(gè)數(shù)據(jù)包(也就是10 bit 數(shù)據(jù))需要的時(shí)間為 1.04 毫秒。
數(shù)據(jù)包格式
介紹完了波特率,再來介紹一下數(shù)據(jù)包的格式。UART傳輸?shù)臄?shù)據(jù)被封裝成數(shù)據(jù)包,每個(gè)數(shù)據(jù)包包含1個(gè)起始位,5~8個(gè)數(shù)據(jù)位(取決于UART的具體設(shè)置),一個(gè)可選的奇偶校驗(yàn)位以及1個(gè)或2個(gè)停止位,具體如下圖所示:
起始位:UART數(shù)據(jù)傳輸線在空閑狀態(tài)時(shí)時(shí)保持高電平。當(dāng)master先發(fā)出一個(gè)邏輯”0”的信號(hào)時(shí),表示傳輸數(shù)據(jù)的開始。
數(shù)據(jù)位:可以選擇的值有5,6,7,8這四個(gè)值,可以傳輸這么多個(gè)值為0或者1的bit位。這個(gè)參數(shù)最好為8,因?yàn)槿绻酥禐槠渌闹禃r(shí)當(dāng)你傳輸?shù)氖茿SCII值時(shí)一般解析肯定會(huì)出問題。理由很簡單,一個(gè)ASCII字符值為8位,如果一幀的數(shù)據(jù)位為7,那么還有一位就是不確定的值,這樣就會(huì)出錯(cuò)。
校驗(yàn)位:在串口通信中一種簡單的檢錯(cuò)方式。有下面四種檢錯(cuò)方式:偶校驗(yàn)、奇校驗(yàn)、高校驗(yàn)和低校驗(yàn)。當(dāng)然沒有校驗(yàn)位也是可以的。對(duì)于偶和奇校驗(yàn)的情況,串口會(huì)設(shè)置校驗(yàn)位(數(shù)據(jù)位后面的一位),用1bit確保傳輸?shù)臄?shù)據(jù)有偶個(gè)或者奇?zhèn)€邏輯高位。
舉個(gè)例子,如果數(shù)據(jù)是011,假如為偶校驗(yàn),則校驗(yàn)位為0,保證邏輯高的位數(shù)是偶數(shù)個(gè)。假如為奇校驗(yàn),校驗(yàn)位為1,保證邏輯高的位數(shù)是奇數(shù)個(gè)。
停止位:發(fā)送端UART將數(shù)據(jù)傳輸線從低電壓驅(qū)動(dòng)到高電壓至少持續(xù)兩位數(shù)據(jù)的時(shí)間寬度來表示整個(gè)數(shù)據(jù)包的傳輸已經(jīng)結(jié)束。由于數(shù)據(jù)是在傳輸線上定時(shí)的,不同設(shè)備之間的時(shí)鐘存在偏差,誤差的積累有可能會(huì)造成數(shù)據(jù)位的傳輸錯(cuò)誤。因此停止位不僅僅是表示傳輸?shù)慕Y(jié)束,并且提供校正時(shí)鐘同步的機(jī)會(huì)。適用于停止位的位數(shù)越多,不同時(shí)鐘同步的容錯(cuò)性越好,但是數(shù)據(jù)傳輸率同時(shí)也越慢。
優(yōu)缺點(diǎn)
沒有任何通信協(xié)議是完美的,以下是UART的一些利弊,可幫助您確定它們是否適合您的項(xiàng)目需求:
優(yōu)點(diǎn):
通信只需要兩條數(shù)據(jù)線;
無需時(shí)鐘信號(hào);
有奇偶校驗(yàn)位,方便通信的差錯(cuò)檢查;
只需要接收端和發(fā)送端設(shè)置好數(shù)據(jù)包結(jié)構(gòu),即可穩(wěn)定通信;
缺點(diǎn):
數(shù)據(jù)幀最大支持9位數(shù)據(jù);
不支持多主機(jī)或多從機(jī)的主從系統(tǒng);
原文標(biāo)題:干貨 | UART協(xié)議詳解
文章出處:【微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
審核編輯:湯梓紅
-
物理層
+關(guān)注
關(guān)注
1文章
152瀏覽量
34548 -
uart
+關(guān)注
關(guān)注
22文章
1243瀏覽量
101773 -
串行通信
+關(guān)注
關(guān)注
4文章
579瀏覽量
35587 -
UART協(xié)議
+關(guān)注
關(guān)注
0文章
6瀏覽量
6336
原文標(biāo)題:干貨 | UART協(xié)議詳解
文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論