这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【ARDUINOUNOQ4GBRAM32GBEMMC】PulseView+SLo

共1条 1/1 1 跳转至

【ARDUINOUNOQ4GBRAM32GBEMMC】PulseView+SLogicCombo8在ArduinoUnoQ上做逻辑信号分析

助工
2026-05-27 11:30:47     打赏

本文目标:在 Arduino Uno Q(ARM64)上从零编译 PulseView,解决 USB 权限问题,并用 Sipeed SLogic Combo 8 逻辑分析仪完成实际信号采集测试。

适用同学:需要在 ARM64 Linux 设备上使用逻辑分析仪进行信号采集和协议分析的开发者。


在嵌入式开发中,逻辑分析仪是不可或缺的调试工具。无论是分析数字信号的时序、排查通信协议的异常,还是验证引脚电平的变化,一台逻辑分析仪都能帮你快速定位问题,省去大量盲猜和反复烧录调试的时间。

我手头有一款 Sipeed SLogic Combo 8,体积小巧、功能齐全,最高支持 80MHz 采样率和 8 通道同时采集,对于日常的信号分析和协议解码已经完全够用。既然现在玩 Arduino Uno Q,自然就想把这套逻辑分析环境也迁移到上面,方便随时进行硬件调试和信号捕获。

下面记录一下在 Arduino Uno Q(ARM64)上从零编译 Sipeed 定制版 PulseView、解决 USB 权限问题,以及完成实际信号采集的完整过程。

一、Sipeed SLogic Combo 8 简介

1.1 多合一调试工具

Sipeed SLogic Combo 8 是一款基于 Sipeed M0s Dock 开发的多合一调试工具,集成了四种常用功能:

功能

说明

逻辑分析仪

8 通道,最高 80MHz 采样率,Stream 模式

CKLink 调试器

支持 RISC-V 芯片调试,JTAG 时钟 16MHz

DAP-Link 调试器

ARM 芯片调试

USB 转串口

USB2UART 功能

通过板载按键可在四种功能之间切换。本文主要使用其逻辑分析仪功能。

【图片 37a】Sipeed SLogic Combo 8 正面

37a.jpg

【图片 37b】Sipeed SLogic Combo 8 背面

37b.jpg

1.2 逻辑分析仪参数

参数

规格

通道数

8

最高采样率

80MHz

传输带宽

320Mb/s(Linux)/ 160Mb/s(Windows)

典型配置

Linux: 80M@4CH / 40M@8CH

信号输入范围

0 ~ 3.6V

高电平门限

VIH > 2.0V

低电平门限

VIL < 0.8V

接口

USB-C

1.3 为什么需要自己编译 PulseView?

Sipeed 为其 SLogic 系列逻辑分析仪提供了定制版的 PulseView,集成了 sipeed/libsigrokslogic-dev 分支)的专用驱动。但 Sipeed 目前只发布了 Windows x86_64Linux x86_64 的预编译包,没有 ARM64(aarch64)版本

而 Arduino Uno Q 是 ARM64 架构,因此我们必须从 Sipeed 的源码自行编译。

【图片 38】Sipeed 定制版 PulseView 下载页面(仅有 x86_64 版本)

38.jpg


二、从源码编译 PulseView

2.1 编译环境

项目

详情

编译机器

my-uno-q.local

架构

aarch64 (ARM64)

操作系统

Debian 13 (Trixie)

Qt 版本

6.8.2

2.2 安装编译依赖

sudo apt update
sudo apt install -y build-essential cmake git pkg-config \
  libglib2.0-dev libglibmm-2.4-dev \
  libboost-dev libboost-filesystem-dev libboost-serialization-dev \
  libboost-system-dev qt6-base-dev qt6-svg-dev qt6-tools-dev \
  qt6-tools-dev-tools libusb-1.0-0-dev libzip-dev python3-dev \
  python3-numpy swig autoconf automake libtool doxygen wget file


2.3 编译 libserialport

cd /tmp
git clone --depth 1 git://sigrok.org/libserialport
cd libserialport && ./autogen.sh && ./configure --prefix=/usr
make -j4 && sudo make install


2.4 编译 libsigrok(Sipeed fork)

这是关键步骤,必须使用 Sipeed 的 fork 才能支持 SLogic Combo 8:

cd /tmp
# 如果直连 GitHub 失败,使用代理
git config --global http.proxy http://192.168.1.15:7890
git clone --depth 1 -b slogic-dev https://github.com/sipeed/libsigrok.git
git config --global --unset http.proxy
cd libsigrok && ./autogen.sh
./configure --prefix=/usr --disable-java --disable-python
make -j4 && sudo make install


2.5 编译 libsigrokdecode

cd /tmp
git clone --depth 1 git://sigrok.org/libsigrokdecode
cd libsigrokdecode && ./autogen.sh && ./configure --prefix=/usr
make -j4 && sudo make install


2.6 编译 PulseView

cd /tmp
git clone --depth 1 https://github.com/sipeed/pulseview.git
cd pulseview && mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DENABLE_DECODE=ON
make -j1


