接通几根线不等于协议配置正确。外设通信先检查电源、电平与地参考,再检查引脚复用、时钟、速率与帧格式,最后才看业务数据。
四类接口怎样选
| 接口 | 主要用途 | 需要明确的条件 |
|---|---|---|
| GPIO | 开关量、片选、状态输入 | 输入/输出、推挽/开漏、上下拉、默认状态、电流能力 |
| UART | 异步串行字节流 | 波特率、数据位、奇偶校验、停止位、流控和电气标准 |
| I²C | 多器件共享短距离控制总线 | 目标地址、上拉、总线电容、ACK/NACK、重复起始与超时 |
| SPI | 有片选的同步数据传输 | CPOL/CPHA、位序、字长、片选时序、频率和器件等待要求 |
UART 的 TTL/CMOS 电平不能直接接 RS-232 电压,也不能把差分 RS-485 当成同一种接线。SPI 的四种模式由空闲时钟电平与采样边沿决定;控制器和目标的模式、位序必须一致。
吞吐先算线上位数
115200 baud、8N1 的 UART 每个字节占一位起始、八位数据、一位停止,共十位,理论上限为 11520 字节/秒。若每帧 32 字节,理论最多 360 帧/秒,还未扣帧间隔、软件调度与重传。不能把波特率直接当作有效字节吞吐。
I²C 的 ACK 占用额外时钟,地址、寄存器索引和起止条件也有开销。读取一个寄存器常包含写地址和索引、重复起始、读地址与数据。某些 SDK 接受 7 位地址,某些接口要求移位后的地址参数;应查 API,不能看到线上地址字节就直接复制常量。
标准双向 I²C 线路通过开漏和上拉建立高电平。简化上升时间关系为 tr≈0.8473×Rp×Cb。若总线电容 100 pF、目标上升时间不超过 300 ns,推得上拉电阻约不超过 3.54 kΩ。下限还受器件低电平灌电流限制。多个模块自带上拉会并联,既可能改善上升时间,也可能使灌电流过大。
字节流还需要应用帧
UART 只给出字节边界,不知道哪几个字节是一条传感器记录。应用协议应定义同步标记、长度、类型、序号、数据字节序和校验。接收逻辑必须处理一个帧分多次到达、多个帧合在一次读取、损坏长度和中途断流。
本地先手算 UART 带宽和上拉范围,再使用 网关帧解析项目 的分块与坏帧输入观察解析结果。这个实验验证应用帧处理,不验证 UART 或 I²C 电气波形。
真实接口排障顺序
- 断电核对引脚、地与电平,通电后测待机状态和上下拉。
- 查引脚复用与外设时钟。确认示波器看到的时钟频率,避免只相信配置界面。
- 在逻辑分析仪中设置相同协议参数,逐位核对地址、边沿、ACK 与片选。
- 加上超时、错误计数和恢复策略。I²C SDA 被拉低时,先查供电与器件状态,再按器件和控制器允许的方法恢复总线。
练习:采样率 500 Hz、每条记录 24 字节、UART 115200 8N1,说明为何长期不可持续;给出提高波特率、压缩格式或降低采样率的取舍。再计算上拉改为 10 kΩ 后的上升时间,并与设定目标比较。
面试自查:I²C 为什么需要上拉?SPI 为什么可能全收到 0xFF?串口读一次为什么不一定得到完整帧?DMA 为什么不能替代协议解析?