电子说
哈哈,终于搞了一回USB HID设备,做了一个USB键盘来玩玩~~~~其中的报告描述符让我晕了几天~~~~~几份HID相关的协议还是蛮长的~~~~~~明天再弄个USB鼠标设备玩玩~~~~~~~有空的话再搞个红外遥控器玩玩~~~
这回是拿以前做的Mass storage来改的,所以比较快,修改了一下描述符以及端点处理等,就行了。用了一个4*4的小键盘,有0-9十个数字键,Num Lock键,Caps Lock键,Shift键,Ctrl键,Alt键,回车键等。
最多可以有三个键同时按下,如果相交的话,最多只能两个键按下。
以下是通过串口返回的调试信息:
系统启动。..。..。..。..。..。..。..。..。..。..。.
断开USB连接。..。..。..。..。..。..。..。..
USBD12芯片初始化
设置地址。..。..。..。..。..。..。..
地址为: 0
连接USB.。..。..。..。..。.
USB总线复位。..。..。..。..。..。..。..。..。..。..。.
USB总线挂起。..。..。..。..。..。..。..。..。..。..。.
USB总线复位。..。..。..。..。..。..。..。..。..。..。.
USB总线挂起。..。..。..。..。..。..。..。..。..。..。.
USB总线复位。..。..。..。..。..。..。..。..。..。..。.
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符。..。..。..。..。..。..。..。..。..。..。.
获取设备描述符。..。..。..。..。..。..。..。..。..。..。.
USB总线复位。..。..。..。..。..。..。..。..。..。..。.
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
设置地址。..。..。..。..。..。..。..
地址为: 2
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符。..。..。..。..。..。..。..。..。..。..。.
获取设备描述符。..。..。..。..。..。..。..。..。..。..。.
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符。..。..。..。..。..。..。..。..。..。..。.
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符。..。..。..。..。..。..。..。..。..。..。.
获取配置描述符。..。..。..。..。..。..。..。..。..。..。.
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符。..。..。..。..。..。..。..。..。..。..。.
获取字符串描述符。..。..。..。..。..。..。..。..。..。..。.
获取语言ID.。..。..。..。..。..。..。..。..。..。..。
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符。..。..。..。..。..。..。..。..。..。..。.
获取字符串描述符。..。..。..。..。..。..。..。..。..。..。.
获取设备序列号。..。..。..。..。..。..。..。..。..。..。.
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符。..。..。..。..。..。..。..。..。..。..。.
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符。..。..。..。..。..。..。..。..。..。..。.
获取配置描述符。..。..。..。..。..。..。..。..。..。..。.
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符。..。..。..。..。..。..。..。..。..。..。.
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符。..。..。..。..。..。..。..。..。..。..。.
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符。..。..。..。..。..。..。..。..。..。..。.
获取字符串描述符。..。..。..。..。..。..。..。..。..。..。.
获取语言ID.。..。..。..。..。..。..。..。..。..。..。
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符。..。..。..。..。..。..。..。..。..。..。.
获取字符串描述符。..。..。..。..。..。..。..。..。..。..。.
获取产品字符串。..。..。..。..。..。..。..。..。..。..。.
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符。..。..。..。..。..。..。..。..。..。..。.
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符。..。..。..。..。..。..。..。..。..。..。.
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符。..。..。..。..。..。..。..。..。..。..。.
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符。..。..。..。..。..。..。..。..。..。..。.
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符。..。..。..。..。..。..。..。..。..。..。.
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符。..。..。..。..。..。..。..。..。..。..。.
获取字符串描述符。..。..。..。..。..。..。..。..。..。..。.
获取语言ID.。..。..。..。..。..。..。..。..。..。..。
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符。..。..。..。..。..。..。..。..。..。..。.
获取字符串描述符。..。..。..。..。..。..。..。..。..。..。.
获取产品字符串。..。..。..。..。..。..。..。..。..。..。.
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符。..。..。..。..。..。..。..。..。..。..。.
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符。..。..。..。..。..。..。..。..。..。..。.
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符。..。..。..。..。..。..。..。..。..。..。.
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符。..。..。..。..。..。..。..。..。..。..。.
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符。..。..。..。..。..。..。..。..。..。..。.
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符。..。..。..。..。..。..。..。..。..。..。.
获取设备描述符。..。..。..。..。..。..。..。..。..。..。.
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符。..。..。..。..。..。..。..。..。..。..。.
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符。..。..。..。..。..。..。..。..。..。..。.
获取配置描述符。..。..。..。..。..。..。..。..。..。..。.
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符。..。..。..。..。..。..。..。..。..。..。.
获取配置描述符。..。..。..。..。..。..。..。..。..。..。.
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符。..。..。..。..。..。..。..。..。..。..。.
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符。..。..。..。..。..。..。..。..。..。..。.
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
设置配置。..。..。..。..。..。..。..。..。..。..。.
USB类请求。..。..。..。..。..。..。..。..。..。..。.
设置空闲。..。..。..。..。..。..。..。..。..。..。.
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符(从接口)。..。..。..。..。..。..。..。..。..。..
获取报告描述符。..。..。..。..。..。..。..。..。..。..。.
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符(从接口)。..。..。..。..。..。..。..。..。..。..
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符(从接口)。..。..。..。..。..。..。..。..。..。..
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符(从接口)。..。..。..。..。..。..。..。..。..。..
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符(从接口)。..。..。..。..。..。..。..。..。..。..
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符(从接口)。..。..。..。..。..。..。..。..。..。..
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符(从接口)。..。..。..。..。..。..。..。..。..。..
USB标准请求。..。..。..。..。..。..。..。..。..。..。.
获取描述符(从接口)。..。..。..。..。..。..。..。..。..。..
端点2输出。..。..。..。..。..。..。..。..。..。..。.
端点2的数据是 0x01
端点2输出。..。..。..。..。..。..。..。..。..。..。.
端点2的数据是 0x03
端点2输出。..。..。..。..。..。..。..。..。..。..。.
端点2的数据是 0x01
端点2输出。..。..。..。..。..。..。..。..。..。..。.
端点2的数据是 0x00
端点2输出。..。..。..。..。..。..。..。..。..。..。.
端点2的数据是 0x02
端点2输出。..。..。..。..。..。..。..。..。..。..。.
端点2的数据是 0x03
在设备管理器里看到的图:
原理图
(用的是以前做IDE转USB的板,所以上面还有个IDE接口和573锁存器,可以不用理会它们):
(注意:原理图上所标的晶体值是以前的,这个程序中使用的是22.1184M的晶体。它关系到串口波特率,如果你不使用串口,那么可以不用理会它。)
注意:图中串口电平转换部分的C8和C10接反了,C11负端应接VDD。D12的SUSPEND(12脚)应该接地。USB接头的D+和D-跟芯的D+和D-之间应该串联22欧姆的匹配电阻。片由于图得比较匆忙,所以没留意。右击选择图片另存为可以看到完整图片了。
实物图片(键盘是外接的):
责任编辑LK
全部0条评论
快来发表一下你的评论吧 !