USB EHCI:帮助处理交易错误

时间:2010-07-19 21:47:28

标签: usb driver

目前我们(开源)项目目前的一个里程碑是完成USB支持,因此我们目前正在努力研究驱动程序。我们目前的开发重点是x86和ARM上的EHCI(特别是OMAP35xx SoC,仅在板上硅的EHCI)。我们在各种模拟器中运行顺畅 - VMware(免费和非免费版本),QEMU和VirtualBox。

然而,当我们在真实硬件上进行测试时,我们绝对无处可去。我们系统中设备枚举的基本例程如下:

  1. 打开端口电源(如果选项可用)并等待电源稳定到设备
  2. 执行端口复位(保持50 ms),然后等待复位完成所需的时间(循环时)
  3. 如果端口有设备,并且已启用,请通知系统新的USB设备可用于初始化。
  4. 发送SET ADDRESS命令为设备分配地址。这是我们到处遇到问题的地方:
    1. 此命令的SETUP事务完成且没有错误
    2. 零长度IN事务(状态阶段)抛出事务错误,暂停qTD,禁用端口
  5. 我们的时序延迟基本上与Linux的驱动程序相同(如果有的话,更长)。

    根据USB 2.0规范,此行为是“端口错误”(第11.8节),但说实话,我没有看到如何将其端口错误描述转换为我们的驱动程序的工作解决方案。由于我们是一个开源项目,我们也没有钱出去购买适当的硬件USB协议分析仪来调查线路上发生了什么。

    有没有人遇到类似的问题,并且知道解决方案?

1 个答案:

答案 0 :(得分:2)

我们已经确定此问题的原因一直是时间问题,但在我们的案例中,问题太多很多的延迟。

通过修改我们的qTD / QH创建代码来创建一个具有多个与之关联的链接qTD的QH,我们已经能够在物理硬件上成功运行。

我们还必须使用先前尚未实现的te EHCI 64位数据结构。