【问题标题】:Issue with USB OTG peripheral Linux driver (difference in addresses)USB OTG 外围 Linux 驱动程序问题(地址不同)
【发布时间】:2018-02-17 14:36:14
【问题描述】:

我正在为 Linux 4.15.x 编写 USB OTG 外设驱动程序。我在为我的 OTG 外围设备设置地址时遇到了一些问题。

在外围 USB 端,我收到以下字节的设置地址:0x0、0x5、0x14、0x0、0x0、0x0、0x0、0x0。这意味着我应该在我的外围设备中设置给定的地址。但可能我做错了什么,因为在设置给定地址后,我的外围 USB 设备停止从 USB 总线接收任何内容。我的意思是我没有通过 USB 收到进一步的请求。

同时在 PC(USB 主机端)我有日志:

Device not responding to setup address.
Device not accepting address 54, error -71

问题在于 USB 设置地址请求和 PC(USB 主机)端的错误消息不同。

为什么这些数字不同?为什么 PC 会在日志中报告它试图用它实际发送的不同地址枚举我的 USB 设备?

有什么想法吗?我错过了什么吗?

【问题讨论】:

  • 您确定您的设备完全响应了 SetAddress 吗? -71 是 EPROTO,这似乎发生在设备没有响应时 - 正如您所观察到的,这将使主机停止与它交谈。您是否还能够捕获 USB 协议跟踪,以查看总线上到底发生了什么,以及那里缺少什么以提供进一步调试的线索?
  • 不幸的是我不确定,因为我没有 USB 协议分析器。在内核日志中,有 4 或 5 条这样的带有设置地址的消息,所以我假设我的驱动程序根本没有确认设置地址。但是仍然 - 为什么这些地址不同的原因是什么?
  • 您可以尝试使用Wireshark 捕获主机上的 USB 流量。之前的任何 SetAddress 是否包含您在设备端看到的值?也许您中间的 Hub 没有正确响应?
  • 我试图用 tcpdump 捕获它,我可以在 pcap 中看到来自主机的 get_device_descriptor 请求和我的响应(来自我的驱动程序)。但是在 pcap 中没有任何 set_address 请求或响应。好像我必须手动破解 linux hcd 驱动程序。

标签: c linux usb


【解决方案1】:

我想我找到了这些地址不同的原因。这是因为我在我的 PC 上使用 xhci 主机控制器驱动程序,而 xhci 与 ohci、uhci 或 ehci 规范相比,维护设置地址请求的方法略有不同。

【讨论】:

    猜你喜欢
    • 2011-11-26
    • 2013-03-12
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2015-09-18
    • 2016-07-29
    • 2022-09-18
    • 1970-01-01
    相关资源
    最近更新 更多