目录
2.4 同步传输(Isochronous Transfer)
USB 通信由一系列帧构成(从时间角度来看);在一帧数据内,可以划分为4种传输方式(从功能场景角度来看),每种传输方式都有各自的特点。再往下细分,每种传输又由3种基本的事务组成,一个事务由若干个数据包组成,包则是USB总线上数据传输的最小单位,所有的数据都是打包后再发送出去的。
1. USB帧和微帧
USB2.0协议中,帧和微帧属于时间上的概念。
由于USB总线上可能会存在多个从机,如果同一时间内,有多个从机同时要使用总线的话,会产生冲突,所以USB协议规定了帧/微帧的时间概念,USB主机每隔1帧/1微帧(即每1ms/125us),会将总线的使用权指定给某个USB从机,USB从机在这帧/微帧的时间内,可以通过总线进行数据传输的操作,如果没有数据传输操作需要执行,USB总线就会进入空闲状态,等这帧/微帧过后,USB总线的使用权会交给其他USB从机,周而复始。帧/微帧的间隔足够小,数据传输的操作就会频繁的在多个USB从机之间切换,看起来就好像是同时在进行数据传输一样。
USB低速模式,全速模式下,每个帧的长度为1ms;而高速模式下,每个微帧的长度为125us,即1帧=8微帧,帧的时间长度是固定的,如下图所示。
每一帧都有一个帧开始(SOF),随后才是数据传输,如下图所示。
2. USB传输类型(Transfer)
为了满足不同的应用场景需求,USB协议定义了4种数据传输方式,它们在数据格式、传输方向、数据包容量限制、总线访问限制等方面有着各自不同的特征。这4种传输分别是:
- 控制传输(Control Transfer)、
- 中断传输(Interrupt Transfer)、
- 批量传输(Bulk Transfer)、
- 同步传输(Isochronous Transfer)。
2.1 控制传输(Control Transfer)
控制传输是 USB 最基本也是最重要的传输,所有的设备都会支持这种传输模式。 设备的配置,命令,状态都通过控制传输传递。控制传输主要有2个作用,一是USB主机对设备进行初始化,设备在正常工作之前必须先进行配置,比如分配设备地址,读取设备的各种描述符,配置管道、带宽等;另一个是在设备的工作过程中,主机希望能及时地获取设备的当前状态,或者设备出现问题时希望主机能及时做出补救措施,或者主机根据某些需求改变设备的当前配置等工作。
控制传输有如下特点:
- 控制传输是一种可靠的双向传输,即可以接收数据包又可以发送数据包,相应的控制传输的管道也是双向的;
- 控制传输对于最大包长度有固定的要求,对于高速设备该值为64Byte;对于低速设备该值为8 Byte;全速设备可以是8或16或32或64 Byte;
- 所有的设备必须有至少一个控制端点,且端点号为0;
- 支持错误检测和数据重传。
2.2 中断传输(Interrupt Transfer)
这里的中断传输不是传统意义上的中断传输,而是指一种轮询的传输方式,HOST通过固定的间隔对中断端点进行查询,若有数据传输或可以接收数据则返回数据或发送数据,否则返回NAK,表示尚未准备好。中断传输对延迟要求严格,只发送或接收少量的数据。
中断传输有一个确定的传输周期,每隔一定的周期要求传输一次(但是并不是要求必须按固定周期发送一次数据,它的只会保证轮询的间隔小于我们设置的间隔)。系统在对进行中断传输的设备进行配置时,只要当前总线上用于周期性传输的空闲带宽能够容纳此设备,设备就可以工作。使用这种传输方式的设备有键盘、鼠标、游戏杆等。
中断传输有如下特点:
- 中断传输的最大服务周期(单位:毫秒)必须得到保证;
- 是一种可靠的数据传输方式;
- 由于错误而引起的数据重传将在下一服务周期进行;
- 数据的结尾也是通过与包的最大传输字节数比较来确定;
- 对于高速/全速/低速端点,最大包长度分别可以达到 1024/64/8 Bytes;
2.3 批量传输(Bulk Transfer)
批量传输是一种传输大量数据的可靠传输,对延迟要求宽松,常见的如打印机、扫描仪、硬盘、U盘等设备的数据传输都有这种特点。当一帧内的总线时间(带宽)有空余时,USB主机就会将剩余的时间(带宽)分配给等待使用总线的批量传输的USB设备,也就是说,批量传输可以利用任何可获得的总线带宽来进行数据传输。
批量传输有以下特点:
- 可以动态地获得总线带宽;
- 是一种可靠的数据传输方式,如果传送失败,可进行重发;
- 有确认的数据传输,但不保证传输的带宽和延迟;
- 只有当获得空闲的带宽时,批量传输才会发生。如果USB总线有较多的空闲带宽,则批量传输会较频繁地进行,如果空闲带宽较少,可能有很长时间没有批量传输发生;
- 低速 USB 设备不支持批量传输,高速批量端点的最大包长度为 512byte,全速批量端点的最大包长度可以为 8、16、32、64 byte;
- 批量传输在访问 USB 总线时,相对其他传输类型具有最低的优先级,USB HOST总是优先安排其他类型的传输,当总线带宽有富余时才安排批量传输。
2.4 同步传输(Isochronous Transfer)
同步传输是一种实时的、不可靠的传输,不支持错误重发机制。同步传输是为支持某些对可靠性要求不高,对实时性要求很高、数据量很大应用场景而提出的,使用这种传输类型的设备有麦克风、调制解调器、音频设备、摄像头等。为了完成实时传输,总线必须事先提供足够的带宽。对于同步传输来说,实时性比正确性和数据重传更重要,即使有少量的数据出错,也不会对应用软件产生太大的影响。
实进传输有如下特点:
- 实时传输有数据有固定的时间延迟,但有固定的带宽保证;
- 是一种不可靠的数据传输,充许有一定的误码率;
- 只要数据供得上,就能保证管道上的恒定数据传送速率;
- 只有全速/高速设备可以使用实时传输。
3. USB事务(Transaction)
上一章节讲了USB有4种数据传输类型,分别是控制传输、中断传输、批量传输和同步传输,其中每种传输都是由基本的USB事务(transaction)构成,USB事务根据功能可以分为3种:
- Setup事务:表示USB主机向设备发送控制命令,由令牌包实现。
- IN事务:表示USB主机从设备读取数据的过程,由数据包实现。
- OUT事务:表示USB主机向设备发送数据的过程,由握手包实现。
USB的事务都是由主机发起的,一个完整的事务可以分为3个阶段(Phase):
- 令牌阶段(Token Phase): 由主机指明传输数据的类型,。
- 数据阶段(Data Phase): 用于传输数据。
- 响应阶段(Acknowledge Phase): 用来判断数据是否发送成功。
所以,一个基本的事务,需要涉及多个包:令牌包、数据包、握手包。
实际传输中,有些事务需要握手包,有些事务不需要握手包,有些事务可以传输很大的数据,有些事务只能传输小量数据。
事务类型和各个阶段的关系如下图所示。
4. USB传输及事务组成
前面讲过USB一个传输由一个或多个事务(transaction)构成,下面细讲每种传输及事务组成。
4.1 控制传输及事务组成
控制传输根据功能可以分为控制读传输、控制写传输、无数据控制传输三种。
基本的控制传输包括三个过程(Stage),分别是:建立过程、数据过程、状态过程。
(1)建立过程(Setup Stage):固定使用1个SETUP事务,标志一次控制传输的开始。由Host 发出 SETUP 令牌包、DATA0 数据包、得到 ACK 握手包。
建立过程(Status Stage)时序图如下图所示。
(2)数据过程(Data Stage):根据需求,如果要求读/写数据,数据阶段就会传输具体数据,如果没有读写需求,则没有数据阶段。数据阶段是由0个或多个IN/OUT事务组成。
对于控制写:Host 发出 OUT 令牌包,发出数据包、得到 ACK 握手包。
对于控制读:Host 发出 IN 令牌包,读到数据包、发出 ACK 握手包。
(3)状态过程(Status Stage):固定使用1个IN/OUT事务,表示传输成功与否。
对于控制写:Host 发出 IN 令牌包,读到 DATA1 数据包,发出 ACK 握手包。
对于控制读:Host 发出 OUT 令牌包,发出 DATA1 数据包,等待 ACK 握手包。
数据过程(Data Stage)和状态过程(Status Stage)时序图如下图所示。
控制传输类型和事务的关系总结如下:
控制传输类型 | 建立过程 | 数据阶段 | 状态阶段 |
控制读传输 | 1个setup事务 | 1个或多个in事务 | 1个out事务 |
控制写传输 | 1个setup事务 | 1个或多个out事务 | 1个in事务 |
无数据控制传输 | 1个setup事务 | 无 | 1个in事务 |
4.2 中断传输及事务组成
中断传输主要包括中断读传输、中断写传输两种,相比于控制传输,中断传输只有1个过程:数据过程(Data Stage)。
主机如果是中断读数据请求,则数据过程为一个IN事务;
主机如果是中断写数据请求,则数据过程为一个OUT事务。
数据过程(Data Stage)时序图如下图所示。
中断传输类型和事务的关系总结如下:
控制传输类型 | 数据过程 |
中断读传输 | 1个in事务 |
中断写传输 | 1个out事务 |
4.3 批量传输及事务组成
批量传输主要包括批量读传输、批量写传输两种,相比于控制传输,批量传输只有1个过程:数据过程(Data Stage)。
主机如果是批量读数据请求,则数据过程为一个或者多个IN事务;
主机如果是批量写数据请求,则数据过程为一个或者多个OUT事务。
数据过程(Data Stage)时序图如下图所示。
批量传输类型和事务的关系总结如下:
控制传输类型 | 数据过程 |
批量读传输 | 1个或者多个in事务 |
批量写传输 | 1个或者多个out事务 |
4.4 同步传输及事务组成
同步传输主要包括同步读传输、同步写传输两种,相比于控制传输,同步传输只有1个过程:数据过程(Data Stage)。
主机如果是同步读数据请求,则数据阶段为一个或者多个IN事务;
主机如果是同步写数据请求,则数据阶段为一个或者多个OUT事务。
数据过程(Data Stage)时序图如下图所示。
同步传输类型和事务的关系总结如下:
控制传输类型 | 数据过程 |
同步读传输 | 1个或者多个in事务 |
同步写传输 | 1个或者多个out事务 |
5. USB帧、微帧、传输、事务、包的关系
USB 通信由一系列帧构成。每一帧都有一个帧开始(SOF),随后是一个或多个传输。一个传输由一个到多个事务构成,可以跨帧完成。一个事务不能打断,不能跨帧完成。
一个事务由若干个数据包组成,包是USB总线上数据传输的最小单位,包不能被打断或干扰,否则会引发错误。
下面是两个逻辑分析仪抓的实训图