USB 系统架构(基础知识)
系统结构:每个结构都有一个Host主控制器,下面可接多级Hub,最多可接127个设备。
常见USB主控制器规格:
OHCI:非PC系统的USB芯片
UHCI:大多Intel和Via主板控制器,USB1.1规格
EHCI:兼容OHCI、EHCI,USB2.0规格
USB设备逻辑结构包含4个层次:设备、配置、接口、端点,设备通常有1个或多个配置,配置有1个或多个接口,接口有1个或多个端点。
不同的配置使设备表现出不同的功能组合,配置由多个接口组成,1个接口代表1个基本功能,一个功能复杂的USB设备可以具有多个接口
例:
一个USB播放器带有音频、视屏功能、还有旋钮和按钮功能:
配置1:音频(接口)+旋钮(接口)
配置2:音频(接口)+视频(接口)+按钮(接口)
配置3:视频(接口)+旋钮(接口)
有音频、视屏接口、还有旋钮和按钮接口,均需要一个驱动程序。
USB设备唯一可寻址的部分是端点,类似字符设备、块设备等其他设备的寄存器,位于USB设备或主机上的数据缓冲区,用来存放和发送USB的各种数据,每个USB设备在USB总线中有自己唯一地址。每一个USB设备中一定有一个0号端点,主要对USB设备提供控制的功能,每一个USB设备都有一个0号端点。
例如
USB总线类似高速公路,总线上收发的数据类似于汽车,端点相当于高速公路收费站入口和出口,一个车从一个出口流向一个入口,数据在USB端点之间传送。
USB描述符
在每个USB设备都会有一些配置信息,说明设备的生产商、类型等,这些信息称之为USB描述符,标准的USB描述符有5种:设备描述符,配置描述符,接口描述符,端点描述符,字符串描述符。 1个设备只有一个设备描述符,一个设备描述符可以包含多个配置描述符,依次类推,同设备层次相同。
上图为标准USB设备描述符,从中可知Device Class设备类型,Vender ID,product ID等, 长度为8个字节。
配置描述符
接口描述符
描述符记录了设备的信息,按照上面逻辑划分,设备、配置、接口、端点,4个层次记录设备信息,从配置里访问接口描述符,可知配置有哪几个接口功能共同构成。 每个端口描述符记录端点信息。
分析USB数据包,一次传输(Transfer)由一个或多个事务(Transaction)构成,事务分为In事务,Out事务,Setup事务。
传输(Transfer)有四种类型:中断传输、批量传输、同步传输、控制传输。事务(Transaction)由包(Packet)构成。包分三种类型令牌包(setup),数据包(data),握手包(ACK)。
包由一个或多个域组成。Sync,ADDR,ENOP等
USB设备枚举
通过枚举,主机认识USB设备并为设备分配好资源。在数据传输之前要把准备工作完成,准备的过程叫做枚举。
枚举共有八个步骤:
1.获取设备描述符 2.复位 3.设置地址 4.再次获取设备符 5.获取配置描述符 6.获取接口、端点描述符 7.获取字符串描述符 8.选择设备配置
Linux USB系统架构
从Host开始,最底端为USB主控制器,以上为USB系统软件(包含驱动程序),之上为客户软件,以USB摄像头为例,摄像头驱动程序为系统软件,视频采集应用程序为客户软件。
Device端,依次Bus Interface(硬件),USB 逻辑设备,功能层,每层都有箭头交互, 只有最底层才是真正数据流,其余只是逻辑数据流。
Linux USB架构