返回筆記列表

2026/06/02

嵌入式系統通訊基礎概念

本文介紹嵌入式系統中常見的硬體通訊介面,說明 MCU 與感測器、儲存晶片、顯示器、通訊模組等周邊元件之間,如何透過 UART、I2C、SPI、CAN、RS-485 等介面交換資料。

EmbeddedCommunicationBasics

1. 為什麼嵌入式系統需要通訊介面?

在嵌入式系統中,MCU 通常不會單獨工作。它需要和許多外部元件溝通,例如:

  • 感測器:溫度、壓力、加速度、電流、電壓。
  • 儲存元件:EEPROM、Flash、SD card。
  • 顯示元件:LCD、OLED。
  • 通訊模組:Wi-Fi、Bluetooth、GPS、4G / 5G。
  • 電源管理晶片:PMIC、Battery Gauge。
  • 馬達與致動器控制晶片。

不同周邊的速度、距離、腳位數、抗干擾能力與通訊模式不同,因此會使用不同的通訊介面。


2. 硬體通訊的核心分類

理解 UART、I2C、SPI、CAN、RS-485 前,先掌握幾個基本分類會比較容易。


2.1 並列通訊 vs. 序列通訊

並列通訊

並列通訊會同時使用多條資料線傳送多個位元,例如 8-bit、16-bit 或更寬的資料匯流排。

特點

  • 一次可傳送多個位元。
  • 需要較多腳位與較複雜佈線。
  • 高速時容易遇到線長差異、訊號同步、電磁干擾等問題。
  • 常見於短距離、高頻寬或晶片內部匯流排。

序列通訊

序列通訊會將資料位元依序傳送,通常使用較少訊號線。

傳統低速板上序列介面速度可能低於並列匯流排,但現代高速序列介面可以透過高頻率、差動訊號與編碼技術達到非常高的傳輸率,例如 USB、PCIe、SATA、Ethernet 等。

常見嵌入式序列介面:

  • UART:TX / RX
  • I2C:SDA / SCL
  • SPI:SCK / MOSI / MISO / CS
  • CAN、RS-485:常見為差動訊號線

2.2 同步通訊 vs. 非同步通訊

同步通訊

同步通訊通常會有時脈訊號,接收端依照時脈邊緣讀取資料。

常見例子:

  • I2C
  • SPI

非同步通訊

非同步通訊沒有共用時脈線,雙方必須事先約定相同的傳輸速率,也就是 鮑率 (Baud Rate)

常見例子:

  • UART

2.3 單工、半雙工、全雙工

模式說明常見例子
單工 (Simplex)只能單向傳輸,發送端與接收端角色固定。單向感測器輸出
半雙工 (Half-Duplex)可雙向傳輸,但同一時間只能一方傳送。I2C、RS-485 常見用法
全雙工 (Full-Duplex)可同時雙向傳輸。UART、SPI

2.4 單端訊號 vs. 差動訊號

單端訊號

單端訊號是用一條訊號線相對於 GND 的電位高低表示資料。

常見例子:

  • UART TTL
  • I2C
  • SPI

差動訊號

差動訊號使用兩條線之間的電壓差表示資料,抗干擾能力較好,適合較長距離或雜訊較多的環境。

常見例子:

  • CAN
  • RS-485
  • USB
  • Ethernet

3. UART:通用非同步收發器

UART (Universal Asynchronous Receiver-Transmitter) 是一種簡單、常見的點對點非同步通訊介面。

它常用於 MCU 與電腦、模組或另一顆 MCU 之間的資料交換。


3.1 UART 接線概念

最基本 UART 通訊通常需要:

  • TX:Transmit,發送資料。
  • RX:Receive,接收資料。
  • GND:共地。

兩端連接時通常要交叉:

  • A 的 TX 接 B 的 RX。
  • A 的 RX 接 B 的 TX。
  • A 的 GND 接 B 的 GND。

UART 接線示意圖

實務上除了接線正確,也要確認雙方電壓準位相容。例如 3.3V TTL、5V TTL 與 RS-232 level 不可直接混接,必要時需使用 level shifter 或對應收發器。


3.2 UART 資料怎麼傳?

UART 沒有 clock 線,因此雙方要先設定相同鮑率,例如 9600、115200、921600 bps。

