<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基礎知識之UART異步串行通信

基礎知識之UART異步串行通信

作者: 時(shí)間:2024-04-09 來(lái)源:電子森林 收藏

一個(gè)通用的異步接收/發(fā)射器,簡(jiǎn)稱(chēng)為 /?ju?ɑ?rt/, 是一種計算機硬件設備,它在計算機中的字符(通常是字節)之間轉換數據,以及在起始位和停止位之間封裝這些字符的格式, 其中數據格式和傳輸速度是可配置的。通常與通信標準結合使用,例如TIA(以前稱(chēng)為EIA)RS-232,RS-422或RS-485。 通用名稱(chēng)表示數據格式和傳輸速度是可配置的。 電信號電平和方法(例如差分信號等)由外部的驅動(dòng)電路處理。

本文引用地址:http://dyxdggzs.com/article/202404/457292.htm

UART通常是用于通過(guò)計算機或外圍設備串行端口進(jìn)行串行通信的單獨(或部分)集成電路(IC)。 UART現在通常包含在微控制器中。 雙UART或DUART將兩個(gè)UART組合成一個(gè)芯片。 八進(jìn)制UART或OCTART將八個(gè)UART組合成一個(gè)封裝,例如Exar XR16L788或NXP SCC2698。 相關(guān)設備,通用同步/異步接收器/發(fā)送器(USART)也支持同步操作。

UART采用字節數據并以順序方式發(fā)送各個(gè)位。在目的地,第二個(gè)UART將這些位重新組合成完整的字節。每個(gè)UART都包含一個(gè)移位寄存器,它是串行和并行形式之間轉換的基本方法。通過(guò)單線(xiàn)或其他介質(zhì)的數字信息(比特)的串行傳輸比通過(guò)多條線(xiàn)的并行傳輸更便宜。

UART通常不直接生成或接收不同設備之間使用的外部信號。獨立的接口設備用于將UART的邏輯電平信號轉換為外部信號電平和從外部信號電平轉換。外部信號可以有許多不同的形式。電壓信號標準的示例是來(lái)自EIA的RS-232,RS-422和RS-485。歷史上,電流電路中使用電流(電流環(huán)路)。一些信令方案不使用電線(xiàn)。其示例是其串行端口配置文件(SPP)中的光纖,IrDA(紅外線(xiàn))和(無(wú)線(xiàn))藍牙。一些信令方案使用載波信號的調制(有或沒(méi)有線(xiàn)路)。例如,使用電話(huà)線(xiàn)調制解調器調制音頻信號,使用數據無(wú)線(xiàn)電調制RF調制,以及使用DC-LIN進(jìn)行電力線(xiàn)通信。

通信可以是單工的(僅在一個(gè)方向上,沒(méi)有規定接收設備將信息發(fā)送回發(fā)送設備),全雙工(兩個(gè)設備同時(shí)發(fā)送和接收)或半雙工(設備輪流發(fā)送和接收) )。

UART(Universal Asynchronous Receiver/Transmitter,翻譯過(guò)來(lái)叫通用異步收發(fā)) 其實(shí)不是像SPI和I2C這樣的通信協(xié)議,而是MCU(微控制器)中的物理電路或獨立的IC,它的主要用途是發(fā)送和接收串行數據。

在UART通信中,兩個(gè)UART可以直接相互通信。 發(fā)送UART將來(lái)自CPU等控制設備的并行數據轉換為串行格式,并將其串行發(fā)送到接收端的UART,接收UART將串行數據轉換回接收設備的并行數據。 在兩個(gè)UART之間傳輸數據只需要兩根線(xiàn), 數據流從發(fā)送UART的Tx引腳到接收UART的Rx引腳:

超簡(jiǎn)化的UART接口,左側為并行,右側為串行

通用異步接收器/發(fā)送器(UART)是負責實(shí)現串行通信的電路塊。 本質(zhì)上,UART充當并行和串行接口之間的中介。 UART的一端是八條左右數據線(xiàn)(加上一些控制引腳),另一條是兩條串行線(xiàn) - RX和TX。

兩個(gè)設備可以發(fā)送和接收數據的串行接口是全雙工或半雙工。 全雙工意味著(zhù)兩個(gè)設備可以同時(shí)發(fā)送和接收。 半雙工通信意味著(zhù)串行設備必須輪流發(fā)送和接收。

UART以異步方式發(fā)送數據,也就是說(shuō)沒(méi)有時(shí)鐘信號將發(fā)送UART的位輸出與接收UART的位采樣進(jìn)行同步。 發(fā)送UART將“起始”和“停止”位添加到正在傳輸的數據包中, 這些位定義了數據包的開(kāi)始和結束,接收UART基于這些位的信息知道何時(shí)開(kāi)始讀取輸入的串行數據。

