原创 USB协议深入分析_字符串描述符(转载)

2009-5-15 16:58 3751 0 分类: MCU/ 嵌入式

原载于:http://blog.csdn.net/caimouse/archive/2007/04/25/1584778.aspx


上一次说到把配置描述符返回给主控器那里了,现在接着下来,就会收到主控器发来字符串描述符。如果在设备描述符那里指定没有字符串描述的话,在这里是不会收到字符串描述符的。由于我在设备描述符里指定有字符串描述符的偏移地址,因此,就收到主控器发出请求字符串描述符。收到的数据如下:

80 06 00 03 00 00 FF 00

bmRequestType是80,表示方向USB设备发送给主控器,接收设备是USB设备。

bRequest是06,表示这是获取描述符。GET_DESCRIPTOR         6

wValue是00 03。低字节表示偏移地址00,高字节表示描述符的类型,如下:

STRING                   3

wIndex是00 00。

wLength是FF 00。它表示返回描述符的长度。这里是256个字节。

因此,这个获取字符串描述符,就是从字符串描述内存里,0偏移地址开始的位置读取第一个字符串描述符返回给主控器。接着就返回下面的数据给主控器:

04 03 09 04

上面的数据是按字符串描述符来组织的,它的结构,我定义结构如下:

typedef struct _USB_STRING_DESCRIPTOR {

 BYTE bLength;

 BYTE bDescriptorType;

 WORD bString/*[]*/;

} USB_STRING_DESCRIPTOR;

 

bLength是所有数据的长度。在这里是4。

bDescriptorType是描述类型,这里字符串描述符,所以它是3。

bString是可变的字符数组。不超过254个应都可以的,并且它是使用UNICODE编码的字符串。在这里是09 04,这是美国英语的标识,0x0409。如果想输入中文的标识,只要改为0x0804就可以了。

通过这个字符串描述符,主控器就知道字符串描述符是使用什么语言说明的了,这样就可以支持全世界的语言标识。

文章评论0条评论)

登录后参与讨论
相关推荐阅读
haoran_flying 2009-05-20 20:45
Mega16+CH375硬件测试程序
前几天在做usbd12调试时不小心把12V电压接到5V上去了,烧了几个片子,D12也挂了,由天手头上没有D12了,再说手工焊接也挺麻烦的,上次买D12时顺便带了CH375。因为这一直都是用的AVR的片...
haoran_flying 2009-05-16 20:59
我做的OO的usb鼠标
  五一放假在家没事,逛到了END圈圈的USB专区,小组公告的那段话很实在。原来做的项目都是通过串口通讯,看来有时间还是要学习一下USB。  这段时间看了一下协议和其他的一些资料,还只是一个模糊的认识...
haoran_flying 2009-05-15 16:56
USB协议深入分析_配置(转载)
原载于:http://blog.csdn.net/caimouse/archive/2007/04/23/1575676.aspx前面已经介绍设置USB的设备地址,接着下来是做什么呢?其实有了设备地址...
haoran_flying 2009-05-15 16:55
USB协议深入分析_设置USB地址(转载)
原载于:http://blog.csdn.net/caimouse/archive/2007/04/18/1568991.aspx前面已经解释主控器怎么样发送设备描述符下来,然后设备返回相应的设备描述...
haoran_flying 2009-05-15 16:53
USB协议深入分析_返回设备描述符(转载)
原载于:http://blog.csdn.net/caimouse/archive/2007/04/12/1561959.aspx 回应设备描述符上一次已经介绍怎么样收到主控器的获取设备描述符的数据,...
我要评论
0
0
1
2
3
4
5
6
7
8
9
0
关闭 热点推荐上一条 /4 下一条