如何与USB集线器背后的设备进行通信

  • 本文关键字:通信 背后 USB 集线器 usb
  • 更新时间 :
  • 英文 :


我需要USB专家。我有一个小型硬件,带有Max3421作为USB主机。我将内部由两个设备组成的打印机连接起来:打印机本身和扫描仪。两者都通过内置轮毂暴露为单个设备。设备是全速的。

我已经阅读了巨大的USB 2.0手册(http://www.usb.org/developers/docs/docs/usb20_docs),我在其中搜索了如何通过设备通过设备通过集线器进行通信的方式,但是该文档缺乏此文档重要细节。

i可以将命令发送到第11.24.2章中的删除,例如获取集线器描述符,set_feature(reset),在打印机中重置一个设备,get_status(port1),该设备可正确返回4个字节。端口1中的端口。

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

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

我已经阅读了很多有关拆分令牌的文章,但它们似乎仅在高速枢纽中使用。但是我的打印机中的集线器是全速。

该文档在任何地方都没有说出如何做到这一点。这个记录在哪里?

在USB端口(根端口或集线器端口)背后枚举的过程中没有说明USB 2.0的规格中,但整个想法都嵌入在USB 2.0的规格中是正确的。DS(下游)端口行为的所有状态机。

最初,所有USB端口均被禁用进行通信。唯一启用的功能是"端口连接"状态。如果将多个设备插入多个端口(一次或电源时),则尚未发生USB通信。所有电源上的USB设备旨在响应默认地址00。

然后,主机从第一个端口开始,然后转到指示"连接"的每个单独端口。主机将端口设置为port_reset模式,并且附件的设备将用chirp-k响应,或者一无所有,或者最初已撤离,表明它是LS设备。所有其他设备仍在残障端口后面,因此没有活动。

在第一个特定端口获得正确的速度状态后,启用端口并开始使用默认地址00的get_descriptor命令,然后使用default地址00。)。从这一点开始,设备将仅响应此特定分配的地址。

然后,主机启用了下一个端口,其中显示了某些内容。同样,所有其他非成熟设备都设置为响应00地址,但一次只启用了一个新端口。由于第一个设备已经具有与默认00不同的地址,因此没有发生冲突,因此第一个设备只是忽略了默认管道00的通信。

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

要记住的关键字是,除非主机控制器获取命令" port_reset",否则不会"启用" USB端口,或者将SET_FEATURE(port_reset)(或类似的东西发送到连接且已经枚举的端口)中心。

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

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

将SET_FEATURE(RESET)发送到集线器上的端口后,连接到该端口的设备在USB总线上以设备地址00 出现。然后,您可以以通常的方式获取设备描述符,并执行SET_ADDRESS到此设备。

USB规范绝对不完整。

最新更新