usb2.0中的事务(Transactions)和传输(Transfers)

本文详细解析了USB2.0协议中的四种主要传输类型(批量、控制、中断、同步)、端点类型以及事务和传输的关系,介绍了各类型的特性和限制,包括控制传输的三个阶段:建立、数据和状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 综述

usb2.0协议规定了4中传输(Transfers)类型,分别是:

  • 批量传输(Bulk Transfers)
  • 控制传输(Control Transfers)
  • 中断传输(Interrupt Transfers)
  • 同步传输(Isochronous Transfers)

usb2.0中有4种端点类型(端点类型端点描述符bmAttributes 字段决定),分别是 批量端点(bulk endpoint), 控制端点(control endpoint), 中断端点(interrupt endpoint), 同步端点(isochronous endpoint) ,usb的通信可以抽象为主机(host) 与 不同端点间的数据交换,

  • 主机(host)批量端点(bulk endpoint) 的数据交换采用批量传输(Bulk Transfers)
  • 主机(host)控制端点(control endpoint) 的数据交换采用控制传输(Control Transfers)
  • 主机(host)中断端点(interrupt endpoint) 的数据交换采用中断传输(Interrupt Transfers)
  • 主机(host)同步端点(isochronous endpoint) 的数据交换采用同步传输(Isochronous Transfers)

usb2.0上层便是使用这4种传输类型进行传输数据。《Universal Serial Bus Specification Revision 2.0》的5.5,5.6,5.7,5.8 章节对上述4中传输类型的特点和限制进行了详细说明,有兴趣可以参阅一下.
在这里插入图片描述

2.事务(Transactions)和传输(Transfers)

《Universal Serial Bus Specification Revision 2.0》第8 章从包(packet) 构成 和事务(Transactions) 的构成,以及 传输(Transfers) 的构成,以及数据的同步与重传机制,错误检测与恢复机制都进行了说明
在这里插入图片描述
本文暂不讨论数据的同步与重传机制,错误检测与恢复机制,有关包(packet) 的概念我在
《usb2.0中的包(packet)》进行了介绍。本文着重介绍 事务(Transactions)传输(Transfers) 的概念以及他们的关系。
用一句话总结:传输(Transfers) 是由一个或多个事务(Transactions) 构成,事务(Transactions) 由多个 包(packet) 构成。

2.1 usb2.0中有哪些事务?

先看一下《Universal Serial Bus Specification Revision 2.0》的第8.5章:
在这里插入图片描述
从上面目录,我们可以看到了 批量事务(Bulk Transactions) , 中断事务(Interrupt Transactions)同步事务(Isochronous Transactions), 但却没有控制事务, 为什么?

  • 一个或多个批量事务构成批量传输
  • 一个或多个中断事务构成中断传输
  • 一个或多个同步事务构成同步传输
  • 相较上述几种传输,控制传输是特别的,并没有单独的控制事务,后文继续讨论。

2.2 批量事务(Bulk Transactions)与批量传输(Bulk Transfers)

2.2.1 批量事务(Bulk Transactions)的组成

下图可以很清晰的看出批量事务(Bulk Transactions) 的组成,便不再使用过多笔墨描述。
在这里插入图片描述

2.2.2 批量传输(Bulk Transfers)的组成

暂不对ping事务进行讨论,后续文章结合具体场景进行讨论。如下图,批量传输(Bulk Transfers) 就是批量事务(Bulk Transactions) 的简单重复。
在这里插入图片描述

注:组成批量传输(Bulk Transfers)批量事务(Transactions) 间的时间间隔没有要求,总线空闲时host便会发起传输,当总线中有其他实时性要求较高的传输(如中断传输)时,总线会优先进行实时性要求较高的传输,总线空闲时才会进行批量传输(Bulk Transfers)批量传输(Bulk Transfers) 的时效性是不保证的。

2.2.2 批量传输(Bulk Transfers)的特点与限制

  • 批量传输(Bulk Transfers) 并不是必须支持的。
  • 低速模式 不能支持批量传输,全速/高速模式可以支持批量传输。
  • 批量传输适合大量且对速率和传输时间无要求的场景,原因批量传输(Bulk Transfers) 在总线竞争中优先级较低,例如在 批量传输中断传输产生竞争时,host会优先进行中断传输
  • 批量传输(Bulk Transfers)批量事务(Transactions) 的间隔是没有规定的,在总线空闲时即可发起。
  • 一次批量事务传输的字节数:
    • 由端点描述符的wMaxPacketSize字段决定。
    • 对于全速设备可以是8/16/32/64个字节
    • 对于高速设备必须是 512个字节

2.3 中断事务(Interrupt Transactions) 和中断传输(Interrupt Transfers)

2.3.1 中断事务(Interrupt Transactions)的组成

下图描述了中断事务(Interrupt Transactions) 的组成,便不再使用过多笔墨描述。
在这里插入图片描述

2.3.2中断传输(Interrupt Transfers)的组成

