使用tinyprog为TinyFPGA BX烧录时出现USB Errno 5错误如何解决
故障原因判断
这个故障是macOS Big Sur系统与tinyprog工具的USB栈适配问题,并非开发板硬件本身故障,依据如下:
- 从你的烧录日志可以看到,bootloader的擦除、写入、校验三个核心步骤全部100%执行完成,说明开发板的USB基础通信、SPI Flash读写、FPGA核心功能均正常,不存在硬件层面的故障。
- 错误触发在
p.boot()调用环节:tinyprog在写完新bootloader后,会发送0x00指令触发开发板重启,新bootloader生效后会按更新说明替换USB VID/PID,macOS系统会立刻卸载旧的USB设备实例,tinyprog仍持有旧的USB端点句柄执行写操作,就会抛出Errno 5输入/输出错误,属于正常的时序适配问题,不代表更新失败。 - 你单独用pyusb执行写操作报错也是同样逻辑:如果设备已经完成重启切换了USB身份,旧的USB操作句柄已经被系统回收,访问无效句柄自然会返回IO错误。
验证与修复方案
- 烧录报错后直接拔插一次TinyFPGA BX开发板,让系统重新枚举USB设备,执行
tinyprog --list命令就能看到版本为1.0.1的开发板,即代表bootloader更新已经成功。 - 要规避该报错,可以在调用
perform_bootloader_update前,手动给tinyprog库的boot()方法增加100ms左右的延时,或者直接忽略该阶段的USBError异常即可,不会影响实际更新结果。
内容的提问来源于stack exchange,提问作者wombatbutt
相关产品推荐
相关产品推荐

