设备列举是一种总线上的配置过程,且在USB设备被插拔进出后或总线起始时,就会被加以执行。整个USB设各列举的基本架构如图1所示。
整个设备列举的可分为下列的步骤。
①设备插入PC主机的根集线器或USB集线器的接口端。
②集线器不断地查询接口的状态,一旦检测到电位的改变后,Hub就会通知主机。
③紧接着,主机就会询问端口状态的改变。
④主机确认端口的改变,并且针对这个接口重置命令。
⑤现在,主机即位于接上电源的状态,并且以预设的地址响应这个新接上的设备。
图1 USB设备列举的基本示意图
⑥主机针对端点0,取回设各描述符,并且决定的封包大小。当然,同时也取出此设各的PID/VID码,以确认此设备是何 种驱动程序。
⑦主机配附一个单独的地址给USB设备。
⑧主机取回配置描述符。此时,主机可以根据可使用的电源与带宽,给予设备配置的方式。这样,设各就有了设计的电源与带 宽(中断查询间隔)。
⑨现在,设备已设置好地址与配置完毕,可以准备使用了。若以USB通信协议的观点来看,设备列举可划分为下列数个步骤。
①主机送出SETUP令牌封包以及其后所跟随的DATA封包至地址0(DATA封包内放置取得设各描述符的标准要求),用来取得设备 描述符。
②USB微控制器将此标准要求译码,并且从它的程序内存(ROM表)中取出设备描述符。
③主机执行控制读取的传输序列,此时,USB微控制器将会通过USB总线送出设备描述符并做出相对应的动作。
④在收到设备描述符后,主机会送出SETUP令牌封包以及其后所跟随的DATA封包至地址0(DATA封包内放置设置设各地址的标准要求 ),以设置一个新的USB地址至设备上。
⑤USB微控制器在完成“无数据”控制传输后,将会存储新的地址于它的设备地址的缓存器内。
⑥主机设置一个新的USB地址给设备,并针对设备描述符送出一个要求。
⑦USB微控制器将此要求译码,并且从程序内存(ROM表)中取出设各描述符。
⑧主机执行控制读取的序列,此时,USB微控制器将会以USB总线送出设备描述符并做出相对应的动作。
⑨主机对USB微控制器产生控制读取的序列,以读取设备的配置与各种描述符。
⑩USB微控制器从它的程序内存(ROM表)中取出相对的配置与各种描述符,并且通过USB总线将数据传回至主机。
⑩当主机收到所有的描述符后,就完成了设各列举的步骤。
此外,若以I/O设备所须负责的工作来看,基本上可以分为几个重要的不同状态:脱离、连接、供给电源等。如图2所示,显示了一 个外围I/O设备所需的状态流程图。
图2 外围I/0设备所需的状态流程图
从图中,可以发现到整个外围I/O的动作状态。而在第2章已介绍过各种总线的状态。因此,在此也应用这些总线的状态来说明一个外围I/O所需的各种状态。其中,可以发现正常的流程是,连接USB设备,供应电源,预设设备,设置地址以及配置等动作。这也符合上述所介绍的设备列举的步骤。但是,若此时总线检测到没有任何USB动作超过3 ms,那么设备就会切人低功率的中止(suspend)状态。此时,设备不能从总线中使用超过500 μA(平均值)的电源。这个3 ms时间内没有总线动作是意味着,PC主机停止送出SOF封包。而这有可能是PC主机已经关掉电源。若其中回复至总线上的动作被激活后,将会导致I/O设备从中止状态跳至下一个动作状态中。
以上的步骤看似非常的复杂,但用户可以通过稍后章节所要介绍的工具来加以了解。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。