在嵌入式開發中,最常用的幾種通信接口無非就是SPI、I2C、I2S、UART。名字看起來差不多,但應用場景和特性卻大不相同。很多初學者容易混淆:為什么都叫串行通信,結構卻不一樣?為什么有的能傳音頻,有的不能?本文一次梳理清楚。
一、通信協議快速對照表
| 協議 | 全稱 | 線數 | 通信方式 | 速率 | 應用場景 | 特點 |
|---|---|---|---|---|---|---|
| SPI | Serial Peripheral Interface | 4根常用線(MOSI, MISO, SCLK, CS) | 全雙工、主從 | 高速(可達幾十 MHz) | Flash、傳感器、顯示屏 | 硬件簡單、速率高,但線多,擴展性差 |
| I2C | Inter-Integrated Circuit | 2根線(SDA, SCL) | 半雙工、多主多從 | 100 kbps \~ 3.4 Mbps | EEPROM、傳感器、RTC | 線少,可掛多設備,但速率低,總線長時穩定性差 |
| I2S | Inter-IC Sound | 3\~4根線(SD, WS, SCK, MCLK 可選) | 同步串行(專用于音頻) | 常見 44.1kHz、48kHz(音頻采樣率) | 音頻數據傳輸(DAC、Codec、耳機) | 專為音頻設計,不能傳通用數據 |
| UART | Universal Asynchronous Receiver/Transmitter | 2根線(TX, RX) | 異步、點對點 | 常見 9600\~115200 bps,可達 Mbps | 調試串口、GPS、藍牙模塊 | 硬件簡單,廣泛使用,但速率低,不支持多機總線 |
二、協議特點解析與代碼示例
1.SPI
- 點對點的速度王者,主從明確。
- 常用于高速傳感器、Flash 存儲器、LCD 屏幕。
- 缺點:需要一根片選線控制每個從設備,多設備布線復雜。
示例:STM32 SPI 主機發送數據:
- uint8_ttxData=0xA5;
- HAL_SPI_Transmit(&hspi1,&txData,1,HAL_MAX_DELAY);
從設備接收數據:
- uint8_trxData;
- HAL_SPI_Receive(&hspi2,&rxData,1,HAL_MAX_DELAY);
2.I2C
示例:STM32 I2C 讀取溫度傳感器數據:
- uint8_treg=0x00;// 溫度寄存器地址
- uint8_ttemp;
- HAL_I2C_Master_Transmit(&hi2c1,SENSOR_ADDR,®,1,HAL_MAX_DELAY);
- HAL_I2C_Master_Receive(&hi2c1,SENSOR_ADDR,&temp,1,HAL_MAX_DELAY);
3.I2S
- 名字很像 I2C,但完全不同,這是音頻傳輸專用協議。
- 常見于音頻 Codec、功放、耳機 DAC。
- 優點:數據幀結構天然適配音頻采樣率。
- 缺點:不能傳普通數據,只能用于音頻傳輸。
示例:STM32 I2S 發送音頻數據:
- uint16_taudioData[256];
- HAL_I2S_Transmit(&hi2s2,audioData,256,HAL_MAX_DELAY);
4.UART
- 最老牌串口,幾乎所有 MCU 都支持。
- 常見于調試口、藍牙模塊、GPS 模塊。
- 優點:實現簡單,應用廣泛。
- 缺點:不支持掛多設備,速率有限。
示例:STM32 UART 發送字符串:
- charmsg[]="Hello UART!";
- HAL_UART_Transmit(&huart1,(uint8_t*)msg,strlen(msg),HAL_MAX_DELAY);
接收數據:
- uint8_trxBuffer[20];
- HAL_UART_Receive(&huart1,rxBuffer,20,HAL_MAX_DELAY);
三、總結與選型建議
可以用生活類比理解:
- SPI → 高速專車:點對點傳輸快,但線路多。
- I2C → 公交車:設備多,但速度不快。
- I2S → 專用地鐵線:只跑音頻,不拉其它數據。
- UART → 普通鄉間小道:速度一般,但無處不在。
開發中選擇通信接口時可參考:
- 想高速 →SPI
- 想簡單掛多個設備 →I2C
- 想傳音頻 →I2S
- 想通用、兼容性強 →UART
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
通信協議
+關注
關注
28文章
1073瀏覽量
41840 -
SPI
+關注
關注
17文章
1857瀏覽量
99581 -
I2C
+關注
關注
28文章
1545瀏覽量
130382 -
uart
+關注
關注
22文章
1302瀏覽量
106019 -
I2S
+關注
關注
1文章
80瀏覽量
43826
發布評論請先 登錄
相關推薦
熱點推薦
spi與i2c總線協議的對比分析
通信協議非常適合近距離低速芯片間通信。Philips(for I2C)和Motorola(for SPI) 出于不同背景和市場需求制定了這兩種標準通
發表于 12-06 11:57
?3305次閱讀
I2C通信協議應該如何學習
我最近剛做完I2C通信協議的編寫與調試,下面介紹一下我從一開始理解夏老師的程序,修改程序,直到下板調試整個的學習過程,希望對大家學習 I2C 有一定的幫助。一、 分析源代碼學習 I2C
發表于 04-28 08:00
?22次下載
一文搞懂UART、I2C、SPI協議
UART、I2C、SPI都是常見的低速板級通信協議,目前主流的SoC都內置了這些通訊協議的控制器,同樣,各種傳感器、Touch控制器、指紋模
SPI和I2C通信協議:應用與區別
本文深入解析了SPI和I2C這兩種通信協議的特點、工作原理和應用場景。SPI適用于高速數據傳輸,常用于存儲器芯片和顯示器驅動等領域;I2C適
簡單認識I2C通信協議
I2C(Inter-Integrated Circuit)通信協議是由飛利浦公司(現為恩智浦半導體)開發的一種簡單、雙向二線制同步串行總線協議。自1982年發布以來,I2C
SPI、I2C、I2S、UART:通信協議解釋
? ? ? ? 在嵌入式開發中,最常用的幾種通信接口無非就是SPI、I2C、I2S、UART。名字看起來差不多,但應用場景和特性卻大不相同。

SPI、I2C、I2S、UART:通信協議對比表
評論