资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,驱动类型介绍,USBKey产品相关的驱动类型,2,驱动类型划分,USB 通用,HID 人机接口设备 ,USB Mass Storage 大容量存储设备 ,设备连接、系统识别、系统与设备通讯,3,涉及到的通讯协议,U,SB,USB-HID,USB Mass Storage,USB,设备与驱动程序,USB设备连接方式,USB主控制器与其它I/O设备一样直接连接到系统总线上。操作系统与主控制器通信使用I/O口或内存存放器,通过普通的中断信号,系统可以接受主控制器的事件通知。主控制器连接一棵USB设备树。一种称为hub的设备作为其它设备的连接点。多个hub能以菊链方式连接,可以连接到USB标准中定义的最大深度。,USB设备内部逻辑结构,USB协议规定:设备描述符,Device Descriptor:,bcdUSB: 0x0110,bDeviceClass: 0x00,bDeviceSubClass: 0x00,bDeviceProtocol: 0x00,bMaxPacketSize0: 0x08 (8),idVendor: 0x155B,idProduct: 0x8003,bcdDevice: 0x1202,iManufacturer: 0x00,iProduct: 0x00,iSerialNumber: 0x00,bNumConfigurations: 0x01,USB协议规定:配置、接口描述符,Configuration Descriptor:,wTotalLength: 0x0029,bNumInterfaces: 0x01,bConfigurationValue: 0x01,iConfiguration: 0x00,bmAttributes: 0xC0 (Bus Powered Self Powered ),MaxPower: 0x96 (300 mA),Interface Descriptor:,bInterfaceNumber: 0x00,bAlternateSetting: 0x00,bNumEndpoints: 0x02,bInterfaceClass: 0xFF,bInterfaceSubClass: 0xA0,bInterfaceProtocol: 0xB0,iInterface: 0x00,USB协议规定:端点描述符,Endpoint Descriptor:,bEndpointAddress: 0x81 IN,Transfer Type: Interrupt,wMaxPacketSize: 0x0040 (64),bInterval: 0x01,Endpoint Descriptor:,bEndpointAddress: 0x02 OUT,Transfer Type: Interrupt,wMaxPacketSize: 0x0040 (64),bInterval: 0x01,USB设备接口,USB设备的接口可以有假设干个端点(endpiont),端点作为通信管道的终点,有四种类型:批量(Bulk),控制(Contro1),中断(Interrupt)和同步(Isochronous)。这些类型都需要在驱动程序中进行描述。USB设备的端点0默认为控制方式,可以初始化系统,设备并加电并收到一个总线复位命令后,端点0就可以访问。与端点类型对应的是定义了四种数据传输方式,根据开发系统也对其在驱动程序中进行定义,具体包括:,控制方式:用于发送和接收USB定义的结构化信息;,批量方式:用于发送或接收小块无结构数据;,中断方式:与批量管道相似,但包括一个最大延迟;,同步方式:用于发送或接收有周期保证的大块无数据结构。,USB设备枚举,主机对usb设备的识别过程叫做枚举。,为什么要枚举呢?枚举就是从设备读取一些信息,知道设备是什么样的设备,如何进行通信,这样主机就可以根据这些信息来加载适宜的驱动程序。,一个完整的windows对usb设备的枚举过程如下:,设备连接。USB设备经USB总线连接主机。,设备上电。USB设备可以自供电,也可以使用USB总线供电。,主机检测到设备,发出复位。主机通过检测设备在总线的上拉电阻检测到有新的设备连接,并获释设备是全速设备还是低速设备,然后向该端口发送一个复位信号。,设备默认状态。设备从总线上接收到一个复位信号后,才可以对总线的处理操作做出响应。设备接收到复位信号后,就暂时使用默认地址(00H)来响应主机的命令。,USB设备枚举续,地址分配。当主机接收到有设备对默认地址(00H)响应的时候,就分配给设备一个空闲的地址,以后设备就只对该地址进行响应。,读取USB设备描述符。主机读取USB设备描述符,确认USB设备的属性。,设备配置。主机依照读取的USB设备描述符来进行配置,如果设备所需的USB资源得以满足,就发送配置命令给USB设备,表示配置完毕。,挂起。如果使用总线供电,为了节省电源,当总线保持空闲状态超过3ms以后,设备驱动程序就会进入挂起状态,在挂起状态时,USB设备保存了包括其地址和配置信息在内的所有内部状态,设备的消耗电流不超过500uA。,从用户角度来看,枚举过程是自动完成并不可见的。但很多初次使用的设备连接时,系统会弹出说新硬件检测到,设备安装成功,可以使用之类的消息提示框,而且有时还需要用户配合选择安装相关的驱动。,当枚举完成后,这个新添加的设备可在Windows的设备管理器里面看到,当用户删除这个设备/硬件时,系统把这个设备从设备管理器里删除。,USB设备与驱动程序的关系,USB总线驱动程序自动检测新插入的USB设备。然后它读取设备内的设备描述符以查明插入的是何种设备,描述符中的厂商和产品标识以及其它描述符一同决定具体安装哪一个驱动程序。,USB使用了许多方法来帮助操作系统定位驱动程序,包括设备上的设备描述符、配置描述符,以及接口描述符。对于有厂商和产品标识的设备,配置管理器首先在注册表中查找设备名称,例如名为USBVID一0471&PID-0666的设备。如果注册表中没有这个表项,配置管理器将触发“新硬件向导来寻找该设备的INF文件。新硬件向导向用户询问INF文件的位置,然后安装驱动程序并填写注册表。一旦配置管理器找到了注册表表项,它就可以动态地装载驱动,Windows系统下USB驱动协议栈,分为USB底层总线驱动程序和USB功能(设备)驱动程序。,总体数据传输过程一个完整的USB系统包括主机系统和USB设备。所有的传输事务都是由主机发起的。一个主机系统又可以分为以下几个层次结构,如下图:,具体数据传输过程,当应用程序想对USB设备进行I/O操作,它需调用Windows API函数,I/O管理器将此请求构造成一个适宜的I/O请求包IRP并把它传递给USB功能驱动程序。,USB功能驱动程序接收到这个IRP后,根据IPR中包含的具体操作代码构造相应USB请求块URB,并把此URB放到一个新的IRP中,然后把它传递给USB底层驱动程序。,USB底层驱动程序根据IRP中所含的URB执行相应的操作,并把操作的结果返回给USB功能驱动程序。USB功能驱动程序接收到此返回的IRP后,将操作结果通过IRP返还给I/O管理器,最后I/O管理器将此IRP操作结果传回给应用程序,至此应用程序对设备的一次I/O操作完成。,特点,USB底层驱动程序由操作系统提供,负责与实际的硬件打交道,实现烦琐的底层通信。,USB功能驱动程序由设备开发者编写,不对实际的硬件进行操作,而是通过向USB底层驱动程序发送包含URBUSB Request Block,请求块的IRP,来实现对USB设备信息的发送和接收。,多个USB设备可以通过USB底层驱动程序来协调它们的工作。,编写分层驱动程序较之编写单一驱动程序相对简单,且可以节省内存和资源,不易出错。,USB相关资料,:/ usb实施者论坛 提供各种usb协议,:/,/,HID,设备与驱动程序,为什么使用HID设备,外部设备与计算机通讯需要驱动程序,USB协议复杂,不方便。,把设备定义为属于HID类,应用程序通过与系统内置的HID类驱动通信。实现与设备通信功能。,即使设备不完全符合HID使用表中的任何一种,也可以完全根据需要自己定义一个使用表,从而符合HID类驱动程序的要求。,HID设备接口要求,交换的数据储存在称为报表的结构内,设备的固件程序必须支持HID报表的格式。报表的格式很灵活,可以处理任何类型的数据,单个报表最多包含255B。,每一笔事务可以携带小量或中量的数据。低速、全速、高速设备每一笔事务最大分别是8B、6 4B、1 024B。,最大传输速度受到限制,低速设备的中断端点每1Oms一笔事务,即800bs;全速设备的中断端点每lms一笔事务,即64 O00bs;高速设备的中断端点每125tts三笔事务,即24576Mbs。,HID设备必须包含一个类描述符和一个或几个报表描述符。通过报表描述符定义了数据格式和使用方法。,连接方式,与,USB,设备相同。,HID设备逻辑结构,人机接口设备(HID)主要是指一些人与计算机进行交互的设备,如键盘、鼠标、游戏杆等;但是HID设备不一定非要是这些人机交互设备,只要符合HID设备级定义标准要求的都可以认为是HID设备。,当插入HID设备后,主时机向设备请求各种描述符来识别设备。为了把一个设备识别为HID类别,设备在定义描述符的时候必须遵守HID标准。以下图显示了HID各种描述符之间的关系。,HID与USB描述符比较,从上图中可以看出,除了,USB,标准定义的一些描述符外,,HID,设备还必须定义,HID,描述符,。另外设备和主机的通信是通过报告的形式来实现的,所以还必须定义,报告描述符,;,而物理描述符不是必需的。还有就是,HID,描述符是关联于接口,(,而不是端点,),的,所以设备不需要为每个端点都提供一个,HID,描述符,HID描述符,HID Descriptor:,bcdHID: 0x0110,bCountryCode: 0x00,bNumDescriptors: 0x01,bDescriptorType: 0x22,wDescriptorLength: 0x0028,Interface Descriptor:,bInterfaceNumber: 0x00,bAlternateSetting: 0x00,bNumEndpoints: 0x02,bInterfaceClass: 0x03 (HID),bInterfaceSubClass: 0x00,bInterfaceProtocol: 0x00,iInterface: 0x00,HID,类设备的特殊信息是在接口描述符的类别码,子类别码和协议码中声明的。,HID协议,USB,协议定义了,11,种请求命令,通过这些请求来获得设备的信息及对设备进行设置。,HID,类设备除了要支持这,11,种标准的请求外,还要实现以下,6,种特定请求:,Get_Report,主机用控制传输从设备接收数据,所有,HID,类设备都要支持这个请求,;,Set_Report,设备用控制传输接收主机的数据,设备可以不支持此请求,;,Get_Idle,主机读取设备当前的空闲速率,设备可以不支持此请求,;,Set_Idle,设置闲置状态,设备可不支持此请求,;,Get_Protocol,主机获得设备的当前活动是引导协议还是报告协议,;,Set_Protocol,在引导协议和报告协议间切换,设备如果支持系统引导,(,如键盘和鼠标,),,就必须支持,Get_Protocol,和,Set_Protocol,请求。,HID设备协议栈,HID设备枚举过程固件的功能,与USB枚举过程类型,增加了Get_Report要求。,当固件程序正确完成枚举以后,操作系统会自动安装HID类驱动程序,接下来的工作由应用程序完成。,应用程序枚举HID设备流程,功能:识别设备并读取报告信息。,通过上述步骤获得设备句柄后,就可以与设备交换数据。可以先声明一个缓冲区存储数据,然后调用,ReadFile(),WriteFile(),与设备交换报告数据。,HID设备数据传输,USB设备有4种传输方式与主机进行通信: 控制方式、中断方式、批量方式和同步方式。每种方式都有它的应用领域。HID只支持控制和中断传输方式。如下图,HID设备必须要有默认的控制管道和一个中断输入端点;中断输出端点是可选的。,存储设备与驱动程序,简介,Mass Storage类也就是大容量存储类,主要为软磁盘接口、ATA接口、IDE接口硬盘及Flash存储器等设备建立的USB接口,根据以上不同的数据存储载体接口构成了Mass Storage类的各种子类,他们都有自己的标准,并通过命令的形式实现各种功能。,使用的协议,USB组织定义了大容量存储设备的类标准,这个类标准包括4个独立的子类标准,即:,1)USB Mass Storage Class Control Bulk Interrupt(CBI)Transport。,2)USB Mass Storage Class Bulk-Only Transport。,3)USB Mass Storage Class ATA Command Block。,4)USB Mass Storage Class UFI Command Specification。,前2个子标准定义了数据命令状态在USB上的传输方法,后2个子标准那么定义了存储介质的操作命令。在嵌入式USB主机系统中,主要支持的设备是USB闪存盘,属于UsBMass Storage类设备。采用单比量Bulk Only的传输标准,而子类采用UFI命令集。Mass Storage类协议的实现就包含这两局部内容。,设备描述符,idVendor: 0x155B,idProduct: 0x8100,bcdDevice: 0x0100,iManufacturer: 0x04,0x0409: BHDC ,iProduct: 0x03,0x0409: USB DISK-KEY,iSerialNumber: 0x02,0x0409: H0F814H0371400000000,bNumConfigurations: 0x01,接口描述符,Interface Descriptor:,bInterfaceNumber: 0x00,bAlternateSetting: 0x00,bNumEndpoints: 0x02,bInterfaceClass: 0x08,bInterfaceSubClass: 0x06,bInterfaceProtocol: 0x50,iInterface: 0x00,USB接口描述类中,接口类必须为0x08Mass storage class,子类为0x06SCSI transparent command set或0x04UFI,接口协议为0x50Bulk-only transport。,端点描述符,Endpoint Descriptor:,bEndpointAddress: 0x81 IN,Transfer Type: Bulk,wMaxPacketSize: 0x0040 (64),bInterval: 0x00,Endpoint Descriptor:,bEndpointAddress: 0x02 OUT,Transfer Type: Bulk,wMaxPacketSize: 0x0040 (64),bInterval: 0x00,MASS STORAGE协议栈,枚举,类同USB枚举过程。,Mass Storage类枚举过程中涉及两个请求:Get_Max_LUN和Mass Storage Reset,所有的Mass Storage类设备都必须支持这两个请求。,数据传输,Mass Storage设备枚举成功后,PC会通过块传输端点向Mass Storage设备发送各种命令,Mass Storage设备根据相应的命令,进行不同的应答。,其命令、数据、状态相关的流程图如下:,PC机发送的数据必须符合CBW格式31byte,小端模式,而Mass Storage设备的应答,其格式必须符合CSW格式13byte,小端模式。至于中间过程传输的数据,根据不同的命令,格式也有不同地要求。,CBW命令块Command Block Wrapper,CSW状态块Command Status Wrapper,USB协议的SCSI指令集,Bulk-Only 的CBW 中的CBWCB 中的内容即为如下格式的命令块描述符Command Block Descriptor。SCSI-2 有三种字长的命令,6 字节、10字节和12字节,Microsoft Windows 环境下支持12 字节长的命令。,USB协议的SCSI指令集2,对于不同的命令,其命令块描述符略有不同,其要求的返回内容也有所不同,根据相 应的文档,可以对每种请求作出适当的回应。,FAT文件系统,大局部移动存储设备符合FAT文件系统的标准。以文件的形式管理和存储数据,所以需要建立一个精简的文件系统。整个文件系统通过Mass Storage的UFI命令与外设的磁盘建立联系,实现建立FAT表、FDT表、查找文件、写文件和读文件等一系列功能。,
展开阅读全文