UART 傳送一筆資料時,通常會在資料位元前後加上 start bit 與 stop bit,讓接收端知道資料從哪裡開始、到哪裡結束。

欄位作用
Idle / 閒置線路閒置時通常維持 High。
Start Bit / 起始位元線路拉 Low,表示一筆資料開始。
Data Bits / 資料位元實際傳送的資料,常見為 8-bit。
Parity Bit / 同位檢查位元可選,用於簡單錯誤檢查。
Stop Bit / 停止位元回到 High,表示一筆資料結束。
flowchart LR
    Idle["閒置:High"] --> Start["起始位元:Low"]
    Start --> Data["資料位元"]
    Data --> Parity["同位檢查:可選"]
    Parity --> Stop["停止位元:High"]
    Stop --> Idle2["回到閒置或傳下一筆"]

3.3 UART 常見應用

  • MCU 偵錯 console。
  • USB-UART 轉接器。
  • GPS 模組。
  • Bluetooth 模組。
  • Wi-Fi / 4G / 5G 模組 AT command。
  • 兩顆 MCU 之間的簡單資料傳輸。

3.4 UART 優缺點

項目說明
優點簡單、線少、好除錯、硬體支援普遍。
限制通常是點對點,沒有內建位址,雙方 baud rate 必須一致。

4. I2C:積體電路匯流排

I2C (Inter-Integrated Circuit) 是一種同步、半雙工、匯流排式的通訊協定,適合短距離、低到中速的板上通訊。

它最大的特色是:只用 SDA 與 SCL 兩條線,就能掛多個裝置。


4.1 I2C 接線與拓撲

I2C 主要使用兩條線:

  • SCL (Serial Clock):時脈線,通常由主控端 (Controller) 產生 clock。
  • SDA (Serial Data):資料線,用來傳送位址、命令與資料。

SDA 與 SCL 通常是 開路汲極 (Open-Drain) 架構,需要上拉電阻,讓匯流排閒置時維持高電位。

I2C 匯流排拓撲圖


4.2 I2C 資料怎麼傳?

I2C 通訊由主控端 (Controller) 主導。主控端產生 SCL clock,並透過 SDA 傳送位址、命令與資料。

一個簡化的 I2C 寫入流程如下:

sequenceDiagram
    participant C as 主控端
    participant T as 目標裝置

    C->>T: START
    C->>T: 位址 + 寫入位元
    T-->>C: ACK
    C->>T: 暫存器 / 命令
    T-->>C: ACK
    C->>T: 資料 Byte
    T-->>C: ACK
    C->>T: STOP

重點概念:

  • START:主控端 (Controller) 宣告一次交易開始。
  • Address + R/W bit:指定要通訊的目標裝置 (Target),以及這次是讀取或寫入。
  • ACK / NACK:接收方回應是否收到。
  • Data Byte:實際傳輸的資料。
  • STOP:主控端 (Controller) 宣告交易結束。

4.3 I2C 位址與 ACK

I2C 目標裝置 (Target) 會有位址,常見為 7-bit address。主控端送出位址後,只有位址符合的目標裝置會回應 ACK。

這也是 I2C 可以在同一組 SDA / SCL 上掛多個裝置的原因。


4.4 I2C 多主控仲裁

I2C 支援多主控,但實務上較常見的是單主控、多目標裝置 (Single-Controller, Multi-Target)。

若多個主控端 (Controller) 同時嘗試傳送,I2C 會透過 open-drain 線路特性與仲裁機制處理。

簡化概念如下:

flowchart TD
    C1["主控端 A 嘗試送出 High"] --> Check["主控端 A 讀回 SDA 狀態"]
    C2["主控端 B 同時送出 Low"] --> Bus["SDA 被拉成 Low"]
    Bus --> Check
    Check --> Lose["主控端 A 發現送出與讀回不同,失去仲裁"]
    Bus --> Continue["主控端 B 繼續傳輸"]

這個機制讓匯流排不會因為兩個主控端同時發送而直接失控。


4.5 I2C 常見應用

  • 溫溼度感測器。
  • 加速度計 / 陀螺儀。
  • RTC 時鐘晶片。
  • EEPROM。
  • 小型 OLED 顯示器。
  • PMIC 控制介面。
  • Battery Gauge。

4.6 I2C 優缺點

