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

news/2025/3/13 3:31:51/文章来源:https://www.cnblogs.com/linhaostudy/p/18512554

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/823610.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度解读RDS for MySQL 审计日志功能和原理

RDS for MySQL的审计日志功能在用户活动监控、权限变更追踪和性能优化等方面有着重要的作用。本文分享自华为云社区《【华为云MySQL技术专栏】RDS for MySQL 审计日志功能介绍》,作者:GaussDB数据库。 1. 背景 在生产环境中,当数据库出现故障或问题时,运维人员需要快速定位…

HyperWorks的RT功能及使用技巧

在Altair(HyperWorks)里,当结构中包含 T 型、X 型或更复杂的连接特征(图 2-12 所示)时,此功能非常有效。不适用于没有 T 型连接的特征(图 2-12 右侧)。图 2-12 带有 T 型特征的模型如果 R/T(半径/厚度)大于面板指定值,这个特征不被识别为目标连接特征。 -如果某个连…

GaussDB技术解读——GaussDB架构介绍之数据持久化存取层(DataNode)关键技术方案

数据持久化存取层(DataNode)关键技术方案 Datanode节点主要负责数据的持久化和快速写入、读取。数据持久化采用物理日志wal,事务提交wal刷盘, 对外提供逻辑日志功能,反解析物理日志为SQL逻辑日志。图1 datanode数据持久化 Astore:存储格式为追加写优化设计,其多版本元组采…

GaussDB企业级AI-Native分布式数据库

华为 GaussDB 是一个企业级 AI-Native 分布式数据库。GaussDB 采用 MPP(Massive Parallel Processing)架构,支持行存储与列存储,提供 PB(Petabyte,2 的 50 次方字节)级别数据量的处理能力。 华为Gauss数据库是全球首款AI-Native数据库,能够同时支持X86、ARM、GPU、NPU 等异…

国家代码和国家地区代码有什么区别

​​国家代码和国家地区代码的区别主要体现在:1.定义及用途不同;2.格式和结构差异;3.颁发机构不同;4.应用范围有别;国家代码通常是ISO标准中定义的,如ISO 3166-1中的两位或三位字母代码,而国家地区代码可能包括电话区号、邮政编码等,且格式更为多样。了解这些差异对于处…

CNCC2024:网易伏羲主题分论坛圆满落幕,专家共论推动产学研深度融合

10月26日,为期三天的2024中国计算机大会(CNCC2024)在浙江省东阳市横店镇圆明新园顺利落下帷幕。本届大会以“发展新质生产力,计算引领未来”为主题,吸引了数万名计算领域专业人士参会。本次大会邀请到了17位国内院士,800余位国内外顶尖学者、企业技术精英,通过特邀报告、…

在TMOS系统的不同taskID间交互数据

目录 TMOS系统中,每个taskID下都预留了一个事件编号0x8000,用于在不同的taskID中传递数据。由于0x8000占据了一个事件编号,故每个taskID下,用户只能最多自定义15个事件。 不同的taskID可以用于将不同的功能划分到不同的作用域中,将代码模块化,方便管理和移植。比如说某个…

Swagger UI、RESTful简介

Swagger UI 简介Swagger UI允许任何人(无论您是开发团队还是最终用户)都可以可视化API资源并与之交互,而无需任何实现逻辑。它是根据您的OpenAPI(以前称为Swagger)规范自动生成的,具有可视化文档,可简化后端实现和客户端使用。 SwaggerUI 特点无依赖 UI可以在任何开发环…

Ubuntu QTCreator 程序打包

下载linuxdeployqt官网地址:https://github.com/probonopd/linuxdeployqt/releases安装更改名字 mv linuxdeployqt-6-x86_64.AppImage linuxdeployqtView Code修改权限 chmod 777 linuxdeployqtView Code全局访问 sudo mv linuxdeployqt /usr/local/binView Code测试 linuxdep…

❗Vue中常见的性能优化(被问到要尽可能说全呀cc!!!)

Webpack层级的优化(后面会讲) 前端通用的性能优化,如图片懒加载 使用SSR

算法与数据结构——计数排序

计数排序 计数排序(counting sort)通过统计元素数量来实现排序,通常应用于整数数组。 简单实现 给定一个长度为n的数组nums,其中的元素都是“非负整数”,计数排序的整体流程如下:遍历数组,找出其中最大的数组,记为m,然后创建一个长度为 m+1 的辅助数组counter。 借助c…

二分类结果评估指标

TP(True Positive):真正例,真值和预测值都是正例FP(False Positive):假正例,真值是负例,预测值是正例FN(False Negative):假负例,真值是正例,预测值是负例TN(True Negative):真负例,真值和预测值都是负例Accuracy(准确率):对于给定的测试数据集,分类器正…