USB——域,包,事务及传输

news2024/11/23 15:01:12

USB 域,包,事务及传输

  • 域组成包
  • 包组成事务
  • 事务组成传输

字节序

LSB

概览

通常来说有八个

  • SYNC
  • PID
  • ADDR
  • ENDP:
  • FRAME
  • DATA
  • CRC
  • EOP

多个域组成包,USB 的包分为四大类

  • token:令牌包
  • data:数据包
  • handshake:握手包
  • special:特殊包

多个包组成不同的事务,事务通常有三个

  • setup 事务
  • out 事务
  • in 事务

多个事务组成传输,共有四类传输

  • 批量传输:bulk transaction
  • 控制传输:control transaction
  • 中断传输:interrupt transaction
  • 等时传输:isochronous transaction

如下图所⽰,USB 通常有八个,即同步域 (SYNC)、包标识 (PID)、地址域 (ADDR)、端点域 (ENDP)、帧号域 (FRAME)、数据域 (DATA),校验域 (CRC),包结束 (EOP)。

注意,并不是每个 USB 包都包含上述的八个域,也就是说有些包只包含其中的⼏个域。

SYNCPIDADDRENDPFRAMEDATACRCEOP
8/32 bits8 bits7 bits4 bits11 bis0-1024 bytes5/16 bits
  • SYNC
    同步域主要是通知对⽅数据传输开始,并提供同步时钟。对于低速设备和全速设备,同步域使⽤的是 00000001(⼆进制数);对于⾼速设备使⽤的是 00000000 00000000 00000000 00000001。

  • PID
    包标识主要⽤于标识包的类型,由 8 位组成:低 4 位是 PID 编码,⾼ 4 位是校验字段,是对低 4 位取反得到,USB 中各种包是通过 PID 字段来区分

  • ADDR
    由于接⼊ USB 总线的设备可能有多个,因此需要引⼊地址域,以便于区分当前通信的设备是哪个设备。地址域包含 7 个数据位,最多可以指定 128 个地址,地址 0 ⽤作缺省地址,不分配给 USB 设备。对于 USB 总线上的每个设备,地址唯⼀

  • ENDP:
    端点域⽤于指定 USB 总线上某个设备的⼀个端点号,包含 4 个数据位;全速 / ⾼速设备最多可以含有 16 个端点,低速设备最多含有 3 个端点。所有 USB 设备都必须含有⼀个端点号为 0 的端点,⽤于主机与设备间交换基本信息。除端点 0 外,其余的端点都是具体 USB 设备所特有的。地址域和端点域组合,明确了主机与设备间通信的通道。

  • FRAME
    帧号字段⽤于指出当前帧的帧号,它仅在每帧 / 微帧开始的 SOF 令牌包中被发送,其数据位⻓度为 11 位,每传输⼀帧,主机就将其加 1。全速设备每毫米产生一个帧,高速设备每 125us 产生一个微帧,即每毫秒 8 个微帧

  • DATA
    数据字段包含主机和 USB 设备间需要传输的数据,以字节为单位,最⼤⻓度为 1024,⽽实际⻓度取决于传输的具体情况。

  • CRC
    校验域主要是为了校验通信数据的正确性。USB 令牌包和数据包中都使⽤了 CRC。但是,CRC 是发送⽅在进⾏位填充之前产⽣的,这样要求接收⽅在去除位填充之后,再对 CRC 字段进⾏译码。信息包中的 PID 字段本⾝含有校验,所以 CRC 计算不包含有 PID 部分。令牌包的 CRC 采⽤的是 5 位 CRC,数据包中的数据字段使⽤的是 16 位 CRC

  • EOP
    全速 / 低速设备的 EOP 是一个大约 2 个数据位宽度的单端 0(SE0) 信号,高速设备的 EOP 使用故意的位填充错误来表示
    一个包被分成不同的域

域组成包

包 (Packet) 是 USB 系统中信息传输的基本单元,所以传输的数据都是以包为基本单位的

USB 的包分为四大类

  • token:令牌包
  • data:数据包
  • handshake:握手包
  • special:特殊包
    下图为 USB2.0 规范文档中提供的包的描述

请添加图片描述

token 令牌包

令牌包有 4 种

  • OUT
  • IN
  • SOF
  • SETUP

SOF 令牌

SYNCPIDFRAMECRC5EOP
8/32 bits8 bits11 bis5 bits

OUT 令牌 IN 令牌及 SETUP 令牌

