集中器(hub)通知新设备已连接后,服务层给端口加电(switch on), 为设备提供100mA的电流。 此时设备处于其默认状态,并监听设备地址0。服务层会通过默认 管道继续检取各种描述符。此后它将向设备发送Set Address请求,将设备 从默认设备地址(地址0)移开。可能有多个设备驱动程序支持此设备。例如, 一个调制解调器可能通过AT兼容接口支持ISDN TA。然而,特定型号的ISDN 适配器的驱动程序可能提供对此设备的更好支持。为了支持这样的灵活性, 探测会返回优先级,指示他们的支持级别。支持产品的特定版本会具有最高 优先级,通用驱动程序具有最低优先级。如果一个配置内有多个接口,也可能 多个驱动程序会连接到一个设备。每个驱动程序只需支持所有接口的一个子集。
为新连接的设备探测驱动程序时,首先探测设备特定的驱动程序。 如果没有发现,则探测代码在所有支持的配置上重复探测过程,直到 在一个配置中连接到一个驱动程序。为了支持不同接口上使用多个驱动 程序的设备,探测会在一个配置中的所有尚未被驱动程序声明(claim)的 接口上重复进行。超出集中器功率预算的配置会被忽略。连接期间,驱动 程序应当把设备初始化到适当状态,但不能复位,因为那样会使得设备将 它自己从总线上断开,并重新启动探测过程。为了避免消耗不必要的带宽, 不应当在连接时声明中断管道,而应当延迟分配管道,直到打开文件并真的 使用数据。当关闭文件时,管道也应当被再次关闭,尽管设备可能仍然 连接着。
设备驱动程序与设备进行任何事务期间,应当预期会接收到错误。 USB的设计支持并鼓励设备在任何点及时断开连接。驱动程序应当确保 当设备不在时做正确的事情。
此外,断开连接(disconnect)后又重新连接(reconnect)的设备不会 被重新连接(reattach)为相同的设备实例。 将来当更多的设备支持序列号(参看设备描述符), 或开发出其他定义设备标识的方法的时候,这种情况可能会改变。
设备断开连接是由集中器在传递到集中器驱动程序的中断包中发 信号通知(signal)的。状态改变信息指示哪个端口发现了连接改变。 连接到那个端口上的设备的所有设备驱动程序共用的设备分离方法被调用, 结构被彻底清理。如果端口状态指示同时一个设备已经连接(connect)到那个 端口,则探测和连接设备的过程将被启动。设备复位将在集中器上产生 一个断开-连接序列,并将按上面所述进行处理。
本文档和其它文档可从这里下载:ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
如果对于FreeBSD有问题,请先阅读文档,如不能解决再联系<questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.