打印
[菜农助学交流]

第五批初学M0---USB设备枚举及搜索读写打开

[复制链接]
1949|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
近日初涉M0USB调试,发觉颇有乐趣,发一小帖,以作分享。
先说说USB的枚举。USB主机检测到USB设备插入后,就会先对设备复位,然后通过地址0与其通信,获取设备描述符。接着对设备又一次复位,设置设备地址,然后再次获取设备描述符,最后获取配置描述符。具体调试数据显示如下:


CTL
80 06 00 01
00 00 12 00
GET DESCRIPTOR

DI
12 01 10 01
00 00 00 08


16 04 42 c1
00 00 01 02


03 01
..

CTL
80 06 00 02
00 00 09 00
GET DESCRIPTOR

DI
09 02 22 00
01 01 00 a0


32

CTL
80 06 00 02
00 00 22 00
GET DESCRIPTOR

DI
09 02 22 00
01 01 00 a0


32 09 04 00
00 01 03 01


02 00 09 21
10 01 00 01


22 32 00 07
05 81 03 40

CTL
00 09 01 00
00 00 00 00
SET CONFIG

CTL
21 0a 00 00
00 00 00 00
SET IDLE

CTL
81 06 00 22
00 00 72 00
GET DESCRIPTOR

DI
05 01 09 02
a1 01 09 01


a1 00 05 09
19 01 29 03


15 00 25 01
95 03 75 01


81 02 95 01
75 05 81 01

代码详见BSPSmpl_HID例程,HID_Init()初始化之后IN的处理函数是HID_SetInReport,实现按键按下发送鼠标移动的报文。
再谈谈设备搜索及读写。
首先调用HidD_GetHidGuid函数获取HID设备的GUID
HidD_GetHidGuid(&HidGuid);
然后利用SetupDiGetClassDevs获取设备信息集合,
最后用SetupDiEnumDeviceInterfacesSetupDiGetDeviceInterfaceDetail获取设备详细信息,直到获得PIDVID跟自己的设备一致的设备。
查看M0程序,
#define USB_VID
0x0416
/* Vendor ID */

#define USB_PID
0x5020
/* Product ID */

搜索到设备之后利用CreateFile打开设备进行后续的工作就可以了。
当然需要SetupDiDestroyDeviceInfoList关闭信息集合。
简单做个界面调试一下。

test.JPG (26.85 KB )

test.JPG

usbTest.rar

45.29 KB

相关帖子

沙发
Cortex-M0| | 2012-3-9 05:02 | 只看该作者
谢谢分享~~~

使用特权

评论回复
板凳
xyz549040622| | 2012-3-9 06:14 | 只看该作者
顶,还真没玩过USB

使用特权

评论回复
地板
lixiaoxu2meng| | 2012-3-9 07:43 | 只看该作者

使用特权

评论回复
5
Ryanhsiung| | 2012-3-9 12:43 | 只看该作者
好东西!!

使用特权

评论回复
6
yongjun_meng| | 2012-3-26 10:20 | 只看该作者
下来学习

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

8

帖子

0

粉丝