阅读:1671回复:2
主机如何知道USB设备的?
主机如何知道USB设备?
01.用户插入一设备至USB端口 02.Hub检测到该设备 Hub端口的两根信号线(D+和D-)的每一根都有一个15K的下拉电阻。而一个设备在D+(全速设备) /D-(低速设备)均有一个1.5K的上拉电阻。当设备插入到一个端口时,设备的上拉电阻使信号为高。Hub以此检测到一个设备已经连接上了。 03.主机知道该设备 Hub使用它的中断流程来报告发生在Hub上的事情(包括具体端口)。主机知道后,给Hub发出一个Get_Port_Status请求(该请求为所有Hub理解的标准Hub类控制请求)来了解更多的信息(告诉主机该设备是什么时候连接的)。 04.Hub重新设置该设备 当主机知道有一新设备时,主机控制器给Hub发送一个Set_Port_Feature请求,让Hub来重新设置端口。Hub使设备的USB数据线处在重启状态( D+ 和 D- 均为逻辑低 )至少10ms. 05. Hub在设备和总线间建立一个信号通道 主机发送一个Get_Port_Status请求来验证设备是否激起重工业启状态。返回的数据的一位表示设备是否仍然处在重启状态。当Hub已经释放了重启状态,设备就处在默认状态了(设备的USB Register已经处在它们的默认状态),设备已准备发通过Endpoint 0的默认流程来响应控制流程。 06. Hub检测设备速度 Hub通过信号线的电压来检测设备的速度(参考02)。并将信息发给主机以响应Get_Port_Status请求。 07. 主机以送一个Get_Descriptor请求来知道默认流程的最大包的大小 主机发送请求给设备地址0,终端0。 08. 主机分配一个地址给设备 主机控制器发送一个Set_Address请求来分配一个单独的地址给设备。设备读取这个请求,返回一个确认且保存新的地址。从这个点起,所有通信皆使用这个新地址。直至设备断开为止。 09. 主机知道设备的能力 主机给新地址发送一个Get_Descriptor请求来读取这个设备描述符,这次读取整个部分。本描述符是一个数据结构包括Endpoint 0 的最大包的大小,设备支持的配置号,以及该设备的其它信息。主机将这些信息用于往后的通信中。 10. 主机分配并载入设备驱动程序 主机从设备获得能够知道的信息后,开始搜索与之相匹配的驱动程序。 |
|
最新喜欢:![]() |
沙发#
发布于:2003-07-07 00:13
GOOD。
我来补充一点。 HOST发出的是SETUP包,8字节,相关信息见USB文档,之后HOST发IN包,SLAVE根据前面的命令送回相关信息,这里有一点要注意,不管HOST发的IN包是多大,SLAVE永远用它的最大包来回送信息,因此HOST如果发的IN长度如果不够,就要发生接收溢出错误。如果一个IN没有读完所有的内容,则HOST必须再发IN包,SLAVE将继续发剩下的内容,直到发完。此后HOST发一个0字节的OUT包,整个过程完成。 |
|
板凳#
发布于:2003-07-07 08:30
好,有人讲讲,有利于大家水平的提高,^_^
|
|