最近在试 F1C100s 开发,之前都是在 Windows 上用 sunxi-fel,非常稳定,每次都能下载。现在在 Linux 下面,使用 xfel 工具,有时会出现 ERROR: Can't found any FEL device 的提示,并且在出现这个提示的时候,dmesg 里面能够看到 USB 被重置了(reset full-speed USB device number 61 using xhci_hcd),设备重新连接。
经过分析发现,Linux 会自动把 USB 设备置于 suspend 模式,而全志的 USB FEL 实现可能有点问题,进入过后就无法再次唤醒,导致系统只能重置设备,连接失败。因此,我们必须禁用自动休眠模式。禁用的方法很简单,只需要加一条 udev 规则就可以了:
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="1f3a", ATTRS{idProduct}=="efe8", TEST=="power/autosuspend", ATTR{power/autosuspend}="-1"
我在 Rockchip RK3308 也观察到了类似的问题,用同样的方法可以解决,改一下 vid 和 pid 就行。已经给 xfel 工具和 xrock 工具的仓库发送 Pull Request,等其合并之后只需要 make install 就可以自动解决问题。
离线
已合并,这个USB自动休眠,大概多长时间会触发呢,libusb是否有唤醒usb设备相关功能呢。
默认是两秒,cat /sys/module/usbcore/parameters/autosuspend 可以看到。
离线