Hasty Briefsbeta

双语

Downtown Doug Brown

a day ago
  • 作者购买了一块2008年的OMAP3530 BeagleBoard来调试UART驱动程序的一个bug。
  • 出于好奇而非必要,他们探索了USB启动——这是OMAP3530的一个特性。
  • 查找文档很困难,因为许多旧资源(gitorious、arago-project、eLinux)都已消失,但互联网档案馆提供了帮助。
  • USB启动过程包括OMAP枚举、主机读取ASIC ID、发送命令以及在300毫秒内传输引导加载程序。
  • 配备USB 3.0(xHCI)控制器的现代计算机无法上传X-Loader——它们在一个帧内塞入了太多数据包,导致STALL错误。
  • 在每次libusb_bulk_transfer调用前添加1毫秒的延迟,解决了现代机器上的X-Loader上传问题。
  • 出现了第二个问题:上传X-Loader后,较新的主机控制器在未收到应答的IN数据包后放弃,尽管重试本应有效。
  • 在上传X-Loader和从中读取之间添加20毫秒的延迟解决了问题,因为X-Loader需要时间启动。
  • 在较慢的计算机上,udev无法响应OMAP的300毫秒超时;使用基于netlink而非udev的自定义libusb修复了热插拔检测。
  • 作者对omap_loader的补丁(包含延迟和传输大小限制)已提交到上游,后来证明对复活使用OMAP处理器的旧款Nest恒温器很有用。
  • 这个项目突显了一个随机的副项目如何意外地帮助了他人,并且是USB 3.0主机控制器的速度而非xHCI本身导致了问题。