写在开始的话
最近因为工作的需要,需要了解USB体系相关知识,以前喜欢记笔记的,长时间不写字了,也懒得去写了,所以就想到了写博客,记录学习USB的过程中的个人理解。至目前(2014年11月),USB3.0规范在嵌入式设备中还没有普及,我只学习USB2.0及以前的规范。所以博客中仅仅记会录USB2.0及以前的规范相关理解,主要以USB2.0体系为主。
从体系开始——体系简介
USB是一种支持热插拔的高速串行总线,使用差分信号来传输数据,到USB2.0规范,它最高支持480Mbps(USB2.0)的传输速率,支持USB2.0的设备称为高速设备。其他还有全速设备(USB1.1),速率为12Mbps,低速设备(USB1.0),速率为1.5Mbps。
USB支持总线供电和自供电两种供电方式,总线供电模式下,设备可以从总线上最大获取500mA的电流。USB接口的供电电压为5V,对于总线供电的设备,在枚举动作完成之前最多可以从总线上获取100mA的电流。
USB被设计成向下兼容的,当低速和全速设备连接到高速主机上时,主机可以通过分离传输来支持他们。这样改总线上传输最高速度等级由最慢的设备决定。设备包括主机,HUB,USB功能设备。
USB体系包括“主机”,“设备”,以及“物理连接”。主机提供USB接口,并提供管理结构的软件。主机可以是PC机,嵌入式设备等。一个USB系统中只能有一个主机。包括USB功能设备和HUB,一个USB系统中可以有127个设备。因为一个USB HOST最多同时支持128个地址,0地址为默认地址,在设备枚举时临时使用。以HOST-ROOT HUB为起点,最多支持七层,也就是说任何一个USB系统最多支持5个HUB级联。
USB系统层次结构图
USB采用轮询广播机制传输数据,所以的传输都是由主机发起。任何时刻USB系统内只允许一个数据包在传输。USB采用“令牌包”——“数据包”——“握手包”的传输机制。在令牌包中指定数据的来源或去向的设备地址和端点(Endpoint),来保证设备对广播的数据包或令牌包做出响应。握手表示传输是否成功。
数据包是USB系统中数据传输的最小单位。数据包由SYNC,数据和EOP三个部分组成。不同的数据包数据格式不同,数据本分都已8位的PID开始,PID指定了数据包的类型,一共有16中类型。其中令牌包指的的是PID为SETUP/IN/OUT的包。
端点(Endpoint)是USB系统中可以进行数据收发的最小单元。端点支持单向或双向的数据传输。设备支持的端点的数量是有限制的,除默认的端点之外低速设备支持两组端点(2个输入,2个输出),高速和全速设备最多支持15组端点。
管道(PIPE)是主机和设备端点之间的数据传输模型,共有两种类型的管道:无格式的流管道(Stream Pipe)和有格式的信息管道(Message Pipe)。任何USB设备一旦上电就存在一个信息管道,即默认的控制管道。USB主机通过默认的控制管道来获取设备的描述、配置、状态,并对设备进行配置。
USB 设备连接到 HOST 时, HOST 必须通过默认的控制管道对其进行枚举,在完成获得其设备描述、进行地址分配、获得其配置描述、进行配置等操作后,设备方可正常使用。USB设备的即插即用特性就是依赖枚举操作的。枚举是 USB 体系中一个很重要的活动,由一系列标准请求组成(若设备属于某个子类,还包含该子类定义的特殊请求)。通过枚举 HOST 可以获得设备的基本描述信息,如支持的 USB 版本、PID、VID、设备分类(Class)、供电方式、最大消耗电流、配置数量 、各种类型端点的数量及传输能力 (最大包长度)。 HOST 根据 PID 和 VID 加载设备驱动程序 ,并对设备进行合适的配置。只有经过枚举的设备才能正常使用 。
USB体系定义了四种传输类型,分别是:控制传输、中断传输、批量传输和同步传输。不同的传输在物理传输上没有太大区别,区别在协议上,不同类型的传输在传输的机制,主机安排传输任务可占用带宽和以及最大数据包的长度有一定的区别。
面说过,USB设备通过管道和HOST进行通信。USB设备在默认的控制管道上可以接受并处理以下几种类型的请求:
标准请求:共有11个标准请求,所有USB设备都应该支持,HOST就是通过这些标准请求来识别和配置设备。
类请求:USB定义了若干个类,如HUB类等,不同的类定义了一些类请求,属于该类的USB设备应该支持该类请求。设备所属于的类可以在设备描述符中找到。
厂商请求:非USB协议定义的,是不同的厂商为了实现一些功能而自定义的。
默认的控制管道是建立在0号端点上的,这种管道即为有格式的信息管道(Message Pipe)。
USB体系中有一种特殊而且重要的设备叫做HUB。USB HUB提供了一种低复杂度和低成本的USB接口扩展的解决方案。USB HUB的上行面向HOST,下行面向设备。在下行接口上,USB HUB具有设备连接检测和设备移除检测的能力,并给下行设备供电。HUB可以单独使能各个端口。不同的端口可以工作在不同的速度等级。USB HUB由HUB重发器(HUB Repeater),转发器(Transaction Translator)和HUB控制器(HUB Controller)构成。HUB重发器是上下行端口的一个协议控制开关,负责高速数据包的重生与分发。HUB控制器负责和HOST通信,HOST是通过HUB类请求和USB HUB通信,获取HUB及下行端口上HUB的描述符,进行HUB和下行端口的监控和管理。转发器提供了高速设备和全速及低速设备通信的转换能力,通过HUB可以在高速HOST和全速及低速设备之间进行匹配。
USB HOST负责USB设备的连接和移除的检测,HOST和设备之间控制流和数据流的管理,传输状态的收集,总线电源的供给。
USB体系就简单介绍这么多,之后根据需要还会对每个模块进行详细的说明介绍。