USB学习入门(一)-------东风夜放花千树

        记得十多年前,单位开办网银业务,客户需要用k宝,这是一个类似U盘的支付安全工具,需要安装驱动,客户使用中经常出现各种各样的问题,作为公司从事信息技术工作的我据此开始了USB技术的开发研究历程,“USB应用开发技术大全”、“USB开发手册”便是启蒙的读物。多年来自己一直想征服“USB技术开发”这匹烈马,但几经波折,拿起来放下,放下后又拿起来,多少个满头雾水的时日,回想起来这条路确实不平坦,在自学的路上,身边没有老师的指点,走了不少弯路。如果你身边有一个USB老师帮助你,那就太庆幸了,在学习过程中,你可以时不时的吃点烤串喝点啤酒。如果你没有任何的USB基础还是单枪匹马,我敢说兄弟你辛苦了,望望满天的繁星,回来再看看那碗渐渐不再冒出热气的白米饭,轻轻的说:“USB想说爱你不容易”。本文是自己研究USB技术的一点体会,如果你刚刚接触它,本文或许对你有所帮助。
       自从1996年USB1.0发布后,USB已经到目前的USB3.0,通讯速度从1.5Mbps到5Gbps,USB一路走来,逐步取代了串口、并口,成为各类智能设备的主要通讯接口,支持了鼠标、键盘、打印机、扫描仪、摄像头、充电器、闪存盘、MP3机、手机、数码相机、移动硬盘、外置光驱/软驱、USB网卡等,几乎所有的外部设备,作为计算机技术人员,迟早会用到USB技术,都说学USB难,那究竟难在哪里呢,本人体会主要有如下的几点:
       1、USB体系过于庞大,为了完成USB通讯硬件上就有USB主控制器、USB集线器和USB功能设备几个方面,每个方面都涉及到功能原理、设备驱动等多个方面,理解起来却有一定的难度。
       2、不知从那个角度出发来测试、验证所学的USB技术,按照一般的思路,首先学习USB基础理论,然后是USB驱动开发,最后是USB设备固件开发,如果你是一个专门的硬件设计及驱动工程师,这难不倒你,往往我们从事的是应用层面的研发人员,让我们开发一个USB设备的驱动程序来支持一个USB设备,这好比猪还没杀死又让我们去杀牛,问题是越搞越难,我几次都是在这里望而却步、鸣金收兵了。
       3、我不知道各类系统比如windows或linux或android对USB都做了哪些工作,我在相应的系统上测试USB设备或写一个USB通讯程序的话从哪里下手。
      总之就是看完USB的技术书籍后,我似乎USB技术很明白了,什么USB事务、数据包、描述符及请求之类,但真正给我一个USB设备我不知怎么去理解他,更不用说怎么和他进行通讯,看上去还是云里雾里。这是相当长一段时间里我的苦恼。
      学习USB技术,基础是要打牢的,我以为上层的技术人员不要太理会底层数据通讯的具体细节,但像USB的控制传输、中断传输、块传输、同步传输的传输方式及USB的设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符是一定要熟练掌握的,而且每种描述符包含的字段要仔细理解并熟记于心,这方面网上资料很多,一般技术书籍也都有详细讲解,理解起来也不难。USB的工作机制就像公司老板到峨眉山敬香,从公司到峨眉山可以走公路或许走空路、水路或铁路,但空路、水路、铁路不一定能到达,公路一定会的,这里走公路就类似USB的控制传输,空路、水路、铁路类似中断传输、块传输、等时传输,之所以USB设计这么多的传输方式完全是为了满足各类设备通讯的需要,比如键盘设备,客户什么时间敲键盘无法确定,就需要用中断传输机制,及时将客户敲击的键盘信息传递到主机。像U盘这类设备,可以按固定的协议标准在U盘和主机之间传送数据,就可以用块传输,像USB的视频播放器,工作时总有一个固定的、连续的视频流,这类设备就用等时传输,这三种传输在具体的USB设备中可有可无,但控制传输不论什么样的USB设备一定会有的,他保证USB设备插入到电脑后的最基本通讯能力。然而峨眉山上有几尊菩萨,每尊菩萨有何宝贝老板一无所知,于是叫来了秘书小乔,让他先到峨眉山去一次,打打前站,并特意告诉他一定要走公路(控制传输),于是小乔即刻出发,风风火火的来到了峨眉山,小乔先后见到了观音菩萨(设备描述符),普贤菩萨(配置描述符),文殊菩萨(接口描述符)、地藏王菩萨(端点描述符)、日光菩萨(字符串描述符),秘书小乔精明能干、能说会道,即可功夫就和菩萨混的烂熟,菩萨手中的宝贝轻易拿到手了(当然还有其他菩萨,但主要的是这几个)。
