电子知识笔记—单片机通信协议入门指南:5种常用协议详解与实战选择

一、通信协议是什么?

想象你和小伙伴传纸条,纸条上要写清楚“谁写的、写给谁、内容是什么”——这就是通信协议的作用。
在单片机中,通信协议是设备之间交换数据的规则,就像人类语言一样,双方必须用同一种“语言”才能交流。


二、5种常用通信协议详解

(从简单到复杂排序,附Arduino示例代码)


1. UART(串口通信)

基本概念

  • 最简单的“一对一”通信,像两个人直接对话。

  • 需要两根线:TX(发送)、RX(接收)。

  • 工作原理

  • 双方约定相同的波特率(每秒传输的位数,如9600)。

  • 发送方按固定格式发送数据(起始位+数据位+停止位)。

  • 示例代码(Arduino)

    cpp

    void setup() {  
      Serial.begin(9600); // 设置波特率  
    }  
    void loop() {  
      Serial.println("Hello World!");  
      delay(1000);  
    }  

    优点
    ✅ 硬件简单,几乎所有单片机都支持
    ✅ 调试方便(可用USB转TTL模块连接电脑)

    缺点
    ❌ 只能点对点通信(不能接多个设备)
    ❌ 传输距离短(一般不超过3米)

    适用场景

  • 单片机与电脑通信(上传程序、打印调试信息)

  • 两个设备间简单数据交换(如Arduino控制蓝牙模块)


  • 2. I²C(Inter-Integrated Circuit)

    基本概念

  • “多设备会议”协议,主设备通过地址呼叫从设备。

  • 需要两根线:SCL(时钟线)、SDA(数据线)。

  • 工作原理

  • 每个从设备有唯一地址(如0x68)。

  • 主设备发送地址信号,只有匹配的从设备响应。

  • 示例场景

  • 主控芯片通过I²C连接多个传感器(温湿度+光照+气压)。

  • 优点
    ✅ 支持多设备(最多128个)
    ✅ 节省引脚(两根线搞定)

    缺点
    ❌ 速度较慢(标准模式100kbps)
    ❌ 通信距离短(一般不超过1米)

    实战问题

  • 地址冲突:多个相同传感器地址重复
    → 解决方法:选择支持地址配置的传感器(如BME280可改地址)


  • 3. SPI(Serial Peripheral Interface)

    基本概念

  • “高速专线”协议,适合大数据量传输。

  • 需要四根线:SCK(时钟)、MOSI(主发从收)、MISO(主收从发)、SS(片选)。

  • 工作原理

  • 主设备通过SS引脚选择要通信的从设备。

  • 时钟信号由主设备控制,数据同步传输。

  • 示例场景

  • 连接显示屏(如OLED)、SD卡模块、高速ADC芯片。

  • 优点
    ✅ 速度极快(可达几十Mbps)
    ✅ 全双工通信(同时收发数据)

    缺点
    ❌ 占用引脚多(每增加一个设备需多一个SS引脚)
    ❌ 布线复杂(长距离易受干扰)

    实战问题

  • 信号干扰:SPI线过长导致数据错误
    → 解决方法:缩短线长(建议<30cm),或使用屏蔽线


  • 4. CAN(控制器局域网)

    基本概念

  • “抗干扰高手”,专为汽车/工业环境设计。

  • 需要两根差分信号线:CAN_H、CAN_L。

  • 工作原理

  • 采用差分信号,抗干扰能力强。

  • 支持多主机通信,自动仲裁冲突。

  • 示例场景

  • 汽车ECU(发动机控制单元)之间的通信

  • 工业机器人多个关节控制器联网

  • 优点
    ✅ 超强抗干扰(可传输上千米)
    ✅ 高可靠性(自动错误检测与重发)

    缺点
    ❌ 硬件成本高(需专用CAN控制器)
    ❌ 协议复杂(需要学习CAN ID、数据帧格式)


    5. 蓝牙/WiFi(无线协议)

    基本概念

  • 通过无线信号传输数据,分短距离(蓝牙)和远距离(WiFi)。

  • 常用模块:HC-05(蓝牙)、ESP8266(WiFi)。

  • 示例场景

  • 手机APP控制智能家居(如蓝牙控制LED灯)

  • 单片机上传数据到云端(通过WiFi)

  • 优点
    ✅ 无需物理连线
    ✅ 适合移动设备交互

    缺点
    ❌ 开发复杂度高(需处理网络协议栈)
    ❌ 受环境干扰大(如WiFi信号拥堵)


    三、如何选择协议?一张表搞定

    需求 推荐协议 理由
    两个设备简单通信 UART 硬件简单,无需复杂配置
    多个传感器数据采集 I²C 省引脚,易扩展
    高速传输(如显示屏) SPI 速度最快,实时性强
    工业/汽车环境 CAN 抗干扰,可靠性最高
    无线控制 蓝牙/WiFi 摆脱连线限制

    四、常见问题与解决技巧

    1. 电平不匹配(如5V单片机接3.3V传感器)
      → 使用电平转换模块(如TXB0108)

    2. 通信失败
      → 检查步骤:

      1. 确认波特率/地址设置一致

      2. 用示波器查看信号波形

      3. 缩短连线,避免干扰

    3. 协议选择困难
      → 记住三个关键参数:

    4. 速度:SPI > I²C > UART

    5. 设备数量:I²C > SPI > UART

    6. 抗干扰:CAN > 其他有线协议 > 无线


    五、总结

    通信协议就像单片机世界的“语言”,选择合适协议能让你的项目事半功倍。建议小白先从UART和I²C入手,逐步挑战SPI和无线协议。记住:没有最好的协议,只有最适合场景的协议

    (附:学习资源推荐)

  • 动手实验:用Arduino Uno尝试所有协议

  • 工具推荐:逻辑分析仪(30元入门款即可)

  • 进阶书籍:《嵌入式系统接口设计》

  • 作者:holtek合泰芯片选型及支持

    物联沃分享整理
    物联沃-IOTWORD物联网 » 电子知识笔记—单片机通信协议入门指南:5种常用协议详解与实战选择

    发表回复