Skip to content

SLogic16U3:800MHz 逻辑分析仪,从接线到解出一个字节 ​

SLogic16U3 官方产品图

一段串口数据解不出来时,我更想知道线上的电平究竟是什么,而不只是看程序打印了什么。SLogic16U3 可以把数字信号采进电脑,再交给 sigrok 解码;本文记录的是 Apple Silicon Mac 上从识别设备到读出一个 UART 字节的过程。

先把“800MHz”说清楚:800M@4ch、400M@8ch、200M@16ch。不能同时拥有 800MHz 和 16 路。这里的 MHz 是采样率,也不是被测信号可用带宽的承诺。

这些结果分别证明了什么? ​

资料或实验能说明什么不能说明什么
官方规格接口、电压范围、采样组合不是本文重做的性能认证
本机 Emulation 自检USB、驱动、输出文件链路可用;200M/16ch 与 800M/4ch 图样零误码不等于真实探头在任意信号下都零误码
本机合成 UARTVCD 输入与 UART 解码管线读出 0x55没有经过外部接线与采样前端
官方 UART / SPI 波形官方教程的真实采集示例不是我的实测截图

本机安装的 libsigrokdecode 列出 131 个解码器。这里验证了合成 UART,不是逐一验证了 131 种协议。

接线之前,先看背面 ​

主机与配件,来自官方硬件手册

背面引脚,来自官方硬件手册

标记接什么注意
0~15数字信号,对应 D0~D15官方输入范围 0~10V,不可直接接高压或负压信号
G,四个被测设备 GND可靠共地,地线短且靠近测点
VCC,两个3.3V 电源输出两口共享 500mA;不是信号输入,不能短接 GND
CK,两个预留时钟 / 触发接口当前暂不可用

不要把 RS-232、RS-485 或 CAN 总线直接当作普通逻辑电平输入。 先核对电压和接口类型,必要时使用合适的接收器或探头。逻辑仪记录高低电平,不能代替示波器检查模拟波形质量。

线组插入方向,来自官方硬件手册

线组的三角标记要与外壳标记对齐;同轴线远端白端子接信号,黑端子接地。高频采样优先使用短连接与同轴线,别让长杜邦线成为被测电路的一部分。

先采到一份文件 ​

软件可以先用 官方预编译版:有命令行 sigrok-cli-SLogic,也有 PulseView 图形界面。我用的是 Sipeed slogic-dev 分支的 libsigrok,加 sigrok-cli 0.8 和 libsigrokdecode,本机原生编译。

下面假定 sigrok-cli 已加入 PATH。先扫描,再采集;扫描不到设备时不要继续猜协议参数。

bash
SR=sigrok-cli
$SR --scan
$SR --driver sipeed-slogic-analyzer --show

# 无外部信号时,用硬件自检图样检查链路
$SR --driver sipeed-slogic-analyzer --config samplerate=20m \
    --config pattern=Emulation --samples 200000 -O csv -o emu.csv

自检图样从 D0 开始逐级二分频:D0 每个样本翻转一次,D1 的频率是 D0 的一半,以此类推。它适合检查数据链路,不是外部信号源。

正常采集时不用 pattern=Emulation。以下三条分别是全通道、四通道高速、上升沿触发示例:

bash
# 16 路,200MHz
$SR --driver sipeed-slogic-analyzer --config samplerate=200m \
    --samples 1000000 -O csv -o cap16.csv

# 4 路,800MHz:改变的是硬件通道数
$SR --driver sipeed-slogic-analyzer --config logic_channels=4 \
    --config samplerate=800m --samples 500000 -O csv -o cap4.csv

# D0 上升沿触发,阈值 1.8V
$SR --driver sipeed-slogic-analyzer --config samplerate=20m \
    --config voltage_threshold=1.8 --triggers D0=r \
    --samples 100000 -O csv -o triggered.csv
硬件通道数采样率上限配置
16200MHz默认
8400MHzlogic_channels=8
4800MHzlogic_channels=4

--channels D0,D1 只选择保存哪几路,不减少硬件通道数。这是我第一次设置 800MHz 却仍落到 200MHz 的原因。通道名也不能写 D0-D15,用逗号列表或省略选择即可。

