【问题标题】:How to communicate with the devices behind a USB hub?如何与 USB 集线器后面的设备通信?
【发布时间】:2017-04-17 11:46:02
【问题描述】:

我需要一位 USB 专家。我有一个 MAX3421 作为 USB 主机的小硬件。我连接了内部由两个设备组成的打印机:打印机本身和扫描仪。两者都通过内置集线器作为单独的设备公开。这些设备是全速的。

我已经阅读了巨大的 USB 2.0 手册 (http://www.usb.org/developers/docs/usb20_docs),在那里我搜索了如何通过集线器与后面的设备进行通信,但是文档缺少这个重要的细节。

我可以向集线器发送命令,如第 11.24.2 章所述,例如获取集线器描述符,SET_FEATURE(Reset) 重置打印机中的设备,GET_STATUS(Port1) 正确返回 4 个字节和集线器中端口 1 的状态。

但是我如何获得例如扫描仪的设备描述符?

我已将设备地址 1 分配给集线器并尝试与设备地址 2 上的扫描仪/打印机通信(假设它可能在那里),但是当我发送 GET_DESCRIPTOR(Device) 到设备地址 2,尽管在执行重置后两个集线器端口都已通电并启用。

我已经阅读了很多关于 SPLIT 令牌的信息,但它们似乎只用于高速集线器。但是我的打印机中的集线器是全速的。

文档在任何地方都没有说明如何做到这一点。 这是在哪里记录的?

【问题讨论】:

    标签: usb


    【解决方案1】:

    USB 2.0 规范中并没有通俗地解释 USB 端口(根端口或集线器端口)后面的设备枚举过程,但整个想法嵌入在 DS(下游)的所有状态机中端口行为。

    最初,所有 USB 端口都被禁用以进行通信。唯一启用的功能是“端口连接”状态。如果将多个设备插入多个端口(一次或通电时),则尚未发生 USB 通信。所有 USB 设备在上电时都设计为响应默认地址 00。但由于尚未启用任何端口,因此没有人响应任何内容。

    然后 HOST 从第一个端口开始转到每个指示“连接”的单独端口。主机将端口设置为 PORT_RESET 模式,连接的设备将以 Chirp-K 响应,或者什么都不响应,或者它最初有 D-pull,表明它是一个 LS 设备。所有其他设备仍在禁用端口后面,因此看不到任何活动。

    在第一个特定端口获得正确的速度状态后,端口被启用,相应的空闲总线流量开始,然后使用默认地址 00 执行 get_descriptor 命令。然后主机通过 SET_ADDRESS( )。从这一点开始,设备将只响应这个特定的分配地址。

    然后主机启用下一个端口,它显示连接了某些东西。同样,所有其他非枚举设备都设置为响应 00 地址,但一次只启用一个新端口。由于第一个设备已经有一个不同于默认 00 的地址,因此不会发生冲突,第一个设备只是忽略寻址到默认管道 00 的流量。

    对第二个设备重复该过程,首先在 00 地址进行通信,然后将下一个可用 USB 地址分配给第二个设备。并且对于显示连接状态的每个端口重复该过程。

    要记住的关键字是 USB 端口未“启用”,除非主机控制器收到命令“port_reset”到根端口,或将 SET_FEATURE(PORT_RESET)(或类似的东西)发送到已连接且已枚举的端口中心。

    【讨论】:

    • 你有相关文档的链接吗?
    【解决方案2】:

    没有答案?似乎是一个难题。

    同时我在这里找到了答案: http://www.microchip.com/forums/m523103.aspx#523499

    在向集线器上的端口发送 SET_FEATURE(Reset) 后,连接到该端口的设备会在 USB 总线上显示 设备地址 00。 然后你可以用通常的方式获取设备描述符,并执行一个 SET_ADDRESS 到这个设备。

    USB 规范肯定是不完整的。

    【讨论】:

    • 向集线器下游端口发出的 SET_FEATURE(PORT_RESET) 命令会在总线上生成入站 USB 复位状态。根据 USB 规范,连接到此端口的任何 USB 设备都必须将其 SIE(串行接口引擎)重置为其默认状态,即将地址解码器重置为默认“00”。它被称为“默认控制管道”,在规范中都有。与“开机”状态相同。枚举算法的其余部分从这里开始。
    猜你喜欢
    • 2012-04-28
    • 2012-12-19
    • 2013-04-07
    • 2013-12-12
    • 1970-01-01
    • 2018-02-17
    • 2013-08-10
    • 1970-01-01
    相关资源
    最近更新 更多