UEFI开发探索82- YIE002USB开发板(05 制作HID设备)

(请保留-> 作者: 罗冰 https://blog.youkuaiyun.com/luobing4365)


从软件的角度,制作USB HID设备,需要理解的知识包括几大块:
1) USB协议的基本架构和软件架构;
2) USB描述符,包括标准描述符和类描述符;
3) USB命令,包括标准命令和类命令。

当然,如果能从字节序上(比如USB包的构成)了解USB通信的过程,对理解整个USB协议的构成也很有好处。但在编程中,不需要理解到这个地步。大部分介绍USB协议的书籍,以及USB规范中,都很详细地描述了这些过程,非常建议读一读。

在前一篇中,已经简要地概述了USB协议的基本架构和软件架构。本篇主要介绍USB描述符中的标准描述符,这是所有USB设备都要支持的描述符。

1 USB描述符概述

为了方便USB主机对USB设备进行管理,USB-IF对USB设备的功能采用了分层结构,包括设备层、配置层、接口层和端点层。图1给出了一个复合设备的例子,展示了USB设备的分层结构。

图1 USB设备的功能分层结构

这四层的作用分别为:

  1. 设备层。说明USB设备的主要类型特征(如设备类别、接口、端点等属性),保障设备枚举过程的正常进行。
  2. 配置层。选择不同的失败配置满足USB主机对设备功能的选择,可选择复式的设备接口功能,如图1展示的选择鼠标、键盘和游戏杆的复合功能。
  3. 接口层。将具体功能分类,不同的功能对用不同的操作方式。
  4. 端点层。针对特定的设备功能,选择不同的端点,提供不同的数据管道,与USB主机进行数据通讯。

为了描述USB设备的这些特征,USB规范定义了相应结构的描述符,包括设备描述符、配置描述符、接口描述符、端点描述符和字符串描述符等。表1给出了USB1.1下各种USB描述符的类型值。

表1 USB1.1的描述符类型值

类型 描述符 描述符值
标准描述符 设备描述符(Device Descriptor) 0x01
配置描述符(Configuration Descriptor) 0x02
字符串描述符(String Descriptor) 0x03
接口描述符(Interface Descriptor) 0x04
端点描述符(Endpoint Descriptor) 0x05
类描述符 集线器类描述符(hub descriptor) 0x29
人机接口类描述符(HID) 0x21
厂商自定义 0xFF

其他版本的USB规范,还定义了其他类型的描述符,比如USB 2.0中的设备限定描述符(Device_Qualifier)、USB 3.2中的二进制设备对象存储描述符(Binary Device Object Store,简称BOS)等。这些内容在博客中不会涉及,可在USB-IF的官网下载相关的USB规范文档了解。

下面对标准描述符进行详细介绍。

2 USB标准描述符

不管哪种USB设备,都必须提供标准描述符,用于告知主机设备本身的属性。以下介绍的内容,会比较枯燥,建议使用Bus Hound或USB逻辑分析仪等工具,去抓取USB设备的识别和通信包,实际体会这些描述符的用法。

如图2,抓取的是自制的USB HID设备信息。设备描述符中,含有自定义的厂商ID和产品ID,分别为0x8765和0x4321。
BUS Hound抓取USB包<

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luobing4365

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值