Fork me on GitHub

USB协议详解第24讲(USB包-控制传输包详解)

1.控制传输包结构

控制传输由三个阶段组成,设置阶段可选的数据阶段状态阶段,其中设置阶段由1个SETUP事务组成,数据阶段由0个或者多个IN/OUT事务组成,状态阶段由1个IN/OUT事务组成,其中每个阶段事务包结构有所不同,下图可以直观看出控制传输写传输的包结构组成。

2.设置阶段包详解

设置阶段由1个设置事务组成,SETUP事务由SETUP令牌包DATA0数据包ACK握手包组成。如下图所示。

2.1 SETUP令牌包

从上图可以知道SETUP PID为1101B,则补码校验为0010,在链路上传输先低后高则为,1011_0100(0xB4),下图为SETUP包的链路波形图。

2.2 DATA0 数据包

从上图可以知道DATA0 PID为0011B,则补码校验为1100,在链路上传输先低后高则为,1100_0011(0xC3),下图为DATA0数据包的链路波形图。

Setup Data就是DATA0数据包里面的8个字节的数据Data,包含主机的很多设置信息(数据传输方向、数据类型、目标类型、附加数据、数据阶段传输的数据长度等等),这8个字节含义如下,我们一一解析。

2.2.1 bmRequestType(向谁请求)

D7:传输方向

  • 0 = 主机至设备;
  • 1 = 设备至主机;

D6..5:命令类型

  • D6D5=00:标准请求命令;
  • D6D5=01:类请求命令;
  • D6D5=10:用户定义命令;
  • D6D5=11:保留。

D4..0:接受者类型

  • 0=设备;
  • 1=接口;
  • 2=端点;
  • 3=其它
  • 4-31 保留

这个域表明此请求的特性。特别地,这个域表明了第二阶段控制传输方向。如果wLength域被设作0的话,表明没有数据传送阶段,那Direction位就会被忽略。

USB说明定义了一系列所有设备必须支持的标准请求,这些请求见下面表。另外,一个设备类可定义更多的请求,设备厂商也可定义设备支持的请求。

请求可以到设备、设备接口、设备端结点(endpoint)上。当指定的是接口或端点(endpoint)时,wIndex域指出哪个接口或端点。

2.2.2 bmRequest(什么请求)

此字段指定特定的请求类型,bmRequestType****字段中的TypebmRequest可组合出不同设置,不能的设置,wValue、wIndex、wLength不同,不同设置数据阶段返回的数据含义也不同。

bmRequest请求类型表。

描述符类型表。

2.2.3 wValue

此域用来传送当前请求的参数,随请求不同而变。

2.2.4 wIndex

该字段的内容根据请求而有所不同。它用于将参数传递给设备,特定于请求。

当bmRequestType的Recipient字段为接口或端点时,wIndex域用来表明是哪一个接口或端结。

下图显示了用于指定端点时的wIndex格式。

Direction位(bit7)设置为0表示指定端点为OUT端点,设置为1表示指定端点为IN端点。

图9-3显示了用于指定接口时的wIndex格式.

2.2.5 wLength

wLength表明第二阶段的数据传输长度,第二阶段的数据传输方向由bmRequstType的Direction位指出。wLength域为0则表明无数据传输。在输入请求下,设备返回的数据长度不应多于wLength(但是可以少于),在输出请求下,wLength指出主机发出的真实的数据量。如果主机发送多于wLength的数据,设备会作出未知响应。

2.3 ACK数据包

3.可选的数据阶段包详解

数据阶段由0个或者多个IN/OUT事务组成。

3.1 如果第一阶段指定数据传输方向为设备到主机

如果第一阶段指定读(传输方向为设备到主机),则数据阶段会由连续的多个IN事务组成,事务和包协议结构如下图。

3.2 如果第一阶段数据传输方向为主机到设备(数据长度大于0)

如果第一阶段指定写(传输方向为主机到设备),则数据阶段会由连续的多个OUT事务组成,事务和包协议结构如下图。

3.3 如果第一阶段数据传输方向为主机到设备(数据长度为0)

如果第一阶段指定数据传输方向为主机到设备,并且长度为0,则无第二数据阶段,事务和包协议结构如下图。。

4.状态阶段包详解

状态阶段由1个OUT/IN事务组成。

4.1 如果第二阶段指定数据传输方向为设备到主机

如果第二阶段指定数据传输方向为设备到主机,则主机接收完毕数据后,主机请求一个OUT事务告诉设备数据的接收状态。

4.2 如果第二阶段指定数据传输方向为主机到设备(数据长度大于0)

如果第二阶段指定数据传输方向为主机到设备,则主机发送完毕数据后,主机请求一个IN事务请求设备数据接收状态。

4.3 如果第二阶段指定数据传输方向为主机到设备(数据长度为0)

如果第二阶段指定数据传输方向为主机到设备,请求传输数据长度为0,则主机发送完令牌包后,主机请求一个IN事务请求设备数据接收状态。

posted @ 2024-10-29 11:11  yooooooo  阅读(10)  评论(0编辑  收藏  举报