項目說明
優點只需 SDA / SCL 兩條線即可掛多個裝置,適合低速感測器與控制介面。
限制速度不如 SPI,需處理上拉電阻、位址衝突、匯流排電容與裝置相容性。

5. SPI:序列周邊介面

SPI (Serial Peripheral Interface) 是一種高速、同步、通常全雙工的板上通訊介面。

它常用於需要較高頻寬的周邊,例如 Flash、顯示器、ADC、DAC。


5.1 SPI 接線概念

標準 SPI 常見四種主要訊號:

  • SCK (Serial Clock):時脈,由主控端 (Controller) 輸出。
  • MOSI (Master Out, Slave In):主控端傳給周邊裝置的資料線。在現代去爭議術語中也稱為 COPI (Controller Out Peripheral In)
  • MISO (Master In, Slave Out):周邊裝置傳給主控端的資料線。在現代去爭議術語中也稱為 CIPO (Controller In Peripheral Out)
  • CS / SS (Chip Select / Slave Select):片選線,用來選定目標周邊裝置 (Peripheral)。

SPI 匯流排接線示意圖


5.2 SPI 資料怎麼傳?

SPI 由主控端 (Controller) 主導。主控端先透過 CS 選定周邊裝置 (Peripheral),再輸出 SCK clock。每個 clock 週期中,資料可以同時透過 MOSI (COPI) 送出,並透過 MISO (CIPO) 收回。

sequenceDiagram
    participant C as 主控端
    participant P1 as 周邊裝置 1
    participant P2 as 周邊裝置 2

    C->>P1: CS1 拉 Low(選取周邊裝置 1)
    Note over P2: CS2 維持 High(周邊裝置 2 未選取)
    C->>P1: SCK 開始輸出時脈
    C->>P1: COPI (MOSI) 傳送資料
    P1-->>C: CIPO (MISO) 同步回傳資料
    C->>P1: CS1 拉 High(交易結束)

重點概念:

  • CS 拉 Low:選取目標周邊裝置。
  • SCK:由主控端產生 clock。
  • MOSI:主控端傳資料給周邊裝置。
  • MISO:周邊裝置傳資料給主控端。
  • CS 拉 High:結束此次交易。

5.3 SPI 模式:CPOL / CPHA

不同 SPI 裝置可能要求不同 clock 極性與取樣時機,常用 CPOL / CPHA 表示,也就是 SPI Mode 0、1、2、3。

這篇只需要知道:

SPI 主控端與周邊裝置的 mode 設定必須一致,否則可能會讀到錯誤資料。

詳細波形與 setup / hold timing 可留到進階文章或 datasheet 再看。


5.4 SPI 常見應用

  • SPI Flash。
  • SD card 模組。
  • LCD / OLED 顯示器。
  • ADC / DAC。
  • Ethernet 控制器。
  • 高速感測器。

5.5 SPI 優缺點

項目說明
優點速度快、協定簡單、通常可全雙工傳輸。
限制腳位較多,多個周邊裝置時通常需要多條 CS 線;不同裝置的 SPI mode 需正確設定。

6. CAN:車載與工控常見匯流排

CAN (Controller Area Network) 常見於車用電子、機器人與工業控制。

CAN 適合多節點、抗干擾、可靠度要求較高的控制網路。


6.1 CAN 匯流排概念

CAN 通常使用差動訊號線,例如 CAN_H 與 CAN_L,多個節點掛在同一條 bus 上。

CAN 匯流排拓撲圖


6.2 CAN 資料怎麼傳?

CAN 不是用傳統「裝置位址」指定接收者,而是每個訊息帶有 Identifier。各節點根據 identifier 判斷要不要接收與處理該訊息。

簡化概念:

flowchart TD
    NodeA["節點 A 傳送 ID 0x100 訊息"] --> Bus["CAN 匯流排"]
    Bus --> NodeB["節點 B:ID 符合,接收並處理"]
    Bus --> NodeC["節點 C:ID 不符,忽略"]
    Bus --> NodeD["節點 D:ID 符合,接收並處理"]

CAN 也有硬體仲裁機制,當多個節點同時發送時,identifier 優先權較高的訊息會先成功送出。

入門階段只要先理解:CAN 是多節點差動 bus,訊息用 identifier 區分,且具有仲裁與錯誤偵測能力。


