通用串行总线(USB)设备的驱动

通用串行总线(USB)设备的驱动
作者:北京航天医学工程研究所(100094)晁建刚魏安阳邱淑范
来源:《电子技术应用》
摘要:从问题的由来、类驱动程序、通信协议、描述符、驱动开发等对USB的驱动进行分析和讨论,提出USB设备使用操作系统嵌入的通用类驱动程序成为趋势。
关键词:USB 类驱动程序人工接口设备(HID) Windows驱动程序模型(WDM)
最初设计USB(Universal Serial Bus)这种外设总
线的目的之一就是为了便于使用,这是计算机发展的
dpl产物。外设总线最重要的就是操作系统对外设的自动
识别、配置,实现热插拔,即插即用。本文试图以人
哄抢猪肉5人被拘>viewer
工接口设备(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接口的逻辑连接。第三层在主机方是设备驱动程序,通常称为类驱动程序;在设备方是类属性的固件程序,通过逻辑连接用于特殊类的控制和请求。最顶层为用户层,为用户所关心和考虑,比如在主机客户方为飞行模拟仿真,在设备方则为操纵杆。此时用户所关心的是操纵杆的输入,不用考
虑这些输入如何读、如何打包、如何传输。
3 通信协议
与USB设备进行通信,主机软件打开一系列的管道来传输数据。不同的管道对应于USB 的不同端口(endpoint)。USB有四种传输方式,分别为控制、中断、同步和批量,每种方式对应各自的管道。除同步方式外,均有握手信号,保证了数据传输的准确性。
一般的USB设备通常用控制、中断或数据管理,如图3所示。数据管道是单向的,用于批量或同步传输方式时使用。HID设备通常仅用控制和中断两个管道。控制管道为缺省,也可被USB设备用来接收、响应特殊的请求或命令。中断管道向主机异步发送数据,其它USB不支持真正的中断,而是用来传输无时序特征的信号变化。比如按下键、鼠标移动、操纵杆运行,不用特殊的请求就可实时地传输数据。
每一种数据传输方式中包含了多个事务数据,这些数据被综合完成一定功能。一个事务数据由三个部分组成:信令包段(Token Packet phase)、数据包段(Data Packet phase)、握手信号包段(Handshade Packet phase)。信令包定义了事务的类型,设备的地址也包含在其中。
一些信令包单独存在,后面没有跟别的包。数据包里包含了与传输有关的负载。在单个的事务数据最大承载1023个字节。
基于相同的管道配置和命令、通用的API接口,USB设备通用驱动程序得以实现,设备之间的差异则使返回的数据结构不同。
4 描述符
USB设备用预先定义好的数据结构来表示他们的标识符、性能、请求和协议,通常称为描述符。设备一插入到主机,操作系统就能立刻根据描述符到与之相对应的类驱动程序,完成USB设备的枚举及其他功能。在USB规范里定义了必要的设备、配置、接口、端口、字符串描述。HID类除些之外又定义了报告描述符。报告描述符提供了HID类驱动程序能理解和解释的报告,报告虽然灵活但却很复杂。描述符可用固件程序来写,编译生成二进格式后储存到设备中使用,便于类驱动识别和解释。
下面是作者设计的一个利用EZUSB芯片提供的I2C连接多部医监设备的报告描述符。图4为报告描述符所表达的数据结构。
ReportDescriptor: ; Generated with HID Tool,copoed to here
DB 6,0,0FFH ; Usage_Page (Vendor Defined)
DB 9,1 ; Usage (I/O Device)
DB 0A1H,1 ;Collection (Application)
DB 19H,1 ; Usage_Minimum
DB 29H,2 ; Usage_Maximum
DB 15H,0 ;Logical_Minimum (0)
DB 26H,255,0 ; Logical_Maximum (255)
DB 75H,8 ; Report_Size (8)
DB 95H,1 ; Report_Count (1) = Read Address
DB 81H,2 ; Input (Data,Var,Abs)
DB 19H,1 ; Usage_Minimum
DB 29H,2 ; Usage_Maximum
DB 95H,2 ; Report_Count (2) =Write Address+Data
DB 91H,2 ; Output (Data,Var,Abs)
DB 0C0H ; End_Collection
ReportLength EQU $-ReportDescriptor
5 驱动程序的开发
对于USB设备来说,开发驱动程序是一件比较复杂的事情。通常驱动程序要实现以下的功能:
·设备的初始化;
·即插即用创建和删除设备;
·
处理Win32打开和关闭文件句柄的请求;
·类功能定义IOCTL(I/O Control)、功能实现;
·IRP(I/O Request Packet)的调用处理;
·调用其他的驱动程序;
·访问硬件。
USB驱动程序设计的核心是端点(Endpoint)及数据传
输类型的选择,通过端点建立起管道通信,实现定义的功
能。这样,在应用层和设备之间就建立起了虚拟的通道,所
有这些通过多线程的句柄调用实现。
每个驱动程序都必须有一个DriverEntry入口函数,用于系统调用。
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath)
{
NTSTATUS status = STATUS_SUCCESS;
// Export other driver
DriverObject->DriverUnload = USBUnload;
DriverObject->MajorFunction[IRP_MJ_CREATE]=USBCreate;
DriverObject->MajorFunction[IRP_MJ_CLOSE]=USBClose;
DriverObject->MajorFunction[IRP_MJ_READ]=USBRead;
DriverObject->MajorFunction[IRP_MJ_WRITE]=USBWrite;
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL]=USBDeviceControl;
RegisterForPnpNotification(DriverObject);
Return status;
肌球蛋白}
写驱动程序的软件较多,目前比较流行的软件是DriverStudio、WinDriver等。它们均提供用于生成USB驱动的代码生成器,用户按照提示可以定义设备的配置和功能,然后做功能修改即可。利用软件提供的例子进行修改也是一个比较好的捷径。
USB技术的应用,是计算机产业的一大发展。目前以微软为代表的各大公司积极对其进行开发,使得应用越来越广泛。微软操作系统集成了HID类、音频类的USB驱动程序。作者用EZUSB以HID类连接医监设备,不用写驱动程序在Win2000上运行良好。针对开发USB 器件的需要,作者根据HID规范定义了自己特殊的类并重新写上写的类驱动程序,测试较为满意。从长远的角度来看,操作系统通过集成类驱动程序来支持各种USB设备势在必行。

本文发布于:2024-09-24 02:35:12,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/164806.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:设备   驱动程序   接口   定义   通用
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议