protocol-analysis
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseProtocol Analysis (I2C / SPI / UART)
协议分析(I2C / SPI / UART)
Purpose
用途
Guide agents through software-side serial bus analysis: logic analyzer workflow, sigrok/PulseView decoding, correlating captures with firmware drivers, and Python-based parsing — bridging and hardware bring-up.
skills/baremetal/spi-i2c-baremetal指导Agent完成串行总线的软件端分析:逻辑分析仪工作流、sigrok/PulseView解码、捕获数据与固件驱动的关联,以及基于Python的解析——衔接与硬件启动环节。
skills/baremetal/spi-i2c-baremetalWhen to Use
适用场景
- Sensor not responding — verify clock and data on bus
- Compare kernel driver transactions vs datasheet
- Document expected transaction format for CI/regression
- Teaching protocol layers without expensive lab gear (sim + decode)
- 传感器无响应——验证总线上的时钟与数据信号
- 对比内核驱动事务与数据手册要求
- 为CI/回归测试记录预期的事务格式
- 在无需昂贵实验设备的情况下教授协议层知识(仿真+解码)
Workflow
工作流程
1. Capture stack
1. 捕获栈
Physical probe → logic analyzer hardware (or GPIO bit-bang)
├── sigrok-cli / PulseView GUI
├── Protocol decoder (i2c, spi, uart)
└── Export VCD/CSV for scriptsOpen-source: sigrok with cheap FX2LA boards.
物理探头 → 逻辑分析仪硬件(或GPIO位 bang)
├── sigrok-cli / PulseView GUI
├── 协议解码器(i2c, spi, uart)
└── 导出VCD/CSV供脚本处理开源方案:搭配廉价FX2LA板卡的sigrok。
2. PulseView quick start
2. PulseView快速入门
bash
undefinedbash
undefinedList devices
列出设备
pulseview
pulseview
CLI capture (device-dependent)
CLI捕获(设备相关)
sigrok-cli --driver fx2lafw --config samplerate=1MHz
--channels 0=SDA,1=SCL
--samples 1m
--protocols i2c
--channels 0=SDA,1=SCL
--samples 1m
--protocols i2c
undefinedsigrok-cli --driver fx2lafw --config samplerate=1MHz
--channels 0=SDA,1=SCL
--samples 1m
--protocols i2c
--channels 0=SDA,1=SCL
--samples 1m
--protocols i2c
undefined3. I2C decode expectations
3. I2C解码预期
| Phase | Lines |
|---|---|
| START | SDA fall while SCL high |
| Address + R/W | 7 bits + ACK |
| Data bytes | ACK per byte |
| STOP | SDA rise while SCL high |
NACK at address → wrong or device held in reset.
0x48| 阶段 | 线路状态 |
|---|---|
| START | SCL为高电平时SDA下降 |
| 地址 + 读/写 | 7位地址 + ACK |
| 数据字节 | 每个字节对应一个ACK |
| STOP | SCL为高电平时SDA上升 |
地址阶段出现NACK → 地址错误(如错误的)或设备处于复位状态。
0x484. SPI decode
4. SPI解码
Check mode (CPOL/CPHA), bit order (MSB first typical), CS polarity, and word size. Compare to in .
spi_setup()skills/kernel-dev/bus-drivers-i2c-spi检查模式(CPOL/CPHA)、位序(通常为MSB优先)、CS极性和字长。可与中的进行对比。
skills/kernel-dev/bus-drivers-i2c-spispi_setup()5. UART decode
5. UART解码
Set baud (9600/115200), frame (8N1), and signal polarity. Async — sample rate must be ≥ 4× baud for LA.
设置波特率(9600/115200)、帧格式(8N1)和信号极性。异步通信——逻辑分析仪的采样率必须≥波特率的4倍。
6. Python post-process (csv)
6. Python后处理(csv格式)
python
import csv
with open("capture.csv") as f:
for ts, ch0, ch1 in csv.reader(f):
# edge detect, reconstruct bits
passpython
import csv
with open("capture.csv") as f:
for ts, ch0, ch1 in csv.reader(f):
# 边沿检测,重构比特流
pass7. Correlate with firmware
7. 与固件关联分析
Logic capture timestamp
├── Match driver reg write sequence
├── Compare inter-byte delay vs datasheet max
└── Flag extra clock pulses (mode fault)逻辑捕获时间戳
├── 匹配驱动寄存器写入序列
├── 对比字节间延迟与数据手册最大值
└── 标记额外时钟脉冲(模式错误)8. Agent usage
8. Agent使用方式
/protocol-analysis Decode this I2C capture — device NACKs after register 0x0F write/protocol-analysis 解码这份I2C捕获数据——设备在写入寄存器0x0F后出现NACKCommon Problems
常见问题
| Symptom | Cause | Fix |
|---|---|---|
| Garbage decode | Wrong samplerate | ≥ 4× bus speed |
| Floating lines | Missing pull-ups | Enable internal pull or external |
| SPI shifted bits | Mode mismatch | CPOL/CPHA table from RM |
| UART framing errors | Baud drift | Measure actual bit time |
| No decoder | Missing sigrok build | Install |
| 症状 | 原因 | 解决方法 |
|---|---|---|
| 解码结果乱码 | 采样率错误 | 设置为总线速度的≥4倍 |
| 线路浮空 | 缺少上拉电阻 | 启用内部上拉或添加外部上拉电阻 |
| SPI比特移位 | 模式不匹配 | 参考参考手册的CPOL/CPHA表 |
| UART帧错误 | 波特率漂移 | 测量实际比特时间 |
| 无解码器 | sigrok构建不完整 | 安装 |
Related Skills
相关技能
- — firmware-side protocol
skills/baremetal/spi-i2c-baremetal - — UART config
skills/baremetal/uart-serial-baremetal - — kernel transactions
skills/kernel-dev/bus-drivers-i2c-spi - — userspace syscall trace analog
skills/profilers/strace-ltrace - — scope alongside SWD debug
skills/embedded/openocd-jtag
- —— 固件端协议处理
skills/baremetal/spi-i2c-baremetal - —— UART配置
skills/baremetal/uart-serial-baremetal - —— 内核事务处理
skills/kernel-dev/bus-drivers-i2c-spi - —— 用户空间系统调用跟踪的同类技能
skills/profilers/strace-ltrace - —— 配合SWD调试的示波器技能
skills/embedded/openocd-jtag