6.3 CAN 常見應用

  • 車用 ECU。
  • BMS 電池管理系統。
  • 機器人控制。
  • 工業控制。
  • 馬達控制網路。

7. RS-485:工業長距離通訊常見實體層

RS-485 是常見於工業環境的差動實體層標準,常搭配 Modbus RTU 等上層協定使用。

RS-485 本身比較像「電氣層 / 實體層規格」,不是完整的通訊協定。實際資料格式通常由 Modbus RTU 或自訂協定決定。


7.1 RS-485 匯流排概念

RS-485 常見為半雙工多點匯流排,多個節點共用一對差動線。

RS-485 匯流排拓撲圖


7.2 RS-485 資料怎麼傳?

在常見半雙工 RS-485 中(例如搭配 Modbus 協定),通常採用單一用戶端 (Client) 與多個伺服器 (Server) 的架構,同一時間只允許一個節點發送,其他節點接收。

sequenceDiagram
    participant C as 用戶端
    participant B as RS-485 匯流排
    participant S as 伺服器

    C->>B: 切換為 Tx 模式
    C->>S: 傳送請求封包
    C->>B: 釋放匯流排(切回 Rx 模式)
    S->>B: 切換為 Tx 模式
    S-->>C: 回傳回應封包
    S->>B: 釋放匯流排(切回 Rx 模式)

實務上,RS-485 常需要控制 transceiver 的 DE / RE 腳位,以切換傳送與接收方向。不過詳細時序可以留到進階文章再談。


7.3 RS-485 常見應用

  • Modbus RTU。
  • PLC。
  • 工業感測器。
  • 電表。
  • 馬達控制器。
  • 長距離設備通訊。

在低速與良好線材條件下,RS-485 傳輸距離可達約 1200 公尺。


8. UART、I2C、SPI、CAN、RS-485 比較表

特性UARTI2CSPICANRS-485
定位點對點序列通訊短距離板上匯流排高速板上周邊介面多節點控制匯流排工業差動實體層
時脈非同步,無 clock 線同步,SCL同步,SCK協定內同步機制依上層協定,常見 UART-like
典型線路TX / RX / GNDSDA / SCL / GNDSCK / MOSI / MISO / CS / GNDCAN_H / CAN_LA / B 差動線
雙工通常全雙工半雙工通常全雙工半雙工概念常見半雙工
多裝置能力原生不適合多點支援多目標裝置 (Target)多周邊裝置 (Peripheral) 需多 CS 或 daisy-chain支援多節點支援多點
速度從低速到數 Mbps,依硬體而定常見 100 kbit/s 到 3.4 Mbit/s可達數 MHz 到數十 MHz依 CAN / CAN FD 規格與距離、線材、協定有關
距離短距離短距離板上短距離板上車用 / 工控距離工業長距離
抗干擾普通普通普通較佳較佳
常見用途Console、模組 AT command感測器、RTC、EEPROMFlash、LCD、ADC/DAC車用、BMS、馬達控制Modbus RTU、PLC、工業設備

9. 選型建議

需求常見選擇
MCU 與電腦除錯 consoleUART
MCU 控制 Wi-Fi / GPS / 4G 模組UART
多個低速感測器共用少量腳位I2C
小型 EEPROM、RTC、PMIC 控制I2C
高速 Flash、顯示器、ADC / DACSPI
車用或多節點控制網路CAN
工業長距離多點通訊RS-485
只想要最簡單的點對點通訊UART
需要線少又能掛多個低速裝置I2C
需要高速、低協定負擔SPI

10. 總結

嵌入式通訊介面的選擇,通常取決於以下因素:

  • 需要幾條線?
  • 是否需要掛多個裝置?
  • 速度需求多高?
  • 傳輸距離多遠?
  • 環境雜訊是否嚴重?
  • 是否需要錯誤偵測與仲裁?
  • 軟硬體實作成本能接受多少?

簡單記法:

  • UART:最簡單,適合點對點與除錯。
  • I2C:線少,適合多個低速板上裝置。
  • SPI:速度快,適合高頻寬周邊。
  • CAN:可靠、抗干擾,適合車用與多節點控制。
  • RS-485:適合工業長距離多點通訊。

相關概念延伸閱讀