logo资料库

USB2.0协议中文版.pdf

第1页 / 共17页
第2页 / 共17页
第3页 / 共17页
第4页 / 共17页
第5页 / 共17页
第6页 / 共17页
第7页 / 共17页
第8页 / 共17页
资料共17页,剩余部分请下载后查看
USB 2.0 规范初探 USB 2.0 规范 USB 体系简介 体系简介 体系简介体系简介 USB 是一种支持热插拔的高速串行传输总线,它使用差分信号来传输数据,最高速度 可达 480Mb/S。USB 支持“总线供电”和“自供电”两种供电模式。在总线供电模式下, 设备最多可以获得 500mA 的电流。USB2.0 被设计成为向下兼容的模式,当有全速(USB 1.1) 或者低速(USB 1.0)设备连接到高速(USB 2.0)主机时,主机可以通过分离传输来支持它 们。一条 USB 总线上,可达到的最高传输速度等级由该总线上最慢的“设备”决定,该设 备包括主机、HUB 以及 USB 功能设备。 USB 体系包括“主机”、“设备”以及“物理连接”三个部分。其中主机是一个提供 USB 接口及接口管理能力的硬件、软件及固件的复合体,可以是 PC,也可以是 OTG 设备。一个 USB 系统中仅有一个 USB 主机;设备包括 USB 功能设备和 USB HUB,最多支持 127 个设 备;物理连接即指的是 USB 的传输线。在 USB 2.0 系统中,要求使用屏蔽的双绞线。 一个 USB HOST 最多可以同时支持 128 个地址,地址 0 作为默认地址,只在设备枚举期间临时使 用,而不能被分配给任何一个设备,因此一个 USB HOST 最多可以同时支持 127 个地址,如果一个设 备只占用一个地址,那么可最多支持 127 个 USB 设备。在实际的 USB 体系中,如果要连接 127 个 USB 设备,必须要使用 USB HUB,而 USB HUB 也是需要占用地址的,所以实际可支持的 USB 功能设备 的数量将小于 127。 USB 体系采用分层的星型拓扑来连接所有 USB 设备,如下图所示: 以 HOST-ROOT HUB 为 起 点 , 最 多 支 持 7 层 (Tier),也就是说任何一个 USB 系统中最多可以允许 5 个 USB HUB 级联。一个复 合设备(Compound Device) 将 同 时 占 据 两 层 或 更 多 的 层。 ROOT HUB 是一个特殊的 USB HUB,它集成在主机控制器里,不占用地址。ROOT HUB 不但 实现了普通 USB HUB 的功能,还包括其他一些功能,具体在增强型主机控制器的规范中有详细的介 绍。 “复合设备(Compound Device)”可以占用多个地址。所谓复合设备其实就是把多个功能设备 通过内置的 USB HUB 组合而成的设备,比如带录音话筒的 USB 摄像头等。 USB 采用轮询的广播机制 轮询的广播机制传输数据,所有的传输都由主机发起,任何时刻整个 USB 体 轮询的广播机制 轮询的广播机制 By Hevry Email: hevry.jon@hotmail.com Page 1 of 17
USB 2.0 规范初探 系内仅允许一个数据包的传输,即不同物理传输线上看到的数据包都是同一被广播的数据 包。 USB 采用“令牌包”-“数据包”-“握手包”的传输机制,在令牌包中指定数据包去向 或者来源的设备地址和端点(Endpoint),从而保证了只有一个设备对被广播的数据包/令牌 包作出响应。握手包表示了传输的成功与否。 数据包:USB 总线上数据传输的最小单位,包括 SYNC、数据及 EOP 三个部分。其中数据的格 式针对不同的包有不同的格式。但都以 8 位的 PID 开始。PID 指定了数据包的类型(共 16 种)。令牌 包即指 PID 为 IN/OUT/SETUP 的包。 端点(Endpoint):是 USB 设备中的可以进行数据收发的最小单元,支持单向或者双向的数据传 输。设备支持端点的数量是有限制的,除默认端点外低速设备最多支持 2 组端点(2 个输入,2 个输 出),高速和全速设备最多支持 15 组端点。 管道(Pipe)是主机和设备端点之间数据传输的模型,共有两种类型的管道:无格式的 流管道(Stream Pipe)和有格式的信息管道(Message Pipe)。任何 USB 设备一旦上电就存 在一个信息管道,即默认的控制管道 默认的控制管道,USB 主机通过该管道来获取设备的描述、配置、状 默认的控制管道 默认的控制管道 态,并对设备进行配置。 USB 设备连接到 HOST 时,HOST 必须通过默认的控制管道对其进行枚举枚举枚举枚举,完成获得 其设备描述、进行地址分配、获得其配置描述、进行配置等操作方可正常使用。USB 设备 的即插即用特性即依赖于此。 枚举:是 USB 体系中一个很重要的活动,由一系列标准请求组成(若设备属于某个子类,还包含 该子类定义的特殊请求)。通过枚举 HOST 可以获得设备的基本描述信息,如支持的 USB 版本、PID、 VID、设备分类(Class)、供电方式、最大消耗电流、配置数量、各种类型端点的数量及传输能力(最 大包长度)。HOST 根据 PID 和 VID 加载设备驱动程序,并对设备进行合适的配置。只有经过枚举的 设备才能正常使用。对于总线供电设备,在枚举完成前最多可从总线获取 100mA 的电流。 USB 体系定义了四种类型的传输,它们是: 控制传输:主要用于在设备连接时对设备进行枚举以及其他因设备而已的特定操作。 中断传输:用于对延迟要求严格、小量数据的可靠传输,如键盘、游戏手柄等。 批量传输:用于对延迟要求宽松,大量数据的可靠传输,如 U 盘等。 同步传输:用于对可靠性要求不高的实时数据传输,如摄像头、USB 音响等。 注意:中断传输并不意味这传输过程中,设备会先中断HOST,继而通知HOST 启动传输。中断传输 也是HOST 发起的传输,采用轮询的方式询问设备是否有数据发送,若有则传输数据,否则NAK 主 机。 不同的传输类型在物理上并没有太大的区别,只是在传输机制、主机安排传输任务、可 占用 USB 带宽的限制以及最大包长度有一定的差异。 USB 设备通过管道和 HOST 通信,在默认控制管道上接受并处理以下三种类型的请求: 1. 标准请求 标准请求::::一共有 11 个标准请求,如得到设备描述、设置地址、得到配置描述等。 标准请求标准请求 所有 USB 设备均应支持这些请求。HOST 通过标准请求来识别和配置设备。 By Hevry Email: hevry.jon@hotmail.com Page 2 of 17
USB 2.0 规范初探 2. 类类类类((((class))))请求请求请求请求::::USB 还定义了若干个子类,如 HUB 类、大容量存储器类等。不 同的类又定义了若干类请求,该类设备应该支持这些类请求。设备所属类在设备描 述符中可以得到。 3. 厂商请求 厂商请求::::这部分请求并不是 USB 规范定义的,而是设备生产商为了实现一定的 厂商请求厂商请求 功能而自己定义的请求。 USB HUB 提供了一种低成本、低复杂度的 USB 接口扩展方法。HUB 的上行 PORT 面 向 HOST,下行 PORT 面向设备(HUB 或功能设备)。在下行 PORT 上,HUB 提供了设备 连接检测和设备移除检测的能力,并给各下行 PORT 供电。HUB 可以单独使能各下行 PORT, 不同 PORT 可以工作在不同的速度等级(高速/全速/低速)。 HUB 由 HUB 重发器(HUB Repeater)、转发器(Transaction Translator)以及 HUB 控制 器(HUB Controller)三部分组成。HUB Repeater 是上行 PORT 和下行 PORT 之间的一个协 议控制的开关,它负责高速数据包的重生与分发 重生与分发。HUB 控制器负责和 HOST 的通信,HOST 重生与分发 重生与分发 通过 HUB 类请求和 HUB 控制器通讯,获得关于 HUB 本身和下行 PORT 的 HUB 描述符, 进行 HUB 和下行 PORT 的监控和管理。转发器提供了从高速和全速/低速通讯的转换能力, 通过 HUB 可以在高速 HOST 和全速/低速设备之间进行匹配。HUB 在硬件上支持 Reset、 Resume、Suspend。 重生与分发:指的是 HUB Repeater 需要识别从上行(下行)PORT 上接收到的数据,并分发到 下行(上行)PORT。所谓分发主要是指从上行 PORT 接收到的数据包需要向所有使能的高速下行 PORT 发送,即广播。 USB HOST 在 USB 体系中负责设备连接/移除的检测、HOST 和设备之间控制流和数据 流的管理、传输状态的收集、总线电源的供给。 USB 体系在实现时采用分层的结构,如下图所示: USB 数据流模型 数据流模型 数据流模型 数据流模型 在 HSOT 端,应用软件(Client SW)不能直接访问 USB 总线,而 必须通过 USB 系统软件和 USB 主机 控制器来访问 USB 总线,在 USB 总线上和 USB 设备进行通讯。从逻 辑上可以分为功能层、设备层和总 线接口层三个层次。其中功能层完 成功能级的描述、定义和行为;设 备级则完成从功能级到传输级的转 换,把一次功能级的行为转换为一 次一次的基本传输;USB 总线接口 层则处理总线上的 Bit 流,完成数据 传输的物理层实现和总线管理。途 中黑色箭头代表真实的数据流,灰 色箭头代表逻辑上的通讯。 By Hevry Email: hevry.jon@hotmail.com Page 3 of 17
USB 2.0 规范初探 物理上,USB 设备通过分层的星型总线连接到 HOST,但在逻辑上 HUB 是透明的,各 USB 设备和 HOST 直接连接,和 HOST 上的应用软件形成一对一的关系。如下图所示: 各应用软件-功能设备对之间的通讯相互独 立,应用软件通过 USB 设备驱动程序(USBD)发 起 IRQ 请求,请求数据传输。主机控制器驱动 程序(HCD)接收 IRQ 请求,并解析成为 USB 传输和传输事务(Transaction),并对 USB 系统 中的所有传输事务进行任务排定(因为可能同时 有多个应用软件发起 IRQ 请求)。主机控制器 (Host Controller)执行排定的传输任务,在同 一条共享的 USB 总线上进行数据包的传输。如 下图所示。 USB 系统中数据的传输,宏观的看来是在 HOST 和 USB 功能设备之间进行;微观的看是 在应用软件的 Buffer 和 USB 功能设备的端点之 间进行。一般来说端点都有 Buffer,可以认为 USB 通讯就是应用软件 Buffer 和设备端点 Buffer 之间的数据交换,交换的通道称为管道。应用软 件通过和设备之间的数据交换来完成设备的控 制和数据传输。通常需要多个管道来完成数据交 换,因为同一管道只支持一种类型的数据传输。 用在一起来对设备进行控制的若干管道称为设 备的接口,这就是端点端点端点端点、、、、管道和接 管道和接口的关口的关口的关口的关系。 管道和接管道和接 一个 USB 设备可以包括若干个端点,不同 的端点以端点编号 端点编号和方向方向方向方向区分。不同端点可以支 端点编号端点编号 持不同的传输类型、访问间隔以及最大数据包大 小。除端点 0 外,所有的端点只支持一个方向的 数据传输。端点 0 是一个特殊的端点,它支持双 向的控制传输。管道和端点关联,和关联的端点 有相同的属性,如支持的传输类型、最大包长度、 传输方向等。 四种传输类型 1. 控制传输: 控制传输是一种可靠的双向双向双向双向传输,一次控制传输可分为三个阶段。第一阶段为 从 HOST 到 Device 的 SETUP 事务传输,这个阶段指定了此次控制传输的请求类型; 第二阶段为数据阶段,也有些请求没有数据阶段;第三阶段为状态阶段,通过一次 IN/OUT 传输表明请求是否成功完成。 控制传输通过控制管道在应用软件和 Device 的控制端点之间进行,控制传输 过程中传输的数据是有格式定义的,USB 设备或主机可根据格式定义解析获得的 数据含义。其他三种传输类型都没有格式定义。 By Hevry Email: hevry.jon@hotmail.com Page 4 of 17
USB 2.0 规范初探 控制传输对于最大包长度有固定的要求。对于高速设备该值为 64Byte;对于 低速设备该值为 8;全速设备可以是 8 或 16 或 32 或 64。 最大包长度 最大包长度表征了一个端点单次接收/发送数据的能力,实际上反应的是该端点对应的 最大包长度 最大包长度 Buffer 的大小。Buffer 越大,单次可接收/发送的数据包越大,反之亦反。当通过一个端点 进行数据传输时,若数据的大小超过该端点的最大包长度时,需要将数据分成若干个数据 包传输,并且要求除最后一个包外,所有的包长度均等于该最大包长度。这也就是说如果 一个端点收到/发送了一个长度小于最大包长度的包,即意味着数据传输结束。 控制传输在访问总线时也受到一些限制,如:  高速端点的控制传输不能占用超过 20%的微帧,全速和低速的则不能超过 10%。  在一帧内如果有多余的未用时间,并且没有同步和中断传输,可以用来进行控 制传输。 2. 中断传输: 中断传输是一种轮询的传输方式,是一种单向单向单向单向的传输,HOST 通过固定的间隔 对中断端点进行查询,若有数据传输或可以接收数据则返回数据或发送数据,否则 返回 NAK,表示尚未准备好。 中断传输的延迟有保证,但并非实时传输,它是一种延迟有限的可靠传输,支 持错误重传。 对于高速/全速/低速端点,最大包长度分别可以达到 1024/64/8 Bytes。 高速中断传输不得占用超过 80%的微帧时间,全速和低速不得超过 90%。 中断端点的轮询间隔由在端点描述符中定义,全速端点的轮询间隔可以是 1~255mS,低速端点为 10~255mS,高速端点为(2interval-1)*125uS,其中 interval 取 1 到 16 之间的值。 除高速高带宽中断端点外,一个微帧内仅允许一次中断事务传输,高速高带宽 端点最多可以在一个微帧内进行三次中断事务传输,传输高达 3072 字节的数据。 所谓单向传输,并不是说该传输只支持一个方向的传输,而是指在某个端点上该传输 仅支持一个方向,或输出,或输入。如果需要在两个方向上进行某种单向传输,需要占用 两个端点,分别配置成不同的方向,可以拥有相同的端点编号。 3. 批量传输: 批量传输是一种可靠的单向传输,但延迟没有保证,它尽量利用可以利用的带 宽来完成传输,适合数据量比较大的传输。 低速 USB 设备不支持批量传输,高速批量端点的最大包长度为 512,全速批 量端点的最大包长度可以为 8、16、32、64。 批量传输在访问 USB 总线时,相对其他传输类型具有最低的优先级,USB HOST 总是优先安排其他类型的传输,当总线带宽有富余时才安排批量传输。 高速的批量端点必须支持 PING 操作,向主机报告端点的状态,NYET 表示否 定应答,没有准备好接收下一个数据包,ACK 表示肯定应答,已经准备好接收下 By Hevry Email: hevry.jon@hotmail.com Page 5 of 17
USB 2.0 规范初探 一个数据包。 4. 同步传输: 同步传输是一种实时的、不可靠的传输,不支持错误重发机制。只有高速和全 速端点支持同步传输,高速同步端点的最大包长度为 1024,低速的为 1023。 除高速高带宽同步端点外,一个微帧内仅允许一次同步事务传输,高速高带宽 端点最多可以在一个微帧内进行三次同步事务传输,传输高达 3072 字节的数据。 全速同步传输不得占用超过 80%的帧时间,高速同步传输不得占用超过 90% 的微帧时间。 同步端点的访问也和中断端点一样,有固定的时间间隔限制。 在主机控制器和 USB HUB 之间还有另外一种传输——分离传输(Split Transaction), 它仅在主机控制器和 HUB 之间执行,通过分离传输,可以允许全速/低速设备连接到高速主 机。分离传输对于 USB 设备来说是透明的、不可见的。 分离传输:顾名思义就是把一次完整的事务传输分成两个事务传输来完成。其出发点是高速传输和全 速/低速传输的速度不相等,如果使用一次完整的事务来传输,势必会造成比较长的等待时间,从而 降低了高速 USB 总线的利用率。通过将一次传输分成两此,将令牌(和数据)的传输与响应数据(和 握手)的传输分开,这样就可以在中间插入其他高速传输,从而提高总线的利用率。 USB 物理规范和电气规范 物理规范和电气规范 物理规范和电气规范 物理规范和电气规范 此节略去,请参考 USB2.0 规范英文版 USB 协议层协议层协议层协议层规范规范规范规范 USB 采用 little edian 字节顺序,在总线上先传输一个字节的最低有效位,最后传输最高 有效位,采用 NRZI 编码,若遇到连续的 6 个 1 要求进行为填充,即插入一个 0。 所有的 USB 包都由 SYNC 开始,高速包的 SYNC 宽度为 32bit,全速/低速包的 SYNC 段度为 8bit。实际接收到的 SYNC 产度由于 USB HUB 的关系,可能会小于该值。 USB 数据包的格式 PID 表征了数据包的类型,分为令牌(Token)、数据(Data)、握手(Handshacke)以 及特殊包 4 大类,共 16 种类型的 PID。具体定义见英文协议第 196 页。 对于令牌包来说,PID 之后是 7 位的地址和 4 位的端点号。令牌包没有数据域,以 5 位 的 CRC 校验和结束。SOF 是一类特殊的令牌包,PID 后跟的是 11 位的帧编号。 对于数据包来说,PID 之后直接跟数据域,数据域的长度为 N 字节,数据域后以 16 位 By Hevry Email: hevry.jon@hotmail.com Page 6 of 17
USB 2.0 规范初探 的 CRC 校验和结束。 握手包仅有 PID 域,没有数据也没有校验和。 分离传输会用到一类特殊的包,Start-Split 和 Complete-Split 包,格式如下: 在 Start-Split 和 Complete-Split 包中主要指定了此次分离传输所在的 HUB 的地址和下行 端口编号以及端点类型(控制、中断、批量、同步)。以及此次传输中数据包在整个数据中 的位置(第一个包、中间的包、末尾的包)。 握手包握手包握手包握手包包括 ACK,NAK,STALL 以及 NYET 四种,其中 ACK 表示肯定的应答,成功 的数据传输;NAK 表示否定的应答,失败的数据传输,要求重新传输;STALL 表示功能错 误或端点被设置了 STALL 属性;NYET 表示尚未准备好,要求等待。 数据在 USB 总线上的传输以包为单位,包只能在帧内传输。高速 USB 总线的帧周期为 125uS,全速以及低速 USB 总线的帧周期为 1mS。帧的起始由一个特定的包(SOF 包)表 示,帧尾为 EOF。EOF 不是一个包,而是一种电平状态,EOF 期间不允许有数据传输。 注意:虽然高速USB 总线和全速/低速USB 总线的帧周期不一样,当时SOF 包中帧编号的增加速度是 一样的,因为在高速USB 系统中,SOF 包中帧编号实际上取得是计数器的高11 位,最低三位作为微 帧编号没有使用,因此其帧编号的增加周期也为1mS。 事务传输 事务传输((((Transaction))))的流程的流程的流程的流程 事务传输事务传输 1. 批量事务传输 图中一个方框表示一个 Packet,灰色的包表示主机发出的包,白色的包表示 Device 发出的包。批量传输是可靠的传输,需要握手包来表明传输的结果。若数据 量比较大,将采用多次批量事务传输来完成全部数据的传输,传输过程中数据包的 PID 按照 DATA0-DATA1-DATA0-…的方式翻转,以保证发送端和接收端的同步。 By Hevry Email: hevry.jon@hotmail.com Page 7 of 17
USB 2.0 规范初探 USB 允许连续 3 次以下的传输错误,会重试该传输,若成功则将错误次数计数器清 零,否则累加该计数器。超过三次后,HOST 认为该端点功能错误(STALL),放 弃该端点的传输任务。 一次批量传输(Transfer)由 1 次到多次批量事务传输(Transaction)组成。 翻转同步:发送端按照 DATA0-DATA1-DATA0-…的顺序发送数据包,只有成功的事务传输 才会导致 PID 翻转,也就是说发送段只有在接收到 ACK 后才会翻转 PID,发送下一个数据 包,否则会重试本次事务传输。同样,若在接收端发现接收到到的数据包不是按照此顺序 翻转的,比如连续收到两个 DATA0,那么接收端认为第二个 DATA0 是前一个 DATA0 的 重传。 2. 控制传输(Transaction) 一次控制传输分为三(或两个)个阶段:建立(Setup)、数据(DATA)(可能 没有)以及状态(Status)。每个阶段都由一次或多次(数据阶段)事务传输组成 (Transaction)。 左图为建立阶段的事务传输流程图。可以看出: 与批量传输相比,在流程上并没有多大区别,区别只 在于该事务传输发生的端点不一样、支持的最大包长 度不一样、优先级不一样等这样一些对用户来说透明 的东西。 建立阶段过后,可能会有数据阶段,这个阶段将 会通过一次或多次控制传输事务,完成数据的传输。 同样也会采用 PID 翻转的机制。建立阶段,Device 只 能返回 ACK 包,或者不返回任何包。 最后是状态阶段,通过一次方向与前一次相反的 控制事务传输来表明传输的成功与否。如果成功会返回一个长度为 0 的数据包,否 则返回 NAK 或 STALL。下图为整个控制传输的示意图: 3. 中断传输 中断传输在流程上除不支持 PING 之外,其他的跟批量传输是一样的。他们之 间的区别也仅在于事务传输发生的端点不一样、支持的最大包长度不一样、优先级 不一样等这样一些对用户来说透明的东西。 主机在排定中断传输任务时,会根据对应中断端点描述符中指定的查询间隔发 By Hevry Email: hevry.jon@hotmail.com Page 8 of 17
分享到:
收藏