分享

干货 | 我的USB学习经验

 知芯世界 2020-10-28

EEWorld

电子资讯 犀利解读 

技术干货 每日更新

     

应工作要求,需要进行USB Drv相关内容的维护作业,但是目前部门内部没有专人研究过这个领域,所以领导安排我来检讨学习相关内容,以便可以应对将来的变更。

USB是个很大且很常用的模块,个人对此也比较感兴趣,所以正好借着这个机会,学习一下相关的知识。零星学习了小半年有余,对此多少有了一些了解。领导要求我把所知道的内容给大家展开一下。正好借着机会,整理一下思路与所学,跟坛友分享一下,查漏补缺,若有认知不对的地方,欢迎拍砖。计划是分8次展开,每月一次,本次论坛首发,恳请各位大佬不吝赐教。本次的部门展开是计划在5月17日进行,时间1小时。

资料准备的是PPT,所以就使用文字对PPT进行一下描述。

第一页

封面左边的这张图片摘自百度百科USB词条。第一眼看到就被它的暗黑风吸引了,于是也奠定了全文的暗黑基调。嗯。。。打印本文的话会比较费墨

第二页

本页要说明的是这次USB Knowhow展开的计划。目前已能明确前6次内容,后两讲内容待定。因为我也在继续学习ing,所以稍后根据具体情况再决定最后两讲的内容。

第一次:

主题是USB基础知识展开,分两部分进行,一是USB的基础知识概述,只是一些基本知识,并未涉及到具体的开发知识,计较没营养的一次展开;另一项是介绍一下我在学习过程中的主要参考书籍,供大家参考使用。

第二次:

跟第三次一并展开的是USB开发基础知识,这里涉及了一些USB开发中的概念。本次为上回,主要展开的概念是端点、描述符、传输类型和事务。会使用一些具体的例子进行配合说明。

第三次:

本次为USB开发基础知识的下回,展开的是USB包结构及分类。同样会配合一些具体例子说明。

第四次:

主题是大部分USB开发人员都会涉及到的一个内容,USB设备的检出,也叫USB设备枚举。本次先说明一下USB设备的检出机制,然后以U盘为例,具体解析检出Log进行案例分析。

第五次:

本回是参考圈圈大神的《圈圈教你玩USB》来进行的第一个实验,实现USB鼠标,从理论和代码两方面进行。其间会穿插一下我在调试串口波特率时遇到的一个小插曲。

第六次:

有了之前的积累后,应该对USB有了大致的了解了,本次是概述一下Linux下USB设备驱动开发的过程。这部分涉及了很多的Linux内核知识,我对这方面了解的不多,把握不好尺度,计划大概先解析出启动流程和设备检出这两部分代码。

第七次:

其实USB还有很多的内容没有涉及,比如CDC,NCM等等,再比如开源第三方库libusb。此处先dummy一下,占个位,到时再具体而定吧。

第三页:

本讲的目录,不再赘述。

第四页:

Point 1:什么是USB

业内有两种说法:一种是You SB(你傻X),一种是USA(美国)的弟弟。摘自圈圈大神语录。这当然是开玩笑的,活跃一下气氛,不要当真。借着这个引子,突然想到一位好友之前朋友圈发过的一个看图猜词。右侧的蜜蜂是什么意思?

第五页:

刚刚的USB解释当然是开玩笑,本页才是正经的解释。摘自百度百科。简单说,USB就是Universal Serial Bus 通用串行总线。一种通信协议技术,超赞的一个特性就是支持热插拔。

第六页:

Point 2 USB的优缺点:

优点有很多,如图所述,比较显著的优点就是即插即用,可扩展性强,下页PPT中就列举一下好多种常见的USB设备。

至于缺点,一是传输距离短,实现不了超常距离传输。再一个就是开发比较困难,门槛稍稍高一些,不如串口那么亲民大众。

还有一个比较臭屁的缺点,它说要找出它的缺点是件很令人头疼的事情。呵呵,花无缺呗,

第七页:

上页已经提到了,本页说明的是各种各样常见的USB设备。摄像头、U盘、鼠标、键盘、无线网卡、右上角那个是USB显微镜。

第八页:

本页描述的是USB的发展历程。这里有一点希望能够明确的是,低速、全速、高速、超高速这几种叫法所对应的USB版本。不要以后再全速、高速,傻傻分不清楚。

08年提出的是USB3.0,经过5年后,在13年出现了USB3.1,现在18年了,又过了5年,是不是下一代的标准又要出来了

第九页:

