FPGA + FX3 实现 USB3.0 与 PC 通信开发心得记录

FPGA + FX3 实现 USB3.0 与 PC 通信开发心得记录 🏄


1️⃣ 综述

本学习计划主要围绕 Cypress FX3 芯片的 USB3.0 接口开发,涵盖:

  • FX3 硬件设计与调试
  • FX3 固件(FW)编写
  • 上位机软件开发(基于 Python + libusb)
  • 与 FPGA 的高速数据交互(DMA + FIFO)

开发目标包括:

  1. 基于正点原子教程中的读写/回环测试固件,完成基础通信测试
  2. 实现简单的上位机功能:数据接收、数据发送
  3. 在此基础上添加图像显示、波形显示等功能
  4. 实现可控数据流的传输机制(按需触发或控制)

2️⃣ FPGA 端开发记录

✅ 参考资料

  • 正点原子 USB3.0 FMC 模块资料
  • R厂 USB3.0 FMC 模块参考设计

✅ 开发要点(FX3 GPIF 接口)

FX3 与 FPGA 通信使用 GPIF II 接口,核心是对 FIFO 的控制:

信号 功能说明
FLAGA/B 写 FIFO 的空满标志
FLAGC/D 读 FIFO 的空满标志
data[31:0] 数据线,三态输出
addr[1:0] 地址选择(2'b00: 写,2'b11: 读)
pclk GPIF 时钟(典型为 100MHz)
slcs_n 片选,通常一直拉低
slrd_n 读使能(低有效)
slwr_n 写使能(低有效)
sloe_n 数据方向控制(0: 读,1: 写)
pktend_n 数据包结束标志(类似 AXI LAST

⚠️ 注意事项:

  • FX3 为 SDR 模式,稳定传输时需将时钟相位反转(180°)
  • FPGA 实现通常只需一个状态机即可完成基本读写
  • 数据流搬运逻辑是核心部分,需处理好时序与突发读写

3️⃣ 上位机开发记录

✅ 常见开发方式:

  1. 使用 libusb 驱动 + 开源库(支持 Python/C++ 等)
  2. 使用某日本厂商提供的 .dll(支持 Python,但疑似存在固件兼容性问题)
    • 症状:每连续读取两次就卡死,需设备复位
  3. 使用 Cypress 官方 CyAPI 驱动 和 C++/C# 进行开发(支持 Visual Studio)

✅ 当前采用方案:

💡 libusb 驱动 + pyusb 实现高速上位机开发,可轻松实现 2Gbps+ 的传输速率,支持 1080P@60Hz 图像流传输

建议开发工具链:

  • libusb-win32 或使用 zadig 工具安装 libusb 驱动
  • pyusb + numpy + opencv 等进行数据接收、显示与处理
  • 使用 AI 帮助写 PyQt5 上位机

4️⃣ FX3 固件开发

目前使用 正点原子教程 中的双 FIFO 固件为基础,已完成:

  • 读写通道初始化配置
  • 回环模式测试(Loopback)
  • 基本 DMA 配置与 Endpoint 映射

实际使用过程中,若无特殊应用,固件配置基本够用,仅需根据 Endpoint 和 FIFO 容量进行调整即可。


📌 下一步:

  • 添加 图像显示波形显示模块
  • 加入 异常检测:如 USB 断开、重连管理
  • 上位机多线程优化,提升接收性能

posted @ 2025-07-03 11:08  luokesi  阅读(502)  评论(0)    收藏  举报