观音菩萨(设备描述符)共18件宝贝:
序号          字段名称                       长度(字节)            值                                                    意义
0               bLength                         1                               0x12                                            设备描述符的字节数大小
1               bDescriptorType            1                               0x01                                            设备描述符类型编号
2               bcdUSB                         2                 协议版本2.31其值就是0x0231                   USB版本号
4               bDeviceClass                1                                类                                    USB分配设备类代码(1-FE)FF为厂商自定义
5               bDeviceSubClass          1                               子类                                             USB分配子类代码
6               bDeviceProtocol            2                               协议                                              USB分配设备协议代码
7               bMa xPack et Size0      1                                控制传输端点0包大小                  端点0最大包大小
8               idVendor                        2                               ID编号                                          厂商编号
10             idProduct                       2                               ID编号                                          产品编号
12             bcdDevice                     2                                BCD码                                         设备出厂编号
14             iManufacturer               1                                 索引                                             描述厂商字符串索引
15             iProduct                        1                                 索引                                             描述产品字符串的索引
16            iSerialNumber               1                                 索引                                              描述设备序列号字符串的索引
17            bNumConf igur at ions    1                               配置描述符个数                            可能配置数量
普贤菩萨(配置描述符)共9件宝贝:
序号          字段名称                       长度(字节)            值                                                    意义
0                 bLength                         1                            0x09                                               配置描述符的字节数大小
1                 bDescriptorType            1                            0x02                                               配置描述符类型编号
2                 wTotalLength                 2                             数字                                              这是一个以2 字节二进制数为内容的字段。该字段表示该配置所返回的所有描述符( 包括配置、接口和端点描述符) 的大小总和。
4                 bNumInterfaces            1                             接口描述符个数                             此配置所支持的接口数量
5                 bConfigurationValue    1                               数字                                              Set_Configuration /Get_Configuration命令需要的参数值
6                 iConfiguration              1                               索引                                              描述该配置的字符串的索引值
7                 bmAttributes                1                               位图                                              供电模式的选择,第7位D7保留固定为1;D6值为1表示自供电,值为0表示总线供电; D5值为1表示支持远程唤醒,值为0则不支持;D4~D0没有意义固定为0
8                MaxPower                    1                        字段值*2(mA)                                      设备从总线提取的最大电流(<=500mA)
文殊菩萨(接口描述符)共9件宝贝:
序号          字段名称                       长度(字节)            值                                                    意义
0                bLength                              1                       0x09                                                 接口描述符的字节数大小
1                bDescriptorType                 1                       0x04                                                 接口描述符类型编号
2                bInterfaceNumber              1                        数字                                                 该接口编号
3                bAlternateSetting               1                        数字    
4                bNumEndpoints                 1          如果为0则说明只用了端点0                          该接口使用的端点数 ,不包括端点0
5                bInterfaceClass                  1                        类                                                    接口类型
6                bInterfaceSubClass           1                       子类                                                  接口子类类型
7                bInterfaceProtocol             1                       协议                                                  接口遵循的协议
8                iInterface                           1                        索引                                                 描述该接口的字符串索引值
地藏王菩萨(端点描述符)共7件宝贝:
序号          字段名称                       长度(字节)            值                                                    意义
0                bLength                              1                       0x07                                                  端点描述符的字节数大小    
1                bDescriptorType                 1                       0x05                                                  端点描述符类型编号    
2                bEndpointAddress              1                       端点                                                  端点地址及输入输出属性    
3                bmAttributes                       1                       位图                                                  端点的传输类型属性    
4                wMaxPacketSize                2                       数字                                                  端点收、发的最大包的大小    
6                bInterval                              1                       数字                                                 主机查询端点的时间间隔
日光菩萨(字符串描述符)共3件宝贝:
序号          字段名称                       长度(字节)            值                                                    意义
0                 bLength                              1                         数字                                               字符串描述符的字节数大小
1                 bDescriptorType                 1                        0x03                                               字符串描述符类型编号
2                 bStringN                             数字                   UNICODE                                       编码的字符串
        小乔拿到菩萨的宝贝后,精心打理,生怕丢失,不明之处还特意问了文殊菩萨从公司到峨眉山有几种走法(在bNumEndpoints中有说明),随后小乔又问了地藏王菩萨(端点描述符)怎么走,地藏王菩萨(端点描述符)告诉小乔,从你们公司到峨眉山来的时候(out)可乘飞机,回去的时候(in)可坐高铁(bEndpointAddress字段有说明),小乔不敢怠慢一路风雨兼程赶回公司向老板禀报此行。老板听了秘书小乔的汇报后,便精心准备,选了良辰吉日,飞往峨眉山敬香去了。
        USB设备就像峨眉山的寺庙,USB的各类描述符就像庙里的菩萨,研究各类USB设备最重要的是要熟悉这些菩萨并熟悉他们手中的宝贝,这对我们非常重要,有了这些宝贝那我们就能够继续操作使用USB设备了。接下来“USB想说爱你不容易(二)------宝马雕车香满路”(https://blog.csdn.net/donghailin/article/details/102603589

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绝知此事要躬行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值