當接收UART檢測到起始位時(shí),它以特定的頻率(也就是“波特率”)讀取輸入的串行數據。波特率是數據傳輸速度的度量,單位-每秒位數(bps)。 兩個(gè)UART必須以相同的波特率運行。發(fā)送和接收UART之間的波特率相差不能超過(guò)10%,偏差太遠就無(wú)法對數據進(jìn)行正確的解讀。

當然兩個(gè)UART還必須配置為發(fā)送和接收相同的數據包結構。

異步通信以一個(gè)字符為傳輸單位,通信中兩個(gè)字符間的時(shí)間間隔多少是不固定的,然而在同一個(gè)字符中的兩個(gè)相鄰位間的時(shí)間間隔是固定的。兩個(gè)相鄰位間的時(shí)間間隔與UART通信的波特率有關(guān),波特率用來(lái)表征UART通信中數據傳輸的速率,即每秒鐘傳送的二進(jìn)制位數。例如數據傳送速率為120字符/秒,而每一個(gè)字符為10位(1個(gè)起始位,7個(gè)數據位,1個(gè)校驗位,1個(gè)結束位),則其傳送的波特率為10×120=1200字符/秒=1200波特。

我們在調試種最比較常見(jiàn)的波特率是9600bps,其它的“標準”波特還有1200、2400、4800、19200、38400、57600和115200。

以9600bps傳輸為例,將每個(gè)位高或低保持的時(shí)間為1 /(9600 bps)或每位104μs,對于發(fā)送的每個(gè)數據字節,實(shí)際上發(fā)送了10位:起始位,8個(gè)數據位和一個(gè)停止位。 因此,在9600bps時(shí),我們實(shí)際上每秒發(fā)送9600位或每秒960(9600/10)字節。

波特率越高,發(fā)送/接收的數據越快,但數據傳輸的速度有限。您通常不會(huì )看到超過(guò)115200的速度 - 這對于大多數微控制器來(lái)說(shuō)都很快。太高了,你會(huì )開(kāi)始看到接收端的錯誤,因為時(shí)鐘和采樣周期無(wú)法跟上。

數據幀構成

發(fā)送的每個(gè)數據塊(通常是一個(gè)字節)實(shí)際上是以比特或比特幀發(fā)送的。通過(guò)將同步和奇偶校驗位附加到數據來(lái)創(chuàng )建幀。

  • 起始位:先發(fā)出一個(gè)邏輯”0”信號,表示傳輸字符的開(kāi)始。

  • 數據位:可以是5~8位邏輯”0”或”1”。如ASCII碼(7位),擴展BCD碼(8位)。小端傳輸

  • 校驗位:數據位加上這一位后,使得“1”的位數應為偶數(偶校驗)或奇數(奇校驗)

  • 停止位:它是一個(gè)字符數據的結束標志??梢允?位、1.5位、2位的高電平。

  • 空閑位:處于邏輯“1”狀態(tài),表示當前線(xiàn)路上沒(méi)有資料傳送。

下面我們詳細介紹一下每一部分。

數據塊

每個(gè)串行數據包的真正有營(yíng)養的是它攜帶的數據,我們且稱(chēng)之為“數據塊”,它沒(méi)有具體的大小限制。 每個(gè)數據包中的數據量可以設置為5到9位。 標準數據的大小一般是最基本的8位字節,但其它大小也有其用途,有時(shí)候7位數據能比8位更高效,比如只是用來(lái)傳輸7位ASCII字符。

在統一了字符長(cháng)度后,兩個(gè)串行設備也必須就其數據的字節順序達成一致。 數據是最高位(msb)還是最低位先發(fā)送? 缺省設定為首先傳輸最低有效位(lsb)。

同步位

同步位是每個(gè)數據塊傳輸的兩個(gè)或三個(gè)特殊位。 它們是起始位和停止位,顧名思義,這些位標記了數據包的開(kāi)頭和結尾。 始終只有一個(gè)起始位,但停止位的數量可配置為一個(gè)或兩個(gè)(通常情況下保留為一個(gè))。

起始位始終是由從1到0的空閑數據線(xiàn)來(lái)指示,而停止位則將通過(guò)將該信號線(xiàn)保持為1而轉換回空閑狀態(tài)。

  • 起始位:?jiǎn)巫止漊ART發(fā)送的第一位。 它表示數據線(xiàn)正在離開(kāi)其空閑狀態(tài)。 空閑狀態(tài)通常為邏輯高,因此起始位為邏輯低。起始位是開(kāi)銷(xiāo)位, 這意味著(zhù)它有助于接收器和發(fā)射器之間的通信,但不會(huì )傳輸有意義的數據。

  • 停止位: 單字節UART傳輸的最后一位。 其邏輯電平與信號的空閑狀態(tài)相同,即邏輯高, 這是另一個(gè)開(kāi)銷(xiāo)。

奇偶校驗位

