在嵌入式开发中,最常用的几种通信接口无非就是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浏览量
41866 -
SPI
+关注
关注
17文章
1866浏览量
99729 -
I2C
+关注
关注
28文章
1547浏览量
130447 -
uart
+关注
关注
22文章
1304浏览量
106077 -
I2S
+关注
关注
1文章
80浏览量
43870
发布评论请先 登录
相关推荐
热点推荐
spi与i2c总线协议的对比分析
通信协议非常适合近距离低速芯片间通信。Philips(for I2C)和Motorola(for SPI) 出于不同背景和市场需求制定了这两种标准通
发表于 12-06 11:57
•3350次阅读
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:通信协议对比表
评论