编译注意事项

  • make -j1 使用单线程编译,避免 Uno Q 的 3.6GB 内存因并行编译而耗尽(OOM)

  • 如果 GitHub clone 失败,使用代理 http://192.168.1.15:7890/

  • 编译时间约 30-60 分钟

编译过程make -j1 单线程编译约需 30-60 分钟,视 Uno Q 负载情况而定。

2.7 打包为 AppImage

编译完成后,将 PulseView 和所有依赖库打包为 AppImage,实现免安装直接运行:

# 1. 创建 AppDir 目录结构
mkdir -p ~/pulseview-build/AppDir/usr/bin ~/pulseview-build/AppDir/usr/lib
# 2. 复制主程序
cp /tmp/pulseview/build/pulseview ~/pulseview-build/AppDir/usr/bin/
# 3. 复制库文件
cp /usr/lib/libsigrok.so* ~/pulseview-build/AppDir/usr/lib/
cp /usr/lib/libsigrokdecode.so* ~/pulseview-build/AppDir/usr/lib/
cp /usr/lib/libserialport.so* ~/pulseview-build/AppDir/usr/lib/
cp -r /usr/lib/aarch64-linux-gnu/qt6/plugins ~/pulseview-build/AppDir/usr/lib/
# 4. 复制 Qt 依赖库
for lib in $(ldd /tmp/pulseview/build/pulseview | grep "=> /" | awk '{print $3}' | sort -u); do
    cp "$lib" ~/pulseview-build/AppDir/usr/lib/ 2>/dev/null || true
done
# 5. 下载 appimagetool
wget -O ~/pulseview-build/appimagetool-aarch64.AppImage \
  "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-aarch64.AppImage"
