使用自由固件fx2lafw将Cypress FX2板子用作逻辑分析仪

起因是因为需要用到,于是在网上寻找自由的逻辑分析仪。看到FOSDEM 2026有一 个由Yann Sionneau设计并分享的开源的并且支持USB3.0的基于FPGA的逻辑分析仪。 幻灯片中提到了一款在这之前最开源的逻辑分析仪:

Cypress FX2 based boards
+ fx2lafw open source firmware
+ sigrok/PulseView host software

USB接口则是2.0的,因此采样率会比支持USB3.0的逻辑分析仪要低。但是我暂时用 不到太高的采样率,于是在网购平台花四十二元买了一款基于Cypress FX2的板子。

CY7C68013A-mini-brd.jpg

Figure 1: 采购到的Cypress FX2板子

先将板子接在电脑上然后运行 lsusb 检查一下:

Bus 001 Device 005: ID 08a9:0014 CWAV Inc. USBee AX-Pro

在sigrok的fx2lafw wiki页面的表格中,能查找到对应的设备,也能确认sigrok对 这块板子的支持状态能达到100%。

Debian的志愿者们已经把sigrok相关的代码给打包好了,因此我只需要在运行着 Debian的电脑上直接用 apt 下载就行。下载好后,还有一步值得做的操作,就 是根据wiki页面提到的方式去调整udev规则。调整后就能让libsigrok以非超级用 户的身分去访问板子了。

插上板子运行 sigrok-cli --scan

The following devices were found:
demo - Demo device with 13 channels: D0 D1 D2 D3 D4 D5 D6 D7 A0 A1 A2 A3 A4
fx2lafw:conn=1.6 - CWAV USBee AX [S/N: CWAV USBee AX] with 9 channels: D0 D1 D2 D3 D4 D5 D6 D7 A0

可以看到sigrok能够检测到这块板子了。然后我将板子上丝印为PB0和PB1的Pin接 到一块有I2C接口的开发板上,同时也将两块板子的GND也接起来。在开发板上运行 i2cget 来发送一些I2C信号之前,先使用指令对信号进行一秒采样:

sigrok-cli --config samplerate=200000 --driver fx2lafw -C D0,D1 --time 1s -O srzip -o data.sr

这行命令中, --config samplerate=200000 代表将采样率设置为200kHz。 选项 -C D0,D1 指只采样D0和D1两个通道,分别对应板子上PB0和PB1。选项 --time 1s 代表采样时间为1秒。采样数据会存在 data.sr 文件中,可以通过 sigrok-cli 来解码信息,比如运行 sigrok-cli -i data.sr -P i2c:scl=D1:sda=D0 就能用I2C解码器来解码:

$ sigrok-cli -i data.sr -P i2c:scl=D1:sda=D0
i2c-1: Start
i2c-1: 1
i2c-1: 0
i2c-1: 0
i2c-1: 0
i2c-1: 0
i2c-1: 0
i2c-1: 1
i2c-1: 0
i2c-1: Read
i2c-1: Address read: 20
i2c-1: NACK
i2c-1: Stop

使用 PulseView 前端的话则会更加直观:

pulseview-screenshot.jpg

Figure 2: PulseView截图