SYNCPIDADDRENDPCRC5EOP
8/32 bits8 bits7 bits4 bits5 bits

OUT 令牌,IN 令牌及 SETUP 令牌的数据包格式是一样的

data 数据包

数据包有 4 种

  • DATA0
  • DATA1
  • DATA2
  • MDATA
SYNCPIDbyte0byte1byte NCRC16EOP
8/32 bits8 bits1 byte1 byte1 byte1 byte16 bits

不同速度的数据负载

  • low speed:8 bytes
  • full speed:1023 bytes
  • high speed:1024 bytes

handshake 握手包

握手包有 4 种

  • ACK
  • NAK
  • STALL
  • NYET
SYNCPIDEOP
8/32 bits8 bits

special 特殊包

握手包有 4 种

  • PRE:token
  • ERR:handshake
  • SPLIT:token
  • PING:token

事务

包组成事务

事务组成

事务是由 2 个或者 3 个 包组成:令牌包,数据包,握手包

  • 令牌包用来启动一个事务,总是由主机发送
  • 数据包传送数据,可以从主机到设备,也可以从设备到主机,方向由令牌包来决定
  • 握⼿包的发送者通常为数据接收者,当数据正确接收后,发送握⼿包,设备也可以使⽤ NACK 表⽰数据未准备好

注意,SOF 只是指⽰⼀帧的开始,⽆有效数据,并不是⼀次事务;EOF 帧发送结束后的⼀种电平状态,也不是事务

setup 事务

setup 事务处理并定义了 Host 与 Device 之间的特殊的数据传输,它仅适⽤于 USB 控制传输的建⽴阶段。如下图所⽰,设置事务通常有三种状态,即正常设置事务、设备忙设置事务和设备出错设置事务,正确的设置事务包括令牌、数据和握⼿三个阶段。
正常设置事务(握手包为 ACK)
在这里插入图片描述

设备忙设置事务(握手包为 NACK)
在这里插入图片描述

设备出错设置事务(握手包为 STALL)
在这里插入图片描述

out 事务

out 事务是主机向 USB 设备的某个端点中发送数据的过程,如下图所⽰,⼀个输出事务有三种状态,即正常的输出事务、设备忙时的输出事务和设备出错时的输出事务。正确的输出事务包括令牌、数据和握⼿三个阶段
正常的输出事务(握手包为 ACK)
在这里插入图片描述

设备忙时的输出事务(握手包为 NACK)
在这里插入图片描述

设备出错时的输出事务(握手包为 STALL)
在这里插入图片描述

in 事务

in 事务是主机从 USB 设备的某个端点中获取数据的过程,如下图所⽰,⼀个输⼊事务有三种状态,即正常的输⼊事务、设备忙或⽆数据时的输⼊事务和设备出错时的输⼊事务,正确的输⼊事务包括令牌包、数据包和握⼿包三个阶段
正常的输⼊事务(握手包为 ACK)
在这里插入图片描述

设备忙或⽆数据时的输⼊事务(握手包为 NAK)
在这里插入图片描述

设备出错时的输⼊事务(握手包为 STALL)
在这里插入图片描述

示例

请添加图片描述
上述抓包数据中,共有三次控制传输过程

第一次 setup 事务

SETUP 令牌包 + DATA0 数据包 + ACK 握手包
  • 令牌包数据:2D 00 10
PIDADDRENDPCRC5
2DH(00101101B)7 bits4 bits5 bits

PID[3:0] 为 1101B 即 SETUP 令牌,通知设备将要开始一个控制传输

  • 数据包数据:C3 80 06 00 01 00 00 40 00 DD 94
PIDbyte0byte1byte NCRC16EOP
C3H(11000011B)800600DD 94

PID[3:0] 为 0011B 即 DATA0 数据包,主机输出的数据为:80 06 00 01 00 00 40 00

  • 握手包数据:D2
PID
D2H(11010010B)

PID[3:0] 为 0010B 即 ACK 握手包

第二次 in 事务

IN 令牌包 + DATA1 数据包 + ACK 握手包
  • 令牌包数据:69 00 10
PIDADDRENDPCRC5
69H(01101001B)7 bits4 bits5 bits

PID[3:0] 为 1001B 即 IN 令牌,通知设备将要输入数据

  • 数据包数据:4B 12 01 10 01 00 00 00 08 11 77
PIDbyte0byte1byte NCRC16EOP
4BH(01001011B)12010811 77

PID[3:0] 为 1011B 即 DATA1 数据包,输入到主机的数据为:12 01 10 01 00 00 00 08

  • 握手包数据:D2
