I2C、SPI、UART 的差異:佈線、速度、使用時機比較
這三種是嵌入式開發中最先遇到的序列通訊。UART 是沒有共用時脈的一對一簡單通訊。SPI 是使用 4 條線的高速匯流排,主控端透過晶片選擇線選擇通訊對象。I2C 則由許多裝置共用 2 條線,以位址選擇通訊對象。區分使用的重點,主要是速度(SPI)、腳位數(I2C)與簡單性(UART)。
| 項目 | UART | SPI | I2C |
|---|---|---|---|
| 佈線 | 訊號線 2 條(TX 與 RX)加上接地 | 訊號線 4 條(SCLK、MOSI、MISO)再加上每個裝置各 1 條的晶片選擇(CS) | 共用的 2 條(SDA 與 SCL)加上接地。需要上拉電阻 |
| 時脈 | 非同步。沒有時脈線,雙方需配合鮑率 | 同步。由主控端輸出時脈 | 同步。由主控端輸出時脈 |
| 連接形態 | 2 個裝置的一對一 | 1 個主控端與多個從屬端。每個從屬端需要一條 CS 線 | 主控端與從屬端都可有多個,共用 1 條匯流排 |
| 位址 | 無 | 以晶片選擇線選擇對象 | 在通訊的開頭傳送 7 位元(也可為 10 位元)的位址 |
| 一般的速度 | 9,600~115,200 bit/s,至數 Mbit/s | 多為 1~50 MHz,也有更高的元件 | 100 kHz(標準)、400 kHz(快速)、1 MHz(快速模式加強版)、3.4 MHz(高速) |
| 通訊方向 | 全雙工 | 全雙工 | 半雙工 |
| 錯誤偵測 | 同位位元與框架檢查(選用) | 機制上不具備 | 每個位元組都會回傳 ACK/NACK |
| 裝置增加時的腳位數 | 每增加一個通訊對象就增加 2 條 | 每增加一個裝置就增加 1 條 CS | 不會增加 |
| 距離 | 只要使用 RS-232 或 RS-485 的驅動器,就能拉長 | 短。在同一塊電路板上 | 短。在同一塊電路板上 |
| 主要用途 | 除錯用的主控台、GPS 或藍牙模組、電路板之間的連接 | 快閃記憶體、SD 卡、顯示器、高速 ADC 與感測器 | 低速感測器、EEPROM、即時時鐘、晶片的設定 |
數值為具代表性的大致參考值,會因世代或產品而異。