一、前言
做嵌入式开发,本质就是操控外设、传输数据、设备交互。而所有外设交互,都离不开通信协议。
日常开发中最常用的四种通信协议:UART、I2C、SPI、CAN,基本覆盖了95%以上的嵌入式场景,包括传感器采集、屏幕驱动、Flash读写、设备组网、电机通信、串口调试等。
很多新手最大的问题是:只会配置代码,不懂底层差异。
比如:传感器明明可以用I2C,为什么有的必须用SPI?串口为什么容易乱码?I2C挂载多设备为什么容易卡死?工业设备为什么优先用CAN?
如果分不清四种协议的速度、接线、拓扑、可靠性、适用场景,做项目时只会盲目照搬例程,一旦遇到干扰、丢包、通信异常、设备兼容问题,完全无从排查。
本文用接地气、工程化的角度,详细拆解四种通信协议的硬件接线、通信原理、协议规则、优缺点、典型用法、避坑点,最后给出清晰的选型逻辑,看完彻底搞懂嵌入式外设通信。
二、先搞懂:通信协议的核心评判维度
我们评判一个通信协议好不好、适不适合项目,主要看5个维度,后面所有对比都围绕这几点展开:
-
接线数量:占用引脚多少,布线是否方便
-
通信速度:低速传感器 / 高速大数据传输
-
设备拓扑:一对一、一对多、多主多从
-
可靠性:是否抗干扰、是否校验、是否容错
-
适用场景:板内短距离 / 板外长线 / 工业环境

三、UART 串口通信:最基础的调试与人机通信
3.1 协议基本介绍
UART(通用异步收发传输器)是嵌入式最简单、最通用、最无门槛的通信方式。我们日常的打印调试、蓝牙模块、WiFi模块、GPS、串口屏,基本全部基于UART。
UART属于异步串行通信,没有时钟线,收发双方依靠提前约定好的波特率同步数据。

3.2 硬件接线方式
标准只需两根线:
-
TX:发送端
-
RX:接收端
-
GND:共地(必须!很多通信异常都是因为没共地)
接线规则:交叉连接,A-TX接B-RX,A-RX接B-TX。
3.3 数据帧协议格式
UART 一帧数据结构固定:起始位 + 数据位 + 校验位 + 停止位
-
起始位:1位,拉低电平,通知对方准备接收
-
数据位:8位(最常用),真正的有效数据
-
校验位:无校验/奇校验/偶校验,用于简单检错
-
停止位:1位,拉高电平,表示一帧结束
收发双方必须严格一致:波特率、数据位、校验位、停止位,任意不匹配直接乱码。
示波器串口数据实拍,其中配置数据位为8位,停止位为1位,不使用校验位,共2组数据,注意先发高位后发低位:

3.4 核心特点与优缺点
优点:
-
接线最少、协议最简单、CPU资源占用低
-
支持长距离传输,布线灵活
-
几乎所有模块、芯片都兼容,通用性拉满
缺点:
-
无时钟同步,波特率误差积累容易丢包、乱码
-
只能一对一通信,不支持多设备挂载
-
无硬件容错、无重传机制,抗干扰能力弱
3.5 典型使用场景
-
程序日志打印、调试输出
-
GPS、蓝牙、WiFi、串口模块通信
-
串口触摸屏、上位机通信
-
设备之间简单数据透传
四、I2C 通信:低速率、多传感器挂载首选
4.1 协议基本介绍
I2C 是一种半双工、同步、低速总线协议,最大的亮点是两根线挂载多个设备,非常适合挂载一堆小传感器。
常见的温湿度、气压、陀螺仪、EEPROM 几乎全部是 I2C 接口。
4.2 硬件接线
仅需两根信号线 + 地线:
-
SCL:时钟线(主机输出时钟)
-
SDA:数据线(双向收发)
所有设备的 SCL、SDA 全部并联到总线上,每个设备拥有唯一设备地址,主机通过地址区分不同从机。

4.3 通信流程核心规则
I2C 通信有固定流程:起始信号 → 设备地址+读写位 → 应答信号 → 寄存器地址 → 数据传输 → 停止信号
-
主机控制时钟,所有从机跟随主机时钟采样数据
-
每次通信必须先“点名设备地址”,被点名设备才会响应
-
支持多设备挂载,总线拓扑非常干净