中断传输(Interrupt Transfers) 即是 周期性(固定时间间隔) 的进行中断事务。也可以理解为一个中断传输包含一个中断事务,关键点在于周期进行,对实时性是有要求的。
因其对“实时性”的要求,总线会对中断传输预留足够的带宽。

2.3.3中断传输(Interrupt Transfers)的特点与限制

  • 中断传输(Interrupt Transfers) 并不是必须支持的。
  • 低速/全速/高速模式 均支持中断传输(Interrupt Transfers)
  • 中断事务 的间隔时间
    • 由端点描述符的bInterval字段决定
    • 低速端点:bInterval表示最大的间隔时间,单位是ms,取值范围是10-255,即最大间隔时间可配置为10ms - 255ms.
    • 全速端点:bInterval表示最大的间隔时间,单位是ms,取值范围是1-255,即最大间隔时间可配置为1ms - 255ms.
    • 高速端点:传输间隔由公式 (2bInterval-1) * 125us 表示,bInterval的取值范围是 1 - 16,允许的时间范围是 125us - 4.096s
  • 中断事务传输的字节数:
    • 由端点描述符的wMaxPacketSize字段决定。
    • 低速:小于等于 8 字节
    • 全速:小于等于 64 字节
    • 高速:小于等于 1024 字节

2.4 同步事务(Isochronous Transactions)

2.4.1 同步事务(Isochronous Transactions)的组成

下图描述了同步事务(Isochronous Transactions)的组成,便不再使用过多笔墨描述。
在这里插入图片描述

2.4.2 同步传输(Isochronous Transfers)的组成

同步传输中断传输类似, 区别在于没有握手阶段,也就不支持重传机制。

2.4.3 同步传输(Isochronous Transfers)的特点与限制

  • 实时传输(Isochronous Transfers) 并不是必须支持的。
  • 低速模式 不能支持实时传输,全速/高速模式可以支持实时传输。
  • 实时事务 的间隔时间:
    • 由端点描述符的bInterval字段决定
    • 全速端点:传输间隔由公式 (2bInterval-1) * 1ms 表示,bInterval的取值范围是 1 - 16,允许的时间范围是 1ms - 32.768s
    • 高速端点:传输间隔由公式 (2bInterval-1) * 125us 表示,bInterval的取值范围是 1 - 16,允许的时间范围是 125us - 4.096s
  • 实时事务传输的字节数:
    • 由端点描述符的wMaxPacketSize字段决定
    • 全速:小于等于 1023 字节
    • 高速:小于等于 1024 字节

2.5 控制传输(Control Transfers)

控制传输分为3个阶段,分别是:

  • 建立阶段(setup phase):usb主机向设备发送特定的请求(request)
  • 数据阶段(data phase):主机向设备发送数据或从设备获取数据(不是必须的,有些请求不需要交换数据)
  • 状态阶段(status phase):对结果的反馈,由设备向主机反馈

在这里插入图片描述

2.5.1 建立阶段(setup phase)

建立阶段由一个建立事务(setup Transactions) 组成,如下图所示:
在这里插入图片描述
建立事务(setup Transactions)数据包,传输的是一个固定格式的请求,请求分为3类:

  • 标准请求:usb2.0标准定义的请求,如GetDescriptor(),Set Address(),可参阅《Universal Serial Bus Specification Revision 2.0》第九章
  • 类请求:特定类要求支持的请求,如hid cdc等,可参考对应的设备类标准
  • 厂商自定义请求:厂商自定义的请求。

注:本文暂不对 请求(Requests) 展开描述,后续会单独对各种请求进行描述,下表是 请求(Requests) 的字段简单描述:

地址偏移量字段名长度(字节)说明
0bmRequestType1指明控制请求的特性:
D7 数据传输方向:
0 - 主机到设备 1- 设备到主机
D6 ~ D5 类型:
0 - 标准, 1 - 设备类, 2 - 供应商, 3 - 保留
D4~ D0 接收方:
0 - 设备, 1 - 接口,2 - 端点, 3 - 其他, 4~31 - 保留
1bRequest1控制请求的请求号
2wValue2控制请求的参数,其值根据具体请求的不同而不同
4wIndex2控制请求的参数,典型用于传送索引值或偏移量
6wLength2指明该控制事务数据阶段所需传输的字节数

2.5.2 数据阶段(data phase)

控制传输的数据阶段是一个批量传输(Bulk Transfers) ,便不过多赘述。

  • 数据阶段并不是必须的
  • 数据阶段由DATA1开始

2.5.3 状态阶段(status phase)

状态阶段(status phase)是由设备向主机报告状态

  • 如果数据阶段是OUT事务 ,则主机发起IN事务向设备询问状态
  • 如果数据阶段是IN事务 ,则主机发起OUT事务向设备询问状态
  • 如果没有数据阶段,则主机发起IN事务向设备询问状态

状态阶段(status phase)设备向主机报告状态的方法如下,很好理解:

设备状态IN事务报告的方法OUT事务报告的方法
usb设备忙NAK握手包NAK握手包
USB设备有错误STALL握手包STALL握手包
USB设备成功处理l零长度数据包ACK握手包
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值