USB_Unicode_Descriptor_Code_Gen.zip
(12.77 KB, 下载次数: 274)
关于字符串描述符
字符串描述符是一种可选的USB标准描述符,描述了如制商、设备名称或序列号等信息。如果一个设备无字符串描述符,则其它描述符中与字符串有关的索引值都必须为0。字符串使用的是Unicode编码。
主机请示得到某个字符串描述符时一般分成两步:首先主机向设备发出USB标准命令Get_Descriptor,其中所使用的字符串的索引值为0,设备返回一个字符串描述符,此描述符的结构如下:
表14、USB字符串描述符(响应主机请求时返回的表示语言ID的字符串描述符) |
偏移量 |
域 |
大小 |
值 |
描述 |
0 |
bLength |
1 |
N+2 |
此描述表的字节数 |
1 |
bDescriptorType |
1 |
常量 |
字串描述表类型(此处应为0x03) |
2 |
wLANGID[0] |
2 |
数字 |
语言标识(LANGID) 码0 |
… |
… |
… |
… |
… |
N |
wLANGID[x] |
2 |
数字 |
语言标识(LANGID) 码X |
该字符串描述符双字节的语言ID的数组,wLANGID[0]~wLANGID[x]指明了设备支持的语言,具体含义可查看USB_LANGIDs.pdf。
主机根据自己需要的语言,再次向设备发出USB标准命令Get_Descriptor,指明所要求得到的字符串的索引值和语言。这次设备所返回的是Unicode编号的字符串描述符,其结构如下:
表15、Unicode字符串描述符(响应主机请求时真正表示字符串编码的字符串描述符) |
偏移量 |
域 |
大小 |
值 |
描述 |
0 |
bLength |
1 |
数字 |
此描述表的字节数(bString域的数值N+2) |
1 |
bDescriptorType |
1 |
常量 |
字串描述表类型(此处应为0x03) |
2 |
bString |
N |
数字 |
UNICODE 编码的字串 |
bString域为设备实际返回的以UNICODE编码的字符串流,我们在编写设备端硬件驱动的时候需要将字符串转换为UNICODE编码,您可以通过一些UNICODE转换工具进行转换。这里推荐由百合电子工作室开发的一款USB描述符生成工具“USB Unicode 字符串描述符生成器”,它专门为编写设备端驱动程序的需要而定制,可以非常方便将您需要的字符串转换成UNICODE格式,进而导入您的C或汇编程序代码中,以下是它的界面:
USB Unicode 字符串描述符生成器-生成C语言格式
USB Unicode 字符串描述符生成器-生成汇编格式
|