Kingston U盘枚举过程翻译

来源:互联网 发布:儿童陶艺馆 知乎 编辑:程序博客网 时间:2024/04/27 19:56

对于DATA0与DATA1的交替传输是针对ENDPOINT而言的。

考虑到今后有可能要做块U盘,对金士顿U盘的枚举过程了做了个分析,软件用的是BUS HOUND。

 

//USB-IF定义的bInterfaceClass和bInterfaceSubClass在哪查?
//bEndpointAddress----------81

 

device:
12------------------总共18 byte
01------------------DEVICE descriptor
00 02------------------release number:2.0
00------------------所有接口在配置描述符中,且独立
00------------------设备子分类码,当前面的bDeviceClass值是0时,这里一定要设置为0。其它就跟据USB-IF组织定义的编码
00------------------设备使用的协议。如果使用USB-IF组织定义的协议,就需要设置这里的值。如果不使用,就直接设置为0。如果厂商自己定义的可以设置为FFH
40------------------最大包64 byte
51 09------------------厂商标识。由USB-IF分配的编码
03 16------------------厂商定义的产品标识。由厂家和产品标识,就可以让操作系统加载不同的驱动程序
00 02------------------版本1.2
01------------------厂商字符串的偏移值01
02------------------产品字符串的偏移值02
03------------------序列号字符串的偏移值03
01------------------1个配置

 

 

configuration:
09------------------9 byte
02------------------configuration descriptor
00 20------------------总长度,即32 byte
01------------------支持一个接口
01------------------配置的个数,当设置配置时发送的值。这时设置为1个配置
00------------------index of string descriptor
80------------------不支持自供电,支持远程唤醒。
32------------------每2mA为单位,比如它的值是50时就表示是100mA的电流消耗


interface:
09------------------9 byte
04------------------INTERFACE descriptor
00------------------
00------------------
02------------------2 endpoints
08------------------class
06------------------subclass
50------------------
00------------------第一个string in string descriptor

 

endpoint:
07------------------7 byte
05------------------ENDPOINT descriptor
81------------------即1000 0001,IN endpoint,endpoint 1
02------------------即0000 0010,bulk
00 02---------------max pkt size:512 byte
00------------------never NAKs

07------------------7 byte
05------------------ENDPOINT descriptor
02------------------即0000 0010,OUT endpoint,endpoint 2
02------------------即0000 0010,bulk
00 02------------------max pkt size:512 byte
00------------------never NAKs

 

string:
80 06 00 03 00 00 02 00    就是问总共有多长的字符串描述符
04------------------告诉主机有4 byte
03------------------字符串描述
80 06 00 03 00 00 04 00
04------------------4 byte
03------------------字符串描述符
09 04------------------英语
80 06 03 03 09 04 02 00    主机询问偏移量为3的字符串(就是要看序列号)有多长,语言标识为英语,要求返回值为2byte
32------------------告诉主机偏移量为3的字符串有32byte.
03------------------偏移量为3
80 06 03 03 09 04 32 00    主机读取所有32byte偏移量为3的字符串描述符
32 03 38 00 32 00 34 00 30 00 30 00 30 00 30 00 30 00 30 00 30 00 30 00 30 00 30 00 30 00 30 00
此时应该已经加载驱动了,如果操作系统没有,则会弹出对话框,索要驱动。
00 09 01 00 00 00 00 00 SET CONFIGURATION 1
01 0b 00 00 00 00 00 00 SET INTERFACE

 
原创粉丝点击