电子大神的日记本,供应链专家的功夫茶盘,在这里记录、分享与共鸣。

登录以开始

usb字符串描述符

关于字符串描述符,前面的前面已经简单描述过了,但是因为现在长夜漫漫,孤枕难眠,所以多说点。字符串描述符的地位仅次于设备/配置/接口/端点四大描述符,那四大设备必须得支持,而字符串描述符对设备来说则是可选的,类似于网球里马德里大师赛与四大满贯之间的地位差异,四大满贯是个碗儿都争着抢着爬着也要去,而号称第五大满贯的马德里大师赛却动不动就会被大碗儿们因各种理由给涮了。

这并不是就说字符串描述符不重要,对咱们来说,字符串要比数字亲切的多,提供字符串描述符的设备也要比没有提供的设备亲切的多,不会有人会专门去记前面使用lsusb列出的04b4表示的是Cypress Semiconductor Corp.,如果谁真费心去记了,俺也不会pfpf,而是只会发出和看到06年那几个超女时一样的感叹:动物的种类在减少,人的种类在增加吗?

一提到字符串,不可避免就得提到字符串使用的语言。字符串亲切是亲切,但不像数字那样全球通用,使用中文了,老外看不懂,使用法文阿拉伯文什么的咱又看不懂,你知道目前世界上有多少种语言吗?有得说七千多种,有得说五千多种,无一定论,不过使用人口超过100万的语言也足足有140多种。字符串描述符也需要应对多种语言的情况,当然这并不是说设备里就要存储这么多不同语言的字符串描述符,这未免要求过高了些,代价也忒昂贵了些,要知道这些描述符不会凭空生出来,是要存储在设备的EEPROM里的,此物是需要MONEY的,现在都在提倡节约型社会,要节约MONEY,尽量少占用EEPROM,要节约用水,尽量和女友一起洗澡。所以说只提供几种语言的字符串描述符就可以了,甚至说只提供一种语言,比如英语就可以了。

其实咱们现在说的语言的问题和秦始皇统一六国时遇到的语言问题一样,就是太多了,鸡说鸡的,鸭说鸭的,交流成问题。你说啥时候地球上或整个宇宙上只说一种语言了,咱也不用费劲去学什么英语了,就是外星人来了,大家和外星mm交流也不成问题。不过不管哪种语言,在PC里或者设备里存放都只能用二进制数字,这就需要在语言与数字之间进行编码,这个所谓的编码和这个世界上其它事物一样,都是有多种的,你说连人的种类都有很多了,人造出来的编码种类能没有很多么?起码每种语言都会存在独立的编码方式,咱们的简体中文可以使用GB2312、GBK、GB18030等,台湾那边儿是繁体,用的就是big5,这么一来每种语言自己内部交流是不成问题了,可相互之间就像鸡同鸭讲了。于是世界上的某些角落就出现了那么一些有志青年,立志要将各种语言的编码体系给统一起来,于是就出现了UNICODE和ISO-10646。比起他们,俺是太没追求了,父亲问我人生有什么追求?我回答金钱和美女,父亲凶狠的打了我的脸,我回答事业与爱情,父亲赞赏的摸了我的头。

Spec里就说了,字符串描述符使用的就是UNICODE编码,usb设备里的字符串可以通过它来支持多种语言,不过你需要在向设备请求字符串描述符的时候指定一个你期望看到的一种语言,俗称语言ID,即Language ID。这个语言ID使用两个字节表示,所有可以使用的语言ID在http://www.usb.org/developers/docs/USB_LANGIDs.pdf 文档里都有列出来,从这个文档里你也可以明白为啥要使用两个字节,而不是一个字节表示。这么说吧,比如中文是0X04,但是中文还有好几种,所以就需要另外一个字节表示是哪种中文,简体就是0X02,注意合起来表示简体中文并不是0X0402或者0X0204,因为这两个字节并不是分的那么清,bit0~9一共10位去表示Primary语言ID,其余6位去表示Sub语言ID,毕竟一种语言的Sub语言不可能会特别的多,没必要分去整整一半8bits,所以简体中文的语言ID就是0X0804。

USB_LANGIDs.pdf pdf

博主
nneverli@163.com
jiereliyi's Blog
此处记录了我学习电子的成长过程,呵呵。现在看来好有趣啊。
点击跳转