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