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

目录

1.控制传输包结构

2.设置阶段包详解

2.1 SETUP令牌包

2.2 DATA0 数据包

2.2.1 bmRequestType(向谁请求)

2.2.2 bmRequest(什么请求)

2.2.3 wValue

2.2.4 wIndex

2.2.5 wLength

2.3 ACK数据包

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

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

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

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

4.状态阶段包详解

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

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

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


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事务请求设备数据接收状态。


1.本文部分素材来源网络,版权归原作者所有,如涉及作品版权问题,请与我联系删除。

2.未经原作者允许不得转载本文内容,否则将视为侵权;

3.转载或者引用本文内容请注明来源及原作者;

4.对于不遵守此声明或者其他违法使用本文内容者,本人依法保留追究权等。

下面是我的个人微信公众号,关注【一个早起的程序员】精彩系列文章每天不断。

 

  • 23
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个早起的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值