通用串行总线(USB)设备的驱动
发布时间:2007/9/10 0:00:00 访问次数:691
摘要:从问题的由来、类驱动程序、通信协议、描述符、驱动开发等对USB的驱动进行分析和讨论,提出USB设备使用操作系统嵌入的通用类驱动程序成为趋势。
关键词:USB 类驱动程序 人工接口设备(HID) Windows驱动程序模型(WDM)
最初设计USB(Universal Serial Bus)这种外设总线的目的之一就是为了便于使用,这是计算机发展的产物。外设总线最重要的就是操作系统对外设的自动识别、配置,实现热插拔,即插即用。本文试图以人工接口设备(Human interface device,简称HID)为主,从问题的由来、类驱动程序、通信协议、描述符、驱动开发等几个方面来探讨一下USB设备的驱动问题。
1 问题的由来
一个非常简单的设备安装有时得花用户好几天时间,原因何在?设备的驱动与其他的驱动程序或软件不兼容,或隐有bug。如果操作系统本身就含有用户需要的驱动程序,设备一插就能使用,这是最好不过的事情。
现已有上千种不同的设备,许多功能大致一样。操作系统不可能为所有的设备提供全部的驱动程序。仔细考虑一下,许多设备可归属为少数几个具有普遍特性和需求的类,因而为每种类定义一个通用的API接口,写出通用的驱动程序是可实现的。
通过定义不同的设备类型,USB试图实现通用驱动程序这一目标。在USB规范里,除定义了基本的协议和构造用来配置设备和传输数据,还为所有的USB设备定义了机械和电器件性能要求。USB规范定义了通信、打印、图像、储存、音频和人工接口设备等类。一些设备是单一的类,一些是多种类的综合体。具有多种类的设备称为混合设备,在USB规范对设备有详细的划分。
2 类驱动程序
由于一些类尚未形成标准,Win2000只包含了部分USB类的驱动程序。一旦形成标准得到认可,通用的驱动程序也就自然嵌入到操作系统了。图1为操作系统中USB驱动接口框图。这是一个标准的Windows驱动程序模型(WDM),是一种分层模式。核心USB Driver Stack模型描述设备如何安装和启动,以及如何为用户请求服务和与硬件打交道,并为上层USB驱动提供接口。上层驱动完成设备功能并为用户层提供接口,这使得向USB总线发出请求是通过多层结构。
HID类是为一些人工的输入或输出设备而设计的,最常用的象键盘、鼠标、游戏控制器。这种类同时也包含了前面板显示区和键盘区(象电话或VCR远程控制),还有触觉和听觉反馈设备。对于HID类的设备,操作系统已经给出了相应的驱动程序。
连接到计算机的USB设备几乎都包含HID类,用以信号控制。比如一个USB扬声器,音量、音调控制用HID类,但音频数据传输用音频类。
通常情况下,USB设备与主机通信是经过USB端口,类驱动程序无须担心或考虑ISA总线、PCI总线、SCSI、IDE或ATAPI接口、串口、并口、键盘或鼠标口、游戏接口及相关的一些东西。类驱动程序甚至不需要了解SUB端口,这个物理接口被USB主机驱动程序管理形成抽象层,也正因为这个抽象层及其他相应层,使通用使驱动程序成为可能。每一层有自己的功能,并为上一层提供了API接口,上层没有必要了解下一层如何工作及内部体系结构,各层为一个封装体。
图2所示为USB各层之间通信流程。USB用明确定义了的层协议来减少复杂化且有利于标准化,各层均有连接,但大多为逻辑型的。最低层的是USB主机控制器和USB设备接口之间的物理连接,包括连接线、连接器、状态机。其次在计算机方面为USB主机驱动程序,这是操作系统所必须的。在设备方是用于设备管理和请求的固件程序(Firmware),此层是配和和控制USB接口的逻辑连接。第三层
摘要:从问题的由来、类驱动程序、通信协议、描述符、驱动开发等对USB的驱动进行分析和讨论,提出USB设备使用操作系统嵌入的通用类驱动程序成为趋势。
关键词:USB 类驱动程序 人工接口设备(HID) Windows驱动程序模型(WDM)
最初设计USB(Universal Serial Bus)这种外设总线的目的之一就是为了便于使用,这是计算机发展的产物。外设总线最重要的就是操作系统对外设的自动识别、配置,实现热插拔,即插即用。本文试图以人工接口设备(Human interface device,简称HID)为主,从问题的由来、类驱动程序、通信协议、描述符、驱动开发等几个方面来探讨一下USB设备的驱动问题。
1 问题的由来
一个非常简单的设备安装有时得花用户好几天时间,原因何在?设备的驱动与其他的驱动程序或软件不兼容,或隐有bug。如果操作系统本身就含有用户需要的驱动程序,设备一插就能使用,这是最好不过的事情。
现已有上千种不同的设备,许多功能大致一样。操作系统不可能为所有的设备提供全部的驱动程序。仔细考虑一下,许多设备可归属为少数几个具有普遍特性和需求的类,因而为每种类定义一个通用的API接口,写出通用的驱动程序是可实现的。
通过定义不同的设备类型,USB试图实现通用驱动程序这一目标。在USB规范里,除定义了基本的协议和构造用来配置设备和传输数据,还为所有的USB设备定义了机械和电器件性能要求。USB规范定义了通信、打印、图像、储存、音频和人工接口设备等类。一些设备是单一的类,一些是多种类的综合体。具有多种类的设备称为混合设备,在USB规范对设备有详细的划分。
2 类驱动程序
由于一些类尚未形成标准,Win2000只包含了部分USB类的驱动程序。一旦形成标准得到认可,通用的驱动程序也就自然嵌入到操作系统了。图1为操作系统中USB驱动接口框图。这是一个标准的Windows驱动程序模型(WDM),是一种分层模式。核心USB Driver Stack模型描述设备如何安装和启动,以及如何为用户请求服务和与硬件打交道,并为上层USB驱动提供接口。上层驱动完成设备功能并为用户层提供接口,这使得向USB总线发出请求是通过多层结构。
HID类是为一些人工的输入或输出设备而设计的,最常用的象键盘、鼠标、游戏控制器。这种类同时也包含了前面板显示区和键盘区(象电话或VCR远程控制),还有触觉和听觉反馈设备。对于HID类的设备,操作系统已经给出了相应的驱动程序。
连接到计算机的USB设备几乎都包含HID类,用以信号控制。比如一个USB扬声器,音量、音调控制用HID类,但音频数据传输用音频类。
通常情况下,USB设备与主机通信是经过USB端口,类驱动程序无须担心或考虑ISA总线、PCI总线、SCSI、IDE或ATAPI接口、串口、并口、键盘或鼠标口、游戏接口及相关的一些东西。类驱动程序甚至不需要了解SUB端口,这个物理接口被USB主机驱动程序管理形成抽象层,也正因为这个抽象层及其他相应层,使通用使驱动程序成为可能。每一层有自己的功能,并为上一层提供了API接口,上层没有必要了解下一层如何工作及内部体系结构,各层为一个封装体。
图2所示为USB各层之间通信流程。USB用明确定义了的层协议来减少复杂化且有利于标准化,各层均有连接,但大多为逻辑型的。最低层的是USB主机控制器和USB设备接口之间的物理连接,包括连接线、连接器、状态机。其次在计算机方面为USB主机驱动程序,这是操作系统所必须的。在设备方是用于设备管理和请求的固件程序(Firmware),此层是配和和控制USB接口的逻辑连接。第三层