没有合适的资源?快使用搜索试试~ 我知道了~
首页USB_HID_学习实例之如何枚举为鼠标.pdf
USB_HID_学习实例之如何枚举为鼠标.pdf
需积分: 18 65 浏览量
更新于2023-03-03
评论
收藏 455KB PDF 举报
贡献给想要学习USB的和正在开发USB驱动的人! 贡献给想要学习USB的和正在开发USB驱动的人! 贡献给想要学习USB的和正在开发USB驱动的人! 贡献给想要学习USB的和正在开发USB驱动的人!
资源详情
资源评论
资源推荐

USB 学习板:EASY USB 51 PROGRAMER 配套光盘
主页地址:http://www.baiheee.com/Products/Easy_USB_51_Programer/Easy_USB_51_Programer.htm
淘宝网店:http://shop60158254.taobao.com/
USB HID 学习实例之如何枚举为鼠标
通过上一节的工作,PC 机能成功发现 USB 设备的插入,但是 PC 要求我们提供此设置的驱动
程序,这是因为原固件驱动定义的设备类型是“测试设备类”,此时要求用户提供自定义的设备驱动
程序,如下图所示:
USB 主机是通过请求设备的相关描述符来判断设备类型的,所以我们只需要修改相关描述符
就能实现我们想要设备类型。描述符的配置位于 Descriptor.h 和 Descriptor.c 文件中。
下面我们来把Easy USB 51 Programer 改造成一个鼠标。
第一步:修改 Descriptor.c
1、找到设备描述结构体
1. //设备描述符
2. code USB_DEVICE_DESCRIPTOR DeviceDescr =
3. {
4. sizeof(USB_DEVICE_DESCRIPTOR), //设备描述符长度,= 12H
5. USB_DEVICE_DESCRIPTOR_TYPE, //设备描述符类型,= 01H
6. 0x00,0x01, //协议版本,= 1.10
7. USB_CLASS_CODE_TEST_CLASS_DEVICE, //测试设备类型, = 0DCH

USB 学习板:EASY USB 51 PROGRAMER 配套光盘
主页地址:http://www.baiheee.com/Products/Easy_USB_51_Programer/Easy_USB_51_Programer.htm
淘宝网店:http://shop60158254.taobao.com/
8. 0, 0, //设备子类,设备协议
9. EP0_PACKET_SIZE, //端点 0 最大数据包大小,= 10H
10. 0x71,0x04, //PHILIPS 公司的设备 ID
11. 0x66,0x01, //设备制造商定的产品 ID
12. 0x00,0x01, //设备系列号
13. 0, 0, 0, //索引
14. 1 //可能的配置数
15. };
将其中的
1. USB_CLASS_CODE_TEST_CLASS_DEVICE, //测试设备类型, = 0DCH
注释掉,并在其后加入下面这行代码
1. 0, //设备类型由接口描述符提供
同时也将
1. 0x66,0x01, //设备制造商定的产品 ID
修改为
1. 0x66,0x02, //设备制造商定的产品 ID
2、找到接口描述符结构体
1. //接口描述符
2. {
3. sizeof(USB_INTERFACE_DESCRIPTOR), //接口描述符长度,= 09H
4. USB_INTERFACE_DESCRIPTOR_TYPE, //接口描述符类型,= 04H
5. 0, //接口数,只有 1 个
6. 0, //可选配置,只有 1 个
7. NUM_ENDPOINTS, //除端点 0 的端点索引数目,= 04H
8. USB_CLASS_CODE_TEST_CLASS_DEVICE, //测试设备类型,= 0DCH
9. USB_SUBCLASS_CODE_TEST_CLASS_D12, //子类代码,= 0A0H
10. USB_PROTOCOL_CODE_TEST_CLASS_D12, //协议代码,= 0B0H
11. 0 //字符串描述符索引

USB 学习板:EASY USB 51 PROGRAMER 配套光盘
主页地址:http://www.baiheee.com/Products/Easy_USB_51_Programer/Easy_USB_51_Programer.htm
淘宝网店:http://shop60158254.taobao.com/
12. },
将其中的
1. USB_CLASS_CODE_TEST_CLASS_DEVICE, //测试设备类型,= 0DCH
注释掉,并在其后加入下面一行代码
1. 0x03, //人机接口设备(HID)类
第二步:编译源程序并写入主控芯片
将我们的编程器插入 PC 机,激动人心的时刻到了,我们看到 PC 机能成功识别到我们插入的
设备是人体工学设备(就是 HID 设备)了:
但是接下来却提示:
打开设备管理器我们发现人体学输入设备下面有一个 USB 设备出现了“!”号,这个设备就是
我们的 Easy USB 51 Programer,但为什么有问题呢?

USB 学习板:EASY USB 51 PROGRAMER 配套光盘
主页地址:http://www.baiheee.com/Products/Easy_USB_51_Programer/Easy_USB_51_Programer.htm
淘宝网店:http://shop60158254.taobao.com/
看来是我们对USB设备的枚举过程不够了解,您可以先看看百合电子工作室发表的文章:USB
开发基础--实例讲解 USB 的枚举(配置)过程和 USB HID 设备类协议入门。
第三步:继续修改
《USB HID 设备类协议入门》一文中提到,除了 HID 的三个特定描述符组成对 HID 设备
的解释外,5 个标准描述符中与 HID 设备有关的部分有:
• 设备描述符中 bDeviceClass、bDeviceSubClass 和 bDeviceProtocol 三个字段的值必
须为零。
• 接口描述符中 bInterfaceClass 的值必须为 0x03,bInterfaceSubClass 的值为 0 或 1,
为 1 表示 HID 设备符是一个启动设备(Boot Device,一般对 PC 机而言才有意义,意思
是 BIOS启动时能识别并使用您的 HID 设备,且只有标准鼠标或键盘类设备才能成为 Boot
Device。 bInterfaceProtocol 的取值含义如下表所示:
HID 接口描述符中 bInterfaceProtocol 的含义
bInterfaceProtocol 的取值(十进制) 含义
0 NONE
剩余19页未读,继续阅读
















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0