嵌入式硬件通信接口協(xié)議-UART(一)協(xié)議基礎(chǔ)
一、 簡(jiǎn)介
本文引用地址:http://m.butianyuan.cn/article/201812/395785.htmUART,全稱(chēng)UniversalAsynchrONous Receiver/Transmitter,譯為通用異步收發(fā)器。
串口的出現(xiàn)是在1980年前后,數(shù)據(jù)傳輸率是115kbps~230kbps。串口出現(xiàn)的初期是為了實(shí)現(xiàn)連接計(jì)算機(jī)外設(shè)的目的,初期串口一般用來(lái)連接鼠標(biāo)和外置Modem以及老式攝像頭和寫(xiě)字板等設(shè)備。串口也可以應(yīng)用于兩臺(tái)計(jì)算機(jī)(或設(shè)備)之間的互聯(lián)及數(shù)據(jù)傳輸。由于串口(COM)不支持熱插拔及傳輸速率較低,目前部分新主板和大部分便攜電腦已開(kāi)始取消該接口。目前串口多用于工控和測(cè)量設(shè)備以及部分通信設(shè)備中。
在幾乎所有的MCU中都會(huì)有UART接口。
from 百度百科串行接口
每當(dāng)口中提到“串口”,很容易讓人想到的名詞有UART、USART、COM口、TTL/CMOS、RS-232、RS-422、RS-485。其中:
UART,“串口”時(shí)序協(xié)議的名稱(chēng),定義了各個(gè)信號(hào)時(shí)序協(xié)議;
USART,相比UART增加了同步信號(hào),可實(shí)現(xiàn)ISO-7816智能卡接口;
COM口,在PC等操作系統(tǒng)上,區(qū)別于USB、SATA接口的串行接口,定義了在操作系統(tǒng)中的規(guī)范;
TTL/CMOS,嵌入式硬件系統(tǒng)的信號(hào)電平;
RS-232,在UART基礎(chǔ)上再定義了信號(hào)的電氣特性
RS-422,在RS-232基礎(chǔ)上定義了差分信號(hào)傳輸?shù)碾姎馓匦?/p>
RS-485,在RS-422基礎(chǔ)上定義了半雙工模式
二、 信號(hào)線(xiàn)
信號(hào)線(xiàn)的命名,都是基于當(dāng)前終端設(shè)備而定義的。
UART常用的信號(hào)線(xiàn)有:
RxD,當(dāng)前終端設(shè)備的接收管腳
TxD,當(dāng)前終端設(shè)備的發(fā)送管腳
GND,當(dāng)前終端設(shè)備的地
如上所述,信號(hào)線(xiàn)的命名基于當(dāng)前終端設(shè)備而做的標(biāo)記,在手工接線(xiàn)時(shí),可以快速判斷連接的線(xiàn)序。
一般的,設(shè)計(jì)者在設(shè)計(jì)PCB時(shí),對(duì)外連接做的一些預(yù)留接口,標(biāo)記接口管腳時(shí),都會(huì)添加絲印標(biāo)記,這時(shí)標(biāo)記的都是當(dāng)前終端設(shè)備的管腳信息。
例如標(biāo)記著RxD的引腳,應(yīng)該與外部的UART接口TxD連接。
三、 信號(hào)時(shí)序
信號(hào)線(xiàn)空閑時(shí),處于高電平,當(dāng)有數(shù)據(jù)發(fā)送時(shí),信號(hào)線(xiàn)以1個(gè)bit時(shí)長(zhǎng)的低電平標(biāo)志開(kāi)始通信,通信過(guò)程中,單個(gè)字節(jié)在信號(hào)線(xiàn)上的幀結(jié)構(gòu)如下圖:
信號(hào)管腳傳輸每個(gè)數(shù)據(jù)時(shí),在管腳上呈現(xiàn)的是電氣信號(hào)為高低電平的變化,對(duì)應(yīng)數(shù)據(jù)每個(gè)bit的邏輯“1”和“0”。
組成UART幀結(jié)構(gòu)時(shí),附帶的起始位、停止位,實(shí)現(xiàn)了對(duì)傳輸數(shù)據(jù)流每個(gè)字節(jié)的界定,該過(guò)程實(shí)現(xiàn)了起始式協(xié)議。同時(shí)在停止位前可選擇地插入校驗(yàn)位,實(shí)現(xiàn)了對(duì)數(shù)據(jù)幀正確性的校驗(yàn)。
如下圖是常見(jiàn)的UART通信過(guò)程中使用的配置參數(shù)8-N-1對(duì)應(yīng)的時(shí)序:
配置參數(shù)(8-N-1):8bit數(shù)據(jù)、無(wú)校驗(yàn)位、1bit停止位
四、 接口配置項(xiàng)
在啟用UART接口時(shí),需要通信雙方對(duì)接口進(jìn)行相同參數(shù)的配置,才能夠正確通信。而UART可配置的參數(shù)有:
(一)波特率Baudrate:
由于UART屬于異步通信,在通信過(guò)程中沒(méi)有同步時(shí)鐘CLK來(lái)提供給接收方,接收方也就無(wú)法同步地確定每個(gè)bit的寬度,也就無(wú)法對(duì)每個(gè)bit進(jìn)行正確的采樣。因此接收方必須依靠設(shè)置與發(fā)送方相同的波特率參數(shù),這樣接收方對(duì)信號(hào)管腳進(jìn)行采樣和解碼時(shí),才能正確判斷每個(gè)bit的值是“1”還是“0”,這也就是異步通信的特點(diǎn)。
在各類(lèi)MCU的UART配置中,常用的波特率值有:
4800Bd、9600Bd、19200Bd、115200Bd,單位Bd。常見(jiàn)有如下代碼截圖:
要想理解波特率,來(lái)的維基百科中查詢(xún)一番
在維基百科的介紹中,可看到,波特率的值,直接以bit/s的單位取倒數(shù)后得到單位s/bit,同時(shí)在示波器端對(duì)UART發(fā)出的波形進(jìn)行抓取,可見(jiàn)每bit的寬度在誤差允許范圍內(nèi)基本就是波特率的倒數(shù)值。
在百度百科的詞條《波特》介紹中,波特率是指:
調(diào)制速率,指的是有效數(shù)據(jù)信號(hào)調(diào)制載波的速率,即單位時(shí)間內(nèi)載波調(diào)制狀態(tài)變化的次數(shù)。它是對(duì)符號(hào)傳輸速率的一種度量,1波特即指每秒傳輸1個(gè)符號(hào),而通過(guò)不同的調(diào)制方式,可以在一個(gè)碼元符號(hào)上負(fù)載多個(gè)bit位信息。 單位“波特”本身就已經(jīng)是代表每秒的調(diào)制數(shù),以“波特每秒”(Baud per second)為單位是一種常見(jiàn)的錯(cuò)誤。
它代表的是信號(hào)的變化,而不是傳輸數(shù)據(jù)的多少。它表示每秒鐘內(nèi)通信線(xiàn)路狀態(tài)改變的次數(shù)。如果數(shù)據(jù)不壓縮,波特等于每秒鐘傳輸?shù)臄?shù)據(jù)位數(shù),如果數(shù)據(jù)進(jìn)行了壓縮。那么每秒鐘傳輸?shù)臄?shù)據(jù)位數(shù)通常大于調(diào)制速率,使得交換使用波特和比特/秒有時(shí)會(huì)產(chǎn)生錯(cuò)誤。
但是在現(xiàn)代的實(shí)際使用中,多數(shù)情況下,配置了MCU的波特率后,對(duì)輸出信號(hào)進(jìn)行觀測(cè)發(fā)現(xiàn),此時(shí)波特率等于比特率。也正是因?yàn)榇藭r(shí)傳輸?shù)姆?hào)即8bit一個(gè)Byte的數(shù)據(jù)量,從而波特率等于比特率。
評(píng)論