本页描述的是,USB的接口类型,虽然有一些长得有点奇怪,但是也都是USB接口中的一种。在这里混个脸熟,以后见到它们时能知道这是USB的接头。

USB接头分为公头和母头两种,插入的是公头,被插的是母头,

突然想到了一个笑话:

显示器:我好惨啊,整天被人看。

键盘说:我更惨呢,每天被人打。

鼠标:我才惨呢,每天被人摸。

主机:你们有我惨吗?每天被人按肚脐眼!

USB插口:你们知道我每天都在干嘛吗

第十页:

到重点了。这里提到了一个概念,USB Host Controller,叫做USB主控器。

它到底是个什么东西,在wiseGeek上找到了一个解释,感觉还不错,原文是这样说的:

A Universal Serial Bus (USB) host controller is an interface that allows an enabled piece of hardware to interact and communicate with a particular piece of software. The USB connection is an input and output port that comes standard with most computers and a variety of other digital equipment that allows data to be transmitted through a cable or any other form of direct connection. A USB host controller manages the communication between peripheral devices and the computer system. Most modern computers have hi-speed host controllers and many older computers can have a host controller easily installed in an open slot on its motherboard.

http://www./what-is-a-usb-host-controller.htm

概括来讲,就是它是一个管理外设与主机进行通信的东东。

还有一个概念是hub。这个东西很常见了,就是一个1分多的分线器。可以把一个U口分出好多个U口。其中与host controller相关联的叫作roothub(根集线器)。

上图描述的是我的PC上的host controller中的状态。共有5个host controller,有4个uhci和1个ehci。这都代表什么意思,下页说明。

第十一页:

本页列举了一下USB Host Controller的分类。分为OHCI、UHCI、EHCI和xHCI这四种。

OHCI、UHCI都是USB1.1的接口标准,而EHCI是对应USB2.0的接口标准,最新的xHCI是USB3.0的接口标准。

1. OHCI(Open Host Controller Interface)是支持USB1.1的标准,但它不仅仅是针对USB,还支持其他的一些接口,比如它还支持Apple的火线(Firewire,IEEE 1394)接口。与UHCI相比,OHCI的硬件复杂,硬件做的事情更多,所以实现对应的软件驱动的任务,就相对较简单。主要用于非x86的USB,如扩展卡、嵌入式开发板的USB主控。

2. UHCI(Universal Host Controller Interface),是Intel主导的对USB1.0、1.1的接口标准,与OHCI不兼容。UHCI的软件驱动的任务重,需要做得比较复杂,但可以使用较便宜、较简单的硬件的USB控制器。Intel和VIA使用UHCI,而其余的硬件提供商使用OHCI。

3. EHCI(Enhanced Host Controller Interface),是Intel主导的USB2.0的接口标准。EHCI仅提供USB2.0的高速功能,而依靠UHCI或OHCI来提供对全速(full-speed)或低速(low-speed)设备的支持。

4. xHCI(eXtensible Host Controller Interface),是最新最火的USB3.0的接口标准,它在速度、节能、虚拟化等方面都比前面3中有了较大的提高。xHCI支持所有种类速度的USB设备(USB 3.0 SuperSpeed, USB 2.0 Low-, Full-, and High-speed, USB 1.1 Low- and Full-speed)。xHCI的目的是为了替换前面3中(UHCI/OHCI/EHCI)。

最后一页:

这里列举一下我在学习过程中使用的参考书。第一本《Universal Serial Bus Specification》,这就是官方的USB2.0协议。在解析包协议的时候,参考使用,权威文档。书很厚,但是目前只用到了第九章。

《USB开发大全》这本书在偶然在公司发现的,由于看到它的时候比较晚,所以对我的帮助没有其他基本那么显著。不过它最后帮我印证了一些我的猜想和假设。

《Linux那些事儿之我是USB》第一版和第二版。这是本奇书。作者在用侃大山的方式讲解了技术相关的内容。第一版1200页,洋洋洒洒一大堆,其中充满了各种段子,很是风趣。在第二版的时候,进行了裁减,只剩了450页,裁掉了一大半的内容。同时对章节内容进行了重新排版。段子少了,更像一本教科书了。我个人还是比较喜欢第一版。

《圈圈教你玩USB》我是跟着这本书入门的,为此还不包邮买了一块配套开发板。这才是真爱。跟着圈圈的步伐,一步一步地完成了第一个实验,USB鼠标。然后才对USB设备有了具体的概念和理解。

墨迹了这么多,第一次就先到这里吧。下一回的展开中,会涉及到一些开发干货了。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多