protocol-analysis

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Protocol 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
skills/baremetal/spi-i2c-baremetal
and hardware bring-up.
指导Agent完成串行总线的软件端分析:逻辑分析仪工作流、sigrok/PulseView解码、捕获数据与固件驱动的关联,以及基于Python的解析——衔接
skills/baremetal/spi-i2c-baremetal
与硬件启动环节。

When 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 scripts
Open-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
undefined
bash
undefined

List devices

列出设备

pulseview
pulseview

CLI capture (device-dependent)

CLI捕获(设备相关)

sigrok-cli --driver fx2lafw --config samplerate=1MHz
--channels 0=SDA,1=SCL
--samples 1m
--protocols i2c
undefined
sigrok-cli --driver fx2lafw --config samplerate=1MHz
--channels 0=SDA,1=SCL
--samples 1m
--protocols i2c
undefined

3. I2C decode expectations

3. I2C解码预期

PhaseLines
STARTSDA fall while SCL high
Address + R/W7 bits + ACK
Data bytesACK per byte
STOPSDA rise while SCL high
NACK at address → wrong
0x48
or device held in reset.
阶段线路状态
STARTSCL为高电平时SDA下降
地址 + 读/写7位地址 + ACK
数据字节每个字节对应一个ACK
STOPSCL为高电平时SDA上升
地址阶段出现NACK → 地址错误(如错误的
0x48
)或设备处于复位状态。

4. SPI decode

4. SPI解码

Check mode (CPOL/CPHA), bit order (MSB first typical), CS polarity, and word size. Compare to
spi_setup()
in
skills/kernel-dev/bus-drivers-i2c-spi
.
检查模式(CPOL/CPHA)、位序(通常为MSB优先)、CS极性和字长。可与
skills/kernel-dev/bus-drivers-i2c-spi
中的
spi_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
        pass
python
import csv

with open("capture.csv") as f:
    for ts, ch0, ch1 in csv.reader(f):
        # 边沿检测,重构比特流
        pass

7. 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后出现NACK

Common Problems

常见问题

SymptomCauseFix
Garbage decodeWrong samplerate≥ 4× bus speed
Floating linesMissing pull-upsEnable internal pull or external
SPI shifted bitsMode mismatchCPOL/CPHA table from RM
UART framing errorsBaud driftMeasure actual bit time
No decoderMissing sigrok buildInstall
sigrok-cli
+ decoders
症状原因解决方法
解码结果乱码采样率错误设置为总线速度的≥4倍
线路浮空缺少上拉电阻启用内部上拉或添加外部上拉电阻
SPI比特移位模式不匹配参考参考手册的CPOL/CPHA表
UART帧错误波特率漂移测量实际比特时间
无解码器sigrok构建不完整安装
sigrok-cli
及解码器

Related Skills

相关技能

  • skills/baremetal/spi-i2c-baremetal
    — firmware-side protocol
  • skills/baremetal/uart-serial-baremetal
    — UART config
  • skills/kernel-dev/bus-drivers-i2c-spi
    — kernel transactions
  • skills/profilers/strace-ltrace
    — userspace syscall trace analog
  • skills/embedded/openocd-jtag
    — scope alongside SWD debug
  • skills/baremetal/spi-i2c-baremetal
    —— 固件端协议处理
  • skills/baremetal/uart-serial-baremetal
    —— UART配置
  • skills/kernel-dev/bus-drivers-i2c-spi
    —— 内核事务处理
  • skills/profilers/strace-ltrace
    —— 用户空间系统调用跟踪的同类技能
  • skills/embedded/openocd-jtag
    —— 配合SWD调试的示波器技能