云计算百科
云计算领域专业知识百科平台

嵌入式常见通信协议对比:UART、SPI、I2C、CAN 如何选择?

一、前言

做嵌入式开发,本质就是操控外设、传输数据、设备交互。而所有外设交互,都离不开通信协议。

日常开发中最常用的四种通信协议: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%以上的外设开发,不再是只会照搬代码,而是能根据硬件、场景、性能需求自主选型、排查通信异常、优化设备稳定性。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 嵌入式常见通信协议对比:UART、SPI、I2C、CAN 如何选择?
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!