首页 > 代码库 > 基于Linux的USB子系统学习 --- <基础知识与USB协议概述> ing
基于Linux的USB子系统学习 --- <基础知识与USB协议概述> ing
一、参考资料
1.《USB基础知识概论》
http://www.crifan.com/files/doc/docbook/usb_basic/release/html/usb_basic.html
2.《USB in a NutShell》
http://www.beyondlogic.org/usbnutshell/usb1.shtml
3.《USB开发大全(第四版)》
http://download.csdn.net/download/qqqq419276485/7839403
二、USB基础知识
2.1 USB硬件知识
从物理上的逻辑结构来说,USB设备包含了主机Host端和设备Device端。其中,主机Host端,有对应的硬件的USB的主机控制器Host Controller;而设备端,连接的是对应的USB设备。USB的主机控制器有四种类型,分别是OHCI和UHCI,EHCI,和xHCI,它们之间的区别和联系如下表所示。
USB2.0的标准接口引脚定义如下,包含一根电源线,一根地线,两根信号线。USB3.0的接口引脚较多,在此不再展开,可参考文章《USB 2.0 A型、B型、Mini和Micro接口定义及封装》 和《USB 3.0连接器引脚、接口定义及封装尺寸》。值得一提的是,目前多数手机厂商已宣布统一使用Micro USB接口作为手机充电器标准接口。
2.2 USB软件知识
要使USB设备正常工作,除了硬件之外,还需要软件的支持。对于USB设备端来说,内部是需要有对应的设备端驱动,称其为固件Firmware,它实现了设备端USB所要做的事情,主要是相应一些标准的请求,完成对应的数据读取和写入等。对应的,在主机Host端,也需要对应的驱动,此部分驱动,不论是Linux下,还是Windows下,都已经实现了常见的驱动了,所以一般来说,很少需要驱动开发者再去写相关的驱动。
在设备驱动开发阶段或者USB出现问题,需要调试的时候,往往就需要一些USB调试工具了。一般来说,都包含了对应的USB硬件测试工具,加上对应的软件工具,去捕获对应USB总线上的数据,即所谓的USB抓包,然后再去分析抓取出来的数据,是否是期望的,是否符合USB协议的规范定义。另外,当然也有一些USB开发相关的工具,具体工具可在网上查询。
三、USB协议概览
关于USB 2.0和USB 3.0等USB的协议规范,可以去官网下载:
http://www.usb.org/developers/docs/
USB协议的文档页数很多,没必要看完整个USB标准。此处,就来简单以USB 2.0规范为例,分析一下,具体其都主要包含哪些内容。你会发现,其实和USB协议本身相关的内容,相对则不会那么多,大概只有97页左右的内容,是我们所要关心的。
附录1:USB 2.0标准协议规范笔记
第4章 架构概述
本章显示了通用串行总线(Universal Serial Bus, USB)架构和重要概念的概述。USB是一种有线总线,支持主机计算机和大范围同时可访问的外设之间数据交互。附属的外设通过一种主机调度和基于令牌的协议共享USB带宽。总线允许外设在主机和其它外设在操作时依附,配置,使用和分离。
4.1 USB系统描述
USB系统被描述为三种定义域:
> USB互连
> USB设备
> USB主机
USB互连是USB设备和主机之间连接与通信的方式。包括下列部分:
> 总线拓扑:USB设备与主机之间的连接模型。
> 内层联系:In terms of a capability stack, the USB tasks that are performed at each layer in the system.
> 数据流模型:系统中数据通过USB在产生者与消费者之间移动的方式。
> USB调度:USB提供了共享的内部连接。访问内部连接是被调度的,为的是支持同步数据传输并消除仲裁开销。
4.1.1 总线拓扑
USB物理层内部连接是一种分层的星状拓扑。USB hub位于每个星的中心。图4-1阐述了USB的拓扑。
第5章 USB数据流模型
5.1 实现者视角
图5-2显示了一个较深的USB视图,特别的,有四个重点实现区域:
> USB物理设备:USB线尾端的一小块硬件,执行一些有用的终端用户功能。
> 客户端软件:在主机端执行的软件,响应USB设备。这个客户端软件典型地由操作系统提供或伴随USB设备提供。
> USB系统软件:在特定操作系统中支持USB的软件。USB系统软件典型地由操作系统提供,独立于特定的USB设备或客户端软件。
> USB主机控制器(主机端总线接口):使得USB设备可以被连接到主机的硬件和软件。
物理视角的USB通信如章节6、7和8中所描述,与章节9和10所讲述的逻辑视角通信有关联。本章讲述这些影响USB实现者的关键概念,应该被所有人阅读。
为了描述和管理USB通信,下列概念是重要的:
> 总线拓扑:5.2讲述了USB主要的物理和逻辑组件,以及它们如何相互关连。
> 通信流模型:5.3到5.8讲述了主机与设备间通过USB是如何通信的,定义了四种USB传输类型。
> 总线访问管理:5.11讲述了主机内的总线访问是如何被管理的,以支持USB设备大范围的通信流。
> 等时传输的特殊考虑:5.12讲述了USB对于需要等时数据传输设备的特殊性。对于非等时传输的设备实现着不需要阅读5.12。
5.2 总线拓扑
USB拓扑有四个主要部分:
> 主机与设备:USB系统的主要组件
> 物理拓扑:USB单元如何连接
> 逻辑拓扑:多种USB单元的角色和职责,从主机和设备视角来看USB如何呈现
> 客户端软件到功能的关联:客户端软件同与它相关的USB设备上的功能接口之间的如何看待彼此
5.2.1 USB主机
USB逻辑组成如图5-3所示,包含下列部分:
> USB主机控制器
> 集成的USB系统软件(USB驱动,主机控制器驱动和主机软件)
> 客户端
5.2.2 USB设备
USB物理设备的逻辑构成如图5-4所示,包含下列部分:
> USB总线接口
> USB逻辑设备
> 功能
为帮助主机识别和配置USB设备,每个设备携带并报告配置相关信息。所报告信息的一部分对于所有逻辑设备是相同的。其它信息与设备提供的功能相关。这种信息的详细格式非常多,取决于设备的设备类。USB设备的完整讨论参考章节9。
5.2.3 物理总线拓扑
USB上的设备物理上通过一个分层的星状拓扑连接,如图5-5中所阐述。USB依附点由一种被称为集线器(hub)的特殊USB设备类所提供。集线器提供的附加依附点被称为端口(port)。主机中嵌入的集线器被称为根集线器(root hub)。主机通过根集线器提供一个或多个依附点。提供给主机附加功能的USB设备被称为功能(function)。为了防止循环依附,分层的顺序被施加在USB的星形拓扑。
5.2.4 逻辑总线拓扑
当设备物理上依附到分层、星状拓扑的USB,主机与每个逻辑设备通信有如它是被直接连接到根端口的,如图5-7所示,对应于图5-5中所示的物理拓扑。集线器也是逻辑设备,但为了简化图没有在图5-7中显示。尽管绝大多数主机/逻辑设备活动使用这一逻辑视图,主机维护一个物理拓扑来支持移除集线器时的处理。当一个集线器被移除,所有依附于该集线器的设备必须从主机视角的逻辑拓扑中被移除。
5.2.5 客户端软件到功能的关联
尽管USB的物理和逻辑拓扑反映了总线的共享本性,但是客户端软件(CSw)操作USB功能接口被呈现为它只处理它感兴趣的接口。图5-8阐述了设备设计者视角的客户端软件与USB功能之间的关系。
5.3 USB通信流
USB提供了主机上软件与它的USB功能之间的通信服务。功能可以有针对不同的客户端到功能交互的不同的通信流需求。USB提供了更好的总体总线利用率,通过允许不同的通信流到USB功能的分隔。每个通信流利用一些访问的总线来完成客户端与功能之间的通信。每个通信流在设备上的一个端点被终止。设备端点被用于识别通信流。
图5-9显示了图5-2的一个更为详细的视图。图5-2所支持的逻辑设备和功能层通信流的实际通信流的完整定义。这些实际通信流跨越几个接口边界。两个主机端的软件接口如下:
> 主机控制器驱动(Host Controller Driver, HCD):USB主机控制器与USB系统软件之间的软件接口。这个接口允许一定范围内的主机控制器实现,而不需要所有的主机软件依赖于任何特定实现。一个USB驱动可以支持不同的主机控制器,而不需要主机控制器实现的特定知识。主机控制器是实现者提供一个HCD实现来支持主机控制器。
> USB驱动(USB Driver, USBD):USB系统软件与客户端软件之间的接口。这个接口提供给客户端方便的函数来操作USB设备。
USB逻辑设备对于USB系统来讲是端点的集合。端点分组成端点集来实现一个接口。接口被视为功能。USB系统软件使用默认控制管道来管理设备。客户端软件使用管道束(与一个端点集相关联)操作一个接口。客户端软件请求数据通过USB在主机上的缓存和USB设备上的端点之间移动。主机控制器(或者是USB设备,取决于传输方向)打包数据通过USB移动数据。
图5-10阐述了端点与主机端内存缓冲之间如何通过管道传递通信流的。
基于Linux的USB子系统学习 --- <基础知识与USB协议概述> ing