加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 目錄
    •  
    • 1、 UART 發(fā)展歷史
    •  
    • 2 、預(yù)備知識(shí)
    •  
    • 3、 協(xié)議層
    • 4 傳輸過程
    •  
    • 5 、物理層
    •  
    • 6、 優(yōu)缺點(diǎn)
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

我打賭!你還不會(huì)UART

2020/10/15
259
閱讀需 11 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

自從國慶長假被密密麻麻的紅色炸彈擊中之后,酒也沒少喝,最終喝到斷片進(jìn)了醫(yī)院,身體恢復(fù)后終于更新了一篇基礎(chǔ)的 UART,獻(xiàn)給剛好需要的您;

目錄

1 UART 發(fā)展歷史

2 預(yù)備知識(shí)

3 協(xié)議層

4 傳輸過程

5 物理層

6 優(yōu)缺點(diǎn)

  • 1.1 早期的串行通訊設(shè)備
  • 1.2 早期的芯片級(jí) UART
  • 1.3 現(xiàn)代 UART 的發(fā)展
  • 起始位
  • 數(shù)據(jù)
  • 校驗(yàn)位
  • 停止位
  • 波特率

?

1、 UART 發(fā)展歷史

1.1 早期的串行通訊設(shè)備

早期的電報(bào)機(jī)器使用長度可變的脈沖信號(hào)進(jìn)行數(shù)據(jù)傳輸,比如摩斯電碼;

摩斯電碼

后來電傳打印機(jī)(teleprinters )普遍使用 5、6、7 或 8 個(gè)數(shù)據(jù)位來表示各種字符編碼,最終成為計(jì)算機(jī)外圍設(shè)備。電傳打字機(jī)( teletypewriter 簡稱 tty)成為小型計(jì)算機(jī)十分出色的通用I/O設(shè)備。

Teletypewritter

由于歷史的發(fā)展原因,早期在 Unix 終端是一個(gè)名字為 ASR33 的電傳打字機(jī),而電傳打字機(jī)的英文單詞為Teletype(或Teletypewritter),縮寫為tty。因此,終端設(shè)備也被稱為tty設(shè)備。這就是 TTY 這個(gè)名稱的來源。

?

1.2 早期的芯片級(jí) UART

DEC(Digital Equipment Corporation)公司的 Gordon Bell 為該公司的 PDP 系列計(jì)算機(jī)設(shè)計(jì)了第一個(gè) UART,不過體積龐大,UART 的線路占據(jù)了整個(gè)電路板;

后來 DEC 將串行線路單元的設(shè)計(jì)濃縮為早期的 UART 單芯片,以方便自己使用。

DEC 公司 Logo

DEC 是美國一家計(jì)算機(jī)公司;

西部數(shù)據(jù)(Western Digital)公司在 1971 年左右將其開發(fā)為第一個(gè)廣泛可用的UART單芯片 WD1402A。這是中型集成電路的早期產(chǎn)品。

Western Digital是美國計(jì)算機(jī)硬盤驅(qū)動(dòng)器制造商和數(shù)據(jù)存儲(chǔ)公司。

?

1.3 現(xiàn)代 UART 的發(fā)展

2000 年代開始,大多數(shù) IBM 或者相關(guān)的計(jì)算機(jī)都刪除了其外部 RS232 的 COM 端口,將其替換為帶寬性能更加出色的 USB 端口;

早期帶 RS232 的 PC

對(duì)于仍然需要 RS-232 串行 COM 端口的用戶,現(xiàn)在通常使用外部 USB 轉(zhuǎn) UART 轉(zhuǎn)換器,常見的有 CH340,Silicon Labs 210x 的驅(qū)動(dòng)程序,現(xiàn)在很多處理器和芯片都內(nèi)置了 UART。

?

2 、預(yù)備知識(shí)

通用異步收發(fā)傳輸器(Universal Asynchronous Receiver/Transmitter,通常稱為 UART),在 UART 通信中,兩個(gè) UART 直接通信。

發(fā)送端的UART將來自控制設(shè)備(如 CPU)的并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù),以串行方式將其發(fā)送到接收端的UART,然后由接收端的 UART 將串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù)以用于接收設(shè)備的正常處理。

?

這里只需要兩條線 RX/TX 即可在兩個(gè) UART 之間傳輸數(shù)據(jù)。具體如下圖所示;

?

3、 協(xié)議層

UART 傳輸?shù)臄?shù)據(jù)被封裝成數(shù)據(jù)包。每個(gè)數(shù)據(jù)包包含 1 個(gè)起始位,5~9 個(gè)數(shù)據(jù)位(取決于 UART 的具體設(shè)置),一個(gè)可選的奇偶校驗(yàn)位以及 1 個(gè)或 2 個(gè)停止位,具體如下圖所示;

協(xié)議格式

起始位

UART 數(shù)據(jù)傳輸線通常在不傳輸數(shù)據(jù)時(shí)保持在高電平。

為了開始數(shù)據(jù)傳輸,發(fā)送端 UART 在一個(gè)時(shí)鐘周期內(nèi)將傳輸線從高電平拉低到低電平。

當(dāng)接收端 UART 檢測到高電壓到低電壓轉(zhuǎn)換時(shí),它開始以波特率的頻率讀取數(shù)據(jù)位中的每一位數(shù)據(jù)。

?

數(shù)據(jù)

數(shù)據(jù)位包含正在傳輸?shù)膶?shí)際數(shù)據(jù)。如果使用奇偶校驗(yàn)位,則可以是 5 位,最多 8 位。如果不使用奇偶校驗(yàn)位,則數(shù)據(jù)幀的長度可以為 9 位。

