当前位置: 首页 > news >正文

嵌入式系统中常用通信协议

通信基础概念

  • 信号: 信息的物理表示(电压、电流、光、无线电波)。
  • 传输介质: 导线(单线、双绞线、同轴电缆)、PCB走线、光纤、空气(无线)。
  • 数据帧/包: 结构化传输的基本单位(起始位、地址、数据、控制信息、校验位、停止位)。
  • 波特率 (Baud Rate) : 单位时间内传输的信号变化次数
  • 比特率 (Bit Rate): 单位时间内传输的有效数据比特数(通常等于波特率)。
  • 错误检测: 奇偶校验、校验和 (Checksum)、循环冗余校验 (CRC)。
  • 协议栈: 通信功能的层次化抽象(物理层、数据链路层、应用层等 - OSI模型简化)。

同步 vs. 异步:

  • 同步:通信双方使用共享的时钟信号来协调数据传输(如 SPI, I2C)。
  • 异步:通信双方使用各自的时钟,依靠起始位、停止位和波特率约定来同步(如 UART)。

串行 vs. 并行:

  • 串行:数据位在单条线路上一位接一位地传输(大多数嵌入式协议)。
  • 并行:数据位在多条线路上同时传输(速度快但线多,现代嵌入式较少用)。

单工、半双工、全双工:

  • 单工:数据只能单向传输(如广播)。
  • 半双工:数据可以双向传输,但不能同时(如 I2C, CAN)。
  • 全双工:数据可以同时双向传输(如 SPI, UART)。

主从模式 (Master/Slave) vs. 对等模式 (Peer-to-Peer):

  • 主从:一个主设备控制通信,发起请求;一个或多个从设备响应。
  • 对等:设备之间可以平等地发起通信(如 CAN)。

1. UART / RS-232/RS-485

  • UART:Universal Asynchronous Receiver/Transmitter)
  • 核心特点: 异步、串行、全双工(通常)、点对点(标准UART)。
  • 优点: 简单、成本极低(硬件普遍集成)、全双工、易于实现和调试。
  • 缺点: 无寻址(不适合多设备),无硬件冲突检测(需软件处理),抗干扰能力差(TTL/RS-232),距离有限(RS-485 可较长)。
  • 典型应用: 调试输出 (Console), 连接 PC 和微控制器, 与 GPS/GPRS 模块通信, 两个微控制器间简单通信。RS-485 用于工业环境较长距离通信(多节点)。
  • 关键概念: 波特率、帧格式 (数据位/停止位/奇偶校验)、流控 (RTS/CTS - 可选)。

