目录

一、三种协议的对比

二、三种协议通信过程简述

串口通信实现方式(低位先行的数据传输)

SPI通信实现方式(常使用高位先行的数据交换)

I²C通信实现方式(高位先行的数据传输)

三、如何根据需求选择使用的通信协议


一、三种协议的对比

特性维度 UART (串口) SPI I²C
全称 Universal Asynchronous Receiver/Transmitter Serial Peripheral Interface Inter-Integrated Circuit
通信类型 异步 同步 同步
信号线 TX, RX, GND (最少3线) SCLK, MOSI, MISO, SS (每从机需1条SS线,4+N线) SDA, SCL (2线)
拓扑结构 点对点 一主多从 (星型) 多主多从 (总线型)
通信方式 全双工 全双工 半双工
数据寻址  (靠物理连接) 硬件片选 (SS线) 软件地址 (7位/10位)
最高速度 约 115.2 kbps (常见),可达数Mbps > 100 Mbps (非常快) 标准模式 100 kbps,快速模式 400 kbps,高速模式 3.4 Mbps
数据顺序 低位先行 高位先行 (通常,可配置) 高位先行
应答机制  (靠软件校验)  (靠软件校验)  (硬件应答位)
硬件复杂度  (MCU基本集成) 中等 (连线多,尤其从机多时)  (连线极少)
软件复杂度  (配置波特率即可)  (逻辑简单) 中等 (需遵循状态机)
优势 实现简单,全双工,历史悠久,成本低 速度极快,全双工,协议灵活简单 引脚最省,硬件地址,多主控,标准成熟
劣势 速度较慢,无时钟同步,点对点 引脚占用多(随从设备增加而增加),无硬件应答,无寻址 速度相对慢,半双工,协议复杂,有上拉电阻功耗

二、三种协议通信过程简述

串口通信实现方式(低位先行的数据传输)

串口通信是异步的,不需要时钟线,依赖双方预先约定好的参数进行通信。

核心步骤:

  1. 参数配置:通信双方必须事先配置完全相同的参数:

    • 波特率:数据传输的速度(如9600, 115200)。

    • 数据位:每个字节的数据长度(通常为8位)。

    • 停止位:表示一个数据包结束的信号(通常为1位)。

    • 校验位:用于简单的错误检测(奇校验、偶校验或无)。

  2. 通信过程

    • 空闲状态:线路保持在高电平。

    • 起始位:发送方先将线路拉低一个时钟周期,作为一个字节传输开始的信号,同步接收方。

    • 数据位:紧接着起始位,发送5-8个数据位(从最低位开始发送)。

    • 校验位:(可选)发送一个校验位。

    • 停止位:最后将线路拉高(至少1个时钟周期),表示该字节传输结束。

特点:硬件简单,仅需两根线(TX、RX)即可实现全双工,但效率相对较低,且依赖精确的波特率匹配。


SPI通信实现方式(常使用高位先行的数据交换)

SPI是同步全双工的通信协议,由主设备完全控制时钟。

核心步骤:

  1. 硬件连接:主设备需要连接所有从设备的公共线(SCLK, MOSI, MISO),并为每个从设备提供一条独立的片选线

  2. 通信过程

    • 初始化:主设备将目标从机的片选线电平拉低,激活该从机。

    • 生成时钟:主设备产生时钟信号,通过SCLK线发送给从机。

    • 数据传输:在时钟信号的每个周期内,主设备通过MOSI线向从机发送一位数据,同时从机也通过MISO线向主设备返回一位数据。一位数据发送和一位数据接收同时完成,实现全双工。

    • 结束通信:通信完成后,主设备将片选线拉高,取消选中该从机。

特点:实现简单,速度非常快,是全双工通信。缺点是引脚占用多(尤其是从设备数量多时),没有硬件应答机制。


I²C通信实现方式(高位先行的数据传输)

I²C是同步半双工的通信协议,仅使用两根线支持多主多从。

核心步骤:

  1. 硬件连接:所有设备(主、从)的SDA和SCL线分别连接在一起,并且通过上拉电阻接到电源。

  2. 通信过程

    • 起始条件:主设备在SCL为高电平时,将SDA从高拉低,表示一次传输的开始。

    • 地址帧:主设备发送一个7位或10位的从机地址,后面紧跟一个读写位(表示主设备希望读取还是写入数据)。

    • 应答位:被寻址的从机在收到地址匹配后,在第9个时钟周期将SDA线拉低,作为应答信号。

    • 数据帧:主设备或从机开始发送8位数据。每发送完一个字节(8位),接收方必须在第9个时钟周期发送一个应答位。

    • 停止条件:主设备在SCL为高电平时,将SDA从低拉高,表示本次传输的结束。

特点:硬件连接极其简单,支持多主设备和硬件地址寻址。缺点是协议相对复杂,速度较慢,是半双工通信。

三、如何根据需求选择使用的通信协议

  • 要速度? -> 首选 SPI

  • 需要引脚少、设备多? -> 首选 I²C

  • 只是两个设备简单通信或调试? -> 首选 UART

  • 需要长距离通信? -> UART(可转换为RS-485标准实现长距离通信),I²C和SPI通常用于板内短距离通信。

Logo

欢迎加入我们的广州开发者社区,与优秀的开发者共同成长!

更多推荐