版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于基于 HID 的人机接口设备的设计及应用的人机接口设备的设计及应用 摘摘 要要 通用串行总线(USB) ,是连接计算机系统与外部设备的一个串口总线标准,也是输入 输出接口的技术规范,被广泛应用于个人电脑和移动设备等信息通讯产品,并扩展至摄 影器材、数字电视(机顶盒) 、游戏机等相关领域。 HID(Human Interface Device)类设备是 USB 设备类型中的一种,是直接与人交互的设备, 如键盘、鼠标等。HID 类设备并不一定是标准的外设类型,只要交换的数据格式存储在报 文的结构中,并且设备固件支持报文的格式,则任何工作在该限制之内的设备均可称为 HID 设备,如电压计、温度计
2、、读卡器等。因此,人机接口设备有巨大的应用市场。 针对以上需求,本文致力于开发一个基于 HID 的人机接口设备,在上位机编写相应的应 用软件,实现人机接口设备与主机的通信。 本文首先阐述了开发基于 HID 的人机接口设备在经济和技术上的意义,继而描述了系 统架构,基于 VC 的上位机软件开发,以及设备端固件代码的编写。文中对 USB 接口通信 协议做了简要的介绍,并介绍了基于 VC 的 Windows 下 USB 接口驱动软件开发。 最后,本文对在研究和开发人机接口设备工作中的不足之处和需要改进的地方进行了总 结,同时也展望了低成本的人机接口设备的市场潜力和 USB 发展的美好前景。 关键词:
3、 HID 类 人机接口设备 USB 通信协议 HID device based on HID class ABSTRACT Universal Serial Bus is a serial bus standard which connects the computer system and the peripheral equipments. It is the input output interface specification as well. It is widely used in communication products such as personal computers
4、 and mobile devices. It is extending to the related fields, such as Camera Equipment, Digital Television (STB), and Game Console. HID class which short for Human Interface Device, is one of the USB device class. As we know, the Typical HID device are mouse, keyboard etc. HID class device didnt alway
5、s be the standard USB device. If only the data format is contained by the report structure which is supported by the USB firmware. Then we can call all of those devices as HID device, such as Voltmeter, Thermometer, Card reader and so on. Therefore, the human interface device has a vast potential ma
6、rket. So as this, this project aims to develop a HID device based on HID class .To implement the communication between PC host and the device, I need to program the PC application program software etc. Firstly, this paper set forth the economic and technical importance of the HID device based on HID
7、 class. And then describe the system framework. Also, briefly describe the USB specification. This paper concludes the shortage during the developing. And also prospect the bright future for the low-cost HID device. Key words: HID class, HID, USB specification 目 录 摘 要.I ABSTRACT.II 1 绪 论.1 1.1 选题背景
8、.1 1.2 选题目标 .1 1.3 需求分析 .2 1.3.1 用户需求分析 .2 1.3.2 功能需求分析 .2 1.4 主要内容 .2 1.5 本章小结 .3 2 USB 接口技术介绍 .4 2.1 USB 接口技术 .4 2.1.1 USB 简介 .4 2.1.2 USB 的总线拓扑结构.4 2.1.3 USB 系统分层 .5 2.1.4 USB 的编码方式 .6 2.1.5 USB 的即插即用 .7 2.2 USB 接口 HID 设备类 .7 2.2.1 HID 设备类简介 .7 2.2.2 HID 数据传输方式 .8 2.2.3 HID 设备枚举过程 .8 2.2.4 HID 设备
9、类描述符 .9 2.3 本章小结 .10 3 人机接口设备系统设计.11 3.1 系统框架 .11 3.2 人机接口设备平台简介 .12 3.2.1 USB 控制器方案 .12 3.2.2 ST2211U 芯片简介 .13 3.3 主要功能.14 3.4 本章小结.14 4 基于 VC 的 HID 上位机软件开发.15 4.1 Windows 驱动程序模式 .15 4.1.1 Windows 驱动方式 .15 4.1.2 WDM 驱动程序的分层结构 .15 4.2 USB 接口 HID 类驱动原理 .16 4.2.1 USB 设备驱动体系 .16 4.2.2 与 HID 设备通信的主要 API
10、 函数.17 4.3 基于 VC 的应用程序开发 .18 4.3.1 开发流程.18 4.3.2 打开设备功能模块.19 4.3.3 LCD 显示功能模块 .23 4.3.4 键盘功能模块.23 4.4 本章小结.24 5 HID 设备软硬件设计与实现 .25 5.1 HID 设备系统设计 .25 5.2 HID 功能模块设计与实现 .25 5.2.1 USB HID 驱动开发 .25 5.2.2 LCD 驱动开发 .29 5.2.3 键盘驱动开发 .30 5.3 本章小结 .32 6 整机系统调试.33 6.1 调试流程.33 6.2 Bus Hound 调试工具简介 .33 6.3 HID
11、 设备接口通信调试 .33 6.4 基于 VC 的应用软件调试 .34 6.5 测试结果 .36 7 总结与展望.39 参考文献.40 附 录.41 谢 辞.54 1 绪 论 1.1 选题背景 随着计算机硬件飞速发展,外围设备日益增多,键盘、鼠标、调制解调器、打印机、 扫描仪早已为人所共知,数码相机、MP3随身听接踵而至,这么多的设备,如何接入个人 计算机?为了满足用户的需求,以Intel 为首的七家公司(Intel, Compaq, Microsoft, IBM, DEC, Northern Telecom 以及日本NEC) 于1994 年11月推出了USB (Universal Seria
12、l Bus,通用串行总线)协议的第一个草案专用于低中速的计算机外设。 USB可把多达127个外设同时连到用户的系统上,所有的外设通过协议来共享USB的带 宽,其12Mbps的带宽对于键盘鼠标等低中速外设是完全足够的。USB允许外设在主机和其 它外设工作时进行连接配置使用及移除,即所谓的即插即用(Plug (2) 获得指向 HID 设备集合句柄。 SetupDiGetClassDevs 函数查询所有已安装的 HID 设备,得到一个指向该 HID 设备集 合的句柄。 SetupDiGetClassDevs( IN LPGUID ClassGuid, OPTIONAL IN PCSTR Enumer
13、ator, OPTIONAL IN HWND hwndParent, OPTIONAL IN DWORD Flags ); (3) 识别 HID 接口。 SetupDiEnumDeviceInterfaces 函数用来读取识别一个接口的结构的指针,每一次调用 必须传递一个数组索引来指定一个接口。 SetupDiEnumDeviceInterfaces( IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL IN LPGUID InterfaceClassGuid, IN DWORD MemberIndex
14、, OUT PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData ); (4) 获取目标设备详细信息。 对每一个接口,调用 SetupDiGetDeviceInterfaceDetail 函数获取其详细的信息,包括 设备名称(头四个字节) ,CreateFile 用此设备名打开设备。 SetupDiGetDeviceInterfaceDetail( IN HDEVINFO DeviceInfoSet, IN PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, OUT PSP_DEVICE_INTERFACE_DET
15、AIL_DATA_A DeviceInterfaceDetailData, OPTIONAL IN DWORD DeviceInterfaceDetailDataSize, OUT PDWORD RequiredSize, OPTIONAL OUT PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL ); (5) 打开设备。 调用 CreatFile 函数打开设备。 CreateFile( LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSe
16、curityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile ); (6) 获取 USB 设备的有关属性。 调用 HidD_GetAttributes 获取设备的零售商 ID、产品 ID 及产品的版本号等。如果获 取成功,则将属性中的 VID、PID 以及设备版本号与我们的目标设备进行比较,如果一致, 则是目标设备,则使用读写方式打开目标设备。 BOOLEAN _stdcall HidD_GetAttributes ( IN HANDLE HidDeviceObje
17、ct, OUT PHIDD_ATTRIBUTES Attributes ); (7) 释放设备信息集合。 SetupDiDestroyDeviceInfoList 函数释放设备节点及内存分配。 WINSETUPAPI BOOL WINAPI SetupDiDestroyDeviceInfoList( IN HDEVINFO DeviceInfoSet ); 图 4-4 即为 VC 中调用 Windows API 函数打开 HID 设备的流程图。 开开始始 使使用用HidD_GetHidGuid 得得到到HID类类GUID 结结束束 错错误误号号是是 ERROR_NO_MORE _ITEMS 使
18、使用用SetupDiEnumInterfaceDevice 枚枚举举设设备备接接口口 使使用用SetupDiEnumDeviceInterfaces 取取得得设设备备接接口口详详细细信信息息 成成功功? 是是否否需需要要操操作作设设备备? N 使使用用SetupDiGetClassDev 得得到到HID设设备备类类信信息息 利利用用上上一一步步取取得得的的设设备备路路径径信信息息 使使用用CreateFile打打开开设设备备 使使用用Hid_GetAttributes 取取得得VID、PID等等信信息息 使使用用GetLastError() Y N 图 4-4 打开设备流程图 在完成打开设备功
19、能之后,主机便可与 HID 设备进行通信了。主机在接收报告的时 候,需要从报告中提取数据。由于报告中包含了各种类型的数据,为了便辨别不同类型 的数据,HID 类提供了 HidP_GetXxx 例程,从设备中读取不同类型的数据。如果程序员 知道各个数据的含义,则可直接使用 ReadFile 函数读出数据。同样,主机发送数据给设 备的时候,也要先创建报告;为了方便发送不同类型的数据给设备,HID 类提供了 HidP_SetXxx 函数。当然,如果程序员知道各个数据的含义,也可以直接使用 WriteFile 函数将报告传给设备。在 LCD 显示与键盘键盘功能模块上,我们使用 HidD_SetFeat
20、ure 来传送一个特征报文给 HID 设备。 HidD_SetFeature ( IN HANDLE HidDeviceObject, IN PVOID ReportBuffer, IN ULONG ReportBufferLength ); 4.3.3 LCD 显示功能模块 LCD 显示功能模块,首先用函数 GetDlgItemText 从文本框获取用户输入信息,并设 置报告缓冲区第 1 字节为 0 x01(自定义),开启 LCD 显示功能。 主要代码如下: ReportBuffer0 = 0 x00; /ReportBuffer 为报文缓冲区 ReportBuffer1 = 0 x01;/
21、Display command ReportBuffer2 = sendLen; HidD_SetFeature(hDevHandle, ReportBuffer, 0 x21); 读写报文缓冲区时,第一个字节是 Report ID,其后是报文数据。报文缓冲区默认是 八个报文,并且环状排列。因为数据读写是发生在主机轮训设备的时候,并不是由设备 触发产生硬件中断,所以如不能及时读写,新的数据会覆盖旧的数据,导致生报文丢失。 当数据读写频繁时应使用特征报文,它可以保证当报文数据没有变化时,HID 不会传送新 的数据。当设备接收到该命令,设备将启动 LCD 功能模块显示最多 30 个字符到 LCD
22、屏上。 LCD 命令定义,见表 4-2。 表 4-2 LCD 命令定义 偏移量域大小(字节)值描述 00hbLCDCmd101h LCD 显示命令 01hbLength1 定义显示字符的长度 02habDatabLength 显示在 LCD 上的字符 03h+bLengthabRandomData29-bLength 随机数 4.3.4 键盘功能模块 键盘功能模块,可启动开发板的键盘功能,并读取键值。需将报告缓冲区第 1 字节 设置为 0 x02(自定义) 。主要代码如下: ReportBuffer0 = 0 x00; ReportBuffer1 = 0 x02;/Read key comma
23、nd HidD_SetFeature(hDevHandle, ReportBuffer, 0 x21); 当 HID 设备接收到该命令,设备将在 LCD 上显示“Enter Data:”以提示用户,并调 用按键功能模块等待用户输入按键,用户只能输入 09 之间的按键,但输入的按键达到 最大长度 6 或者有 Enter 键按下时,设备返回所有所按的按键给 PC,读取键值流程结束。 按键命令定义见表 4-3。 表 4-3 按键命令定义 偏移量域大小(字节)值描述 00hbKeyCmd102h 读键值命令 01habRandomData31 31 个字节的随机数 4.4 本章小结 本章详细介绍了主机
24、端(上位机)应用程序设计。详细分析了打开设备功能模块, 设备枚举的流程,键盘功能模块与 LCD 功能模块。 5 HID 设备软硬件设计与实现 5.1 HID 设备系统设计 本项目的人机接口设备端需要硬件设计与软件设计,硬件方面包括芯片选择、电路 图的设计等。软件方面,即固件代码,包括 USB 协议栈的编写、键盘驱动及 LCD 驱动的 编写。这些都是项目开发的重点与难点。 USB 设备端的软件开发实际上包含着很大的工作量,因为开发者需要在自己的平台上 实现一个 USB 设备端的协议栈。简单说来,USB 设备端的软件主要需要两个功能:一是 监视设备的状态,控制设备的行为,自动产生状态信息和用户命令
25、信息;二是完成主机 与设备之间的 USB 总线通讯,自动处理主机的控制和查询命令。实现前一个功能的软件 模块我们称为 USB 设备的通用模块,而实现后一个功能的软件模块我们称为 USB 设备的 协议模块。 5.2 HID 功能模块设计与实现 5.2.1 USB HID 驱动开发 (1)固件流程图 USB 设备作为一个完整的硬件设备,由硬件和固件两部分组成。其中,固件包括有关 系统配置和 CPU 的一些设置模块、USB 协议栈模块等部分。图 5-1 为本项目中 USB 设备固 件流程图。 开开始始 设设备备复复位位,系系统统初初始始化化 发发送送USB中中断断 是是否否是是EP0中中断断 是是否
26、否有有数数据据发发送送 数数据据存存入入缓缓冲冲区区等等待待US B中中断断 是是否否有有 其其它它USB中中断断? 清清系系统统变变量量 USB线线是是否否连连接接 结结束束 EP0中中断断服服务务程程序序 Y N Y Y N N Y N N Y 图 5-1 USB 固件流程图 (2)HID 属性描述符 如 2.2.4 所述,HID 类支持标准的 USB 描述符,即设备描述符、配置描述符、接口描 述符、端点描述符和字符串描述符。此外,作为一个特定的设备类,HID 有其独有的类描 述符,即 HID 描述符、报告描述符和物理描述符。 下面主要介绍本项目使用的 HID 描述符、端点描述符与报告描述
27、符。 HID 描述符跟接口描述符、端点描述符类似,也是随配置信息一起返回给主机的,主 机并不会单独发出请求来读取它。HID 描述符在配置信息中的位置是紧接接口描述符。 HID 描述符详细设计如下: HID_CLASS_DESCRIPTOR: DB 09H;bLength 域,HID 描述符的长度为 9 个字节 DB 21H;bDescriptorType 域,描述符种类为 HID 类描述符 DB 00H;bcdHID 域,HID 规范版本号为 0 x0100 DB 01H DB 00H;bCountryCode 域,不支持硬件的目的国家识别码 DB 01H;bNumDescriptors 域,
28、支持的附属描述符数为 1,即报告描述符 DB 22H;bDescriptorType 域,HID 相关描述符为 0 x22,即报表描述符 DB 30H; bDescriptorLength 域,报告描述符的总长度 0 x0030,即 48 字节 DB 00H 端点描述符详细设计如下: ENDPOINT_DESCRIPTOR_INTERRUPT_IN: DB 07H ;bLength 域,端点描述符长度为 7 个字节 DB 05H ;bDescriptorType 域,描述符种类为端点描述符 DB 83H; bEndpointAddress,端点号为 3 DB 03H ;bmAttributes
29、 域,端点号为 3 的端点是 Interrupt In 端点 DB 08H ;wMaxPacketSize 域,0 x0008 DB 00H DB 10H ;bInterval 域,轮询间隔为 2 ms 报告描述符,顾名思义就是描述“报告”格式的,这个格式使主机和设备能遵循着 同一个规则来解释一个报告中所含有的数据。 “报告”是主机和 HID 设备之间进行数据交 换的最小单位。也就是说,在主机完成对设备的识别之后,在具体应用上的数据交换就 得以“报告”的方式进行。 “报告”的类型有三种:输入报告、输出报告和特征报告。输 入报告就是设备发给主机的报告,而输出报告就是主机发给设备的报告,特征报告是
30、主 机发给设备的报告,特征报告常在自定义 HID 设备中被用作主机向设备发送自定义数据。 通过报告,USB HOST 可以分析出报告中数据所表示的含义,并通过控制输入端点 0 返回。 另外,主机使用获取报告描述符命令来获取报告描述符。注意,该请求是发送到接口, 而不是发送到设备。一个报告描述符可以描述多个报告,不同的报告通过报告 ID 来识别, 报告 ID 在报告最前面,即第一个字节。当报告描述符中没有规定报告 ID 时,报告中就 没有 ID 字段,而直接以数据开始。 与 HID 描述符不同,主机会发出单独的请求来读取报告描述符。关于报告描述符的 组成,HID 设备类定义文档中明确指出,一个报
31、告描述符必须包含但不仅限于以下数据项: 输入、输出或特征(指明了报告的类型) ;用法;用法页(用法和用法页一起指明了数据 项的用法) ;逻辑最小值;逻辑最大值(逻辑最小值和逻辑最大值指明了报告所使用的数 据值的范围) ;报告大小(指明数据项的位数) ;报告计数(指明有多少个这样的数据项) 。 报告描述符详细设计如下: HID_REPORT_DESCRIPTOR: DB 06H ;用法页,0 xFFA006,自定义,修饰其下所有主项 DB A0H DB FFH DB 09H ;用法,0 x0109,局部项,只修饰下面集合主项 DB 01H DB A1H;应用集合开始,01A1 DB 01H DB
32、 09H ;用法,0 x0209 DB 02H DB A1H;物理集合开始,0 x00A1 DB 00H DB 06H ;用法页,0 xFFA106 DB A1H DB FFH DB 09H ;用法,0 x0309 DB 03H DB 15H ;逻辑最小值(-127) DB 80H DB 25H ;逻辑最大值(128) DB 7FH DB 35H ;物理最小值(00) DB 00H DB 45H ;物理最大值(255) DB FFH DB 75H ;报告大小(8 bits) DB 08H DB 95H ;报告计数(8) DB 08H DB 81H ;输入(数据,变量,绝对值) DB 02H D
33、B 09H ;用法,0 x0409 DB 04H DB 15H ;逻辑最小值(-127) DB 80H DB 25H ;逻辑最大值(128) DB 7FH DB 35H ;物理最小值(00) DB 00H DB 45H ;物理最大值(255) DB FFH DB 75H ;报告大小(8 bits) DB 08H DB 95H ;报告计数(32) DB 20H DB B1H ;特征(数据,变量,绝对值) DB 02H DB C0H ;物理集合结束 DB C0H ;应用集合结束 5.2.2 LCD 驱动开发 本项目采用 ST7070 点阵液晶显示控制器来驱动字符显示。ST7070 控制器集成了显示
34、 RAM,字符发生器,液晶驱动模块。MCU 只需利用 3 线 SPI 跟 ST7070 通信,通过写入一些 控制命令给 ST7070 来控制 ST7070 驱动液晶屏达到显示字符等的目的。图 5-2 显示了 LCD 驱动器的原理框图。 主主微微控控制制器器 ST2211U LCD驱驱动动器器 ST7070 LCD 液液晶晶显显示示屏屏 主主微微控控制制器器 ST2211U LCD驱驱动动器器 ST7070 LCD 液液晶晶显显示示屏屏 图 5-2 LCD 驱动器原理框图 ST7070 点阵式液晶显示控制器及 LSI 驱动器提供包括显示字母数字、片假名及符号 的功能。在 4/8 位微处理器控制下
35、,可以对 ST7070 进行配置,以驱动处理点阵式液晶显 示器。外接的微处理器可以通过高速串行接口,如 3 线 SPI 或 4 线 SPI 直接控制 ST7070。由于驱动一个点阵液晶显示器所需要的功能,例如,显示 RAM、字符发生器和液 晶驱动,都是由内部芯片提供的,故此控制器兼容了最小的系统。ST7070 部分兼容了 HD44780、KS0066 和 SED1278 的功能,因此允许用户使用 ST7070 来代替它们。ST7070 字 符发生存储器可扩展至生产共达 496 个不同的 5*8 点阵式字型。ST7070 提供了 2.7V5.5V 的电源供应,适合低使用便携式电池驱动的低功耗产品
36、。ST7070 的 LCD 驱动 器组成的 16 个通用信号驱动器和 80 段信号驱动器,可以通过级联段驱动器 ST7921 扩展 其尺寸。最大的显示尺寸可以是一行 80 个字符或两行 40 个字符。单个 ST7070 可以显示 最大可显示一行 16 个字符或两行 16 个字符。LCD 驱动器初始化流程,如图 5-3 所示。 Power On Delay 41ms, After Vcc 4.5V Function set Delay 38us Display ON/OFF control Delay 37us Display clear Delay 1.53ms Entry mode set
37、Initialization end 图 5-3 LCD 驱动器初始化流程图 5.2.3 键盘驱动开发 本项目采用 4*5 矩阵键盘,在键盘中按键数量较多时,为了减少 I/O 口的占用,通 常将按键排列成矩阵形式,如图 5-4 所示。在矩阵式键盘中,每条水平线和垂直线在交 叉处不直接连通,而是通过一个按键加以连接。键盘是由一组规则排列的按键组成,一 个按键实际上是一个开关元件。按键按下时,与此键相连的行线与列线导通,行线在无 键按下时处在高电平,显然,如果让所有的列线也处在高电平,那么,按键按下与否不 会引起行线电平的变化。因此,必须使所有列线处在低电平,只有这样,当有键按下时, 该键所在的行
38、电平才会由高电平变为低电平。CPU 根据行电平的变化,便能判定相应的 行是否有键按下。 图 5-4 4*5 矩阵键盘电路图 行列扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法。项目 中,ST2211U 微控制器的 GPIO 口提供的 I/O 端口分为四组,Port-A/B/C/D。将行线所接 的 PB7:4口作为输出端,列线所接的 PA4:0口作为输入端。识别方法:首先,判断 键盘中有无键按下。将全部行线 PB7:4置为低电平,然后逐一检测列线的电平状态。 只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与 4 根 行线相交叉的 4 个按键之中。若所有列线
39、均为高电平,则键盘中无键按下。若确认有键 按下,则要判断闭合键所在的位置。依次将行线置为低电平,即在置某根行线为低电平 时,其它线为高电平。在确定某根行线置为低电平后,再逐行检测各列线的电平状态。 若某列为低电平,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。图 5-5 为本项目的键盘驱动流程图。 开开始始 行行X置置为为低低电电平平,并并 开开始始扫扫描描各各列列Y 是是否否有有键键按按下下 列列Y是是否否为为高高电电平平 列列值值Y增增一一 列列值值为为6? 行行值值X增增一一 行行值值为为5? 键键值值为为0 结结束束 Y Y Y 记记录录键键值值 N N N N 图 5-5 键
40、盘驱动流程图 5.3 本章小结 本章详细描述了设备端的各个模块驱动开发,USB HID 驱动开发、LCD 驱动开发及键 盘驱动开发。 6 整机系统调试 6.1 调试流程 正确、合理的调试方法是成功开发一个 USB 人机接口设备必不可少的环节。本项目 的调试过程分三步进行:首先,对于人机接口设备,借助 PC 调试软件 Bus House,将设 备端的 USB 协议,数据交换等调通;然后,使用调试好的人机接口设备接口开发上位机 上的应用程序;最后,进行整机测试。 6.2 Bus Hound 调试工具简介 Bus Hound 软件是由美国 perisoft 公司研制的一种专用于 PC 机各种总线,数
41、据包监 视和控制的开发工具软件,其名hound的中文意思为猎犬,即指其能敏锐地感知到总线 的丝毫变化。 Bus Hound 是一个超级软件总线协议分析器,用于捕捉来自设备的协议包和输入输出 操作,其优良特性如下: 支持所有版本的 IDE,SCSI,USB,1394 总线;支持各类设备如硬盘 库,DVD,鼠标,扫描仪,网络照相机等;支持 Windows9X,WindowsMe,NT4.0,2000,2003,XP 和嵌入式 XP 操作系统;捕捉数据的总量仅受机器内存限制;可以设置触发信号自动停止 捕获操作;测试读取,同步等设备性能;捕获设备驱动包,例如 IRP;捕获任意数量的并行 设备,而不管其
42、总线类型;易于交换与下载;捕获的数据易于拷贝到其它环境生成 Html 格式;捕获的数据能保存为文本文件或 ZIP 文件;所有的可捕获设备以树形结构列出,让 选择设备来得更轻松些;可捕获设备的启动过程;用户爱好设定功能,如用户可调整捕获 到的数据显示宽度,更宜于查看和使用;查看底层协议包括 SCSI 的 sense 数据和 USB 的 设置包;查看每阶段的时间变化精确到微秒;将输入输出发生的操作实时显示到屏幕上; 纯软件解决方案,不需要对硬件进行任何变更等等。 Bus Hound 是一款可以查看 USB 总线数据的调试软件。Bus Hound 的调试步骤如下: 打开 Bus Hound 中的 D
43、evices 页;在 Devices 页选中本项目的 HID-compliant device; 再转至 Capture 页,点击 Run;插入 HID 设备。 6.3 HID 设备接口通信调试 采用 Bus Hound 捕获数据,枚举过程数据获取如下: 表 6-1 设备枚举数据捕获 传输类型传输数据描述 CTL80 06 00 02 00 00 ff 00 获取配置描述符的 FF 个字节 09 02 22 00 01 01 00 80 32 09 04 00 00 01 03 00 00 00 09 21 00 01 00 01 22 30 00 DI 07 05 83 03 08 00 1
44、0 CTL80 06 00 01 00 00 12 00 获取设备描述符的 18 个字节 DI12 01 10 01 03 00 00 08 71 04 12 a1 01 00 01 02 00 01 设备描述符 CTL80 06 00 02 00 00 09 00 获取配置描述符的 9 个字节 DI09 02 22 00 01 01 00 80 32 配置描述符 CTL80 06 00 02 00 00 22 00 获取设备描述符的 34 个字节 09 02 22 00 01 01 00 80 32 配置描述符 09 04 00 00 01 03 00 00 00 接口描述符 09 21 0
45、0 01 00 01 22 30 00 HID 描述符 DI 07 05 83 03 08 00 01 端点描述符 其中,CTL 表示:控制传输,DI 表示数据输入。可根据 Bus House 捕获到的信息判 断 HID 设备是否被正确的配置、识别,同此法,亦可获取数据交互的具体数据。 6.4 基于 VC 的应用软件调试 VC 的调试方法,首先必须使程序中包含调试信息。为了增加调试信息,可以按照下 述步骤进行:打开 Project settings 对话框(可以通过快捷键 ALT+F7 打开,也可以通 过 IDE 菜单 Project/Settings 打开);选择 C/C+页,Categor
46、y 中选择 general ,则出 现一个 Debug Info 下拉列表框,可供选择的调试信息方式如表 6-2 所示。本项目采用 Program Database for Edit and Continue 的方式。 表 6-2 VC 调试信息方式 命令行 Project settings 说明 无 None 没有调试信息 /ZdLine Numbers Only 目标文件或者可执行文件中只包含全 局和导出符号以及代码行信息,不包 含符号调试信息 /Z7C 7.0- Compatible 目标文件或者可执行文件中包含行号 和所有符号调试信息,包括变量名及 类型,函数及原型等 /ZiProgr
47、am Database 创建一个程序库(PDB),包括类型信息 和符号调试信息 /ZIProgram Database for Edit and Continue 除了前面/Zi 的功能外,这个选项允许 对代码进行调试过程中的修改和继续 执行。 再选择 Link 页,选中复选框Generate Debug Info,这个选项将使连接器把调试 信息写进可执行文件和 DLL,如图 6-1 所示,本项目须添加 hid.lib, setupapi.lib。如果 C/C+页中设置了 Program Database 以上的选项,则 Link incrementally 可以选择。选 中这个选项,将使程序
48、可以在上一次编译的基础上被编译(即增量编译) ,而不必每次都 从头开始编译。 图 6-1 VC 调试信息设置 6.5 测试结果 打开人机接口设备演示程序。 (1)打开设备功能测试: 点击打开设备按钮,会出现如图 6-2 所示的提示信息。具体的枚举过程见 2.2.3 USB 总线枚举过程,及表 6-1 枚举数据的捕获。 图 6-2 打开设备功能测试 (2)LCD 显示功能测试: 在输入框输入欲显示在 LCD 上的字符,再点击 LCD 显示按钮,如图 6-3 所示,设备 上的 LCD 液晶显示屏即会显示输入的字符。 图 6-3 LCD 显示功能测试 具体 LCD 传输数据用 Bus Hound 捕
49、获如表 6-3。其中 CTL 为控制传输,D0 为数据输 出。D0 输出的第一个字节 01 为 LCD 显示命令,后面为 31 个字节为欲显示的字节。 表 6-3 LCD 传输数据捕获 传输类型传输数据描述 CTL21 09 00 03 00 00 20 00SET REPORT DO01 0e 48 65 6c 6c 6f 20 44 61 76 69 64 21 21 21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (3)键盘功能测试: 点击键盘输入功能,即可在开发板实现按键功能,并回传至人机接口设备。如下图 6-3 所示,显示框成功输
50、出 33 32 31 30 37 36。 图 6-4 键盘功能测试 具体键盘传输数据用 Bus Hound 捕获如表 6-4。其中 CTL 为控制传输,D0 为数据输 出,DI 为数据输入。D0 输出的第一个字节 02 为键盘命令,DI 为设备传回的键值。 表 6-4 键盘传输数据捕获 传输类型传输数据描述 CTL21 09 00 03 00 00 20 00SET REPORT DO02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 DI06 31 30
51、 31 32 33 34 35 DI00 06 31 30 31 32 33 34 35 7 总结与展望 在本项目的开发过程中,本人深深的感悟到开发一个 USB HID 设备看起来容易,实 则艰难。选择 HID 设备类,虽然省略了主机端驱动程序的开发,但是设备端定义为一个 全速 HID 设备,需要深入了解 USB 2.0 协议,深入了解 HID 描述符的内涵。项目中的许 多地方,比如键盘与 LCD 的同步处理,线程的响应也做得并不完善,还有待提高。虽然 项目是结束了,但是感觉对 USB 协议的理解仍是九牛一毛,是远远不够的。在后续的工 作中,还要加强学习。 2008 年 11 月 16 日,随着 USB3.0 规范的发布,新一轮的接口技术将引领 IT 业接口 技术的发展。USB 接口技术脱胎换骨,USB3.0 支持高达 5.0Gbps 的传输速率,并且保持 了良好的向下兼容。十倍于 USB2.0 的传输速率和更高的节能效率,标志着 USB 向高速外 设进军的又一里程碑,USB3.0 毫无悬念的将带动 USB 接口技术走向更美好的明天。 参考文献 1 王云飞:USB 系统研究M,清华大学工程物理系,2001,5 2 李英伟,王成儒,胡正平,USB 2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人教 A 版高二数学选必一 新学期预科精讲课件
- 学校食堂留样管理自查存在问题及整改措施
- 学校课间活动安全管控不到位整改措施
- 马属动物螨病防治技术规范
- 暑假专项刷题精讲|高中历史冷战格局必考题型解题思路总结
- 掌握高分逻辑|初中地理经纬网定位技巧课
- 造价审计基础验收检测卷含完整答案
- 中式宴席设计全真模拟冲刺密卷含完整答案
- 省考申论热点预测模拟押题卷含完整答案
- 外科引流管护理
- 2025年江苏省无锡市梁溪区侨谊教育集团小升初数学招生试卷(含答案解析)
- 行政人事自我介绍
- 博雷顿产品介绍
- 四川水电集团招聘岗位综合能力测试客观题题库
- 支气管哮喘急性发作的紧急救护技巧
- 煤矿职业病危害培训课件
- 【耳鼻喉9版】绪论和耳科学第七章 中耳炎性疾病
- 创伤性肾破裂的护理课件
- 安装断桥窗合同范本
- 水利工程维修养护费用标准
- GB/T 19839-2025工业燃油燃气燃烧器通用技术条件
评论
0/150
提交评论