chmod +x ~/pulseview-build/appimagetool-aarch64.AppImage
# 6. 创建 AppRun 启动脚本
cat > ~/pulseview-build/AppDir/AppRun << 'EOF'
#!/bin/bash
SELF=$(readlink -f "$0")
HERE=${SELF%/*}
export LD_LIBRARY_PATH="${HERE}/usr/lib:${LD_LIBRARY_PATH}"
export QT_PLUGIN_PATH="${HERE}/usr/lib/plugins:${QT_PLUGIN_PATH}"
export QT_QPA_PLATFORM_PLUGIN_PATH="${HERE}/usr/lib/plugins"
exec "${HERE}/usr/bin/pulseview" "$@"
EOF
chmod +x ~/pulseview-build/AppDir/AppRun
# 7. 创建 .desktop 文件
cat > ~/pulseview-build/AppDir/pulseview.desktop << 'EOF'
[Desktop Entry]
Name=PulseView (Sipeed)
Comment=Logic Analyzer GUI
Exec=pulseview
Icon=pulseview
Type=Application
Categories=Development;Electronics;
EOF
# 8. 打包
~/pulseview-build/appimagetool-aarch64.AppImage \
  ~/pulseview-build/AppDir \
  ~/PulseView-sipeed-aarch64.AppImage


打包完成后,AppImage 文件约 70MB,可直接运行:

~/PulseView-sipeed-aarch64.AppImage --version


验证 sipeed-slogic-analyzer 驱动已启用:

Supported hardware drivers:
  ...
  sipeed-slogic-analyzer Sipeed SLogic Analyzer


【图片 40】验证 sipeed-slogic-analyzer 驱动已启用

40.jpg


三、USB 权限问题与解决

3.1 问题现象

编译完成、启动 PulseView 后,连接 Sipeed SLogic Combo 8,点击"扫描设备"时弹出错误:

sr: usb: Failed to open device: LIBUSB_ERROR_ACCESS.


lsusb 可以正常识别设备:

$ lsusb | grep SIPEED
Bus 001 Device 007: ID 359f:0300 SIPEED USB TO LA


【图片 41】lsusb 识别设备

41.jpg

3.2 根本原因

PulseView 通过 libusb 库直接访问 USB 设备。USB 设备插入后由 udev 系统创建对应的设备节点(如 /dev/bus/usb/001/008),默认权限为 root:root 660,只有 root 能读写。而 PulseView 以普通用户(arduino)运行,因此收到 LIBUSB_ERROR_ACCESS(访问被拒绝)。

3.3 创建 udev 规则

【图片 42】udev 规则文件

42.jpg

为 Sipeed SLogic 设备创建专用规则:

sudo tee /etc/udev/rules.d/50-sipeed-slogic.rules << 'EOF'
# Sipeed SLogic Combo 8 (Logic Analyzer)
SUBSYSTEM=="usb", ATTR{idVendor}=="359f", ATTR{idProduct}=="0300", MODE="0666", GROUP="plugdev"
# Sipeed 其他设备(预留)
SUBSYSTEM=="usb", ATTR{idVendor}=="359f", MODE="0666", GROUP="plugdev"
EOF


重新加载规则:

sudo udevadm control --reload-rules
sudo udevadm trigger


将用户加入 plugdev 组:

sudo usermod -a -G plugdev $USER


注意:修改用户组后需要重新登录(或重启)才能生效。

3.4 验证权限修复

【图片 43】groups 命令输出,确认包含 plugdev

43.jpg

$ groups
arduino adm dialout sudo audio video plugdev users netdev ...


【图片 44】USB 设备权限已变为 666

44.jpg

$ ls -la /dev/bus/usb/001/008
crw-rw-rw- 1 root plugdev 189, 6  ...  /dev/bus/usb/001/008


【图片 45】PulseView 成功识别 Sipeed SLogic Combo 8

45.jpg


四、实际测试:捕获 Arduino Uno Q 的 D6 引脚信号

4.1 测试目的

验证 PulseView + SLogic Combo 8 的逻辑分析功能。直接在 Arduino Uno Q 的 D6 引脚输出与板载 LED 同步的高低电平信号,用逻辑分析仪捕获并观察波形。

4.2 接线

逻辑分析仪

Arduino Uno Q

CH0

D6

GND

GND

将逻辑分析仪的 CH0 探针接到 Uno Q 的 D6 引脚,GND 接到 Uno Q 的 GND。

【图片 46】逻辑分析仪连接 Uno Q 实物图

46.jpg

4.3 Arduino 测试代码

在 Arduino App Lab 中编译上传修改后的Blink LED代码,同时控制板载 LED 和 D6 引脚,两者状态同步:

// Blink LED + D6 信号输出
// 板载 LED 和 D6 引脚同步闪烁,D6 连接到逻辑分析仪 CH0
#define LED_PIN LED_BUILTIN
#define TEST_PIN 6
void setup() {
  pinMode(LED_PIN, OUTPUT);
  pinMode(TEST_PIN, OUTPUT);
}
void loop() {
  // 同时点亮 LED 和输出高电平到 D6
  digitalWrite(LED_PIN, HIGH);
  digitalWrite(TEST_PIN, HIGH);
  delay(1000);
  // 同时熄灭 LED 和输出低电平到 D6
  digitalWrite(LED_PIN, LOW);
  digitalWrite(TEST_PIN, LOW);
  delay(1000);
}


【图片 47】Arduino App Lab 上传 Blink + D6 测试代码

47.jpg

4.4 PulseView 采集配置

~/PulseView-sipeed-aarch64.AppImage

步骤:

  1. 点击工具栏"扫描设备"按钮(Ctrl+Shift+S)

  2. 选择 "Sipeed SLogic Combo 8"

  3. 启用通道 0(CH0),设置采样率为 1MHz

  4. 点击"运行"开始采集

4.5 观察采集结果

采集到的波形应与 LED 闪烁同步:

  • 高电平持续约 1s(LED 亮)

  • 低电平持续约 1s(LED 灭)

  • 周期约 2s

【图片 48a】PulseView 选择设备并配置采集参数

48a.jpg

【图片 48b】PulseView 采集到的 D6 引脚方波信号及分析

48b.jpg

可以看到波形与板载 LED 的亮灭完全同步,证明了逻辑分析仪捕获的信号准确反映了 D6 引脚的电平变化。

4.6 Blink频率调整

另外,我们也可以调整python部分的脚本,修改blink的频率:

【图片 49】Arduino App Lab 修改python脚本

49.jpg

4.7 信号测量

PulseView 提供了丰富的测量功能:

  • 光标测量:放置两个光标,精确测量时间差。可以验证高/低电平持续时间是否约为 1s

  • 频率测量:自动计算信号频率。预期约 0.5Hz(周期 2s)

  • 占空比测量:计算高电平/低电平占比。预期约 50%

  • 协议解码:如有串口/I2C/SPI 信号,可加载对应解码器


五、扩展:其他常见 USB 调试设备的 udev 规则

如果你还使用其他 USB 调试器/分析仪,可以把规则添加到同一个文件中:

# J-Link 调试器
SUBSYSTEM=="usb", ATTR{idVendor}=="1366", MODE="0666", GROUP="plugdev"
# FT2232/FT232 (常见 USB 转串口/JTAG)
SUBSYSTEM=="usb", ATTR{idVendor}=="0403", MODE="0666", GROUP="plugdev"
# CMSIS-DAP / DAPLink
SUBSYSTEM=="usb", ATTR{idVendor}=="0d28", MODE="0666", GROUP="plugdev"
# ESP32 USB-Serial
SUBSYSTEM=="usb", ATTR{idVendor}=="10c4", MODE="0666", GROUP="plugdev"
添加后重新加载规则:
sudo udevadm control --reload-rules
sudo udevadm trigger



六、总结

步骤

内容

状态

硬件介绍

Sipeed SLogic Combo 8 多合一调试工具

编译 PulseView

从源码编译 Sipeed 定制版并打包 AppImage

解决 USB 权限

udev 规则 + plugdev 组配置

验证设备识别

PulseView 正常识别逻辑分析仪

实际信号测试

捕获 Uno Q D6 引脚 Blink 方波

扩展规则

其他 USB 调试设备 udev 规则

完成全部配置后,我的 Arduino Uno Q 已经具备了完整的逻辑分析能力,可以配合 Sipeed SLogic Combo 8 进行信号采集和协议分析。





关键词: ARDUINOUNOQ4GBRAM32GBEMMC    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]