开机后系统会初始化usb总线,并扫描usb设备及驱动程序将他们挂载到总线上.
当一个USB设备插入主机时, USB设备硬件本身的原因,它会使USB总线的数据信号线的电平发生变化,而主机会经常扫描USB总线.当发现电平有变化时,它即知道有设备插入.
当USB设备刚插入主机时,USB设备它本身会初始化,并认为地址是0.也就是没有分配地址,这有点象刚进校的大学生没有学号一样.正如有一个陌生人闯入时我们会问“你是什么人”一样,当一个USB设备插入主机时,,它也会问:“你是什么设备”.并接着会问,你使用什么通信协议等等.当这一些信息都被主机知道后,主机与USB设备之间就可以根据它们之间的约定进行通信.
USB的这些信息是通过描述符实现的,USB描述符主要包括:设备描述符,配置描述符,接口描述符,端点描述符等.
当一个U盘插入主机时,你立即会发现你的资源管理器里多了一个可移动磁盘,并可以进一步从主机上知道它是爱国者或是朗科的.这里就有两个问题, 主机为
什么知道插入的是移动磁盘,而不是键盘或打印机等等呢?另外操作系统为什么还知道是哪个公司生产的呢?其实这很简单,当USB设备插入主机时,主机 就
会要求对方把它的设备描述符传回来,这些设备描述符中就包含了设备类型及制造商信息.又如传输所采用的协议是由接口描述符确定,而传输的方式则包含在端点描述符中.
USB设备分很多类:显示类,通信设备类,音频设备类,人机接口类,海量存储类.特定类的设备又可分为若干子类,每一个设备可以有一个或多个配置,配置用于定义设备的功能.配置是接口的集合,接口是指设备中哪些硬件与USB交换信息.每个与USB交换信息的硬件是一个端点.因些,接口是端点的集合.
U盘属于海量存储类.USB海量存储设备又包括通用海量存储子类,CDROM,Tape等,U盘实际上属于海量存储类中通用海量存储子类.通用海量存储设备实现上是基于块/扇区存储的设备.
USB组织定义了海量存储设备类的规范,这个类规范包括4个独立的子类规范.主要是指USB总线上的传输方法与存储介质的操作命令.
海量存储设备只支持一个接口,即数据接口,此接口有三个端点Bulk input ,Bulk output,中断端点.这种设备的接口采用SCSI-2的直接存取设备协议,USB设备上的介质使用与SCSI-2以相同的逻辑块方式寻址
(以上内容为转载)
usb设备的结构从上到下依次为:
用户-->应用程序-->usb驱动程序-->usb core-->usb主控制器-->usb设备-->接口(多个)-->端点(多个)
|