PID
D2H(11010010B)

PID[3:0] 为 0010B 即 ACK 握手包

第三次 out 事务

OUT 令牌包 + DATA1 数据包 + ACK 握手包
  • 令牌包数据:E1 00 10
PIDADDRENDPCRC5
E1(11100001B)7 bits4 bits5 bits

PID[3:0] 为 0001B 即 OUT 令牌,通知设备将要输出数据

  • 数据包数据:4B 00 00
PIDCRC16
4BH(01001011B)00 00

PID[3:0] 为 1011B 即 DATA1 数据包,主机没有输出任何数据。

  • 握手包数据:D2
PID
D2H(11010010B)

PID[3:0] 为 0010B 即 ACK 握手包

传输

事务构成传输

下文中所有的图片来自 USB2.0 spec

批量传输

  • 令牌包 + 数据包 + 握手包
    图片来自 USB2.0 spec

控制传输

  • 令牌包 + 数据包 + 握手包
    请添加图片描述

中断传输

  • 令牌包 + 数据包 + 握手包
    请添加图片描述

等时传输

  • 令牌包 + 数据包
    请添加图片描述
    等时传输并没有应答包,数据是否正确,可以由数据包的 CRC 校验来确认。至于出错的数据如何处理,由软件来决定。

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

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

相关文章

centos7安装samba

关闭防火墙 [rootlocalhost ~]# systemctl stop firewalld.service [rootlocalhost ~]# systemctl disable firewalld.service Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. Removed symlink /etc/systemd/system/basic.target.wants/f…

单目测距(yolo目标检测+标定+测距代码)

单目测距(目标检测标定测距)** 实时感知本车周围物体的距离对高级驾驶辅助系统具有重要意义,当判定物体与本车距离小于安全距离时便采取主动刹车等安全辅助功能,这将进一步提升汽车的安全性能并减少碰撞的发生。上一章本文完成了目…

Shell 标准输入和输出

无论是要交给程序处理的数据,还是控制脚本的简单命令,都少不了输入和输出。程序要做的第一件事就是处理如同一阴一阳的“输入与输出”。 1 、从文件获取输入 当我们希望向文件输出内容时,我们可以通过符号 > 或 >> 实现。而用代表…

[ Linux ] 线程独立栈,线程分离,Linux线程互斥

目录 1.线程栈 1.1pthread_t 1.2用户级的线程id与内核LWP的对应关系 2.分离线程 2.1 pthread_detch 3.线程互斥 3.1互斥相关概念 3.2 互斥量mutex 3.3 售票系统案例验证共享变量会有问题 3.4 解决抢票问题 3.5互斥量的接口 3.5.1初始化互斥量 3.5.2 销毁互斥量 3…

MSF之ssh_login漏洞

ssh_login准备实操准备 目标机:windows xp 攻击机:kali 工具:metasploit framework 实操 先查看两机器的ip kali的ip为172.17.0.1 xp的ip为192.168.17.130 互相ping一下 没问题。 打开msf search ssh_login 爆出模块 use 0 show o…

vue项目打包流程与反向代理Nginx的使用

目录 前言 参考文章 正文 1.打包前的配置工作 做反向代理的原因(Vue项目打包后Proxy失效的问题): 2.Nginx使用 前言 突发灵感想学习下打包,第一反应是学习webpack,翻找一通后发现用不着webpack,因为…

ORB-SLAM2 --- Tracking::UpdateLocalPoints函数

目录 1.函数作用 2.函数流程 3.code 4.函数解析 1.函数作用 更新局部关键点。先把局部地图清空,然后将局部关键帧的有效地图点添加到局部地图中。 2.函数流程 这是更新局部地图中的一个小函数,我们在Tracking::UpdateLocalKeyFrames更新了局部关键…

C++ Reference: Standard C++ Library reference: Containers: map: map: value_comp

C官网参考链接&#xff1a;https://cplusplus.com/reference/map/map/value_comp/ 公有成员函数 <map> std::map::value_comp value_compare value_comp() const;返回值比较对象 返回一个比较对象&#xff0c;该对象可用于比较两个元素&#xff0c;以获得第一个元素的键…

Python 基础| Python 直接赋值、深拷贝和浅拷贝

先看这三个词的意思我觉得菜鸟的总结就很好 Python 直接赋值、浅拷贝和深度拷贝 | 菜鸟教程 直接赋值&#xff1a;其实就是对象的引用&#xff08;别名&#xff09;。 浅拷贝(copy)&#xff1a;拷贝父对象&#xff0c;不会拷贝对象的内部的子对象。 深拷贝(deepcopy)&#xf…

