一、接口协议基础与兼容性概述
做硬件验证这些年,我最大的感触就是——接口协议是芯片的“语言”。两个模块要通信,得说同一种话。但现实往往是,A 模块说 I2C,B 模块也说 I2C,结果一接上就出问题。为什么?因为“同一种话”也有方言。
这一章,我们先捋清楚常见接口协议的核心特征,再深挖兼容性问题的根源。嗯,这部分是后面所有排查工作的地基。
1.1 常见硬件接口协议速览
我个人习惯把接口协议分成两类:同步和异步。同步协议带时钟线,异步协议靠波特率或握手。下面这五个,是咱们最常打交道的。
| 协议 | 类型 | 信号线数 | 最大速率(典型) | 通信方式 | 典型应用 |
|---|---|---|---|---|---|
| I2C | 同步 | 2(SCL, SDA) | 3.4 MHz(高速模式) | 半双工,多主多从 | 传感器、EEPROM、RTC |
| SPI | 同步 | 4(SCK, MOSI, MISO, CS) | 50 MHz 以上 | 全双工,一主多从 | ADC/DAC、LCD、Flash |
| UART | 异步 | 2(TX, RX) | 1 Mbps(典型) | 全双工,点对点 | 调试口、GPS、蓝牙模块 |
| USB | 异步 | 4(D+, D-, VBUS, GND) | 5 Gbps(USB 3.0) | 半双工/全双工,主从 | 存储、键盘、摄像头 |
| PCIe | 同步 | 每 Lane 4 线(差分对) | 16 GT/s(PCIe 4.0) | 全双工,点对点 | GPU、SSD、网卡 |
1.2 I2C 协议核心要点
I2C 只有两根线:SCL(时钟)和 SDA(数据)。所有设备挂在总线上,靠地址区分。我记得第一次调 I2C 时,总线上挂了三个从设备,结果一个都读不到。后来发现是上拉电阻没焊——开漏输出没上拉,信号根本拉不起来。
- 起始条件: SCL 高电平时,SDA 从高变低。
- 停止条件: SCL 高电平时,SDA 从低变高。
- 应答机制: 每发完一个字节,接收方拉低 SDA 表示 ACK。
- 时钟拉伸: 从设备可以拉低 SCL 让主设备等待。这个特性很多验证工程师会忽略。
1.3 SPI 协议核心要点
SPI 比 I2C 快,但线多。四根线:SCK(时钟)、MOSI(主出从入)、MISO(主入从出)、CS(片选)。全双工,同一时刻能发能收。
SPI 的兼容性问题,十有八九出在时钟极性(CPOL)和时钟相位(CPHA)上。CPOL 决定空闲时时钟电平,CPHA 决定数据在哪个边沿采样。组合起来有四种模式。
| 模式 | CPOL | CPHA | 空闲时钟 | 采样边沿 |
|---|---|---|---|---|
| 0 | 0 | 0 | 低电平 | 上升沿 |
| 1 | 0 | 1 | 低电平 | 下降沿 |
| 2 | 1 | 0 | 高电平 | 下降沿 |
| 3 | 1 | 1 | 高电平 | 上升沿 |
1.4 UART 协议核心要点
UART 是异步的,没有时钟线。收发双方得约定好波特率、数据位、停止位、校验位。说白了,就是得提前说好“语速”和“语法”。
UART 的兼容性问题,根源几乎都是波特率误差。发送方和接收方的时钟源有偏差,累积到数据帧末尾就可能采错。
- 标准帧格式: 起始位(1 bit)+ 数据位(5~8 bit)+ 校验位(可选)+ 停止位(1/1.5/2 bit)。
- 波特率误差容忍度: 一般要求 < 3%。超过这个值,误码率会急剧上升。
1.5 USB 协议核心要点
USB 比前面几个复杂得多。它分主机(Host)和设备(Device),通信靠枚举过程建立。USB 2.0 用差分信号 D+ 和 D-,USB 3.0 增加了超高速差分对。
USB 的兼容性问题,常见的有:
- 电气特性不匹配: 信号幅度、上升时间、下降时间超出规范。
- 枚举失败: 设备描述符返回错误,主机不认设备。
- 电源问题: VBUS 电压跌落,设备供电不足。
1.6 PCIe 协议核心要点
PCIe 是高速串行总线,用差分对传输。每条 Lane 包含两组差分对:一组发送,一组接收。PCIe 的兼容性问题,主要集中在链路训练状态机(LTSSM)上。
LTSSM 是 PCIe 物理层的状态机,负责链路的建立和恢复。它包含 Detect、Polling、Configuration、L0、L0s、L1、Recovery 等状态。链路训练失败,设备就认不到。
- Detect: 检测对端是否存在。
- Polling: 交换训练序列,对齐比特和符号。
- Configuration: 协商 Lane 数和速率。
- L0: 正常工作状态。
1.7 兼容性问题的根源分析
说了这么多协议,我们来总结一下兼容性问题的根源。我个人把它归纳为四个层面:
- 电气层面: 电平标准不匹配(3.3V vs 1.8V)、驱动能力不足、信号完整性差。
- 时序层面: 时钟歪斜、建立/保持时间违例、波特率误差。
- 协议层面: 模式不匹配(SPI 模式)、地址冲突(I2C)、枚举失败(USB)。
- 状态机层面: 链路训练失败(PCIe)、时钟拉伸超时(I2C)。
你想想看,一个系统里可能同时存在这四个层面的问题。排查的时候,得一层一层剥开。
1.8 本章知识体系
下面这张图,把本章的核心逻辑串起来了。从协议分类到兼容性根源,再到排查思路,一目了然。
这张图把本章的知识结构串起来了。从协议分类到兼容性根源,再到排查顺序,后面每一章都会围绕这个框架展开。你可以在后续学习中随时回来对照,看看当前章节落在哪个位置。