USB论坛
直播中

李娟

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

arm为什么无法获取CYUSB3014-BZXI的数据?

arm开发板采用的是rk3568,在开发板中fx3是可以正常工作的,但我把程序交叉编译到arm中后,将rk3568单独放置在另一个底板中,然后连接fx3,fx3是可以被识别的,打开也可以,但没有数据。系统是ubuntu18.04,arm板中也是对应的arm板系统(GNU/Linux 4.19.206 aarch64),usb通信采用的libusb编写的,也是交叉编译。在pc端的系统中fx3正常工作,在firefly开发板中配合rk3568也是可以正常工作,但当rk3568替换到其他底板的时候就出问题了,会报错“can't set config #1,error -110”。同样的硬件环境下,我把fx3用其它类似功能的芯片替代是没有问题的,都可以正常工作,只有fx3是不可以正常工作,我不确定在arm中我需要什么配置吗?我看在linux的sdk中看到那个cyulibusb应该也是用libusb包装的,我理解不需要特殊编译就可以,因为我一直使用的是libusb

回帖(1)

张敏

2025-6-6 17:26:37

您的问题描述得很详细,问题出现在RK3568换到底板后连接FX3(CYUSB3014)时出现error -110(ETIMEDOUT超时)。结合您的描述(同一FX3在PC和Firefly开发板正常,但更换底板后异常),以下是可能原因和解决方案:




根本原因分析




  1. 硬件供电问题  



    • 症状:FX3能被识别但传输数据超时(错误-110)。  

    • 根源:新底板可能供电不足或不稳,导致FX3枚举正常(低功耗状态)但数据传输时电流突增引发电压跌落,芯片进入不稳定状态。




  2. USB信号完整性差  



    • 新底板USB走线设计不良(如未做90Ω差分阻抗匹配、走线过长、附近干扰源),导致高速传输(USB 2.0/3.0)时信号畸变。




  3. 软件/驱动兼容性  



    • 更换底板后内核USB驱动或libusb配置未适配新硬件环境(如未启用DMA或时钟频率配置错误)。






针对性解决方案


1. 检查硬件供电



  • 测试方法:  

    • 测量FX3的VBUS(5V)VCC(3.3V/1.2V)引脚电压,在数据传输时用示波器观察是否跌落(要求波动<5%)。  

    • 短接VBUS到GND的10μF电容是否缺失(FX3手册要求稳定供电)。


  • 解决:  

    • 若供电不足,增加外部5V/3A电源单独供给FX3(飞线测试)。  

    • 在FX3的电源引脚添加100μF钽电容缓冲电流突变。



2. 优化信号完整性



  • 关键检查点:  

    • 确认新底板USB差分线长度差<5mm,且远离时钟、电源等干扰源。  

    • 使用USB协议分析仪(如LeCroy)捕获信号眼图,确认是否符合USB 2.0/3.0规范。


  • 临时验证:  

    • 用带屏蔽层的USB连接线,并在FX3的DP/DM引脚串联22Ω电阻(阻抗匹配)。



3. 软件与驱动调整



  • 修改内核配置

    重新编译RK3568内核,启用以下选项:
     CONFIG_USB_DWC3=y
    CONFIG_USB_DWC3_HOST=y
    CONFIG_USB_DWC3_DUAL_ROLE=y
    CONFIG_USB_PHY=y

  • 调整libusb超时

    在代码中增加控制传输超时时间(默认2秒):
     libusb_control_transfer(dev_handle, ... , 5000); // 超时设为5000ms

  • 启用USB动态调试

    在设备上执行:
     echo 'module dwc3 +p' > /sys/kernel/debug/dynamic_debug/control
    dmesg -w | grep dwc3

    观察传输失败时的详细错误日志。



4. 替代验证测试



  • 强制降速测试

    在FX3固件中禁用USB 3.0(仅启用USB 2.0),观察是否正常(排除USB 3.0信号问题):
     CyU3PUsbSetDesc(cyFalse, cyFalse, cyFalse); // 在固件中调用

  • 对比Firefly底板设计

    测量Firefly底板中USB接口的上拉电阻位置(1.5kΩ)ESD防护电路,在新底板中严格复刻。




验证步骤




  1. 供电测试

    用示波器捕获FX3的VCC波形,触发条件设置为电压<3.0V(3.3V供电时)或<1.1V(1.2V核心电压时),确认是否有跌落。




  2. 信号质量测试

    USB Eye Diagram

    (图:正常USB眼图示例)

    若眼图闭合(交叉点>40%),需优化布线。




  3. 软件回退测试

    在RK3568上运行旧版内核(如Firefly板载的4.19.206),确认是否底板硬件问题。






最终建议



  • 优先级硬件供电 > 信号完整性 > 软件配置(因同一FX3在Firefly板正常)。  

  • 快速验证:外接独立电源给FX3供电,若问题消失则确认为供电问题。  

  • 设计修复:若为新底板设计缺陷,建议:  

    • 增加电源路径的电容(10μF + 0.1μF并联);  

    • 重布USB差分线(长度≤10cm,参考层完整接地)。



通过以上步骤,应能定位并解决FX3数据传输超时问题。如仍有异常,请提供dmesg日志和底板原理图片段进一步分析。

举报

更多回帖

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