导图社区 USB2.0规范
到清朝,超全面! 一张图带你了解USB2.0规范!内容包括它的传输机制、概念、传输类型、数据流模型、USB协议规范、事务传输(Transaction)的流程和USB 框架,本专业和有兴趣的朋友们不要错过。
编辑于2023-03-01 09:09:12 四川省USB2.0规范
传输机制
令牌包
指定数据包的来源和去向的设备地址和端点
指的是PID为 IN/OUT/SETUP的包
数据包
USB总线上数据传输的最小单位,
SYNC
数据
不用包的格式不同,都是PID开头(16种PID)
EOP
握手包
表示传输的成功与否
概念
端点
是USB设备中可以进行数据收发的最小单元,支持单向或双向数据传输, 除默认端点低速设备最多支持2组(2输入,2输出),高速全速最多支持15组
管道
是主机和设备端点之间数据传输的模型
无格式流管道
有格式信息管道
默认控制管道,USB设备一旦上电就存在
主机通过控制管道获取设备描述符、配置描述符、状态,并对其进行配置
默认管道接收并处理三种类型的请求
标准请求
11种,如得到设备描述、设置地址、得到配置描述符等
类(class)请求
usb定义了若干个子类,如hub类、大容量存储器类等
厂商请求
厂商自定义的类请求
Hub
提供了一种低成本、低复杂度的USB接口扩展方法
上行port面相HOST
下行port面相hub或功能设备
下行port上,hub提供设备连接监测和设备移除监测的能力,并给下行port供电
组成
hub重发器(HUB Repeater)
是上行port和下行port协议控制的开关,它负责高速数据包的重生与分发(广播)
转发器(transaction translator)
提供了从高速和全速/低速通讯的转换能力,通过hub可以在高速HOST和全速/低速设备之间进行匹配
hub控制器(HUB controller)
负责和HOST的通信,HOST通过hub类请求和hub控制器通讯,获得关于hub本身和其下行port的描述符,进行下行port和设备的监控与管理
枚举
由一系列标准请求组成(若属于某种子类,包括子类特殊请求)
通过枚举,HOST可以获取设备的基本描述信息(包括USB的版本号,PID,VID,设备分类class,供电方式,最大消耗电流,配置数量,各种类型端点数量,传输能力等)
HOST根据PID,VID加载设备驱动程序,并对设备进行合适的配置
对于总线供电的设备,枚举之前最多从总线获取100mA的电流
传输类型
控制传输
用于设备枚举或某个特定的操作
第一阶段为,从HOST 到 Device 的 SETUP 事务传输,这个阶段指定了此次控制传输的请求类型
第二阶段为,数据阶段,也有些请求没有数据阶段;
第三阶段为,状态阶段,通过一次 IN/OUT 传输表明请求是否成功完成。
一个端点收到/发送了一个长度小于最大包长度的 包,即意味着数据传输结束。
控制传输对于最大包长度有固定的要求 对于高速设备该值为 64Byte; 对于低速设备 该值为 8全速设备可以是 8 或 16 或 32 或 64。
中断传输
用于延迟要求严格、小量数据的可靠传输,如键盘、鼠标等 注: 中断传输也是usb host发起的传输,采用轮循的方式询问 设备是否有数据要传输,若有也传输,否则NAK主机
对于高速/全速/低速端点,最大包长度分别可以达到 1024/64/8 Byte。
全速端点的轮询间隔可以是 1~255mS,低速端点为 10~255mS,高速端 点为(2interval-1)*125uS,其中 interval 取 1 到 16 之间的值。
除高速高带宽中断端点外,一个微帧内仅允许一次中断事务传输,高速高带宽 端点最 多可以在一个微帧内进行三次中断事务传输,传输高达 3072 字节的数据。
批量传输
用于延迟要求宽松,大量数据的可靠传输,如u盘等
低速 USB 设备不支持批量传输, 高速批量端点的最大包长度为 512, 全速批量端点的最大包长度可以为 8、16、32、64。
批量传输在访问 USB 总线时,相对其他传输类型具有最低的优先级
高速的批量端点必须 支持 PING 操作,向主机报告端点的状态,NYET 表示否 定应答,没有准备好接收下一个 数据包,ACK 表示肯定应答,已经准备好接收下一个数据包
等时传输 同步传输
用于可靠性要求不高的实时传输,如摄像头、usb音响等
不支持错误重发机制。只有高速和全速端点 支持同步传输,高速同步端点的最大包长度为 1024,低速的为 1023
数据流模型
功能层
完成功能的描述,定义和行为
设备层
完成从功能级到传输级的转换,把一次功能级的行为转换成一次次基本传输
总线接口层
处理总线上的bit流,完成数据传输的物理层实现和总线管理
应用软件通过usb驱动程序(USBD)发 起 IRQ 请求,请求数据传输。主机控制器驱动 程序(HCD)接收 IRQ 请求,并解析成为 USB 传输和传输事务(Transaction),并对 USB 系统中的所有传输事务进行任务排定
可以认为USB 通讯就是应用软件 Buffer 和设备端点 Buffer 之间的数据交换,交换的通道称为管道。
同一管道只支持一种类型的数据传输。用在一起来对设备进行控制的若干管道称为设备的接口
这就是端点、管道和接口的关系。一个 USB 设备可以包括若干个端点,不同的端点以端点编号和方向区 分。不同端点可以支持不同的传输类型、访问间隔以及最大数据包大小
USB协议规范
USB 采用 little edian 字节顺序,采用 NRZI 编码,若遇到连续的 6 个 1 要求进行为填充,即插入一个0
USB 包都由 SYNC 开始,高速包的 SYNC 宽度为 32bit,全速/低速包的 SYNC 宽度为 8bit
USB 包格式
PID 表征了数据包的类型
分为令牌(Token)、数据(Data)、握手(Handshacke) 以及特殊包 4 大类
令牌包
PID 之后是 7 位的地址和 4 位的端点号。令牌包没有数据域,以 5 位 的 CRC 校验和结束
SOF令牌包
PID后接11位帧号
数据包
PID后接数据域,数据域长度n字节,数据域后是16位CRC校验和结束
握手包
仅有PID域,没有数据域,没有检验和域
包含: ACK,NAK,STALL 以及 NYET 四种
分离传输用到的特殊包
StartSplit 和 Complete-Split 包
在Start-Split 和Complete-Split 包中主要指定了此次分离传输所在的HUB 的地址和下行 端口编号以及端点类型(控制、中断、批量、同步)。以及此次传输中数据包在整个数据 中的位置(第一个包、中间的包、末尾的包)。
数据在 USB 总线上的传输以包为单位,包只能在帧内传输。高速 USB 总线的帧周期为 125uS,全速以及低速 USB 总线的帧周期为 1mS。帧的起始由一个特定的包(SOF 包)表 示,帧尾为 EOF。EOF 不是一个包,而是一种电平状态,EOF 期间不允许有数据传输。
事务传输(Transaction)的流程
1.批量事务传输
一个方框表示一个 Packet,灰色的包表示主机发出的包,白色的包表示 Device 发出的包。批量传输是可靠的传输,需要握手包来表明传输的结果。若数据量比较大,将 采用多次批量事务传输来完成全部数据的传输,传输过程中数据包的 PID 按照 DATA0- DATA1-DATA0-…的方式翻转,以保证发送端和接收端的同步。
USB 允许连续 3 次以下的传输错误,会重试该传输,若成功则将错误次数计数器清 零,否则累加该计数器。超过三次后,HOST 认为该端点功能错误(STALL),放弃该端 点的传输任务。一次批量传输(Transfer)由 1 次到多次批量事务传输(Transaction)组 成。
2.控制传输
阶段1: 建立(setup)
建立阶段,Device 只 能返回ACK 包,或者 不返回任何包
阶段2: 数据(data)
可能没有数据阶段,这个阶段将会通过 一次或多次控制传输事务,完成数据的传输 同样也会采用PID 翻转的机制
阶段3: 状态(status)
通过一次方向与前一次相反的控制事务传输来表明传输的成功与否。 如果成功会返回一个长度为 0 的数据包,否则返回 NAK 或STALL
每个阶段都由一次或多次(数据阶段)事务传输组成(Transaction)
与批量传输相比,在流程上并没有多大区别,区别只在于该事务传 输发生的端点不一样、支持的最大包长度不一样、优先级不 一样等这样一些对用户来说透明 的东西
3.中断传输
中断传输在流程上除不支持 PING 之外,其他的跟批量传输是一样的
区别也仅在于事务传输发生的端点不一样、支持的最大包长度不一样、 优先级 不一样等这样一些对用户来说透明的东西
主机在排定中断传输任务时,会根据对应中断端点描述符中指定的查询间隔发起中断 传输。中断传输有较高的优先级,仅次于同步传输。同样中断传输也采用 PID 翻转的机制 来保证收发端数据同步
4. 同步传输
同步传输是不可靠的传输,所以它没有 握手包,也不支持 PID 翻转。主机在排定事 务传输时,同步传输有最高的优先级
USB 框架
状态转移图
枚举的过程
1. 连接了设备的 HUB 在 HOST 查询其状态改变端点时返回对应的 bitmap,告知 HOST 某个PORT 状态发生了改变
USB2.0规范
传输机制
令牌包
指定数据包的来源和去向的设备地址和端点
指的是PID为 IN/OUT/SETUP的包
数据包
USB总线上数据传输的最小单位,
SYNC
数据
不用包的格式不同,都是PID开头(16种PID)
EOP
握手包
表示传输的成功与否
概念
端点
是USB设备中可以进行数据收发的最小单元,支持单向或双向数据传输, 除默认端点低速设备最多支持2组(2输入,2输出),高速全速最多支持15组
管道
是主机和设备端点之间数据传输的模型
无格式流管道
有格式信息管道
默认控制管道,USB设备一旦上电就存在
主机通过控制管道获取设备描述符、配置描述符、状态,并对其进行配置
默认管道接收并处理三种类型的请求
标准请求
11种,如得到设备描述、设置地址、得到配置描述符等
类(class)请求
usb定义了若干个子类,如hub类、大容量存储器类等
厂商请求
厂商自定义的类请求
Hub
提供了一种低成本、低复杂度的USB接口扩展方法
上行port面相HOST
下行port面相hub或功能设备
下行port上,hub提供设备连接监测和设备移除监测的能力,并给下行port供电
组成
hub重发器(HUB Repeater)
是上行port和下行port协议控制的开关,它负责高速数据包的重生与分发(广播)
转发器(transaction translator)
提供了从高速和全速/低速通讯的转换能力,通过hub可以在高速HOST和全速/低速设备之间进行匹配
hub控制器(HUB controller)
负责和HOST的通信,HOST通过hub类请求和hub控制器通讯,获得关于hub本身和其下行port的描述符,进行下行port和设备的监控与管理
枚举
由一系列标准请求组成(若属于某种子类,包括子类特殊请求)
通过枚举,HOST可以获取设备的基本描述信息(包括USB的版本号,PID,VID,设备分类class,供电方式,最大消耗电流,配置数量,各种类型端点数量,传输能力等)
HOST根据PID,VID加载设备驱动程序,并对设备进行合适的配置
对于总线供电的设备,枚举之前最多从总线获取100mA的电流
传输类型
控制传输
用于设备枚举或某个特定的操作
第一阶段为,从HOST 到 Device 的 SETUP 事务传输,这个阶段指定了此次控制传输的请求类型
第二阶段为,数据阶段,也有些请求没有数据阶段;
第三阶段为,状态阶段,通过一次 IN/OUT 传输表明请求是否成功完成。
一个端点收到/发送了一个长度小于最大包长度的 包,即意味着数据传输结束。
控制传输对于最大包长度有固定的要求 对于高速设备该值为 64Byte; 对于低速设备 该值为 8全速设备可以是 8 或 16 或 32 或 64。
中断传输
用于延迟要求严格、小量数据的可靠传输,如键盘、鼠标等 注: 中断传输也是usb host发起的传输,采用轮循的方式询问 设备是否有数据要传输,若有也传输,否则NAK主机
对于高速/全速/低速端点,最大包长度分别可以达到 1024/64/8 Byte。
全速端点的轮询间隔可以是 1~255mS,低速端点为 10~255mS,高速端 点为(2interval-1)*125uS,其中 interval 取 1 到 16 之间的值。
除高速高带宽中断端点外,一个微帧内仅允许一次中断事务传输,高速高带宽 端点最 多可以在一个微帧内进行三次中断事务传输,传输高达 3072 字节的数据。
批量传输
用于延迟要求宽松,大量数据的可靠传输,如u盘等
低速 USB 设备不支持批量传输, 高速批量端点的最大包长度为 512, 全速批量端点的最大包长度可以为 8、16、32、64。
批量传输在访问 USB 总线时,相对其他传输类型具有最低的优先级
高速的批量端点必须 支持 PING 操作,向主机报告端点的状态,NYET 表示否 定应答,没有准备好接收下一个 数据包,ACK 表示肯定应答,已经准备好接收下一个数据包
等时传输 同步传输
用于可靠性要求不高的实时传输,如摄像头、usb音响等
不支持错误重发机制。只有高速和全速端点 支持同步传输,高速同步端点的最大包长度为 1024,低速的为 1023
数据流模型
功能层
完成功能的描述,定义和行为
设备层
完成从功能级到传输级的转换,把一次功能级的行为转换成一次次基本传输
总线接口层
处理总线上的bit流,完成数据传输的物理层实现和总线管理
应用软件通过usb驱动程序(USBD)发 起 IRQ 请求,请求数据传输。主机控制器驱动 程序(HCD)接收 IRQ 请求,并解析成为 USB 传输和传输事务(Transaction),并对 USB 系统中的所有传输事务进行任务排定
可以认为USB 通讯就是应用软件 Buffer 和设备端点 Buffer 之间的数据交换,交换的通道称为管道。
同一管道只支持一种类型的数据传输。用在一起来对设备进行控制的若干管道称为设备的接口
这就是端点、管道和接口的关系。一个 USB 设备可以包括若干个端点,不同的端点以端点编号和方向区 分。不同端点可以支持不同的传输类型、访问间隔以及最大数据包大小
USB协议规范
USB 采用 little edian 字节顺序,采用 NRZI 编码,若遇到连续的 6 个 1 要求进行为填充,即插入一个0
USB 包都由 SYNC 开始,高速包的 SYNC 宽度为 32bit,全速/低速包的 SYNC 宽度为 8bit
USB 包格式
PID 表征了数据包的类型
分为令牌(Token)、数据(Data)、握手(Handshacke) 以及特殊包 4 大类
令牌包
PID 之后是 7 位的地址和 4 位的端点号。令牌包没有数据域,以 5 位 的 CRC 校验和结束
SOF令牌包
PID后接11位帧号
数据包
PID后接数据域,数据域长度n字节,数据域后是16位CRC校验和结束
握手包
仅有PID域,没有数据域,没有检验和域
包含: ACK,NAK,STALL 以及 NYET 四种
分离传输用到的特殊包
StartSplit 和 Complete-Split 包
在Start-Split 和Complete-Split 包中主要指定了此次分离传输所在的HUB 的地址和下行 端口编号以及端点类型(控制、中断、批量、同步)。以及此次传输中数据包在整个数据 中的位置(第一个包、中间的包、末尾的包)。
数据在 USB 总线上的传输以包为单位,包只能在帧内传输。高速 USB 总线的帧周期为 125uS,全速以及低速 USB 总线的帧周期为 1mS。帧的起始由一个特定的包(SOF 包)表 示,帧尾为 EOF。EOF 不是一个包,而是一种电平状态,EOF 期间不允许有数据传输。
事务传输(Transaction)的流程
1.批量事务传输
一个方框表示一个 Packet,灰色的包表示主机发出的包,白色的包表示 Device 发出的包。批量传输是可靠的传输,需要握手包来表明传输的结果。若数据量比较大,将 采用多次批量事务传输来完成全部数据的传输,传输过程中数据包的 PID 按照 DATA0- DATA1-DATA0-…的方式翻转,以保证发送端和接收端的同步。
USB 允许连续 3 次以下的传输错误,会重试该传输,若成功则将错误次数计数器清 零,否则累加该计数器。超过三次后,HOST 认为该端点功能错误(STALL),放弃该端 点的传输任务。一次批量传输(Transfer)由 1 次到多次批量事务传输(Transaction)组 成。
2.控制传输
阶段1: 建立(setup)
建立阶段,Device 只 能返回ACK 包,或者 不返回任何包
阶段2: 数据(data)
可能没有数据阶段,这个阶段将会通过 一次或多次控制传输事务,完成数据的传输 同样也会采用PID 翻转的机制
阶段3: 状态(status)
通过一次方向与前一次相反的控制事务传输来表明传输的成功与否。 如果成功会返回一个长度为 0 的数据包,否则返回 NAK 或STALL
每个阶段都由一次或多次(数据阶段)事务传输组成(Transaction)
与批量传输相比,在流程上并没有多大区别,区别只在于该事务传 输发生的端点不一样、支持的最大包长度不一样、优先级不 一样等这样一些对用户来说透明 的东西
3.中断传输
中断传输在流程上除不支持 PING 之外,其他的跟批量传输是一样的
区别也仅在于事务传输发生的端点不一样、支持的最大包长度不一样、 优先级 不一样等这样一些对用户来说透明的东西
主机在排定中断传输任务时,会根据对应中断端点描述符中指定的查询间隔发起中断 传输。中断传输有较高的优先级,仅次于同步传输。同样中断传输也采用 PID 翻转的机制 来保证收发端数据同步
4. 同步传输
同步传输是不可靠的传输,所以它没有 握手包,也不支持 PID 翻转。主机在排定事 务传输时,同步传输有最高的优先级
USB 框架
状态转移图
枚举的过程
1. 连接了设备的 HUB 在 HOST 查询其状态改变端点时返回对应的 bitmap,告知 HOST 某个PORT 状态发生了改变