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),主设备可重试或中止通信。