物理层:

  • 电平标准:TTL (0-3.3V/5V), RS-232 (±3V to ±15V), RS-485 (差分 ±1.5V to ±6V)。
  • 接线:最少2线(TX, RX),加上 GND。RS-232 常用 DB9 连接器。RS-485 需要差分线 (A+, 😎。

数据链路层:

  • 帧结构:起始位 (1 bit, Low) + 数据位 (5-9 bits) + 可选的奇偶校验位 (1 bit) + 停止位 (1, 1.5, 2 bits, High)。
  • 无寻址机制:物理点对点连接隐含了通信对象。
  • 无时钟线:依靠约定的波特率、起始位和停止位同步。
  • 错误检测:奇偶校验(可选)。

2. I2C / TWI

  • I2C:Inter-Integrated Circuit
  • TWI :Two-Wire Interface
  • 核心特点: 同步、串行、半双工、多主多从(通常单主)、基于地址。
  • 优点: 引脚数极少(2线),支持多设备,支持多主(有仲裁),有硬件应答机制,速度适中,广泛支持。
  • 缺点: 半双工(同一时刻只能单向),速度比 SPI 慢,总线电容和上拉电阻限制了最高速度和设备数量,开漏结构在高负载时上升沿可能较慢。
  • 典型应用: 连接低速外设:传感器(温度、湿度、加速度计)、EEPROM、RTC、LCD 控制器、I/O 扩展器、ADC/DAC。
  • 关键概念: 7/10位地址、ACK/NACK、起始/停止/重复起始条件、时钟拉伸、开漏/上拉。

物理层:

  • 电平标准:通常是微控制器的逻辑电平(3.3V/5V)。
  • 接线:仅需两条线
    • SDA (Serial Data):双向数据线。
    • SCL (Serial Clock):由主设备产生的时钟线。
  • 开漏/集电极输出:需要上拉电阻(Rp)将总线拉高。设备只能拉低总线(线与逻辑)。

数据链路层:

  • 帧结构:

    • 起始条件 (Start Condition):SCL 高时 SDA 从高变低。
    • 地址帧:7位或10位从设备地址 + 1位读写方向位 (R/W#)。
    • 数据帧:8位数据 + 1位应答位 (ACK/NACK)。ACK 由接收方在数据后拉低 SDA。
    • 停止条件 (Stop Condition):SCL 高时 SDA 从低变高。
    • 重复起始条件 (Repeated Start):在不释放总线的情况下发起新传输。
  • 寻址:每个从设备有唯一地址(部分地址可配置)。

  • 仲裁:多个主设备尝试同时启动传输时,通过线与逻辑仲裁(谁先发0谁赢)。

  • 时钟拉伸:从设备可以在处理数据时拉低 SCL 暂停主设备时钟(低速从设备特性)。

  • 速度模式:标准 (100 kbps), 快速 (400 kbps), 快速模式+ (1 Mbps), 高速 (3.4 Mbps)。

3. SPI

  • SPI :Serial Peripheral Interface

  • 核心特点: 同步、串行、全双工(通常)、主从模式、基于片选。

  • 优点: 速度高(远快于 I2C/UART),全双工,协议简单灵活(无复杂帧结构),驱动能力强(推挽)。

  • 缺点: 引脚占用多(每增加一个从设备需多一条 SS 线),不支持多主,无硬件错误检测/应答,无总线仲裁。

  • 典型应用: 连接高速外设:SD卡、Flash存储器、显示屏(TFT, OLED)、高速ADC/DAC、以太网/WiFi模块、传感器(需要高速读取时)。

  • 关键概念: CPOL/CPHA (Mode 0-3)、片选 (SS/CS)、全双工、主从时钟 (SCLK)。

物理层:

  • 电平标准:通常是微控制器的逻辑电平(3.3V/5V)。
  • 接线:至少4条线(全双工):
    • SCLK (Serial Clock):由主设备产生的时钟线。
    • MOSI (Master Out Slave In):主设备输出,从设备输入。
    • MISO (Master In Slave Out):主设备输入,从设备输出。
    • SS/CS (Slave Select / Chip Select):主设备控制,选择激活哪个从设备(每个从设备需要独立的 SS 线)。
  • 推挽输出:驱动能力强,速度高。

数据链路层:

  • 帧结构:无严格定义的帧(起始/停止)。数据传输在时钟边沿发生。
  • 寻址:通过硬件片选线 (SS/CS) 选择从设备。无地址字节。
  • 时钟相位 (CPHA) 和极性 (CPOL):定义数据在时钟的哪个边沿采样和输出。有4种组合模式 (Mode 0-3)。
  • 数据传输:主设备在 SCLK 控制下,通过 MOSI 发送数据位,同时通过 MISO 接收从设备发来的数据位(全双工)。
  • 无硬件应答:需要软件或协议层确认。

4. CAN

  • CAN :Controller Area Network
  • 核心特点: 异步、串行、多主、对等、基于消息ID、差分信号、高可靠性。
  • 优点: 极高的抗干扰能力(差分信号),可靠的多主对等通信(仲裁机制),强大的错误检测和处理能力,实时性好(基于优先级),传输距离较长(可达数千米@低速率)。
  • 缺点: 协议复杂(硬件和软件),成本相对较高(需要专用 CAN 控制器/收发器),数据负载短(最大8字节)。
  • 典型应用: 汽车电子网络 (ECU 通信)、工业自动化 (PLC 网络)、医疗设备、船舶、航空航天等需要高可靠性的分布式系统。
  • 关键概念: 差分信号、消息 ID/优先级、非破坏性仲裁、错误帧、错误计数器、总线关闭、终端电阻。

物理层:

  • 电平标准:差分信号 (CAN_H, CAN_L), 显性电平 (Differential Voltage ≈ 2V) 代表逻辑0, 隐性电平 (≈ 0V) 代表逻辑1。抗干扰能力强。
  • 接线:两条双绞线 (CAN_H, CAN_L), 终端电阻 (120Ω) 必不可少。

数据链路层:

  • 帧结构:非常健壮。
    • 仲裁域:包含消息 ID (11位标准帧 / 29位扩展帧) 和 RTR (远程传输请求) 位。ID 决定消息优先级(值越小优先级越高)。
    • 控制域:数据长度码 (DLC)。
    • 数据域:0-8 字节数据。
    • CRC域:强大的15位CRC校验。
    • 应答域:接收节点确认。
    • 帧结束域。
  • 寻址:基于消息 ID (广播性质),接收节点根据 ID 过滤消息。无物理地址。
  • 非破坏性位仲裁:多个节点同时发送时,优先级高的消息(ID值小)赢得总线访问权,低优先级节点自动退出发送并在总线空闲时重试。
  • 错误检测与处理:5种错误检测机制(位错误、填充错误、CRC错误、格式错误、应答错误)和复杂的错误限制与节点隔离机制。高可靠性核心。

协议对比总结

特性UART (TTL/RS-232)UART (RS-485)I2C (TWI)SPICAN
同步/异步异步异步同步同步异步
串行/并行串行串行串行串行串行
双工方式全双工半双工 (通常)半双工全双工 (通常)半双工
主从/对等点对点 (无主从)多节点 (主/从)主从 (多从)主从 (多从)多主/对等
寻址方式无 (物理连接)无 (需软件)7/10位地址硬件片选 (SS/CS)消息 ID
时钟线SCLSCLK
数据线数量2 (TX, RX) + GND2 (A+,“B-”) + GND2 (SDA, SCL)3/4+ (SCLK, MOSI, MISO, SS/CS)2 (CAN_H, CAN_L)
总线拓扑点对点多点 (总线型)多点 (总线型)点对点 / 星型多点 (总线型)
最大速度中等 (通常 < 1Mbps)中等 (通常 < 10Mbps)快 (标准100k, 高速3.4M)很快 (可达 100M+ bps)中等 (通常 125k-1Mbps)
抗干扰能力差 (TTL)/中 (232)强 (差分)中 (开漏上拉)中 (推挽)极强 (差分+协议)
传输距离短 (TTL)/中 (232)长 (千米级)短 (板级/设备级)短 (板级/设备级)长 (千米级@低速)
设备数量限制232/128 (驱动器负载)受总线电容/地址限制受片选线数量限制理论上很多 (110+)
协议复杂度简单简单 (物理层不同)中等简单复杂
成本极低中 (引脚多)中高
典型应用调试, PC连接工业现场总线低速传感器, 小外设高速存储器, 显示屏汽车, 工业控制
关键优势简单, 全双工距离长, 多点引脚少, 多点寻址速度快, 全双工, 简单可靠, 多主, 抗干扰
主要劣势无寻址, 抗扰差半双工, 需软件寻址速度慢, 半双工引脚多, 无多主/仲裁复杂, 数据包小

协议选择考量因素

  1. 速度要求: 需要高速传输?选 SPI。低速传感器?I2C/UART 足够。
  2. 设备数量: 连接很多设备?I2C/CAN/RS-485 适合。点对点?UART/SPI。
  3. 距离要求: 长距离?RS-485/CAN。短距离板级?UART/I2C/SPI。
  4. 抗干扰性: 恶劣环境?CAN/RS-485 (差分)。
  5. 拓扑结构: 总线型?I2C/CAN/RS-485。点对点或星型?UART/SPI。
  6. 双工要求: 需要同时收发?SPI/UART (全双工)。单向或轮流收发?I2C/CAN/RS-485 (半双工)。
  7. 引脚限制: 引脚紧张?首选 I2C (2线), 其次 UART (2/3线)。引脚充足?SPI/CAN。
  8. 主从关系: 单一主控?I2C/SPI。需要多个设备主动发起通信?CAN。
  9. 可靠性要求: 极高可靠性?CAN (内置强大错误处理)。一般应用?其他协议。
  10. 数据量大小: 大块数据?SPI/UART。小数据包?I2C/CAN (尤其CAN限8字节)。
  11. 成本与复杂度: 低成本简单?UART/I2C。接受复杂和高成本?CAN。
  12. 处理器/外设支持: 目标MCU硬件是否原生支持该协议?外设本身支持哪些协议?

其它协议

  • 1-Wire: 单总线协议(如 DS18B20 温度传感器),成本极低,速度慢。
  • USB (Device/Host): 复杂但应用广泛,用于连接PC、外设(HID, Mass Storage, CDC)。
  • Ethernet: 用于网络连接(TCP/IP, UDP)。
  • Bluetooth/BLE, Wi-Fi: 无线通信协议。
  • Modbus: 建立在串行链路(RS-232/485)或 TCP/IP 之上的应用层协议,工业标准。
  • I3C: I2C 的演进版本,目标取代 I2C,提高速度、降低功耗、增强功能。
http://www.lryc.cn/news/606593.html

相关文章:

  • RAGFlow Agent 知识检索节点源码解析:从粗排到精排的完整流程
  • 电脑的时间同步电池坏掉了,每次开机都要调整时间
  • 江协科技STM32 11-4 SPI通信外设
  • 生物医药研究数据分析工具测评:衍因科技如何重塑科研范式?
  • Git Pull 时遇到 Apply 和 Abort 选项?详解它们的含义与应对策略
  • LeetCode 面试经典 150_数组/字符串_买卖股票的最佳时机(7_121_C++_简单)(贪心)
  • 《黑马笔记》 --- C++ 提高编程
  • 【数据结构入门】时间、空间复杂度的计算
  • 基于C++的protobuf协议使用(四)项目应用与总结
  • 2025 年 7 月 TIOBE 指数
  • 数据结构: 双向链表
  • MySQL查询语句详解
  • 常见的中间件漏洞练习教程
  • python每日一题练习---简单题目
  • kafka使用kraft
  • 第二篇:Three.js核心三要素:场景、相机、渲染器
  • AscendantPath | 实现视觉小说的人物对话系统(二)
  • 嵌入式开发学习———Linux环境下IO进程线程学习(一)
  • 分布内侧内嗅皮层的层Ⅱ或层Ⅲ的网格细胞(grid cells)对NLP中的深层语义分析的积极影响和启示
  • 什么是数据集成?和数据融合有什么区别?
  • AI陪伴的发展现状
  • Linux应用开发基础知识——Makefile初级教程(九)
  • 20250731解决RK3588的AIOT参考设计刷机之后可以启动但是断电进MASKROM模式
  • Ⅹ—6.计算机二级综合题19---22套
  • flowable对已经部署的流程进行更新,不产生新版本
  • anaconda searchanaconda show | conda 检索包资源安装指定版本包指定源安装命令package
  • Java学习------Executor框架
  • 数据结构:多项式表示(polynomial representation)
  • 力扣 Pandas 挑战(6)---数据合并
  • 从零开始搞定类和对象(上)