采购过程中会遇到的四种风险!如何管理和控制?

采购风险通常是指采购过程可能出现的一些意外情况&#xff0c;这些情况都会影响采购预期目标的实现。采购风险通常是由管理不善引起的&#xff0c;本文解释了采购过程中会遇到的四种风险&#xff0c;并介绍通过正确实施8Manage SRM采购管理系统&#xff0c;可以有效管理和控制它…

说说Python程序的执行过程

1. Python是一门解释型语言&#xff1f; 我初学Python时&#xff0c;听到的关于Python的第一句话就是&#xff0c;Python是一门解释性语言&#xff0c;我就这样一直相信下去&#xff0c;直到发现了*.pyc文件的存在。如果是解释型语言&#xff0c;那么生成的*.pyc文件是什么呢&…

工程项目管理的特点

工程项目管理是一种只关注工程项目的项目管理。它使用与任何其他类型的项目管理相同的标准方法和流程。这种专业化可能会吸引任何想要进入项目管理领域的具有工程背景的人。 工程项目管理与工程管理 工程管理侧重于对具有以下特点的工程师和工程任务的管理&#xff1a; 1、…

java UDP通信程序DatagramSocket数据接收

在查看本文前 您可以先看看我的文章 java UDP通信程序DatagramSocket数据发送 对UDP有一个基本的了解 然后这里我们就直接看代码了 我们先创建一个包 包下创建两个类 分别是 sendOut 发送类 参考代码如下 import java.io.IOException; import java.net.DatagramPacket; impo…

【Flutter 笔记系列 第 3 篇】如何正确对待Name source files using `lowercase with underscores`

相信很多安装了一些提示插件的小伙伴都遇见过 Name source files using lowercase with underscores flutter 提示 如下图 此时会有两种选择 1.能跑就行&#xff0c;无视它 2.好烦&#xff0c;我也没干什么怎么就提示不规范了。 3.一定是哪里出了问题&#xff0c;我要找到…

高通Ride软件开发包使用指南(8)

高通Ride软件开发包使用指南&#xff08;8&#xff09;6.9跟踪6.10 基础感知延迟分析6.10.1生成CSV6.9跟踪 用户可以使用Google Chrome中的跟踪功能分析代码的执行浏览器以下步骤中的示例显示如何分析Foundation SDK相机知觉 必须启用相关日志条目&#xff0c;因为跟踪使用SD…

说说Spring事件发布机制

文章目录前言一、 使用到事件发布机制的源码二、Springboot启动过程中用到的部分事件三、Springboot中的监听器四、自定义事件源&#xff0c;事件监听器和事件发布器4.1 目录结构4.2 事件源4.3 事件监听器4.4 事件帮助器4.4.1 事件发布帮助接口4.4.2 事件发布帮助接口实现类4.4…

运维就业现状怎么样?技能要求高吗?

运维至少需要知道哪些知识才可以去面试&#xff1f; 有一个答案对这一话题的解读非常深入&#xff0c;体系化的分析了所需掌握的技术、工作内容、性质及可发展的方向等等&#xff0c;今天特别分享给大家&#xff0c;按照这个发展&#xff0c;运维则已不需担心就业、薪酬等问题了…

MySQL -2 指令

客户端SQL指令记录&#xff1a; -- 针对 数据库和针对数据表 &#xff08;一&#xff09;数据库 1. 查看当前所有数据库&#xff1a;show databases; 2. 创建数据库&#xff1a;create database 数据库名 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; 3. 删除数据库&#…

【一建、一造经验分享】一建挺难的,要坚持才能得到

标签&#xff1a;【备考四年】、【2020全科通过一建】、【2021全科通过一造】 思绪回到2017年7月份&#xff0c;软考-项目管理师出成绩了&#xff0c;很幸运我通过了。由于通信行业及单位认可“以考代评”&#xff0c;所以我最先下手的是软考高级&#xff0c;拿证等同于高工。在…

程序员核心------详解调试(2)

所爱隔山海&#xff0c;山海皆可平&#xff0c;所念皆星河&#xff0c;星河不可及。 上课&#xff01; 接着上节课讲的调试&#xff08;1&#xff09;&#xff0c;本节课进一步讲解调试(2). 文章目录1.调试实例讲解&#xff08;2&#xff09;校招笔试题 2.如何写出好的&#…