在大多數(shù)情況下,數(shù)據(jù)首先以低有效位發(fā)送。

?

校驗(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ù)位后面的一位),用一個(gè)值確保傳輸?shù)臄?shù)據(jù)有偶個(gè)或者奇?zhèn)€邏輯高位。

舉個(gè)例子,如果數(shù)據(jù)是011,則滿足;

偶校驗(yàn),校驗(yàn)位為 0,保證邏輯高的位數(shù)是偶數(shù)個(gè)。

奇校驗(yàn),校驗(yàn)位為 1,這樣就有 3 個(gè)邏輯高位。

具體如下圖所示;

奇校驗(yàn)和偶校驗(yàn)

高位和低位不是真正的檢查數(shù)據(jù),而是強(qiáng)行將校驗(yàn)位設(shè)置為邏輯高或者邏輯低。這樣使得接收設(shè)備能夠知道一個(gè)位的狀態(tài),有機(jī)會(huì)判斷是否有噪聲干擾了通信或者是否傳輸和接收數(shù)據(jù)是否不同步。

?

停止位

發(fā)送端 UART 將數(shù)據(jù)傳輸線從低電壓驅(qū)動(dòng)到高電壓至少持續(xù)兩位數(shù)據(jù)的時(shí)間寬度來表示整個(gè)數(shù)據(jù)包的傳輸已經(jīng)結(jié)束。

由于數(shù)據(jù)是在傳輸線上定時(shí)的,并且每一個(gè)設(shè)備有其自己的時(shí)鐘,很可能在通信中兩臺(tái)設(shè)備間出現(xiàn)了小小的不同步。因此停止位不僅僅是表示傳輸?shù)慕Y(jié)束,并且提供計(jì)算機(jī)校正時(shí)鐘同步的機(jī)會(huì)。適用于停止位的位數(shù)越多,不同時(shí)鐘同步的容錯(cuò)性越好,但是數(shù)據(jù)傳輸率同時(shí)也越慢。

?

波特率

波特率是串口數(shù)據(jù)的傳輸速度,即Bit/s,常見的波特率有:9600,19200,38400,57600,115200,當(dāng)然還有很多波特率,不再一一給出;

假設(shè)目前 UART 的配置為,1 個(gè)起始位,8 個(gè)數(shù)據(jù)位,0 個(gè)校驗(yàn)位,1 個(gè)停止位,那么 9600 的波特率,可以計(jì)算出每一位數(shù)據(jù)的時(shí)間寬度為:

那么傳輸一個(gè)字節(jié)(也就是 10 bit 數(shù)據(jù))需要的時(shí)間為 1.04 毫秒。

下面用串口抓取了 UART 的 TX 上的信號(hào),其中一位數(shù)據(jù)的時(shí)間寬度為 26 微秒,具體如下圖所示;

則可以簡單計(jì)算得到;

因此波特率大概為 38400;

下表是各個(gè)波特率下數(shù)據(jù)位時(shí)間寬度;

Time Baud Rate
3333μs (3.3ms) 300
833μs 1200
416μs 2400
208μs 4800
104μs 9600
69μs 14400
52μs 19200
34μs 28800
26μs 38400
17.3μs 57600
8μs 115200
4.34μs 230400

4 傳輸過程

發(fā)送端 UART 從數(shù)據(jù)總線轉(zhuǎn)換并行數(shù)據(jù):

發(fā)送端 UART 將起始位,奇偶校驗(yàn)位和停止位添加到數(shù)據(jù)包中:

整個(gè)數(shù)據(jù)包從發(fā)送端 UART 串行發(fā)送到接收端 UART;接收端 UART 按照預(yù)先配置好的波特率對(duì)數(shù)據(jù)線進(jìn)行采樣:

接收端 UART 解析接收的數(shù)據(jù),丟棄數(shù)據(jù)包中的起始位,奇偶校驗(yàn)位和停止位:

接收 UART 將串行數(shù)據(jù)轉(zhuǎn)換回并行數(shù)據(jù),并將其傳輸?shù)浇邮斩说臄?shù)據(jù)總線:

?

5 、物理層

UART、RS232、RS485 在串口通信中,主要區(qū)別是電平的不同,其中 UART 通常使用 TTL 電平,下面介紹這幾個(gè)存在的差異;

TTL

TTL 全名是晶體管 - 晶體管邏輯集成電路(Transistor-Transistor Logic)

輸入高電平最小 2V,輸出高電平最小 2.4V,典型值 3.4V;

輸入低電平最大 0.8V,輸出低電平最大 0.4V,典型值 0.2V。

RS232

RS232 邏輯 1 電平(MARK)=-3V~-15V,邏輯 0 電平(SPACE)=+3~+15V;

同樣的,對(duì)于傳輸數(shù)據(jù)0x55,即二進(jìn)制的01010101,RS232 和 TTL 的區(qū)別如下;

RS485

RS485 是差分信號(hào)進(jìn)行串行傳輸

邏輯 1 以兩線間的電壓差為+(2~6)V表示;邏輯"0"以兩線間的電壓差為-(2~6)V表示;

在工業(yè)通信中,使用 RS485 比較多,因?yàn)?RS485 是差分信號(hào),可以抑制共模干擾,因此在惡劣的環(huán)境中擁有很好的抗干擾性,比較穩(wěn)定;

?

6、 優(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);

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

CSDN博客專家,公眾號(hào)小麥大叔主筆,資深嵌入式系統(tǒng)工程師,曾從事移動(dòng)終端,智能硬件以及物聯(lián)網(wǎng)等消費(fèi)電子產(chǎn)品的軟硬件研發(fā),分享,總結(jié),提高,相互交流,共同進(jìn)步。