基于HID协议的USB人机交互设备的接口设计

[09-13 16:55:48]   来源:http://www.88dzw.com  接口定义   阅读:8420

文章摘要:⑥ Set_Protocol——在引导协议和报告协议间切换,设备如果支持系统引导(如键盘和鼠标),就必须支持Get_Protocol和Set_Protocol请求。2 HID接口固件设计与实现该设备采用C8051F120微控制器和PDIUSBD12芯片来实现,如图3所示。图3 HID系统结构框图因为PDIUSBD12的主端点(Endpoint2)具有64字节的双缓冲,能够提供比较高的速度,所以在端点描述符里把它配置为中断传输方式,而Endpoint1没有使用。PDIUSBD12通过中断触发CPU来响应主机的各种请求。此系统采用的USB协议版本是1.1,所以能够支持中断输出传输。为了让主机把设备

基于HID协议的USB人机交互设备的接口设计,标签:接口技术,微机原理与接口技术,http://www.88dzw.com

  ⑥ Set_Protocol——在引导协议和报告协议间切换,设备如果支持系统引导(如键盘和鼠标),就必须支持Get_Protocol和Set_Protocol请求。

  2 HID接口固件设计与实现

  该设备采用C8051F120微控制器和PDIUSBD12芯片来实现,如图3所示。


图3 HID系统结构框图

  因为PDIUSBD12的主端点(Endpoint2)具有64字节的双缓冲,能够提供比较高的速度,所以在端点描述符里把它配置为中断传输方式,而Endpoint1没有使用。PDIUSBD12通过中断触发CPU来响应主机的各种请求。

  此系统采用的USB协议版本是1.1,所以能够支持中断输出传输。为了让主机把设备识别为HID类别,定义设备接口描述符时类别这一字段的值必须设置为0x03(HID类别),这样主机就会继续请求获得设备的HID描述符和报告描述符。在主机Get_Descriptor请求中,当值字段的高位字节为0x21时,表示主机要求获得HID描述符;当值字段高字节为0x22时,就是主机要求获得报告描述符。对于报告描述符,可以参考HID Usage Tables规范。HID Descriptor Tool工具可以帮助建立和测试编写的报告描述符。这里定义了一个输入和输出64字节数据的报告描述符。

  code unsigned char szReport[] = {

  0x06,0xA0,0xFF,//用法页(FFA0h, vendor defined)

  0x09, 0x01,//用法(vendor defined)

  0xA1, 0x01,//集合(ApplicaTION)

  0x09, 0x02 ,//用法(vendor defined)

  0xA1, 0x00,//集合(Physical)

  0x06,0xA1,0xFF,//用法页(vendor defined)

  //输入报告

  0x09, 0x03 ,//用法(vendor defined)

  0x09, 0x04,//用法(vendor defined)

  0x15, 0x80,//逻辑最小值(0x80 or -128)

  0x25, 0x7F,//逻辑最大值(0x7F or 127)

  0x35, 0x00,//物理最小值(0)

  0x45,0xFF,//物理最大值(255)

  0x75, 0x08,//报告长度Report size (8位)

  0x95, 0x40,//报告数值(64 fields)

  0x81, 0x02,//输入(data, variable, absolute)

  //输出报告

  0x09, 0x05,//用法(vendor defined)

  0x09, 0x06,//用法(vendor defined)

  0x15, 0x80,//逻辑最小值(0x80 or -128)

  0x25, 0x7F,//逻辑最大值(0x7F or 127)

  0x35, 0x00,//物理最小值(0)

  0x45,0xFF,//物理最大值(255)

  0x75,0x08,//报告长度(8位)

  0x95, 0x40,//报告数值(64 fields)

  0x91, 0x02,//输出(data, variable, absolute)

  0xC0,//集合结束(Physical)

  0xC0//集合结束(Application)

  };

  这样,后面数据的输入和输出都必须满足报告的格式才能够进行传输。


图4 应用程序枚举HID设备流程

  3 应用程序设计实现

  Windows为应用程序访问HID设备提供了强大的支持,有一整套对HID设备进行访问的API。应用程序要访问设备就必须先枚举到设备,图4为应用程序枚举HID设备流程。

  枚举成功后根据返回的设备句柄,就可以用ReadFile和WriteFile来读写设备的数据了。这里采用异步方式来读写数据,这样不会发生读写时阻塞,提高了程序的效率。以下是异步方式读写设备的要点:

  ① 为了实现异步访问设备,在CreateFile打开设备时必须使用FILE_FLAG_OVERLAPPED标志。

  ② 打开设备成功后,使用CreateThread建立1个读设备线程。

  ③ 在这个线程中首先建立1个OVERLAPPED结构,并用CreateEvent函数初始化它的hEvent成员,这样就创建了1个事件对象。

上一页  [1] [2] [3]  下一页


Tag:接口定义接口技术,微机原理与接口技术接口定义

《基于HID协议的USB人机交互设备的接口设计》相关文章

分类导航
最新更新
热门排行