From abe2d3286d7a5063d929ea536806ae70e28dba13 Mon Sep 17 00:00:00 2001 From: taorye Date: Thu, 6 Aug 2026 18:19:59 +0800 Subject: [PATCH] docs: add SLogic Agent plugin guide --- .../slogic_agent/assets/spi-500k-gtkwave.png | Bin 0 -> 31550 bytes .../assets/uart-115200-gtkwave.png | Bin 0 -> 27500 bytes .../zh/logic_analyzer/slogic_agent/readme.md | 404 ++++++++++++++++++ docs/hardware/zh/sidebar.yaml | 2 + 4 files changed, 406 insertions(+) create mode 100644 docs/hardware/zh/logic_analyzer/slogic_agent/assets/spi-500k-gtkwave.png create mode 100644 docs/hardware/zh/logic_analyzer/slogic_agent/assets/uart-115200-gtkwave.png create mode 100644 docs/hardware/zh/logic_analyzer/slogic_agent/readme.md diff --git a/docs/hardware/zh/logic_analyzer/slogic_agent/assets/spi-500k-gtkwave.png b/docs/hardware/zh/logic_analyzer/slogic_agent/assets/spi-500k-gtkwave.png new file mode 100644 index 0000000000000000000000000000000000000000..97f9eb0115c67c0c53cd56fc97cac63f3ce1be30 GIT binary patch literal 31550 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 literal 0 HcmV?d00001 diff --git a/docs/hardware/zh/logic_analyzer/slogic_agent/readme.md b/docs/hardware/zh/logic_analyzer/slogic_agent/readme.md new file mode 100644 index 00000000..850bfee1 --- /dev/null +++ b/docs/hardware/zh/logic_analyzer/slogic_agent/readme.md @@ -0,0 +1,404 @@ +--- +title: 用 Agent 操作 SLogic:Plugin 快速开始 +keywords: SLogic, LogicAnalyzer, sigrok-cli, Agent, Plugin, Skill +update: + - date: 2026-08-05 + version: v0.2 + author: taorye + content: + - 改用 SLogic plugin,并补充安装、采集、解码和排错流程 +--- + +安装 `sigrok-cli-slogic-plugin` 后,无需学习 PulseView。接好逻辑分析仪,把通道、协议和任务目标告诉支持 Plugin 或 Skill 的 Agent,它便能调用 `sigrok-cli` 扫描设备、采集 `.sr` 波形,并通过 libsigrokdecode 解码。例如: + +> SLogic 的 D0 接了 UART RX,参数是 115200 8N1。请先扫描设备,再用 10 MHz 采集 50 ms,保存原始波形并解码收到的字符。 + +开始前,请先确认信号电压和电气安全,见下文「连接 SLogic 前」。 + +## 适用型号 + +Sipeed 当前的 SLogic Series 包括: + +| 产品 | 说明 | +|---|---| +| SLogicCombo8 | [产品介绍](../combo8/readme.md) | +| SLogic16U3 | [产品介绍](../slogic16u3/Introduction.md) | +| SLogic32U3 | 内测中,待发售 | + +不同型号的通道数量、采样率、输入范围和配置项有所不同。使用本教程时,应先让 Agent 扫描设备并读取当前型号的能力,再设置采集参数。 + +本文已在 Linux x86_64 上使用 SLogicCombo8 和 SLogic16U3 完成采集验证;Windows 和 macOS 的发布版二进制、USB 驱动和硬件采集尚未验证。 + +## 使用流程总览 + +1. 安装 Plugin:把 plugin 链接发给 Agent,由它完成安装; +2. 准备 SLogic 版 `sigrok-cli`:让 Agent 下载并验证可执行文件; +3. 连接 SLogic 前:确认硬件模式、接线安全和 USB 权限; +4. 第一次连接:只扫描设备并读取能力,不采集; +5. 描述采集需求:明确通道、采样率和采集上限,采集 `.sr` 波形; +6. 解码分析:指定 decoder、引脚映射和选项,验收结果。 + +已有 `.sr` 波形文件时,可直接从第 6 步开始,无需连接设备。 + +## Plugin 能做什么 + +`sigrok-cli-slogic-plugin` 是一个仅包含 Skill 的 OpenAI plugin,内置 Skill 名为 `sigrok-cli-slogic`。其能力对应包装脚本的以下操作: + +| 操作 | 说明 | +|---|---| +| `scan` | 扫描设备,只列出名称包含 SLogic 或 DSLogic 的匹配项 | +| `show` | 读取所选设备的通道和配置能力 | +| `capture` | 按时长、样本数或帧数进行有限采集,并将波形保存为 `.sr` | +| `decoder-show` | 查询 libsigrokdecode decoder 的必选/可选引脚、选项和解码标注(annotation) | +| `decode` | 使用明确的 decoder 引脚映射和选项解码已有 `.sr` 文件 | +| `decode --stack` | 在基础 decoder 上依次叠加高层 decoder,例如在 I²C 上叠加 `eeprom24xx` | +| `capture -- ...` | 将通道、采样率、触发等额外采集参数传给 `sigrok-cli` | +| `run --` | 将包装脚本未覆盖的操作直接传给 `sigrok-cli` | + +Skill 的行为约定: + +- 扫描不到匹配设备时停止,不进入采集;扫描到多台设备时,必须先指定其中一台; +- 采集完成后,Agent 应返回 `.sr` 的绝对路径和实际命令; +- 解码完成后,Agent 应报告 decoder、引脚映射、选项以及是否产生 annotation; +- 解码已有的 `.sr` 文件无需连接逻辑分析仪;只有扫描、查询设备和采集需要访问 USB 设备。 + +Plugin 不附带 MCP server、网络服务、`sigrok-cli`、USB 驱动或 GTKWave。Plugin 也不能预测协议:协议或接线未知时,由大模型结合波形特征和电路信息推测候选协议,经用户确认后,Skill 再按指定的 decoder 和引脚映射执行解码,见下文「不知道协议或接线」。 + +## 安装 Plugin + +Plugin 需要 Python 3.10 或更高版本,并要求 Agent 能运行本地命令、读写工作目录和访问 USB 设备。 + +无需手动下载、解压或复制目录。复制 sigrok-cli-slogic-plugin 的链接地址,直接发给支持 Plugin 的 Agent: + +> 请安装这个 SLogic plugin:`https://dl.sipeed.com/fileList/SLogic/sigrok-cli-slogic-plugin.zip`。安装完成后检查 `sigrok-cli-slogic` 是否已经加载,并告诉我是否需要重启。暂时不要访问 USB 设备或开始采集。 + +按 Agent 的提示重启后,再说: + +> 检查 `sigrok-cli-slogic` 是否已经加载。说明它能执行哪些操作,暂时不要访问 USB 设备或开始采集。 + +Agent 能识别 `$sigrok-cli-slogic`,并说明 scan、show、capture 和 decode 的用途,即表示 Skill 已加载。 + +## 准备 SLogic 版 sigrok-cli + +SLogic 将按平台预分发对应的 `sigrok-cli`: + +| 系统 | 分发文件 | +|---|---| +| Linux | `sigrok-cli-SLogic-xxxx.AppImage` | +| Windows | `sigrok-cli-SLogic-xxxx.exe` | +| macOS | `sigrok-cli-SLogic-xxxx.dmg` | + +把 [SLogic 下载站](https://dl.sipeed.com/shareURL/SLogic) 交给 Agent,让它下载适合当前系统的最新版,并保存到固定的工具目录。`<工具目录>` 填写你希望长期保存该工具的位置即可: + +> 打开 SLogic 下载站 (https://dl.sipeed.com/shareURL/SLogic) ,识别当前操作系统,下载对应的最新版 `sigrok-cli-SLogic`,并保存到 `<工具目录>`。不要覆盖已有版本。请完成运行该程序所需的准备工作,把可执行文件绝对路径保存到全局配置,供 `sigrok-cli-slogic` 后续直接使用,再运行版本检查和 `decoder-show uart`。告诉我配置结果,不要扫描设备或开始采集。 + +Agent 验证可执行文件后,应将其路径保存到全局配置,供后续扫描、采集和解码直接使用。不同系统的分发形式由 Agent 处理,用户无需记录路径或了解发行包的内部结构。 + +## 连接 SLogic 前 + +### 确认硬件模式和接线安全 + +- SLogicCombo8 支持多种工作模式。用作逻辑分析仪时,先按键切换至蓝色指示灯;Linux 下可用 `lsusb` 检查是否出现 `USB TO LA`。 +- 逻辑分析仪 GND 必须与被测设备 GND 可靠连接。地线应尽量短,并靠近待测信号点。 +- 连接前须确认被测信号电压处于对应 SLogic 型号的输入范围内。电压未知时,先用万用表或示波器测量。 +- SLogic16U3 的 VCC 是 3.3 V 电源输出,不是信号输入。 +- 逻辑分析仪通过 USB 与电脑共地。测量强电系统或不能与电脑共地的设备时,应使用合适的 USB 隔离器。无法确认安全条件时,请勿连接。 + +不同型号的输入范围、阈值和引脚定义不完全相同,连接前请查阅对应产品页。本教程的 UART 示例只使用 D0 和 GND。 + +### 配置 Linux USB 权限 + +普通用户无法扫描设备时,可安装以下 udev 规则: + +```bash +sudo tee /etc/udev/rules.d/60-sipeed.rules <<'EOF' +SUBSYSTEM!="usb|usb_device", GOTO="sipeed_rules_end" +ACTION!="add", GOTO="sipeed_rules_end" +ATTRS{idVendor}=="359f", MODE="0666", GROUP="plugdev", TAG+="uaccess" +ENV{ID_MM_DEVICE_IGNORE}="1" +LABEL="sipeed_rules_end" +EOF + +sudo udevadm control --reload +sudo udevadm trigger +``` + +Arch Linux 可将 `GROUP="plugdev"` 改为 `GROUP="uucp"`。规则生效后,重新插拔 SLogic,再让 Agent 扫描。使用 `sudo` 运行程序只适合快速判断权限问题,不建议作为日常方案。 + +## 第一次连接:只扫描,不采集 + +连接 SLogic 后,先扫描并读取设备能力,不要直接采集: + +> 使用 `$sigrok-cli-slogic` 和已经配置好的 SLogic 版 `sigrok-cli`。扫描已连接的 SLogic,再读取所选设备的能力。不要采集。报告设备标识、通道、可用采样率和配置项。 + +Agent 应依次完成: + +1. 确认全局配置中的 `sigrok-cli` 路径存在且可执行; +2. 扫描 SLogic/DSLogic; +3. 只有一台设备时读取该设备能力; +4. 有多台设备时列出完整设备标识(scan spec),等待用户选择; +5. 没有设备时停止,不进入采集。 + +扫描完成后,至少核对以下内容: + +| 项目 | 为什么需要 | +|---|---| +| 完整设备标识 | 多台设备时用于选定目标 | +| 通道名称 | decoder 引脚必须映射到实际通道 | +| 可用采样率 | 采集值必须是设备支持的配置 | +| 通道和带宽限制 | 启用通道越多,可用最高采样率通常越低 | +| 配置项 | 电压阈值、触发等能力取决于具体型号 | + +采集参数应以当前设备的 `show` 输出为准,不能直接套用其他 SLogic 型号的参数。 + +## 采集前怎样描述需求 + +每次采集都应设置明确上限,时长、样本数和帧数三选一。如果均未指定,Plugin 默认采集 1000 ms;实际使用时仍建议主动写明上限。 + +| 信息 | 应该怎样说明 | +|---|---| +| 目标设备 | 指定型号或扫描结果中的完整标识 | +| 接线 | 说明每根协议线连接到哪个 D 通道 | +| 预期协议 | UART、I²C、SPI 或其他 decoder ID | +| 协议参数 | 波特率、SPI mode、位序、CS 极性等 | +| 采样范围 | 时长、样本数或帧数三选一 | +| 采样率 | 使用设备支持的值;不知道时先让 Agent 建议 | +| 输出文件 | 使用文件名,例如 `uart-test.sr` | +| 结果目标 | 字符、地址、数据、warning、样本位置或波形图 | + +采样时间、样本数和采样率的关系是: + +```text +采样时间(秒) = 样本数 ÷ 采样率(Hz) +``` + +例如,以 10 MHz 采集 500000 个样本,对应 50 ms。SLogic 产品文档建议采样率高于被测信号频率约 10 倍;实际选择还要考虑信号质量、协议 decoder 和设备带宽。无关通道会占用 USB 带宽,因此只应启用本次采集所需的通道。 + +如果不知道采样率,可以说: + +> D0 上预计是 115200 baud UART,但我不知道该选哪个采样率。请先读取设备支持的采样率,给出选择依据,等我确认后再采集。 + +如果协议参数也不确定,请分别列出已知项和未知项。Agent 应先补齐必要信息,不应遍历尝试所有协议和参数。 + +## 完整示例:采集并解码 UART + +下面以 SLogicCombo8 采集 CH341 TX 为例。UART 参数为 115200 8N1、LSB first,信号接入 D0。 + +### 接线 + +```text +CH341 TX -> SLogicCombo8 D0 +CH341 GND -> SLogicCombo8 GND +``` + +这里采集的是 CH341 发出的 TX 信号。对于 UART decoder,这一路是逻辑分析仪接收到的数据,因此映射为 `rx=D0`。 + +### 先确认设备和参数 + +> 使用 `$sigrok-cli-slogic`。SLogicCombo8 已切换到蓝灯逻辑分析仪模式,D0 接 CH341 TX,双方 GND 已连接。请扫描设备,确认 D0 和 10 MHz 采样率可用;只检查,不采集。 + +核对 scan 和 show 的结果后,再开始采集。 + +### 采集原始波形 + +> 使用刚才确认的 SLogicCombo8,只启用 D0,以 10 MHz 采集 500000 个样本,保存为 `capture-combo8-500k.sr`。不要覆盖已有文件;如果同名文件存在,先停止并告诉我。完成后报告绝对路径和实际命令。 + +本次采集参数如下: + +- 通道:D0; +- 采样率:10 MHz; +- 样本数:500000; +- 对应时长:50 ms; +- 输出:当前工作目录中的 `capture-combo8-500k.sr`。 + +`--output` 只接受当前目录中的文件名,不能使用绝对路径或子目录。未指定文件名时,Plugin 会生成带时间戳的 `.sr` 文件。 + +### 解码 UART + +> 解码 `capture-combo8-500k.sr`。先查询 UART decoder 支持的 pin、option 和 annotation,然后将 `rx` 映射为 D0,使用 115200 baud、8 data bits、no parity、1 stop bit、LSB first。输出 RX 字符、warning 和样本位置,并将文本保存为 `decoded-uart.txt`。 + +Agent 应返回: + +- decoder:UART; +- decoder 引脚映射:`rx=D0`; +- 波特率、数据位、校验、停止位和位序; +- 是否产生解码标注; +- 解码文本和警告(warning); +- 输入、输出文件的绝对路径; +- 实际执行的命令。 + +实测数据每 10 ms 发送一次 `Hello, SLogic x AI`。50 ms 波形中完整解码出 5 次消息、90 个字符,warning 为 0。 + +### 需要时再生成波形图 + +协议内容以 decoder 文本为准,通常无需生成图片。GTKWave 是可选配套工具,不是 Plugin 的运行依赖。系统已安装 GTKWave 时,可以继续说: + +> 将 `capture-combo8-500k.sr` 的 D0 转换为 VCD,用 GTKWave 截取第一组完整 UART 消息并保存为 PNG。不要修改原始 `.sr`。 + +`sigrok-cli` 负责将 `.sr` 导出为 VCD,GTKWave 只显示数字电平。VCD 不包含 libsigrokdecode 生成的 UART 字符标注,字符内容仍以 `decoded-uart.txt` 为准。 + +![GTKWave 显示 sigrok-cli 导出的 UART VCD 波形](./assets/uart-115200-gtkwave.png) + +## 完整示例(触发):采集并解码 SPI + +解码 SPI 需要明确时钟、数据线、模式和位序。是否映射 CS,取决于采集时是否接入了有效的 CS 信号。 + +下面的实例使用 CH341 发送 SPI 数据,并由 SLogic16U3 采集: + +```text +CH341 CLK -> SLogic16U3 D0 +CH341 MOSI -> SLogic16U3 D1 +CH341 CS -> SLogic16U3 D3 +CH341 GND -> SLogic16U3 GND +``` + +发送端通过 `/dev/spidev1.0`,以 SPI mode 0、500 kHz、8 bit 运行发送脚本(本例为 `spi_test.py`),发送 24 字节: + +```text +hello, SLogic from SPI.\n +``` + +采集和发送需要并行执行:Agent 应先启动采集并等待 D3 触发,再运行发送脚本。先对 Agent 说明采集参数: + +> 使用 `$sigrok-cli-slogic` 操作已连接的 SLogic16U3。D0 接 CLK,D1 接 MOSI,D3 接 CS,双方 GND 已连接。请只启用 D0、D1 和 D3,以 10 MHz 采集 1000 ms,并设置 D3 上升沿触发和等待触发,保存为 `slogic16u3-spi-500k.sr`。开始等待触发后,运行 `spi_test.py`,通过 `/dev/spidev1.0` 发送一次数据。完成后报告波形路径、实际样本数和实际命令。 + +采集完成后,再要求 Agent 解码: + +> 解码 `slogic16u3-spi-500k.sr`。将 `clk` 映射到 D0、`mosi` 映射到 D1、`cs` 映射到 D3。使用 active-high CS、SPI mode 0、LSB first、8 bit,输出 MOSI data、warning 和样本位置。 + +本次实测中,D3 上升后出现 SPI 时钟,传输结束时回到低电平,因此按 active-high CS 解码。decoder 输出 24 字节,与发送脚本的 UTF-8 字节完全一致,warning 为 0: + +```text +68 65 6C 6C 6F 2C 20 53 4C 6F 67 69 +63 20 66 72 6F 6D 20 53 50 49 2E 0A +``` + +两点注意: + +- 触发沿和 CS 极性必须以实际波形为准。本例对 D3 使用上升沿触发,并将 decoder 的 `cs_polarity` 设为 `active-high`;如果照搬常见的低电平有效配置,decoder 不会输出数据。 +- 本例需要 `LSB first` 才能还原发送字节。如果 CPOL、CPHA、位序或 CS 极性未知,应先查阅芯片手册、电路图或固件配置。一次解码无输出,不能据此认定没有 SPI 通信。 + +下图由 `.sr` 采集文件导出为 VCD 后,通过 GTKWave 展示 500 kHz CLK(D0)和 MOSI(D1)的局部波形: + +![SLogic16U3 采集的 500 kHz SPI 波形](./assets/spi-500k-gtkwave.png) + +## 分析已有波形 + +已有 `.sr` 文件时,无需连接 SLogic,也无需重新采集。例如: + +> 使用 `$sigrok-cli-slogic` 分析当前目录的 `capture.sr`,不要访问 USB 设备。D0 是 UART RX,按 115200 8N1 解码。先查询 UART decoder,再报告引脚映射、option、字符、warning 和样本位置。 + +同一个 `.sr` 文件可以使用不同 decoder 参数反复分析。采集完成后应保留原始文件;调整波特率或引脚映射时,无需重新采集。 + +## 模仿示例:描述其他协议 + +下面的提示词用于说明描述思路。通道、采样率、时长和协议参数应按实际设备与被测信号修改。 + +### UART + +UART 需要说明数据方向、通道、波特率、数据位、校验位、停止位和位序。只采集单向信号时,将该通道映射到 `rx` 或 `tx`: + +> D0 接目标设备 TX,双方 GND 已连接。请先确认设备能力,再以 10 MHz 采集 100 ms。查询 UART decoder 后,将 `rx` 映射到 D0,按 115200 8N1、LSB first 解码字符、warning 和样本位置。 + +### I²C + +解码 I²C 至少需要明确 SCL 和 SDA 对应的通道: + +> D0 接 SCL,D1 接 SDA。请先确认设备支持这两个通道,然后用 10 MHz 采集 100 ms,保存为 `i2c-test.sr`。将 `scl` 映射到 D0、`sda` 映射到 D1,解码地址、读写方向、ACK/NACK 和数据,并报告 warning。 + +需要继续分析 EEPROM 等上层协议时,可以在 I²C decoder 上叠加对应的 stacked decoder。叠加前应先确认基础 I²C 解码正确。 + +### SPI + +SPI 需要说明 CLK、MOSI/MISO、可选的 CS、SPI mode、位序、字长和 CS 极性。已知有效 CS 时,可以用其边沿触发: + +> D0 接 CLK,D1 接 MOSI,D3 接 CS。请先根据空闲电平和传输期间的电平确认 CS 极性,再以 10 MHz 采集 1000 ms,并在 CS 进入有效状态的边沿等待触发。将 `clk`、`mosi` 和 `cs` 映射到对应通道,按 SPI mode 0、LSB first、8 bit 解码 MOSI data、warning 和样本位置。 + +### PWM + +PWM decoder 只需要一条 `data` 通道,并可按 active-high 或 active-low 极性输出占空比、周期和频率。采集范围应覆盖多个完整周期: + +> D0 接 PWM 信号,双方 GND 已连接,信号高电平有效。请先读取设备支持的采样率,选择能覆盖至少 20 个完整周期的有限采集参数。采集后查询 PWM decoder,将 `data` 映射到 D0、`polarity` 设为 `active-high`,输出占空比、周期、频率和对应样本位置。 + +## 不知道协议或接线 + +接线或协议未知时,可以先通过对话让 AI Agent 分析波形。大模型可以结合电平变化、周期、通道关系和用户提供的电路信息,推测候选协议及信号引脚关系。该过程属于 Agent 的分析能力,不是 Plugin 提供的协议预测功能。开始调用 decoder 前,仍需确认候选协议、协议参数和引脚映射。例如: + +> D0 和 D1 的用途暂时未知。请分析波形中的电平变化、周期和通道关系,列出可能的协议及判断依据。先不要运行 decoder;请同时列出开始解码前还需确认的协议参数和引脚映射。 + +## 怎样验收 Agent 的结果 + +一次完整任务至少应包含以下结果: + +| 结果 | 验收内容 | +|---|---| +| 设备 | 完整 scan spec,避免多设备混淆 | +| 采集 | 通道、采样率、时长/样本数/帧数 | +| 波形 | `.sr` 文件绝对路径 | +| 解码 | decoder、引脚映射和全部 option | +| 内容 | 是否产生 annotation,以及请求的字符或数据 | +| 异常 | warning、错误信息及对应样本位置 | +| 复现 | 采集操作的实际命令;解码使用的 decoder、引脚映射和选项 | + +解码输出为空,只表示当前 decoder、引脚映射和 option 没有产生 annotation,不能证明波形中没有通信。此时应依次核对原始波形是否存在边沿、通道映射、采样率和协议参数。 + +## 常见问题 + +### Agent 没有识别 Plugin + +把 plugin 链接重新发给 Agent,并要求它返回下载、安装和加载阶段的完整错误。安装包根目录必须包含 `.codex-plugin/plugin.json`,不能只安装其中的单个文件。安装后按提示重启 Agent,再检查 `$sigrok-cli-slogic`。 + +### 找不到 sigrok-cli + +把下载或运行时的完整错误交给 Agent,让它检查文件是否下载完整、保存路径是否正确、当前系统能否执行,并修复全局配置。例如: + +> `sigrok-cli-slogic` 找不到或无法运行已经配置的 `sigrok-cli-SLogic`。请检查下载结果、保存路径、执行权限、实际可执行文件位置和全局配置;修复后运行版本检查和 `decoder-show uart`。不要扫描设备或开始采集。 + +### 版本命令正常,但 decoder 无法加载 + +发行包可能缺少 libsigrokdecode、decoder 模块或相应的 Python 环境。让 Agent 执行 `decoder-show uart` 并保留完整错误,不能只根据 `--version` 判断安装是否完整。 + +### 扫描不到设备 + +依次检查: + +- SLogicCombo8 是否为蓝灯逻辑分析仪模式; +- USB 线、端口和供电是否正常; +- 系统能否看到 USB 设备; +- `sigrok-cli` 是否包含 SLogic 驱动; +- Linux udev 或 Windows USB 驱动是否正确。 + +可以对 Agent 说: + +> 保留完整扫描输出和错误。检查是找不到可执行文件、缺少 SLogic 驱动、USB 权限不足,还是没有发现设备;不要开始采集。 + +### 采样率被拒绝 + +让 Agent 重新执行 `show`,确认启用通道数和可用采样率。关闭未使用的通道,再选择设备支持的采样率;不要套用其他型号的参数。 + +### 解码为空或出现乱码 + +按以下顺序排查: + +1. 原始波形中是否存在边沿; +2. decoder 引脚是否映射到正确通道; +3. 采样率是否足够; +4. UART 波特率、数据位、校验、停止位和位序; +5. SPI CPOL、CPHA、位序和 CS 极性; +6. 接地、输入阈值和信号完整性。 + +保留原始 `.sr` 文件,再修改 decoder 参数重新解码,避免覆盖唯一的采集结果。 + +### 采集完成后进程没有退出 + +SLogicCombo8 可能在端点清理时偶发不退出。先确认 `.sr` 已完整写入,再终止进程并重新插拔设备。文件写入完成前不要断开设备。 + +## 使用边界 + +- `capture` 会访问 USB 设备并创建 `.sr` 文件;执行前确认设备、接线、采集上限和文件名。 +- `--time-ms`、`--samples` 和 `--frames` 只能使用一个,数值必须大于 0。 +- `--output` 只接受当前工作目录中的文件名,不接受绝对路径或子目录。 +- `decode --output` 会把 decoder 文本写入当前目录;使用前确认同名文件是否需要保留。 +- 扫描不到设备时不采集;扫描到多台设备时先指定目标。 +- 缺少预期协议或必要的 decoder 引脚映射时不开始解码。 +- `run --` 会直接传递参数给 `sigrok-cli`,不检查采集上限或输出路径,只用于包装脚本尚未覆盖的高级操作。 diff --git a/docs/hardware/zh/sidebar.yaml b/docs/hardware/zh/sidebar.yaml index 966500b1..af91069b 100644 --- a/docs/hardware/zh/sidebar.yaml +++ b/docs/hardware/zh/sidebar.yaml @@ -461,6 +461,8 @@ items: file: maixsense/maixsense-a075v/maixsense-a075v.md - label: SLogic items: + - label: 使用 Agent 操作 SLogic + file: logic_analyzer/slogic_agent/readme.md - label: SLogic Combo 8 items: - label: 简介