项目总览
LogicAnalyzer 是由 gusmanb 开发的一个高性能开源逻辑分析仪项目,基于 Raspberry Pi Pico/Pico2 微控制器。该项目在 GitHub 上拥有 4,600+ Stars,是一个成熟且活跃的开源硬件项目。
核心参数:
- 采样率:标准 100Msps,Pico2 可达 400Msps(Blast 模式)
- 通道数:24 通道数字输入
- 采样深度:最高 384KB(取决于通道配置)
- 触发类型:边沿触发、复杂模式触发、快速模式触发
- 协议支持:130+ Sigrok 兼容解码器
- 平台支持:Windows、Linux、macOS、Raspberry Pi
- 连接方式:USB CDC、WiFi(Pico W)、设备级联
1. 项目架构与技术栈
1.1 分层架构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| ┌──────────────────────────────────────────────────────────────┐
│ 应用层 (Application) │
│ ┌───────────────┐ ┌───────────────┐ ┌───────────────────┐ │
│ │ LogicAnalyzer │ │ CLCapture │ │ TerminalCapture │ │
│ │ (GUI 应用) │ │ (CLI 工具) │ │ (终端捕获) │ │
│ │ AvaloniaUI │ │ .NET 6+ │ │ .NET 6+ │ │
│ └───────────────┘ └───────────────┘ └───────────────────┘ │
├──────────────────────────────────────────────────────────────┤
│ 协议层 (Protocol) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 130+ Sigrok 协议解码器 (Python) │ │
│ │ UART、I2C、SPI、USB、CAN、LIN、Modbus 等 │ │
│ └─────────────────────────────────────────────────────────┘ │
├──────────────────────────────────────────────────────────────┤
│ 通信层 (Communication) │
│ USB CDC Serial │ TCP/IP (WiFi) │ Daisy Chain │
├──────────────────────────────────────────────────────────────┤
│ 固件层 (Firmware) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ RP2040/RP2350 固件 (C/C++) │ │
│ │ - PIO 状态机 (4x 采样控制) │ │
│ │ - DMA 环形缓冲区 (4x 通道) │ │
│ │ - 多核处理 (Core0:USB/TCP, Core1:WiFi) │ │
│ │ - 双缓冲数据传输 │ │
│ └─────────────────────────────────────────────────────────┘ │
├──────────────────────────────────────────────────────────────┤
│ 硬件层 (Hardware) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ 主控板 │ │ 电平转换板 │ │ 扩展/级联接口 │ │
│ │ RP2040/2350│ │ TXU0104 │ │ 最多5台级联 │ │
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
└──────────────────────────────────────────────────────────────┘
|
1.2 技术栈矩阵
| 层级 | 技术选型 | 版本/说明 |
|---|
| 硬件设计 | KiCad | 7.0+ |
| 固件 | Pico SDK | 2.0+ |
| 固件语言 | C11/C++17 | ARM GCC |
| GUI 框架 | Avalonia UI | 11.x |
| GUI 语言 | C# | .NET 6/7/8 |
| 解码器 | Python 3 | 3.8+ |
| 构建系统 | CMake | 3.13+ |
| CI/CD | GitHub Actions | - |
2. 硬件设计深度分析
2.1 核心设计决策
1. GPIO 全利用策略
1
2
3
4
5
6
7
| // 24 通道 GPIO 映射
const uint8_t pinMap[] = {
2,3,4,5,6,7,8,9,10,11,12,13, // 12 通道
14,15,16,17,18,19,20,21,22, // 9 通道
26,27,28 // 3 通道 (模拟输入复用)
};
// GPIO0/1 保留用于触发信号
|
- GPIO2-22: 22 个标准数字输入
- GPIO26-28: 3 个模拟输入复用为数字输入
- GPIO0: 复杂/快速触发输出
- GPIO1: 复杂/快速触发输入
2. PIO (Programmable I/O) 程序设计
项目使用两个 PIO 状态机实现高速采样:
1
2
3
4
5
6
7
8
| // PIO 程序汇编 (LogicAnalyzer.pio)
.program logic_analyzer
; 采样循环
loop:
in pins, 24 ; 读取 24 个引脚状态
push ; 推送到 TX FIFO
jmp loop ; 无限循环
|
3. DMA 环形缓冲区架构
1
2
3
4
5
6
7
8
| // 4 个 DMA 通道形成环形链
dma_channel_config c0, c1, c2, c3;
// 配置链式 DMA
channel_config_set_chain_to(&c0, dma_ch1);
channel_config_set_chain_to(&c1, dma_ch2);
channel_config_set_chain_to(&c2, dma_ch3);
channel_config_set_chain_to(&c3, dma_ch0); // 闭环
|
2.2 电平转换设计
TXU0104 高速电平转换器:
- 带宽:200MHz+
- 传播延迟:< 5ns
- 电压范围:1.65V - 5.5V
- 方向控制:自动方向检测
1
2
3
4
| 输入侧 (DUT) 转换器 输出侧 (Pico)
1.8V ────┐ ┌──── 3.3V
3.3V ────┼── TXU0104 ──────────┼──── 3.3V
5.0V ────┘ └──── 3.3V
|
3. 固件核心实现
3.1 采样引擎
三种采样模式:
| 模式 | 通道数 | 最大采样率 | 采样深度 | 特点 |
|---|
| 8 通道模式 | 8 | 100Msps | 131,071 样本 | 最大深度 |
| 16 通道模式 | 16 | 100Msps | 65,535 样本 | 平衡配置 |
| 24 通道模式 | 24 | 100Msps | 32,767 样本 | 全通道 |
| Blast 模式 (Pico2) | 8 | 400Msps | 380K+ 样本 | 超高速 |
PIO 采样实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| void start_capture(CAPTURE_REQUEST* req) {
// 计算系统时钟分频
float div = (float)clock_get_hz(clk_sys) / req->frequency;
// 配置 PIO
pio_sm_set_clkdiv(pio0, sm, div);
pio_sm_init(pio0, sm, offset, &config);
// 启动 DMA 链
dma_channel_configure(dma_ch0, &c0, buffer0, &pio0->rxf[sm], count, true);
// 启动 PIO 状态机
pio_sm_set_enabled(pio0, sm, true);
}
|
3.2 触发机制
1. 简单触发 (Simple Trigger)
1
2
3
4
| // 单边沿触发
if (pin_state != last_state && pin_state == trigger_level) {
trigger_detected = true;
}
|
2. 复杂触发 (Complex Trigger)
1
2
3
4
5
6
7
| // 最多 8 通道组合触发
uint8_t mask = req->triggerMask; // 参与触发的通道
uint8_t pattern = req->triggerPattern; // 目标模式
if ((sample & mask) == pattern) {
trigger_detected = true;
}
|
3. 快速触发 (Fast Trigger)
1
2
3
4
5
6
7
8
| // PIO 实现的硬件级触发
.program fast_trigger
in pins, 5 ; 读取 5 通道
mov x, isr ; 保存到 X
and x, trigger_mask ; 应用掩码
cmp x, trigger_pat ; 比较模式
jmp !equal, loop ; 不匹配继续
irq set 0 ; 触发中断
|
3.3 多核架构 (Pico W)
1
2
3
4
5
6
7
8
9
10
11
| Core 0 (主核):
├── USB CDC 通信
├── TCP/IP 服务器
├── 协议解析
└── 数据采集控制
Core 1 (从核):
└── WiFi 处理 (CYW43)
├── WiFi 连接管理
├── 网络事件处理
└── LED 控制
|
多核通信机制:
1
2
3
4
5
6
7
8
| // 使用事件队列进行核间通信
EVENT_QUEUE frontendToWifi;
EVENT_QUEUE wifiToFrontend;
// Core0 发送事件到 Core1
EVENT_FROM_FRONTEND evt;
evt.event = SEND_DATA;
event_push(&frontendToWifi, &evt);
|
4. 软件架构分析
4.1 GUI 应用程序
技术栈:
- 框架: Avalonia UI 11.x
- 语言: C# 10/11
- 运行时: .NET 6/7/8
- 架构: MVVM (Model-View-ViewModel)
核心模块:
1
2
3
4
5
6
7
8
9
| LogicAnalyzer/
├── MainWindow.axaml # 主窗口
├── CaptureDialog.axaml # 捕获配置对话框
├── SampleViewer.axaml # 波形显示组件
├── ProtocolAnalyzer.axaml # 协议分析器
└── Views/
├── ChannelSelector.axaml
├── TriggerSettings.axaml
└── MeasurementTool.axaml
|
信号描述语言 (SDL):
1
2
3
4
| // 示例 SDL 代码
clock CLK 10MHz
signal DATA 0x55 0xAA
signal RST 1 0 0 1
|
4.2 协议解码器架构
Sigrok 兼容解码器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| # decoders/uart/pd.py
class Decoder(srd.Decoder):
api_version = 3
id = 'uart'
name = 'UART'
inputs = ['logic']
outputs = ['uart']
options = (
{'id': 'baudrate', 'desc': 'Baud rate', 'default': 115200},
{'id': 'data_bits', 'desc': 'Data bits', 'default': 8},
)
def decode(self, startsample, endsample, data):
# 解码实现
pass
|
支持协议:
- 串口通信: UART、SPI、I2C、CAN、LIN
- 存储: I2C EEPROM、SPI Flash、SD Card
- 显示: HDMI (DDC)、VGA、LCD
- 工业: Modbus、Profibus
- 无线: IR、RF、Bluetooth
- 总计: 130+ 种协议
4.3 CLI 工具
CLCapture - 命令行捕获工具:
1
2
3
4
5
6
7
8
9
10
11
12
| # 基本用法
CLCapture /dev/ttyACM0 100000000 1,2,3,4 512 1024 \
TriggerType:Edge,Channel:5,Value:1 output.csv
# 参数说明
# $1: 串口设备
# $2: 采样率 (Hz)
# $3: 通道列表
# $4: 预触发样本数
# $5: 后触发样本数
# $6: 触发配置
# $7: 输出文件
|
5. AI Agent 集成可能性评估
5.1 现有接口能力
可用的自动化接口:
| 接口 | 类型 | 自动化友好度 | 说明 |
|---|
| CLCapture | CLI | ⭐⭐⭐⭐⭐ | 完整的命令行控制 |
| TerminalCapture | CLI | ⭐⭐⭐⭐⭐ | 基于配置文件的捕获 |
| CSV Export | 文件 | ⭐⭐⭐⭐⭐ | 标准数据格式 |
| Sigrok/PulseView | 文件 | ⭐⭐⭐⭐☆ | 兼容专业工具 |
| TCP/IP | 网络 | ⭐⭐⭐⭐⭐ | 支持远程控制 |
5.2 推荐的 AI Agent 集成方案
方案 1: Python API 封装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| # 建议的 AI Agent API 设计
class LogicAnalyzerAgent:
def __init__(self, port='/dev/ttyACM0'):
self.device = LogicAnalyzerDevice(port)
def capture(self, channels, sample_rate, duration):
"""执行信号捕获"""
pass
def analyze_protocol(self, protocol_type):
"""自动协议分析"""
pass
def detect_anomalies(self, reference_pattern):
"""异常检测"""
pass
|
方案 2: RESTful API 封装 (Pico W)
1
2
3
4
5
6
| # WiFi 模式下的 HTTP API
@app.route('/api/capture', methods=['POST'])
def capture():
config = request.json
data = device.capture(config)
return jsonify({'data': data})
|
5.3 自动化测试场景
1. 硬件自动化测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| # AI Agent 测试脚本示例
async def test_i2c_communication():
# 配置逻辑分析仪
la = LogicAnalyzerAgent()
await la.configure(channels=[0,1], rate=400000)
# 触发捕获
await la.trigger_on_pattern('START_CONDITION')
# 分析结果
result = await la.decode_protocol('i2c')
# 验证预期
assert result.address == 0x50
assert result.data == [0x01, 0x02, 0x03]
|
2. 持续集成集成
1
2
3
4
5
6
7
| # GitHub Actions 示例
- name: Signal Integrity Test
run: |
python -m logic_analyzer_agent \
--board /dev/ttyACM0 \
--test-case tests/signals/i2c_eeprom.yaml \
--assert-protocol i2c
|
6. 代码质量与可维护性评估
6.1 代码组织
优点:
- ✅ 清晰的模块化设计(固件/软件/硬件分离)
- ✅ 一致的命名规范
- ✅ 详细的注释和文档
- ✅ 完善的错误处理
改进建议:
- ⚠️ 部分代码文件较长(>2000行),建议进一步拆分
- ⚠️ 固件和软件版本耦合度较高,可考虑松耦合设计
- ⚠️ 协议解码器缺乏统一的测试框架
6.2 测试覆盖
| 组件 | 测试类型 | 覆盖度 | 状态 |
|---|
| 固件 | 单元测试 | 低 | ❌ 缺失 |
| 固件 | 集成测试 | 中 | ⚠️ 手动 |
| 软件 | 单元测试 | 中 | ✅ 部分 |
| 硬件 | 功能测试 | 高 | ✅ 完整 |
| 协议解码器 | 回归测试 | 低 | ❌ 缺失 |
6.3 文档完整性
| 文档类型 | 完整度 | 质量 |
|---|
| README | ⭐⭐⭐⭐⭐ | 非常详细 |
| Wiki | ⭐⭐⭐⭐⭐ | 完整教程 |
| 代码注释 | ⭐⭐⭐⭐☆ | 良好 |
| API 文档 | ⭐⭐⭐☆☆ | 需要改进 |
| 硬件文档 | ⭐⭐⭐⭐⭐ | 包含 Gerber/BOM |
7. 总结与建议
7.1 项目亮点
- 硬件设计精良:充分利用 RP2040 的 PIO 和 DMA 能力
- 软件生态丰富:130+ 协议解码器,多平台支持
- 开源友好:完整的 KiCad 设计文件,易于 DIY
- 活跃维护:定期更新,社区活跃
- 价格合理:相比商用逻辑分析仪成本极低
7.2 AI Agent 集成建议
短期(1-3个月):
- 开发 Python SDK 封装现有 CLI 工具
- 添加自动化测试脚本示例
- 完善 API 文档
中期(3-6个月):
- 为 Pico W 开发 RESTful API
- 实现协议自动识别功能
- 添加机器学习辅助信号分析
长期(6个月+):
- 开发 AI 驱动的异常检测系统
- 实现自然语言控制的捕获配置
- 构建云端信号数据库和分享平台
7.3 技术债务
- 固件测试:缺乏自动化测试框架
- 版本兼容性:固件和软件版本强耦合
- 错误处理:部分边界条件处理不够完善
- 性能优化:大数据量时 GUI 渲染可进一步优化
附录:资源链接
报告生成时间: 2025-02-05
分析师: Gemini (via OpenClaw)