Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

在 Linux SBC 上使用 espctl 进行逻辑分析

将 ESP32-S3 变身为协议级逻辑分析仪,直接在 Linux SBC 上运行 PulseView 或 sigrok-cli, 并通过 18 款 AI 编码助手驱动构建和采集——一切只需一个 espctl 二进制文件,体积不足 15 MB,无运行时依赖,可在 x86_64、ARM64、ARMv7 和 RISC-V Linux 上原样运行。


为何选择 Linux SBC 作为调试主机

Raspberry Pi 4、OrangePi 5 或任何运行主流 Linux 发行版的 RISC-V 开发板,一旦摆脱“必须花 200 美元以上买台桌面机“的固有观念,就是一台称职的逻辑分析工作站:

  • PulseViewsigrok-cli 在各大发行版中均有打包的 ARM64 和 ARMv7 构建 (Debian/Ubuntu/Raspbian 上 apt install pulseview sigrok-cli 即可)。
  • ESP32-S3 分析仪与 SBC 主机之间的 USB 连接对采集延迟几乎无影响——SUMP 样本上传受 SRAM 大小限制,而非 USB 带宽。
  • espctl 是一个静态链接的单一二进制文件。复制过去,chmod +x,即可使用。 SBC 上无需 pip、npm、Rust 工具链或 ESP-IDF。

espctl 在 Linux SBC 上安装——一行命令搞定

# ARM64 / RISC-V / x86_64 — 同一条命令
curl https://esphome.cloud/espctl/install.sh | sh

安装程序自动检测架构,下载对应二进制,并放入 ~/.local/bin。在全新的 Raspberry Pi OS Lite 上,整个过程不超过 10 秒。

验证:

espctl version
# espctl 1.x.x  linux/arm64

espctl 通过 HTTPS 连接远程构建农场——SBC 只需出站 443 端口,其余一概不需要。 构建工具链(ESP-IDF、arm-none-eabi-gcc、Rust 交叉编译)完全运行在农场端。


第一步 — 向固件添加 sigrok 组件

在 esphome.cloud 向导中,打开您的 ESP32-S3 项目并添加 Sigrok 逻辑分析仪组件。 也可直接在项目配置中添加:

{
  "target": "esp32s3",
  "components": ["sigrok"]
}

固件硬性参数(编译时固定):

参数
通道数8(固定)
默认采样率1 MHz
最大采样率10 MHz
采集缓冲深度约 32 K 样本
触发模式立即触发、模式匹配(可选边沿检测)

采样率运行时可调(PulseView / sigrok-cli 通过 SUMP 协议下发请求采样率); 通道数和缓冲深度是编译时固定的,运行时无法改。目前没有 PSRAM 扩展 路径、没有 16 通道模式、也没有预触发比例配置字段。

该组件目前只在 ESP32-S3 上验证过;采集核心利用 S3 的并行 GPIO 采样 能力(单 CPU 周期读 8 个 GPIO)。C3/C6 在硬件上能跑低通道数低速 SUMP 设备,但 sigrok 固件本身没有移植到这些目标。完整硬件能力对比见 PulseView 与 Sigrok 固件


第二步 — 从 SBC 构建并烧录

# 远程构建——SBC 上无需本地 ESP-IDF
espctl build . --target esp32s3

# 通过 USB 烧录
espctl flash build/flash_bundle.tar.gz

热缓存下构建时间通常不超过 30 秒。SBC 仅充当协调者,所有编译均在远程农场完成。 构建期间 SBC 的 RAM 使用量低于 50 MB。


第三步 — 连接 PulseView 或 sigrok-cli

将烧录好的 ESP32-S3 插入 SBC 的 USB 口,它会显示为 /dev/ttyACM0(或类似设备名)。

验证设备识别:

sigrok-cli --driver=ols:conn=/dev/ttyACM0 --scan
# Found: ESP32-S3 sigrok, 8 channels, max 10 MHz

启动 PulseView:

pulseview &

在 PulseView 中:文件 → 连接设备 → OLS → /dev/ttyACM0 → 扫描。设备将以 配置的通道数和采样率上限显示。

使用 sigrok-cli 进行无界面采集(无需显示器):

# 以 1 MHz 采集 100 K 样本,保存为 sigrok 会话文件
sigrok-cli \
  --driver=ols:conn=/dev/ttyACM0 \
  --config samplerate=1MHz \
  --samples 100000 \
  --output-format srzip \
  --output-file capture.sr

# 采集后立即解码 I2C
sigrok-cli \
  --driver=ols:conn=/dev/ttyACM0 \
  --config samplerate=4MHz \
  --samples 50000 \
  --protocol-decoder i2c:scl=0:sda=1 \
  --protocol-decoder-annotation i2c:address-read,address-write,data-read,data-write

在没有显示器的 SBC 上,无界面 sigrok-cli 尤为实用——将输出重定向到文件, 通过 ssh 远程进入 SBC 检查采集结果。


触发模式

触发是运行时配置(通过 SUMP 协议从 PulseView / sigrok-cli 发给固件), 不是构建期的 JSON 字段。固件实现两种模式:

模式说明
立即arm 后立即开始;没有预触发
模式匹配(样本 & mask) == value 时触发;若打开边沿检测,只在状态转入该值时触发(即用模式匹配模拟边沿触发)

