3.18. UART 基礎

UART(Universal Asynchronous Receiver-Transmitter,通用非同步收發傳輸器)是在兩個微控制器之間,或微控制器與主機 PC 之間搬移位元組最古老也最簡單的方式。資料由兩條線路承載——每個方向各一條——再加上一條共用的接地線回送訊號。雙方都不執行共用的時脈;它們事先約定好一個 鮑率,並從資料線本身還原出位元的時序。

3.18.1. 框架(frame)

線路上的每個字元都被包裹在一個框架中:一個起始位元、若干資料位元、一個可選的同位位元,以及一個或兩個停止位元。

一個 UART 框架的波形。訊號在左側維持閒置的高電位, 下降為低電位持續一個位元時間(起始 位元),接著依序承載八個資料位元,然後 回到高電位持續一個位元時間(停止位元),最後 回到閒置狀態。

一個 UART 框架:一個起始位元、八個資料位元與一個停止位元,每個各佔一個位元週期(1 / baudrate 秒)的寬度。

線路閒置時維持高電位。接收端監看下降邊緣,這標示著一個新框架的開始。接著它在每個位元週期取樣一次資料線——通常是在每個位元的中間——並將這些位元重新組合成一個字元。停止位元使線路回到閒置狀態,以便偵測下一個起始位元。

3.18.2. 鮑率

位元週期——以及連結的速度——是由 鮑率 決定的,也就是每秒的位元數。9600192003840057600115200230400460800921600 是標準值;115200 是最常見的預設值。兩端對鮑率的認定必須一致到只差幾個百分比以內,否則接收端會在錯誤的點取樣位元,導致回傳的資料變得亂碼。

較高的鮑率每秒能搬移更多資料,但對纜線長度、電容,以及兩端時脈的精準度也更敏感。對於同一張工作桌上兩塊板子之間的短距離連結,115200921600 都能輕鬆運作。

3.18.3. 接線

一個 UART 連結使用三條線:

標示為 A 與 B 的兩塊板子,以三條 線連接。板子 A 的 TX 接腳連到板子 B 的 RX 接腳; 板子 B 的 TX 接腳連到板子 A 的 RX 接腳;而且 兩塊板子的接地接腳綁在一起。

UART 接線:一塊板子上的 TX 接到另一塊板子的 RX,且兩端接地綁在一起。

  • TX → RX,雙向皆然。 每塊板子的傳送接腳就是另一塊板子的接收接腳。新手常犯的錯誤是把 TX → TX 接在一起——兩個輸出互相對抗,兩端的接收器都收不到任何資料。

  • 共用接地。 訊號電位是以接地為參考基準的,因此兩塊板子必須有共同的接地,否則接收端在線路上看到的會是錯誤的電壓。

3.18.4. 電壓電位與實體層

相機 UART 接腳上的訊號電位是 3.3 V CMOS:邏輯零為接地,邏輯一為 3.3 V。任何使用 3.3 V CMOS UART 的裝置——另一個微控制器、設定為 3.3 V 的 USB 轉序列轉接器、一個 3.3 V GPS 模組——都可以直接接線。

備註

5 V CMOS UART 裝置(較舊的微控制器、某些 GPS 模組、一些較舊的感測器轉接板)使用相同的 UART 框架,但採用 5 V 邏輯電位。將它們直接接到相機上是不安全的:5 V 的 TX 驅動相機的 RX,會超過不耐受 5 V 的相機其絕對最大輸入電壓,而且相機的 3.3 V TX 可能無法達到 5 V 裝置乾淨的邏輯一所需的高電位門檻。

在這兩種電壓之間轉換需要一個 主動式線路驅動器——一顆專用的雙向電位轉換 IC,在每條線路的兩側都有自己的驅動電晶體。電壓位準轉換 中那種被動式的 MOSFET 加上拉電阻的轉換器在這裡是不夠用的:它們的上升邊緣仰賴透過電阻為線路充電,這在開關速度下沒問題,但對 UART 而言遠遠太慢。在 115200 鮑率下每個位元約持續 8 µs,而被動式轉換器的 RC 變化率會把一個位元拖糊到下一個位元上。

主動式線路驅動器能在全速 UART 速率下於兩個方向產生乾淨的邊緣。選擇一個額定支援該連結將運行的鮑率的零件,把相機的 TX 與 RX 接到轉換器的 3.3 V 側,再把 5 V 裝置的 TX 與 RX 接到轉換器的 5 V 側。

有三種較舊的實體層使用相同的框架但採用不同的電壓,因此在它們與 3.3 V 微控制器之間需要一個電位轉換器:

  • RS-232。 用於桌上型 PC 的序列埠以及某些工業設備上。線路在大約 ±5 V±15 V 之間擺盪,閒置時位於負軌。相較於 CMOS,其極性反相且電壓較高;MAX232 / MAX3232 系列(或類似)的晶片可處理這種轉換。

  • RS-422。 一種用於點對點連結(一個驅動器,最多十個接收器)的差動訊號標準。驅動器在一對平衡的線路上傳送;接收器看的是兩者之間的 差值,並忽略沿途的共模雜訊。全雙工連結使用兩對線——每個方向各一對。RS-422 視鮑率而定可達到數十公尺到一公里,並由一顆 RS-422 收發器晶片位於相機的 TX / RX 與該平衡線對之間。

  • RS-485。 RS-422 的多點分接親戚——採用相同的差動訊號,但設計上可在一條匯流排上放置最多 32 個驅動器與接收器。大多數連結是在單一線對上以半雙工運作,每個節點的驅動器與接收器共用相同的線路,並由軟體仲裁誰來發話。用於纜線拉得很遠且雜訊嚴重的工業自動化匯流排(Modbus、DMX512、Profibus);一顆 RS-485 收發器晶片位於相機的 TX / RX 與該差動線對之間。

兩者在底層位元層級上仍然傳送 UART 框架。無論訊號在收發器另一側是由哪種實體層承載,相機的 machine.UART 設定(鮑率、位元數、同位、停止位元)都是相同的。