代码之家  ›  专栏  ›  技术社区  ›  Matthew Iselin

USB EHCI:有关事务错误的帮助

  •  2
  • Matthew Iselin  · 技术社区  · 14 年前

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

    然而,当我们在真正的硬件上进行测试时,我们却一无所获。系统中设备枚举的基本例程如下所示:

    1. 打开端口电源(如果选项可用)并等待电源稳定到设备
    2. 执行端口重置(保持50 ms),然后根据需要等待重置完成(while loop)
    3. 如果端口存在设备,并且已启用,则通知系统新的USB设备可用于初始化。
    4. 发送SET ADDRESS命令为设备分配地址。这就是我们到处遇到问题的地方:
      1. 事务中的零长度(状态阶段)抛出一个事务错误,停止qTD,然后 .

    我们的时间延迟基本上与Linux的驱动程序相同(如果有的话,更长)。

    根据usb2.0规范,这种行为是一种“端口错误”(第11.8节),但说实话,我不知道如何将它对端口错误的描述转化为驱动程序的工作解决方案。由于我们是一个开源项目,我们也没有钱去购买一个合适的硬件USB协议分析器来调查到底是怎么回事。

    有没有人遇到过类似的问题并知道解决方法?

    1 回复  |  直到 14 年前
        1
  •  2
  •   Matthew Iselin    14 年前

    我们已经确定这个问题的原因是一个时间问题,但在我们的情况下,这个问题是太多了 耽搁的时间。

    通过修改qTD/QH创建代码来创建一个QH,其中包含多个相关联的qTD,我们能够在物理硬件上成功运行。

    我们还必须使用te EHCI 64位数据结构,这是以前没有实现过的。