UART、SPI 和 I2C深度探索

通信接口是电子设备之间数据交换的基础,常见的接口如 UART、SPI 和 I2C 各有独特的技术特性和适用场景。以下是对这些接口的详细技术分析。

UART(通用异步收发传输器)

UART 是一种异步串行通信协议,广泛用于简单的点对点通信。

  • 波特率
    波特率是 UART 通信的核心参数,表示每秒传输的位数,常见值包括 9600、19200、38400、57600 和 115200 bps。波特率的选择需要权衡传输速度和可靠性。例如,低波特率(如 9600 bps)适用于长距离通信,因为信号衰减和噪声干扰较少;而高波特率(如 115200 bps)适合短距离高速传输,但对时钟精度要求更高。
  • 数据帧格式
    UART 的数据帧由以下部分组成:
    • 起始位:1 位,标志数据帧开始,通常为低电平。
    • 数据位:5 到 8 位,承载实际数据,8 位最为常见。
    • 奇偶校验位:可选,用于错误检测,可以是奇校验、偶校验或无校验。
    • 停止位:1 或 2 位,标志数据帧结束,通常为高电平。
      例如,一个典型配置可能是“8N1”,即 8 位数据、无校验、1 位停止位。
  • 流控制
    UART 支持两种流控制机制:
    • 硬件流控制:使用 RTS(请求发送)和 CTS(允许发送)信号线,避免数据溢出。
    • 软件流控制:使用 XON/XOFF 字符控制数据流,适用于无额外引脚的场景。
  • 错误检测
    UART 的错误检测主要依赖奇偶校验,但仅能发现错误,无法纠正。对于更高可靠性需求的应用,可引入 CRC(循环冗余校验)等机制。

SPI(串行外设接口)

SPI 是一种同步串行通信协议,以其高速度和简单性著称,适用于主从架构。

  • 时钟极性和相位
    SPI 有四种工作模式,由时钟极性(CPOL)和时钟相位(CPHA)定义:
    • CPOL=0, CPHA=0:时钟空闲为低电平,数据在上升沿采样。
    • CPOL=0, CPHA=1:时钟空闲为低电平,数据在下降沿采样。
    • CPOL=1, CPHA=0:时钟空闲为高电平,数据在下降沿采样。
    • CPOL=1, CPHA=1:时钟空闲为高电平,数据在上升沿采样。
      这些模式需在主从设备间保持一致。
  • 传输模式
    SPI 支持:
    • 全双工:MOSI(主出从入)和 MISO(主入从出)同时传输数据。
    • 半双工:MOSI 或 MISO 交替传输。
    • 单工:仅使用一条数据线传输。
  • 片选信号
    SPI 通过片选信号(SS/CS)选择从设备。主设备拉低 SS 激活从设备,拉高 SS 释放从设备。多从设备场景下,每个从设备需独立 SS 引脚。
  • 数据传输
    SPI 以字节为单位传输,SCLK(时钟信号)控制传输速率,无需帧间间隔,适合高速连续数据传输。

I2C(内部集成电路)

I2C 是一种多主多从的串行通信协议,以引脚少和灵活性著称。

  • 总线结构
    I2C 使用两条线:
    • SDA(数据线):传输数据。
    • SCL(时钟线):同步时钟。
      两者采用开漏设计,需上拉电阻维持高电平。
  • 地址机制
    I2C 支持:
    • 7 位地址:范围 0x00 到 0x7F,支持 128 个设备。
    • 10 位地址:范围 0x000 到 0x3FF,支持更多设备。
      主设备通过地址帧选择从设备。
  • 通信过程
    • 起始条件:SDA 从高到低跳变,SCL 保持高电平。
    • 数据传输:每字节后,从设备发送 ACK(应答位,低电平表示成功)。
    • 停止条件:SDA 从低到高跳变,SCL 保持高电平。
  • 时钟同步
    I2C 支持多主竞争,总线上的主设备通过拉低 SCL 同步时钟,确保通信稳定。
  • 错误检测
    通过 ACK 机制检测传输错误,若从设备未应答(NACK),主设备可重试或中止通信。

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。更多免费资源在http://www.gitweixin.com/?p=2627

发表评论

邮箱地址不会被公开。 必填项已用*标注