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

来自:https://hellocode.blog.csdn.net/article/details/113140495

一、控制传输包结构

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

二、设置阶段包详解

  设置阶段由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字段中的Type和bmRequest可组合出不同设置,不能的设置,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数据包

在这里插入图片描述

三、可选的数据阶段包详解

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

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

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

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

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

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

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

四、状态阶段包详解

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

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

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

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

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

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

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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值