基于HID类的USB人机接口设计
发布时间:2008/6/3 0:00:00 访问次数:565
关键词 hid 人机接口设备 usb 描述符 中断传输 报告
目前市场上usb设备的种类繁多,但是这些设备会有一些共同的特性,根据这些特性可以把usb设备划分为不同的类,如显示设备、通信设备、音频设备、大容量存储设备、人机接口设备(hid)。这里介绍如何实现hid类设备,以及如何在应用程序中对hid类设备进行访问。从windows98操作系统开始,为hid类设备提供了通用的驱动程序,所以只要按照hid设备类的规范编写设备的固件程序,就能够让windows系统自动识别设备,省去了复杂的驱动程序编写过程。
1 hid协议简介
人机接口设备(hid)主要是指一些人与计算机进行交互的设备,如键盘、鼠标、游戏杆等;但是hid设备不一定非要是这些人机交互设备,只要符合hid设备级定义规范要求的都可以认为是hid设备。hid设备有以下主要特点:
① 交换的数据存储在报告的结构内,设备必须支持hid报告格式。
② 每笔事务可以携带小量或中量的数据。低速设备每笔事务最大为8字节,全速设备每笔最大为64字节,高速设备最大为1 024字节;
③ 有最大传输速度的限制。低速设备最快10 ms一笔事务,最高速度为800 b/s;全速设备最快1 ms一笔事务,最高速度为64 kb/s;高速设备最快125 μs一笔事务,最高速度为24.576 mb/s。
④ 没有传输速度的保证。
当插入usb设备后,主机会向设备请求各种描述符来识别设备。为了把一个设备识别为hid类别,设备在定义描述符的时候必须遵守hid规范。图1显示了hid各种描述符之间的关系。事实上,每个设备可以有多个接口描述符来实现多接口设备,而且每个接口描述符下应该有多个端点描述符。
图1 hid各种描述符之间的关系
从图1中可以看出,除了usb标准定义的一些描述符外,hid设备还必须定义hid描述符。另外设备和主机的通信是通过报告的形式来实现的,所以还必须定义报告描述符;而物理描述符不是必需的。还有就是hid描述符是关联于接口(而不是端点)的,所以设备不需要为每个端点都提供一个hid描述符。
usb设备有4种传输方式与主机进行通信: 控制方式、中断方式、批量方式和同步方式。每种方式都有它的应用领域。hid只支持控制和中断传输方式。如图2所示,hid设备必须要有默认的控制管道和一个中断输入端点;中断输出端点是可选的。
图2 hid类设备使用控制和中断传输方式
中断输出传输是usb1.1规范才有的内容,且必须获得windows系统的支持。从windows98 se版本开始才支持中断输出传输方式,所以如果需要中断输出传输方式的设备应该选择相应的操作系统。表1列出了传输类型和相关情况。
表1 hid类设备支持的传输方式传输
usb协议定义了11种请求命令,通过这些请求来获得设备的信息及对设备进行设置。hid类设备除了要支持这11种标准的请求外,还要实现以下6种特定请求:
① get_report——主机用控制传输从设备接收数据,所有hid类设备都要支持这个请求;
② set_report——设备用控制传输接收主机的数据,设备可以不支持此请求;
③ get_idle——主机读取设备当前的空闲速率,设备可以不支持此请求;
④ set_idle——设置闲置状态,设备可不支持此请求;
⑤ get_protocol——主机获得设备的当前活动是引导协议还是报告协议;
⑥ set_protocol——在引导协议和报告协议间切换,设备如果支持系统引导(如键盘和鼠标),就必须支持get_protocol和set_protocol请求。
2 hid接口固件设计与实现
该设备采用c8051f120微控制器和pdiusbd12芯片来实现,如图3所示。
图3 hid系统结构框图
因为pdiusbd12的主端点(endpoint2)具有64字节的双缓冲,能够提供比较高的速度,所以在端点描述符里把它配置为中断传输方式,而endpoint1没有使用。pdiusbd12
关键词 hid 人机接口设备 usb 描述符 中断传输 报告
目前市场上usb设备的种类繁多,但是这些设备会有一些共同的特性,根据这些特性可以把usb设备划分为不同的类,如显示设备、通信设备、音频设备、大容量存储设备、人机接口设备(hid)。这里介绍如何实现hid类设备,以及如何在应用程序中对hid类设备进行访问。从windows98操作系统开始,为hid类设备提供了通用的驱动程序,所以只要按照hid设备类的规范编写设备的固件程序,就能够让windows系统自动识别设备,省去了复杂的驱动程序编写过程。
1 hid协议简介
人机接口设备(hid)主要是指一些人与计算机进行交互的设备,如键盘、鼠标、游戏杆等;但是hid设备不一定非要是这些人机交互设备,只要符合hid设备级定义规范要求的都可以认为是hid设备。hid设备有以下主要特点:
① 交换的数据存储在报告的结构内,设备必须支持hid报告格式。
② 每笔事务可以携带小量或中量的数据。低速设备每笔事务最大为8字节,全速设备每笔最大为64字节,高速设备最大为1 024字节;
③ 有最大传输速度的限制。低速设备最快10 ms一笔事务,最高速度为800 b/s;全速设备最快1 ms一笔事务,最高速度为64 kb/s;高速设备最快125 μs一笔事务,最高速度为24.576 mb/s。
④ 没有传输速度的保证。
当插入usb设备后,主机会向设备请求各种描述符来识别设备。为了把一个设备识别为hid类别,设备在定义描述符的时候必须遵守hid规范。图1显示了hid各种描述符之间的关系。事实上,每个设备可以有多个接口描述符来实现多接口设备,而且每个接口描述符下应该有多个端点描述符。
图1 hid各种描述符之间的关系
从图1中可以看出,除了usb标准定义的一些描述符外,hid设备还必须定义hid描述符。另外设备和主机的通信是通过报告的形式来实现的,所以还必须定义报告描述符;而物理描述符不是必需的。还有就是hid描述符是关联于接口(而不是端点)的,所以设备不需要为每个端点都提供一个hid描述符。
usb设备有4种传输方式与主机进行通信: 控制方式、中断方式、批量方式和同步方式。每种方式都有它的应用领域。hid只支持控制和中断传输方式。如图2所示,hid设备必须要有默认的控制管道和一个中断输入端点;中断输出端点是可选的。
图2 hid类设备使用控制和中断传输方式
中断输出传输是usb1.1规范才有的内容,且必须获得windows系统的支持。从windows98 se版本开始才支持中断输出传输方式,所以如果需要中断输出传输方式的设备应该选择相应的操作系统。表1列出了传输类型和相关情况。
表1 hid类设备支持的传输方式传输
usb协议定义了11种请求命令,通过这些请求来获得设备的信息及对设备进行设置。hid类设备除了要支持这11种标准的请求外,还要实现以下6种特定请求:
① get_report——主机用控制传输从设备接收数据,所有hid类设备都要支持这个请求;
② set_report——设备用控制传输接收主机的数据,设备可以不支持此请求;
③ get_idle——主机读取设备当前的空闲速率,设备可以不支持此请求;
④ set_idle——设置闲置状态,设备可不支持此请求;
⑤ get_protocol——主机获得设备的当前活动是引导协议还是报告协议;
⑥ set_protocol——在引导协议和报告协议间切换,设备如果支持系统引导(如键盘和鼠标),就必须支持get_protocol和set_protocol请求。
2 hid接口固件设计与实现
该设备采用c8051f120微控制器和pdiusbd12芯片来实现,如图3所示。
图3 hid系统结构框图
因为pdiusbd12的主端点(endpoint2)具有64字节的双缓冲,能够提供比较高的速度,所以在端点描述符里把它配置为中断传输方式,而endpoint1没有使用。pdiusbd12