USB设备可以即插即用,但在使用之前,必须对设备进行配置。一旦设备连接到某一个USB的节点上,USB就会产生一系列的操作,来完成对设备的配置,这种被软件支持的操作称为总线枚举过程:
1)设备所连接的集线器(Hub)检测出端口上有设备连接,通过状态变化管道向主机报告。
2)主机通过询问Hub以获取确切的信息。
3)主机这时知道设备连接到哪个端口上,于是向这个端口发出复位命令。
4)Hub发出的复位信号结束后,端口被打开,Hub向设备提供100mA的电源,这时设备上电,所有的寄存器复位,并且以默认地址0以及端点0响应命令。
5)主机通过默认地址与端点0进行通信,赋予设备一个唯一的地址,并且读取设备的配置信息。
6)最后主机对设备进行配置,该设备就可以使用了。
当该设备被移走时,Hub依然要报告主机,并且关闭端口。一旦主机接到设备移走的报告,就会改写当前结构的信息。(www.xing528.com)
主机到设备的简单连接需要许多层和设备间的交互作用。USB总线接口层提供了主机和设备间的物理/信号/数据包的连接。USB设备层是在设备上执行一般USB操作的USB系统软件表示层。功能层通过和客户软件层适当的匹配向主机提供附加功能。USB设备层和功能层各自有一个逻辑数据流,在层内,实际上使用USB总线接口层完成数据传输。
在数据传输过程中,涉及主机的两个软件接口是:
(1)主控制器驱动(HCD)USB主控制器和USB系统软件间的软件接口。此接口设定主控制器的实现范围。USB驱动程序可支持不同主控制器而无需主控制器的专门实现。主控制器使用者提供支持主控制器的驱动程序。
(2)USB设备(USBD)USB系统软件和客户软件间的接口。此接口为驱动程序提供了控制USB设备的便捷功能。
USB数据传输采用时间帧方式,将等间隔的时间定义为帧,低速和全速设备每帧为1ms,每帧以一个SOF包(Start of Frame)为起始,在这1ms里USB进行一系列的总线操作,每帧中可以进行四种类型的传输:控制传输(control transfer)、同步传输(synchronous Transfer)、中断传输(Interrupt Transfer)和批(大量)传输(Bulk Transfer)。它们在数据格式、传输方向、数据包容量限制、总线访问限制等方面有着各自不同的特征。
从逻辑上讲,USB数据的传输是通过管道进行的。USB系统软件通过默认管道(与端点0相对应)管理设备,设备驱动程序通过其他的管道来管理设备的功能接口。实际的数据传输过程如下:设备驱动程序通过对USBD接口(USB Driver Interface)的调用发出输入输出请求(IRP);USB驱动程序接到请求后,调用HCD接口(Host Controller Driver Inter-face),将IRP转化为USB的传输,一个IRP可以包含一个或多个USB传输;然后HCD将USB传输分解为总线操作,由主控制器以打包(Packet)的形式发出。所有的数据传输都是由主机开始的,任何外设都无权开始一个传输。IRP是由操作系统定义的,而USB传输与总线操作是USB规范定义的。
一个USB逻辑设备在USB系统看来就是一个端点的集合。接口是功能的表示。系统软件通过默认管道(与端点0有关)管理设备。设备驱动程序通过管道群(与端点设置有关)管理接口。设备驱动程序需要通过主机缓冲区和USB设备端点间USB总线的传输数据。主控制器(或取决于传输方向的USB设备)将数据打包在USB上传输。主控制器也同样可在USB上传输数据包,以访问总线。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。