USB3.0接口——(2)数据结构

1.数据结构

在 USB 3.0 及更高版本的 xHCI 协议中,“Rings”、“Transfer Request Block (TRB)” 和 “Transfer Descriptor (TD)” 是用于管理 USB 数据传输和事件的重要概念。

1.1.Rings

Rings是指一种数据结构,用于组织和管理 USB 数据传输和事件。在 xHCI 协议中,存在多个Rings,每个 Ring 用于特定类型的数据传输或事件。

Ring是数据结构的循环队列。——>TRB Ring定义了一个队列,该队列用于在生产者(Producer)实体和消费者(Consumer)实体之间传输工作项目。

注意:
TRB Ring可能大于page,但是它们不得越过64K字节边界。
由于主机控制器可支持255个USB设备,每个设备最多可以声明31个端点,31个端点中的30个可以声明多达64K个流,这意味着单个xHC可能存在大约500M个 Transfer Ring。

1.1.1命令环(Command Ring)

用于xHC(eXtensible Host Controller,可扩展主机控制器)的一种循环队列,使系统软件能够发出命令以枚举USB设备,配置xHC以支持这些设备以及协调虚拟化功能。

备注:host模式下才有命令环概念???——xhci1.1标准里仅定义了host模式下的控制器实现标准,device模式下的控制器则由厂商自定义实现。

1.1.2.传输环(Transfer Ring)

每个端点或流的一种命令循环队列,提供了与USB设备之间的数据传输。

1.1.3.事件环(Event Ring)

每个中断器的一种循环队列,为xHC提供了一种向系统软件报告的方式:数据传输和命令完成状态,根集线器端口状态更改以及其他与xHC相关的事件。(或者说:xHC使用事件环返回状态和命令结果,并将其传输到系统软件。)
Transfer Request Block (TRB)

1.2.Transfer Request Block (TRB)

在这里插入图片描述
Transfer Request Block(TRB)是描述 USB 数据传输或事件的数据结构。TRB 包含了传输或事件的各种参数、状态和控制信息,如端点地址、数据缓冲区、传输长度、传输类型、方向等。TRB 是用于与 xHCI 控制器进行通信的重要数据结构。
传输请求块(TRB)是一种通过软件在内存中构造的数据结构,其主要用于在主机内存和xHC之间传输单个物理上连续的数据块。

每个TRB包含单个数据缓冲区指针,缓冲区的大小以及一些其他控制信息。
TRB数据结构的小尺寸允许在4K段(内存页)中最多定义256个单独的缓冲区。
所有TRB数据结构的大小应为16个字节。

TRB的“数据缓冲区指针”字段为数据寻址提供了字节粒度。TRB的“数据缓冲区指针”字段为数据寻址提供了字节粒度。
“Length”字段可以包含的最大值是64K。传输“长度”字节后,xHC将自动访问环中的下一个TRB。系统软件有责任确保“长度”字段与可能遇到的任何页面交叉都一致。
TRB中的“控制字”应包含一个TRB类型字段,并且可以包含以下一个或多个字段:链(CH),完成中断(IOC),立即数据(IDT),无监听(NS),中断 短数据包(ISP),启动Isoch ASAP(SIA)和帧ID。

1.2.1.TRB类型

在这里插入图片描述
在这里插入图片描述
EP允许的TRB类型:
在这里插入图片描述
Transfer Descriptor Type允许的TRB类型:
在这里插入图片描述

1.2.1.1.Transfer TRB
1.2.1.1.1.Normal TRB

Normal TRB用于块/控制(数据阶段)/中断端点传输。
在这里插入图片描述

1.2.1.1.2.Control TRBs
1.2.1.1.2.1.Setup Stage TRB

在这里插入图片描述

1.2.1.1.2.2.Date Stage TRB

在这里插入图片描述

1.2.1.1.2.3.Status Stage TRB

在这里插入图片描述

1.2.1.1.3.Isoch TRB

在这里插入图片描述

1.2.1.1.4.No Op TRB

在这里插入图片描述

1.2.1.2.Event TRBs
1.2.1.2.1.Transfer Event TRB

在这里插入图片描述

1.2.1.2.2.Command Completion Event TRB

在这里插入图片描述

1.2.1.2.3.Port Status Change Event TRB
1.2.1.2.4.Bandwidth Request Event TRB
1.2.1.2.5.Doorbell Event TRB
1.2.1.2.6.Host Controller Event TRB
1.2.1.2.7.Device Notification Event TRB
1.2.1.2.8.MFINDEX Wrap Event TRB
1.2.1.3.Command TRBs
1.2.1.3.1.No Op Command TRB
1.2.1.3.2.Enable Slot Command TRB
1.2.1.3.3.Disable Slot Command TRB
1.2.1.3.4.Address Device Command TRB
1.2.1.3.5.Configure Enapoint Command TRB
1.2.1.3.6.Evaluate Context Command TRB
1.2.1.3.7.Reset Endpoint Command TRB
1.2.1.3.8.Stop Endpoint Command TRB
1.2.1.3.9.Set TR Dequeue Pointer Command TRB
1.2.1.3.10.Reset Device Command TRB
1.2.1.3.11.Force Event Command TRB
1.2.1.3.12.Negotiate Bamdwidth Command TRB
1.2.1.3.13.Set Latency Tolerance Value Command TRB
1.2.1.3.14.Get Port Bandwith Command TRB
1.2.1.3.15.Force header Command TRB
1.2.1.3.16.Get Extended Property Command TRB
1.2.1.3.17.Set Extended Property Command TRB
1.2.1.4.Other TRB
1.2.2.2.1.Link TRB
1.2.2.2.2.Event Data TRB

