USB论坛
直播中

贾埃罗

8年用户 1802经验值
私信 关注
[问答]

streamer测速无法使用怎么修改才可以呢?

在使用FX3的slavefifo2bit固件的过程中,我的PC和FPGA可以进行通信,因此我想进行测试一下我的通信速度是多大

但是在使用streamer的时候发现,无法使用,请问我应该怎么修改才可以呢?

回帖(1)

juju宇哥

2025-6-9 18:09:43

根据您的描述,您在Cypress FX3的slavefifo2bit固件环境下遇到streamer测速工具无法使用的问题。以下是分步解决方案,结合常见问题和修改建议:




1. 确认固件配置




  • 端点匹配检查



    • Streamer工具默认使用端点6(IN)和端点8(OUT)。请检查固件源码(如cyfxtx.ccyfxslfifosync.c)中是否正确定义:
      #define CY_FX_EP_PRODUCER 0x06  // IN端点(设备→PC)
      #define CY_FX_EP_CONSUMER 0x08  // OUT端点(PC→设备)

    • 若不匹配,修改固件端点定义后重新编译烧录。




  • DMA通道配置



    • 确保已正确绑定DMA通道到端点(参考CyFxSlnFifoApplnInit()函数):
      dmaCfg.size = 16*1024;  // 建议DMA缓冲区≥16KB
      dmaCfg.count = 8;       // 缓冲区数量≥4
      CyU3PDmaChannelSetConfig(&dmaHandle, CY_U3P_DMA_TYPE_AUTO, &dmaCfg);

    • 调用CyU3PDmaChannelEnable(&dmaHandle)启动DMA。






2. 修改Streamer工具参数




  • 指定传输方向



    • 测试PC→FX3(写)streamer.exe -t 1 -s <传输大小> -p <包大小>

    • 测试FX3→PC(读)streamer.exe -t 0 -s <传输大小> -p <包大小>

    • 示例:streamer.exe -t 1 -s 0x100000 -p 1024(传输1MB数据,包大小1024字节)




  • 强制设备选择



    • 若连接多个设备,指定设备地址(从Cypress Control Center获取):
      streamer.exe -a <地址> -t 1 -s 0x100000






3. 提升传输稳定性的关键修改




  • 固件优化



    • 增大DMA缓冲区:避免USB NAK返回导致降速:
      // 在dmaCfg配置中增加缓冲区
      dmaCfg.count = 12;      // 缓冲区数量从默认4增加到12
      dmaCfg.size  = 16*1024; // 每个缓冲区16KB

    • 禁用流式传输(若必要)
      若使用同步Slave FIFO,在CyFxUSBSendEvent()中移除CY_FX_SLFIFO_DMA_BUF事件限制。




  • GPIF状态机检查



    • 确认GPIF配置(如cyfx_gpif.h)为Slave FIFO模式,FPGA的读写信号(SLCSn, SLOEn, SLRDn, SLWRn)时序匹配FX3时钟(通常100 MHz)。






4. PC端操作与调试



  • 驱动权限

    • 管理员身份运行命令提示符执行Streamer。


  • 安装FX3驱动

    • 若设备显示为"Bootloader",需用Control Center重烧固件。


  • 捕获USB日志

    • USBTraceWireshark检查USB传输错误(如STALLNAK)。





5. 替代测试方法



  • Cypress Control Center测试
    打开控制中心 → 选择设备 → 点击"Bulk"选项卡 → 手动测试端点传输速度。

  • Python脚本测试
    使用PyUSB库快速验证速率(无需Streamer):
     import usb.core, time
    dev = usb.core.find(idVendor=0x04B4, idProduct=0x00F1) # FX3默认VID/PID
    dev.set_configuration()
    start = time.time()
    dev.write(0x08, b'x00'*1024*1024)  # 写1MB数据到OUT端点
    print("Speed:", 1/(time.time()-start), "MB/s")




问题排查流程图


graph TD
  A[Streamer无法使用] --> B{固件端点匹配?}
  B -->|否| C[修改固件端点或Streamer参数]
  B -->|是| D{DMA配置正确?}
  D -->|否| E[增大缓冲区数量/大小]
  D -->|是| F{GPIF状态机正确?}
  F -->|否| G[检查GPIF设计时序]
  F -->|是| H{PC端权限/驱动}
  H -->|驱动问题| I[重装FX3驱动]
  H -->|权限问题| J[以管理员运行]
  I --> K[重测速度]
  J --> K
  K -->|成功| L[完成]
  K -->|失败| M[用Wireshark抓包]



通过以上步骤,90%的Streamer问题可解决。若仍失败,建议检查硬件连接(如信号完整性),并验证FPGA端的FIFO读取逻辑。实际项目中,调整DMA缓冲区为16KB×8后通常可达到>200 MB/s的传输速率。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分