奇偶校驗是一種非常簡(jiǎn)單的低級錯誤檢查方式,它分為兩種方式:奇數或偶數。 為了產(chǎn)生奇偶校驗位,數據字節的所有5-9位相加,并且求和的奇偶性決定該位是否置位。 例如,假設奇偶校驗設置為偶數并且正被添加到數字字節(如0b01011101,這串數中有奇數(5)個(gè)1,奇偶校驗位將被設置為1。相反,如果奇偶校驗模式設置為奇數 ,奇偶校驗位則為0。

同步和采樣

下面我們來(lái)看看沒(méi)有時(shí)鐘信號的數據在接收端是如何被正確解讀的。

沒(méi)有時(shí)鐘對數據做判決,這些數據毫無(wú)意義。 下圖顯示了原因:

同一串數據可以有不同的解讀

典型的數據信號只是在邏輯低和邏輯高之間轉換的電壓。 只有當接收器知道何時(shí)采樣信號時(shí),接收器才能正確地將這些邏輯狀態(tài)轉換為數字數據。

這可以使用單獨的時(shí)鐘信號輕松完成 - 例如,發(fā)送器在時(shí)鐘的每個(gè)上升沿更新數據信號,然后接收器在每個(gè)下降沿采樣數據。但UART接口沒(méi)有時(shí)鐘信號來(lái)同步Tx和Rx器件,接收端如何知道何時(shí)采樣發(fā)射端送來(lái)的數據信號呢?

發(fā)送端根據其時(shí)鐘信號生成比特流,然后接收端的目標是使用其內部時(shí)鐘信號在每個(gè)比特周期的中間對輸入的數據流進(jìn)行采樣。雖然在比特周期的中間進(jìn)行采樣不是必要的但卻是最佳的,因為接近比特周期的開(kāi)始或結束的采樣使得系統對接收端和發(fā)射端之間的時(shí)鐘頻率差異的魯棒性較差。

接收端序列從起始位的下降沿開(kāi)始,這是關(guān)鍵同步過(guò)程發(fā)生的時(shí)間。接收端的內部時(shí)鐘完全獨立于發(fā)送端的內部時(shí)鐘 - 換句話(huà)說(shuō),第一個(gè)下降沿可以對應于接收端時(shí)鐘周期中的任何點(diǎn):

為了確保接收端時(shí)鐘的有效邊沿能夠在比特周期的中間附近發(fā)生,發(fā)送到接收端模塊的波特率時(shí)鐘的頻率要比實(shí)際波特率高得多(比8或16或甚至32倍)。

假設一個(gè)比特周期對應于16個(gè)接收端時(shí)鐘周期。 在這種情況下,同步和采樣可以按如下方式進(jìn)行:

  • 接收過(guò)程由起始位的下降沿啟動(dòng)。

  • 接收端等待8個(gè)時(shí)鐘周期,以便建立一個(gè)接近比特周期中間的采樣點(diǎn)。

  • 然后,接收端等待16個(gè)時(shí)鐘周期,使其進(jìn)入第一個(gè)數據位周期的中間。

  • 第一個(gè)數據位被采樣并存儲在接收寄存器中,然后模塊在采樣第二個(gè)數據位之前等待另外16個(gè)時(shí)鐘周期。

  • 重復此過(guò)程直到所有數據位都被采樣和存儲,然后停止位的上升沿使UART接口返回其空閑狀態(tài)。

沒(méi)有任何一種通信方式和協(xié)議是完美的,因此沒(méi)中方式都有其優(yōu)點(diǎn),也有其缺點(diǎn),我們來(lái)看看UART的主要優(yōu)缺點(diǎn)。

UART的優(yōu)點(diǎn):

  • 只需要使用兩根信號線(xiàn)就可以實(shí)現全雙工的數據傳輸(不算電源線(xiàn))

  • 無(wú)需時(shí)鐘信號

  • 有一個(gè)奇偶校驗位提供硬件級別的錯誤檢查

  • 數據包的結構可以通過(guò)兩端之間的協(xié)調來(lái)改變,比較靈活

  • 有豐富的文檔且被廣泛使用的通信方式

  • 相對比較容易配置和運行

UART的缺點(diǎn):

  • 與并行通信以及USART相比,數據傳輸的速度較慢

  • 幀的大小被限定為最多9位

  • 不支持多個(gè)從設備或多個(gè)主設備的功能

  • 收發(fā)兩個(gè)器件UART的波特率差別不能超過(guò)10%

實(shí)際應用中的信號傳輸方式 將兩個(gè)UART的設備進(jìn)行連接有多種方式,取決于具體的應用場(chǎng)景,在這里我們僅看兩種:TTL UART和RS-232。

TTL UART 當微控制器和其它器件進(jìn)行串行通信時(shí),通常以TTL電平進(jìn)行通信。 TTL串行信號存在于微控制器的電源電壓范圍內 - 通常為0V至3.3V或5V。 VCC電平(3.3V,5V等)的信號表示空閑線(xiàn),值1或停止位。 0V(GND)信號表示起始位或值為0的數據位。

RS-232 UART

RS-232(推薦標準232)是連接數據終端設備(DTE)和數據通信設備(DCE)的串行二進(jìn)制數據信號的標準。 它通常用于計算機的老式串口。 TTL電平UART和RS-232的主要區別就是電壓電平。 RS-232中的數字信號為±3至 - ±15V,無(wú)論如何都不會(huì )檢測到接近0V的信號。

RS-232,可以在一些更古老的計算機和外圍設備上找到,就像TTL串口翻轉一樣。 RS-232信號通常介于-13V和13V之間,但規格允許從+/- 3V到+/- 25V。 在這些信號上,低電壓(-5V,-13V等)表示空閑線(xiàn),停止位或值為1的數據位。一個(gè)高的RS-232信號表示起始位或0- 值數據位。 這與TTL系列相反。

邏輯電平

電壓

Logic-1 (High)

Logic-0 (Low)

+3 to +15v

-3 to -15v

RS-232比TTL的UART有更多的引腳,用于PC和調制解調器之間的通信。 我們常用的DB-9的引腳排列及其功能如下所示。

最撲街的RS-232收發(fā)芯片 - MAX232

在兩個(gè)串行信號標準之間,TTL更容易實(shí)現到嵌入式電路中。 然而,低電壓電平更容易受到長(cháng)傳輸線(xiàn)路的損耗的影響。 RS-232或更復雜的標準(如RS-485)更適合遠程串行傳輸。當您將兩個(gè)串行設備連接在一起時(shí),確保其信號電壓匹配是非常重要的。

實(shí)際的項目中可以有多種方式來(lái)連接PC和MCU,最方便的是下面列出的幾種方式中的最后一種。

TTL-UART到RS-232串口(古老的通用方式)

TTL-UART 到 RS-232串口 到 USB

USB-TTL 轉換模塊

全球創(chuàng )客界最火的WiFi模塊ESP8266只需要UART接口和AT指令集進(jìn)行操作

物美價(jià)廉的USB到TTL UART接口轉換芯片CP2102(來(lái)自SiLabs),通過(guò)計算機的USB端口仿真UART通信

RX-To-TX & TX-To-RX

工程師經(jīng)常犯的錯誤就是將RX和TX線(xiàn)錯誤連接,因此在遇到連接不通的時(shí)候一定要先檢查確定一下是否存在這方面的問(wèn)題。

波特率失配

如果數據以9600bps的波特率傳輸,并以19200bps的速率接收。 收到的數據將是一團垃圾! 波特率必須在發(fā)送端和接收端匹配,這是UART串行通信的經(jīng)驗法則,波特率的最大允許偏移趨于介于(1-2%)之間。 因此嘗試在兩端生成完全相同的波特率,以避免錯配錯誤。

UART串行總線(xiàn)可以傳輸很長(cháng)的距離,但傳輸的距離以及最高能夠達到的波特率都取決于傳輸得越遠,波特率也就會(huì )降低,它還取決于UART協(xié)議本身的硬件實(shí)現(物理層)。我們只提到TTL-UART和RS-232標準。

RS-232

RS-232的最大電纜長(cháng)度為50英尺。 但實(shí)際上它取決于波特率、電纜的等效電容和環(huán)境噪聲。 下表是TI多年前通過(guò)實(shí)驗總結的一些經(jīng)驗法則。

TTL-UART

TTL電平的UART僅支持5V的電壓擺幅,因此信號傳輸的距離以及能夠支持到的波特率取決于下面的3個(gè)元素:

  • 電纜的電阻 - 電纜越長(cháng)電阻也就越高

  • 電纜的電容:大家知道電容效應會(huì )阻礙信號電平的變化

  • 噪聲:任何環(huán)境中都會(huì )有噪聲,帶屏蔽的雙絞線(xiàn)電纜對信號的傳輸會(huì )有幫助

一個(gè)UART一般包含了如下的一些組成部分:

  • 一個(gè)時(shí)鐘發(fā)生器,通常是比特率的整數倍,以便能夠在一個(gè)bit周期的中間進(jìn)行采樣

  • 輸入和輸出移位寄存器

  • 發(fā)送/接收控制

  • 讀/寫(xiě)控制邏輯

  • 發(fā)送/接收緩存(可選)

  • 系統數據總線(xiàn)緩存(可選)

  • 先進(jìn)先出(FIFO)緩存(可選)

  • 第三方DMA控制器需要的信號(可選)

  • 掌管DMA控制器的集成化總線(xiàn)(可選)



關(guān)鍵詞: UART 異步串行通信

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>