1.3.Transfer Descriptor (TD)

Transfer Descriptor(TD)也是描述 USB 数据传输的数据结构。
TRB中的链标志用于标识组成TD的TRB。
因此,TD指的是Transfer Ring上连续的TRB数据结构集(其中在TD的最后一个TRB之外的所有TRB中都设置了Chain标志)。

注意:
Command和Event TRB不支持链位(CH),因此所有命令描述符(CD)和事件描述符(ED)仅包含一个TRB。

传输描述符通过驻留在主机内存中的传输环进行管理。
TD中的Normal,Data Stage或Isoch TRB指向的任何缓冲区的大小可以在0到64K字节之间。

如果在处理含有多个TRB 的TD时检测到错误,则xHC应为TRB生成一个Transfer Event,并使用适当的错误条件代码检测到该错误,然后才可以前进到下一个TD。
如果在前进到下一个TD的过程中遇到了带有其IOC标志的传输TRB,则为该传输TRB生成的 Transfer Event 的条件代码应为“成功”,因为与该TRB实际无关的错误生成了事件。但是,xHC实现可能会多余地声明原始错误条件代码。
通常,Transfer Event的完成代码代表生成它的传输TRB引用的缓冲区的状态,但是可能会有例外。

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

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

相关文章

STM32-07-STM32_外部中断

文章目录 STM32 中断系统1. 中断2. NVIC3. EXTI4. AFIO5. 中断配置步骤6. 外部中断代码 STM32 中断系统 1. 中断 目的:中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的。中断过程:当CPU正在处理某事件的时候外界发生了紧急事件请求 &#…

Java构造方法详解

在Java方法内部定义一个局部变量时,必须要初始化,否则就会编译失败,如下: 要让上述代码通过编译,只需在使用a之前给a赋一个初始值即可 如果是对象:下面用一个日期类演示 我们没有给年月日赋值,…

优雅谈论大模型7:重新审视神经网络

这个专栏围绕着大模型的基本知识点深入浅出,章节之间的联系较为紧密。若在某个环节出现卡点,可以回到如何优雅的谈论大模型重新阅读。而斯坦福2024人工智能报告解读则为通识性读物。若对于如果构建生成级别的AI架构则可以关注AI架构设计专栏。技术宅麻烦…

springboot房屋租赁系统

摘要 房屋租赁系统;为用户提供了一个房屋租赁系统平台,方便管理员查看及维护,并且可以通过需求进行设备信息内容的编辑及维护等;对于用户而言,可以随时进行查看房屋信息和合同信息,并且可以进行报修、评价…

【C++】学习笔记——继承_2

文章目录 十二、继承5. 继承与友元6. 继承与静态成员7. 复杂的菱形继承及菱形虚拟继承 未完待续 十二、继承 5. 继承与友元 友元关系不能继承,也就是说父类友元不能访问子类私有和保护成员 。除非子类也设置成友元。 6. 继承与静态成员 父类定义了 static 静态成…

干最毒的事,做最靓的仔,贾诩为何会被称为“汉末第一毒士”?

两汉各有一毒士,西汉陈平,东汉贾诩。 啥叫“毒士”呢?就是那种专出那种缺德的招术、招招要人命的参谋、秘书。 这种人,对于他们的老板来说,那是绝对是嘎嘎好使,因为一出手就能起到立竿见影的效果。但是&a…

IC卡16个扇区详解:揭秘智能卡的存储结构

目录标题 IC卡的基本结构扇区的划分扇区的功能扇区的安全性扇区的应用NFC卡和IC卡,从外观怎样区分总结 在智能卡的世界里,IC卡(Integrated Circuit Card)以其安全性和便捷性成为了现代生活中不可或缺的一部分。无论是用于支付、身…

基于正点原子的FreeRTOS学习笔记——任务挂起与恢复

目录 学习目标: 学习笔记: 一、什么是挂起 二、任务挂起 三、任务恢复 四、中断中恢复任务 1、中断任务恢复函数 2、优先级说明 实验代码: 一、任务 二、中断 学习目标: 掌握任务的挂起与恢复 学习笔记: …

手撸XXL-JOB(二)——定时任务管理

在上一节中,我们介绍了SpringBoot中关于定时任务的执行方式,以及ScheduledExecutorService接口提供的定时任务执行方法。假设我们现在要写类似XXL-JOB这样的任务调度平台,那么,对于任务的管理,是尤为重要的。接下来我们…

C++语法|深入理解 new 、delete

在开发过程中,非常重要的语法就有我们new和delete,周所周知在C中最为强大的能力就是对内存的控制,所以我们再怎么强调new和delete都不为过 文章目录 1.new和delete基本语法new和malloc的区别是什么?(1)开辟单个元素的内存差别(2)开…

DGC-GNN 配置运行

算法 DGC-GNN,这是一种全局到局部的图神经网络,用于提高图像中2D关键点与场景的稀疏3D点云的匹配精度。与依赖视觉描述符的方法相比,这种方法具有较低的内存需求,更好的隐私保护,并减少了对昂贵3D模型维护的需求。DGC-…