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

news2024/12/23 10:59:56

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.coloradmin.cn/o/1677331.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

走进Java接口测试之多数据源切换示例

文章目录 一、前言二、demo实现2.1、开发环境2.2、构建项目2.3、配置数据源2.4、编写配置文件2.5、编写Dao层的mapper2.6、编写实体成层2.7、编写测试类2.8、验证结果 三、多数据源 demo 实现3.1、配置数据源3.2、增加pom文件3.3、修改数据源读取方式:3.4、增加动态…

Redis-持久化操作-AOF

持久化操作-AOF AOF是什么? 以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只允许加文 件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之…

UE5C++ FString做为参数取值时报错error:C4840

问题描述 用来取FString类型的变量时报错: 问题解决 点击错误位置,跳转到代码: void AMyDelegateActor::TwoParamDelegateFunc(int32 param1, FString param2) {UE_LOG(LogTemp, Warning, TEXT("Two Param1:%d Param2:%s"), param…

【案例】使用Vue实现标题项元素上下移动

效果图 效果说明 每一组数据只能在对应的二级类目中进行上下移动,当点击上移图标的时候【左边的】会将当前元素与上一个元素交换位置,当点击的元素为该组的第一个元素时,将提示已经是第一项了并且不能进行移动;当点击下移图标的时…

03-数据结构(一)

链接:C# 数据结构_哔哩哔哩_bilibili https://www.bilibili.com/video/BV1a541147Nk/?spm_id_from333.337.search-card.all.click&vd_source6eb7d966aa03ff5cb02b63725f651e68 链接:使用 C#.Net 学习掌握数据结构 (更新中)_哔哩哔哩_bilibili 一…

aws s3

列出关键点 创建s3 设置s3策略,所有人访问 { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor1", "Effect": "Allow", …

【美团面试2024/05/14】前端面试题滑动窗口

一、题目描述 设有一字符串序列 s&#xff0c;确定该序列中最长的无重复字母的子序列&#xff0c;并返回其长度。 备注 0 < s.length < 5 * 104 s 由英文字母、数字、符号和空格组成 示例1 输入 s "abcabcbb" 输出 3 二、原题链接 这道题在LeetCode上的原题链…

【C语言】4.C语言数组(2)

文章目录 6. 二维数组的创建6.1 ⼆维数组的概念6.2 ⼆维数组的创建 7. 二维数组的初始化7.1 不完全初始化7.2 完全初始化7.3 按照⾏初始化7.4 初始化时省略⾏&#xff0c;但是不能省略列 8. 二维数组的使用8.1 ⼆维数组的下标8.2 ⼆维数组的输⼊和输出 9. 二维数组在内存中的存…

基于 Spring Boot 博客系统开发(九)

基于 Spring Boot 博客系统开发&#xff08;九&#xff09; 本系统是简易的个人博客系统开发&#xff0c;为了更加熟练地掌握 SprIng Boot 框架及相关技术的使用。&#x1f33f;&#x1f33f;&#x1f33f; 基于 Spring Boot 博客系统开发&#xff08;八&#xff09;&#x1f…

day15 个人博客项目登录验证CookieSession验证码安全

知识点 1.后台验证-登录用户逻辑安全 2.后台验证-cookie和session 3.后台验证-验证码和万能密码 通常的后台验证登录都是&#xff0c;1.发送登录请求&#xff0c;账户密码&#xff1b;2.接受账号密码3.对账号密码进行判断 正确 -》跳转到成功登录界面 失败-》重新登录 而…

C++ | Leetcode C++题解之第90题子集II

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> t;vector<vector<int>> ans;vector<vector<int>> subsetsWithDup(vector<int> &nums) {sort(nums.begin(), nums.end());int n nums.size();for (int mask …

无人机+应急通信:灾害现场应急通信车技术详解

无人机和应急通信车是灾害现场应急通信中的重要技术。无人机可以通过快速到达灾害现场&#xff0c;搭载高清摄像头、红外热成像仪、激光雷达等设备&#xff0c;对灾区进行实时监测和灾情评估&#xff0c;同时也可以通过搭载的通信设备&#xff0c;与指挥中心进行实时通信和数据…

HC-Net: 自动牙周疾病诊断的混合分类网络

文章目录 HC-Net: Hybrid Classification Network for Automatic Periodontal Disease Diagnosis摘要方法实验结果 HC-Net: Hybrid Classification Network for Automatic Periodontal Disease Diagnosis 摘要 从全景X射线图像中准确分类牙周病对于临床高效诊疗至关重要&…

胖东来5月生鲜陈列欣赏

【免责声明】&#xff1a;凡未注明来源的图文内容&#xff0c;版权归原作者所有。本平台所发稿件、图片均用于学习交流&#xff0c;不代表赞同文章观点和对其真实性负责&#xff0c;不用作商业用途。若文章涉及版权&#xff0c;请将马上联系&#xff0c;安排删除。

Andorid Input事件 注入方法及原理介绍

在Android系统中&#xff0c;除了真实的输入设备可以产生事件之外&#xff0c;我们也可以通过软件的方式&#xff0c;模拟一个输入事件&#xff0c;比如模拟一个点击事件&#xff0c;模拟一个按键事件等等。 怎么模拟一个输入事件 1&#xff0c;在adb命令行使用input命令模拟输…

Milvus的系统架构

简介 Milvus的构建在许多知名的向量搜索库比如Faiss, HNSW, DiskANN, SCANN等之上的&#xff0c;它针对稠密向量数据集的相似搜索而设计&#xff0c;能支持百万、十亿甚至万亿级别的向量搜索。 Milvus支持数据分片&#xff0c;流式数据插入&#xff0c;动态schema&#xff0c…

仿C#或Java基础类型自定义

class Int{ private:int _value 0; public:operator int() const{ // 隐式转换return _value;}// 显式转换explicit operator int*() const { return nullptr; }operator(const int page){_value page;}operator float() const{return static_cast<float>(_value);}ope…

Linux shell编程学习笔记49:strings命令

0 前言 在使用Linux的过程中&#xff0c;有时我们需要在obj文件或二进制文件中查找可打印的字符串&#xff0c;那么可以strings命令。 1. strings命令 的功能、格式和选项说明 我们可以使用命令 strings --help 来查看strings命令的帮助信息。 pupleEndurer bash ~ $ strin…

Node.js安装及环境配置(超详细!保姆级!!)

目录 一、进入官网地址下载安装包 二、安装程序 三、环境配置 四、测试 五、安装淘宝镜像 一、进入官网地址下载安装包 Node.js — Download Node.js (nodejs.org) 选择对应你系统的 node.js 版本&#xff0c;我选择的是Windows系统&#xff0c;64位 点击图中选项&#…

图文详解JUC:Wait与Sleep的区别与细节

目录 一.Wait() 二.Sleep() 三.总结Wait()与Sleep()的区别 一.Wait() 在Java中&#xff0c;wait() 方法是 Object类中的一个方法&#xff0c;用于线程间的协作。当一个线程调用wait() 方法时&#xff0c;它会释放对象的锁并进入等待状态&#xff0c;直到其他线程调用相同对…