再让解码器读出一个字节 ​

为了把“硬件采集问题”和“解码参数问题”分开,我先给解码器喂了一段合成 VCD:100000 baud、1MHz 采样、每位 10 个样本,内容只有 0x55。

段前置空闲起始位八个数据位,低位先行停止位
电平高,至少两位时间01 0 1 0 1 0 1 01
bash
# uart_test.vcd 是按上表准备的合成输入,不是设备抓取文件
$SR -i uart_test.vcd -I vcd \
    -P uart:baudrate=100000:format=hex -A uart

本机结果包含起始位、八个数据位、字节 55 与停止位。两个细节会让这个小实验失败:帧前没有空闲高电平会错认起始点;末尾没有显式结束时间戳,会把停止位截断。VCD 只记变化,最后保持高电平不代表文件自动延长。

换成真实 UART 时,D0 接接收信号,共地后按发送端参数配置。下面是 19200 baud 的命令示例,不是上述合成实验的参数:

bash
$SR --driver sipeed-slogic-analyzer --config samplerate=20m \
    --samples 1000000 -P uart:baudrate=19200:rx=D0 -A uart

想看真实波形的样子,可以参考下面两张 Sipeed 官方教程截图:UART 115200 与 SPI 500kHz。它们与上面的本机合成 UART 是不同来源。

官方 UART 采集示例,不是本文实测截图

官方 SPI 采集示例,不是本文实测截图

卡住时,先查哪一层? ​

现象优先检查
只亮蓝灯、扫描不到USB3 数据线与接口;尽量直连,排除 Hub
采集全零先确认信号真的在跳变,再用 Emulation 区分输入与链路问题
800MHz 配置不生效logic_channels 是否仍为 16
UART 有波形但无字节通道、波特率、极性、帧格式与采集窗口
源码编译找不到 Python 头文件系统 Python 3.9.6 缺开发头;本机改用 Homebrew Python 3.12 及其 pkgconfig 路径

全零不自动等于设备坏了,也不能反过来断言只是没接线。自检和真实采集分开,才能缩小问题范围。

硬件与平台附录:规格、指示灯、软件入口

正面接口,来自官方硬件手册

官方规格内容
USB-CUSB 3.2 Gen1,5Gbps;需要 USB3 数据线
连续流式组合800M@4ch / 400M@8ch / 200M@16ch
最大数据带宽3.2Gbps
信号输入 / 阈值0~10V / 官方标注 0~6V 可调;本机驱动选项为 0.1~6.0V
尺寸 / 外壳40×40×10mm,铝合金
参考售价官方资料当时标注 ¥369 起,不是现价保证

包装包含主机、USB3 数据线、16 个测试夹、SIM 卡针、说明卡和收纳包;线组有 2×6P 杜邦线或 2×4P 同轴线两种选项。MODE 隐藏按键用于切换逻辑分析仪与 DFU 升级模式,不是采集触发按钮。

ACT 指示含义
青色正常连接,蓝为电源、绿为 USB LINK
青色 + 红快闪数据传输
青色 + 红慢闪DFU 模式
仅蓝色USB 连接失败
仅红色Flash 加载异常,检查线缆与硬件

官方文档指出 Windows 10/11 原生程序受 USB 驱动限制约 390MB/s,组合降为 400M@4ch / 200M@8ch / 100M@16ch;可考虑 Linux 环境。Linux 需配置 udev 权限;本文使用 Apple Silicon macOS,不把本机结果推广到所有主机。

底层不是通用串口:Sipeed 驱动使用厂商 USB 控制传输访问 R32_CTRL/0x04、R32_FLAG/0x08、R32_AUX/0x0C,采样由 USB3 bulk IN 流式传输;16 路时每样本两字节。

官方还有 SLogic Agent Plugin 教程,把扫描、采集与解码封装给支持插件的 Agent。使用时仍要说清引脚、协议和目标,并要求保留原始波形、实际命令与警告;插件不能替代接线检查。

资料从哪里来 ​

这篇里有不清楚的地方,或者想聊类似的东西?私信我 →