驱动类型介绍
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
连接方式
与USB设备相同。
HID设备逻辑结构
人机接口设备(HID)主要是指一些人与计算机进行交互的设备,如键 盘、鼠标、游戏杆等;但是HID设备不一定非要是这些人机交互设备 ,只要符合HID设备级定义规范要求的都可以认为是HID设备。
当插入HID设备后,主机会向设备请求各种描述符来识别设备。为了 把一个设备识别为HID类别,设备在定义描述符的时候必须遵守HID 规范。下图显示了HID各种描述符之间的关系。
特点
USB底层驱动程序由操作系统提供,负责与实际的硬件打交道,实 现烦琐的底层通信。 USB功能驱动程序由设备开发者编写,不对实际的硬件进行操作, 而是通过向USB底层驱动程序发送包含URB(USB Request Block ,请求块)的IRP,来实现对USB设备信息的发送和接收。 多个USB设备可以通过USB底层驱动程序来协调它们的工作。 编写分层驱动程序较之编写单一驱动程序相对简单,且可以节省内 存和资源,不易出错。
HID设备协议栈
HID设备枚举过程(固件的功能)
HID与USB描述符比较
从上图中可以看出,除了USB标准定义的一些描述符外,HID 设备还必须定义HID描述符。另外设备和主机的通信是通过报告的 形式来实现的,所以还必须定义报告描述符;而物理描述符不是必需 的。还有就是HID描述符是关联于接口(而不是端点)的,所以设备不 需要为每个端点都提供一个HID描述符
USB相关资料
http://www.usb.org/ (usb实施者论坛 提供各种usb协议) http://www.lvr.com/usb.htm http://www.usb-by-example.com/
HID设备与驱动程序
为什么使用HID设备
外部设备与计算机通讯需要驱动程序,USB协议复杂,不方便。 把设备定义为属于HID类,应用程序通过与系统内置的HID类驱动通 信。实现与设备通信功能。 即使设备不完全符合HID使用表中的任何一种,也可以完全根据需要 自己定义一个使用表,从而符合HID类驱动程序的要求。
HID类设备的特殊信息是在接口描述符的类别码,子类别码和 协议码中声明的。
HID协议
USB协议定义了11种请求命令,通过这些请求来获得设备的信息及对设备 进行设置。HID类设备除了要支持这11种标准的请求外,还要实现以下6种 特定请求: ① Get_Report——主机用控制传输从设备接收数据,所有HID类设备都要 支持这个请求; ② Set_Report——设备用控制传输接收主机的数据,设备可以不支持此请 求; ③ Get_Idle——主机读取设备当前的空闲速率,设备可以不支持此请求;
USB设备接口
USB设备的接口可以有若干个端点(endpiont),端点作为通信管道的 终点,有四种类型:批量(Bulk),控制(Contro1),中断(Interrupt)和 同步(Isochronous)。这些类型都需要在驱动程序中进行描述。USB 设备的端点0默认为控制方式,可以初始化系统,设备并加电并收到 一个总线复位命令后,端点0就可以访问。与端点类型对应的是定义 了四种数据传输方式,根据开发系统也对其在驱动程序中进行定义 ,具体包括: 控制方式:用于发送和接收USB定义的结构化信息; 批量方式:用于发送或接收小块无结构数据; 中断方式:与批量管道相似,但包括一个最大延迟; 同步方式:用于发送或接收有周期保证的大块无数据结构。
USB协议规定:配置、接口描述符
Configuration Descriptor: wTotalLengtห้องสมุดไป่ตู้: 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设备连接方式
USB主控制器与其它I/O设备一样直接连接到系统总线上。操作系统与 主控制器通信使用I/O口或内存寄存器,通过普通的中断信号,系统 可以接受主控制器的事件通知。主控制器连接一棵USB设备树。一 种称为hub的设备作为其它设备的连接点。多个hub能以菊链方式连 接,可以连接到USB规范中定义的最大深度。
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协议规定:设备描述符
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设备与驱动程序的关系
USB总线驱动程序自动检测新插入的USB设备。然后它读取设备内 的设备描述符以查明插入的是何种设备,描述符中的厂商和产品标 识以及其它描述符一同决定具体安装哪一个驱动程序。 USB使用了许多方法来帮助操作系统定位驱动程序,包括设备上的 设备描述符、配置描述符,以及接口描述符。对于有厂商和产品标 识的设备,配置管理器首先在注册表中查找设备名称,例如名为 USB\VID一0471&PID-0666的设备。如果注册表中没有这个表项, 配置管理器将触发“新硬件向导”来寻找该设备的INF文件。新硬件 向导向用户询问INF文件的位置,然后安装驱动程序并填写注册表。 一旦配置管理器找到了注册表表项,它就可以动态地装载驱动
USB设备枚举(续)
地址分配。当主机接收到有设备对默认地址(00H)响应的时候,就分配给设 备一个空闲的地址,以后设备就只对该地址进行响应。 读取USB设备描述符。主机读取USB设备描述符,确认USB设备的属性。 设备配置。主机依照读取的USB设备描述符来进行配置,如果设备所需的 USB资源得以满足,就发送配置命令给USB设备,表示配置完毕。 挂起。如果使用总线供电,为了节省电源,当总线保持空闲状态超过3ms以 后,设备驱动程序就会进入挂起状态,在挂起状态时,USB设备保留了包 括其地址和配置信息在内的所有内部状态,设备的消耗电流不超过500uA。 从用户角度来看,枚举过程是自动完成并不可见的。但很多初次使用的设 备连接时,系统会弹出说新硬件检测到,设备安装成功,可以使用之类的 消息提示框,而且有时还需要用户配合选择安装相关的驱动。 当枚举完成后,这个新添加的设备可在Windows的设备管理器里面看到, 当用户删除这个设备/硬件时,系统把这个设备从设备管理器里删除。
USBKey产品相关的驱动类型
驱动类型介绍
驱动类型划分
USB (通用)
HID (人机接口设备 ) USB Mass Storage (大容量存储设备 )
(设备连接、系统识别、系统与设备通讯)
2
涉及到的通讯协议
USB USB-HID USB Mass Storage
3
USB设备与驱动程序
HID设备接口要求
交换的数据储存在称为报表的结构内,设备的固件程序必须支持HID 报表的格式。报表的格式很灵活,可以处理任何类型的数据,单个 报表最多包含255B。 每一笔事务可以携带小量或中量的数据。低速、全速、高速设备每 一笔事务最大分别是8B、6 4B、1 024B。 最大传输速度受到限制,低速设备的中断端点每1Oms一笔事务,即 800b/s;全速设备的中断端点每lms一笔事务,即64 O00b/s;高 速设备的中断端点每125tts三笔事务,即24.576Mb/s。 ④HID设备必须包含一个类描述符和一个或几个报表描述符。通过报 表描述符定义了数据格式和使用方法。
④ Set_Idle——设置闲置状态,设备可不支持此请求;
⑤ Get_Protocol——主机获得设备的当前活动是引导协议还是报告协议; ⑥ Set_Protocol——在引导协议和报告协议间切换,设备如果支持系统引 导(如键盘和鼠标),就必须支持Get_Protocol和Set_Protocol请求。
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设备的识别过程叫做枚举。 为什么要枚举呢?枚举就是从设备读取一些信息,知道设备是什么样的设备, 如何进行通信,这样主机就可以根据这些信息来加载合适的驱动程序。 一个完整的windows对usb设备的枚举过程如下: 设备连接。USB设备经USB总线连接主机。 设备上电。USB设备可以自供电,也可以使用USB总线供电。 主机检测到设备,发出复位。主机通过检测设备在总线的上拉电阻检测到有 新的设备连接,并获释设备是全速设备还是低速设备,然后向该端口发送一 个复位信号。 设备默认状态。设备从总线上接收到一个复位信号后,才可以对总线的处理 操作做出响应。设备接收到复位信号后,就暂时使用默认地址(00H)来响应 主机的命令。
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