UART (Universal Asynchronous Receiver/Transmitter)
UART 是一種異步收發傳輸器,是電腦硬體的一部分,將數據透過串列通訊和平行通訊間作傳輸轉換。UART 通常用在與其他通訊接口 (如 EIA RS-232) 的連接上。
最精簡的情況下,具有收、送訊息的 UART,只需要使用兩根訊號線,如下:
TX (Transmitter): 輸出訊號。
RX (Receiver): 接收訊號。
下圖為 UART 線路範例,由兩個 UART 裝置組成:
裝置的 RX 要與另一個裝置的 TX 互接。
由於不使用時脈訊號來同步發送器和接收器裝置,所以兩個 UART 裝置是約定好使用相同的頻率,所以為 異步串行通信 或 非同步串行通信(Asynchronous serial communication),在 UART 使用的頻率稱為鮑率(BAUD rate),可能為 9600、19200、 38400、115200、… Hz。
發送器根據其時脈訊號產生的位元流取代了時脈訊號,接收器使用其內部時脈訊號對輸入資料進行採樣。同步點是透過兩個裝置的相同串列傳輸速率來管理的。如果串列傳輸速率不同,發送和接收資料的時序可能會受影響,導致資料處理過程出現不一致。允許的串列傳輸速率差異最大值為10%,超過此值,位元的時序就會脫節。
當不傳輸資料時,UART TX 通常保持高電壓位準。若要開始資料傳輸,UART TX 會將傳輸線從高位準拉到低位準並保持 1 個時脈週期。當 UART RX 檢測到高到低電壓躍遷時,便開始以串列傳輸速率對應的頻率讀取資料幀中的位元。
UART 的線路圖範例為:
在開發軟、硬體時,常會用到 serial port 讓裝置可以輸出 log 到電腦,同時也讓電腦可以輸入指令在裝置上執行。
在裝置的線路圖上,serial port 會被標示為 UART,而電腦跟裝置之間的通訊,通常會說是透過 RS232(COM Port) 或是 TTL 來溝通。如此,應該如何理解 UART、RS232、TTL 之間的關係?而他們各自又代表什麼呢?
serial port
serial port (串口,串行接口),與之相對應的另一種接口叫 parallel port (並口,並行接口)。兩者的區別是,傳輸一個 byte (8個 bits) 的數據時,serial port 是將 8 個 bits 排好隊,逐個地在 1 條連接線上傳輸,而 parallel port 則將 8 個 bit 一字排開,分別在 8 條連接線上同時傳輸。
在相同的數據傳輸速率下,parallel port 比 serial port 更快,但由於 parallel port 的各個連接線之間容易互相干擾,高速情況下難以同步各連接線的數據,而且硬體成本也相對 serial port 更高(線多),因而 serial port 取代 parallel port 成為了現在的主流接口,較具代表性是 Universal Serial Bus,通用串行總線,也就是 USB。
其它在嵌入式領域常見的 serial port interface 還包括: I2C、SPI、RJ-45、UART、USART、…等。
接收方接收到一長串的、表示 0/1 電平跳變的信號之後,怎麼還原出有效的信息呢?有兩種方法:
1)發送端在發送串行數據的同時,提供一個時鐘信號,並按照一定的約定(例如在時鐘信號的上升沿的時候,將數據發送出去)發送數據,接收端根據發送端提供的時鐘信號,以及大家的約定來接收數據。這就是常說的同步串行通信(Synchronous serial communication),I2C、SPI 等有時鐘信號的協議,都屬於這種通信方式。
2)發送端在數據發送之前和之後,通過特定形式的信號(例如 START 信號和 STOP 信號),告訴接收端,可以開始(或者停止)接收數據了。與此同時,收發兩方會約定一個數據發送的速度(就是大名鼎鼎的 baud rate),發送端在發送 START 信號之後,就按照固定的節奏發送串行數據,與此同時,接收端在收到 START 信號之後,也按照固定的節奏接收串行數據。這就是常說的異步串行通信(Asynchronous serial communication),UART 就是屬於這種通信方式。
UART(Universal Asynchronous Receiver/Transmitter)
UART 是一種異步串行通信(Asynchronous serial communication) 的方式,即是規定編碼格式、bit rate,產生通信所需的 bit 流的標準。
RS232(COM Port)
COM Port 是指針對 serial port communication protocol 的一種端口,是 PC 上異步串行通信口的簡寫,大部分為 9針孔D型。 COM Port 分為 RS232,RS422 和 RS485,傳輸功能依次遞增。由於歷史原因,IBM 的 PC 外部接口配置為 RS232,成為實際上的 PC 界默認標準。所以,現在 PC 機的 COM Port 均為RS232。若配有多個異步串行通信口,則分別稱為 COM1、COM2...。
RS232 或者 RS485,它更多的是規定電氣特性和各個引腳的功能定義,如 用-3V— -15V之間的任意電平表示邏輯“1” ;用+3V — +15V電平表示邏輯“0”,這裡採用的是負邏輯。
TTL
TTL 也是針對 serial port communication protocol 的一種端口,全名是晶體管-晶體管邏輯集成電路(Transistor-Transistor Logic),這種串行通信,對應的物理電平,始終是在 0V 和 Vcc 之間,其中常見的 Vcc 是 5V 或 3.3V。 TTL 高電平1是>=2.4V,低電平0是<=0.5V(對於5V或3.3V電源電壓),這裡是正邏輯。
UART 關注於規定編碼格式的標準,如: baud rate、frame format 和 baud rate tolerance 等等。
RS232 和 TTL 更多是電平標準和電壓,他們在軟件協議層面是一樣的,如對於同樣傳輸 0b01010101 來說,RS232 和 TTL 的時序對比:
事實上,目前 PC 後面的 COM Port 慢慢都被淘汰了,更多時候我們需要考慮的是要買個 RS232 轉 USB Port 呢還是 TTL 轉 USB Port,但上面的原則是相同的。
還有一種 RJ45(形狀似網口)形式的串口,其和 RS232 兼容,可以做簡單的連線轉換。
Reference
UART、RS232、TTL关系浅析 RS232 vs TTL: Beginner Guide to Serial Communication Wiki: Serial port
留言列表