预触发 / 后触发样本数也通过 SUMP 协议运行时下发 —— 主机端告诉固件 “采集完成后还要再多收 N 个样本”,余下的缓冲容量留给预触发。它不是 配置文件字段。

sigrok-cli 和 PulseView 把上面两条折射成 UI 上的 “Trigger when this pattern matches” 开关 + “Detect edges” 选项 + 数字滑块,与底层的 对应关系由 OLS/SUMP 驱动负责。


协议解码器

PulseView 和 sigrok-cli 通过 libsigrokdecode 提供 131 个协议解码器。 以下六个已与 ESP32-S3 sigrok 组件进行端到端验证:

协议典型用途PulseView 中的解码器名称
I2C传感器总线(BME280、SHT4x、MPU-6050)i2c
UART串口调试输出、GPS NMEA、AT 命令uart
SPIFlash、显示屏、DACspi
1-WireDS18B20 温度传感器onewire
WS2812RGB LED 灯带ws2812
IR (NEC)遥控器、红外接收器ir_nec

其余 125 个解码器(CAN、LIN、I2S、PWM、JTAG、SMBus 等)只要协议在通道数和 采样率限制内均可使用。


SBC 上的 AI 助手集成

espctl 内置 MCP 服务器。在 SBC 上启动后,将任意受支持的 AI 编码助手指向它—— 助手即可通过云端提供的同款 42 个 MCP 工具触发构建、读取日志、下载固件,并与 sigrok 组件交互。

# 在 SBC 上启动 MCP 服务器
espctl mcp serve

获取安装代码片段

每款受支持的助手均可通过 install:// MCP 资源获取开箱即用的配置片段。 在任意 MCP 会话中获取:

resources/read  install://<agent-slug>

例如,install://claude-code 返回可直接粘贴到 .claude/settings.json 的 JSON 块,无需手动编写配置。

支持的助手(18 款,均含安装片段)

助手片段地址备注
Claude Codeinstall://claude-code
Cursorinstall://cursor
Claude Desktopinstall://claude-desktop
Codex CLIinstall://codex
OpenCodeinstall://opencode
DeepSeek-TUIinstall://deepseek-tui
Oh My Piinstall://oh-my-pi
AstrBotinstall://astrbot
nanobotinstall://nanobot
Reasonixinstall://reasonix
Langcliinstall://langcli
Kilo Codeinstall://kilo-code
WorkBuddyinstall://workbuddy
Deep Codeinstall://deep-code
Hermesinstall://hermes
Crushinstall://crush
GitHub Copilotinstall://github-copilotVS Code 扩展
OpenClawinstall://openclaw

另有两款助手(GitHub Copilot CLI、Pi)提供替代连接方式的文档,请参阅各自的客户端页面。

示例:在 Raspberry Pi 4 上使用 Claude Code

// ~/.claude/settings.json
{
  "mcpServers": {
    "esp-idf": {
      "command": "espctl",
      "args": ["mcp", "serve"]
    }
  }
}

配置完成后,运行在 Pi 上的 Claude Code 可以:

  • 调用 build 在修改 sigrok 通道配置后编译新固件
  • 调用 logs.tail 流式获取构建输出
  • 调用 flash.run 将新固件烧录到已连接的 ESP32-S3
  • 如将 sigrok-cli 输出管道到 MCP artifacts 接口,还可读取采集结果

SBC 硬件上的资源占用

espctl 专为最小实用 SBC 设计,可舒适运行:

操作SBC RAM 占用CPU 使用率(峰值)磁盘
espctl mcp serve(空闲)< 20 MB< 1%0
espctl build .(仅协调者)< 50 MB< 5%~30 MB 临时
espctl flash< 30 MB< 10%0
espctl monitor< 20 MB< 2%0

构建工具链从不在 SBC 上运行——所有编译均在远程农场完成。 Raspberry Pi Zero 2 W(512 MB RAM)可在运行 espctl mcp serve 的同时 执行 sigrok-cli 采集,不会触发内存压力。

已测试的 SBC 硬件:

开发板架构RAM支持情况
Raspberry Pi 4 / 5ARM642–8 GB完整工作流
Raspberry Pi Zero 2 WARM64512 MB完整工作流
OrangePi 5ARM644–16 GB完整工作流
BeagleBone BlackARMv7512 MB构建 + 烧录 + MCP
Milk-V Duo SRISC-V512 MB构建 + 烧录 + MCP
通用 ARMv7(任意)ARMv7≥ 256 MB构建 + 烧录

推荐 SBC 调试配置

┌──────────────────────────┐
│ Linux SBC(如 Pi 4)      │
│                          │
│  espctl mcp serve  ──────┼──── Claude Code / Cursor / 任意 MCP 助手
│  PulseView / sigrok-cli  │
│                          │
│  USB 口 1  ──────────────┼──── ESP32-S3(sigrok 分析仪)
│  USB 口 2  ──────────────┼──── ESP32-S3 / STM32(被测设备)
└──────────────────────────┘

一块 ESP32-S3 充当逻辑分析仪,另一块 ESP32-S3(或 STM32,或任意目标)作为被测设备。 SBC 居中,通过 espctl 管理构建,通过 sigrok-cli / PulseView 完成采集。


参见