4.4 优缺点总结
优点:
-
引脚极度节省,多传感器组网非常优雅
-
协议成熟、外设极多、配置简单
-
同步通信,数据稳定不丢帧
缺点:
-
速度慢,一般几百KHz,不适合大数据传输
-
半双工,收发不能同时进行
-
总线容易卡死,从机无应答会导致总线锁死,需要软件复位
-
抗干扰一般,不适合长线传输
4.5 典型场景
-
温湿度、气压、姿态、光照等各类低速传感器
-
EEPROM、RTC实时时钟
-
多传感器集中挂载、引脚资源紧张的场景
五、SPI 通信:板内高速传输之王
5.1 协议基本介绍
SPI 是嵌入式速度最快、效率最高、最稳定的短距离同步通信协议,没有之一。如果说 I2C 是低速传感器专用,SPI 就是高速外设专用。
SPI 采用全双工同步通信,主机提供时钟,收发数据同时进行,速度远超 I2C、UART。
5.2 硬件接线
标准4线:
-
SCK:时钟线
-
MOSI:主机发、从机收
-
MISO:从机发、主机收
-
CS/CE:片选信号线(每个从机独立一根)
多设备挂载需要独立片选,不能并联,所以占用引脚较多。
5.3 通信特点
-
全双工,收发同步进行,传输效率极高
-
无复杂协议帧、无地址、无应答,纯粹高速移位传输
-
通过片选区分设备,选中谁和谁通信
5.4 优缺点
优点:
-
速率极高,可达几十MHz,适合大数据刷屏、读写
-
全双工传输,实时性强
-
协议简单、稳定、极少出错
缺点:
-
占用引脚多,多设备非常费IO
-
无硬件校验、无应答,需要自己做校验机制
-
不适合长距离传输,仅限板内短距离通信
5.5 典型场景
-
LCD、OLED、SPI屏幕高速刷屏
-
SPI Flash、SD卡高速读写
-
高速ADC、射频模块、图像传输
六、CAN 通信:工业级高可靠总线
6.1 协议基本介绍
前面三种协议基本都是板内短距离、设备简单交互,而 CAN 是真正的工业总线协议,主打高抗干扰、长距离、多设备组网、容错重传。
汽车、工控、机器人、电机设备几乎全部依靠 CAN 通信。
6.2 硬件接线
仅需两根差分信号线:
-
CAN_H
-
CAN_L
差分信号传输,抗电磁干扰能力极强,总线两端需要120Ω终端电阻匹配。
6.3 核心协议优势(其他三种完全比不了)
-
差分传输:抑制共模干扰,适合工业强干扰环境
-
多主竞争:支持多设备同时发数据,总线仲裁机制自动避冲突
-
硬件校验+重传:出错自动重发,保证数据绝对可靠
-
长距离传输:千米级通信稳定
-
总线拓扑:一条总线挂载几十上百个设备
6.4 缺点
-
协议复杂、帧结构繁琐,开发难度大
-
需要外置CAN收发器,硬件成本高
-
速率不如SPI,不适合超大吞吐量数据
6.5 典型场景
-
汽车电子、车载设备通信
-
工业控制、机器人、多电机组网
-
远距离、强干扰、多设备总线通信
七、四大协议全方位汇总对比
|
UART |
2线+地 |
低速 |
异步半双工 |
一对一 |
一般 |
调试、模块通信、上位机 |
|
I2C |
2线+地 |
低速 |
同步半双工 |
一对多总线 |
一般 |
各类低速传感器 |
|
SPI |
4线 |
高速 |
同步全双工 |
一对多片选 |
较好 |
屏幕、Flash、高速外设 |
|
CAN |
2差分线 |
中高速 |
差分总线 |
多主多从总线 |
极强 |
工业、车载、远距离组网 |
八、工程实战:到底该怎么选?
我整理了一套嵌入式项目通用选型规则,新手直接照着选不会错:
需要打印调试、连模块、连电脑 → 必选 UART
挂载一堆低速传感器、IO不够用 → 必选 I2C
需要刷屏、存数据、高速传输 → 必选 SPI
工业环境、长线传输、多设备组网、高可靠性 → 必选 CAN
补充避坑经验:
-
不要用 I2C 做高速数据,速度上不去还容易卡死
-
不要用 UART 做多设备总线,极易乱码、冲突
-
不要用 SPI 做长线传输,干扰大、不稳定
-
普通消费产品没必要上 CAN,成本高、协议冗余
九、全文总结
UART、I2C、SPI、CAN 四种协议,没有好坏之分,只有场景适配与否。
UART 主打简单通用,I2C 主打省引脚多设备,SPI 主打高速稳定,CAN 主打工业可靠组网。
真正吃透这四种通信协议,就能搞定嵌入式90%以上的外设开发,不再是只会照搬代码,而是能根据硬件、场景、性能需求自主选型、排查通信异常、优化设备稳定性。
网硕互联帮助中心




评论前必须登录!
注册