通讯协议----USB2.0协议

USB2.0协议

  • USB总线的信号
    • 常见信号
    • 数据编解码和位填充
  • USB设备的检测
  • USB设备的挂起
  • USB传输
    • Packet
      • Packet包种类
      • Data PID作用
    • Transaction
    • Transfer
      • 控制传输(Control Transfers):
      • 中断传输(Interrupt Transfers)
      • 同步传输(Isochronous Transfers)
      • 大容量数据传输(Bulk Transfers)
      • 控制传输的过程


USB总线的信号

使用差分传输,两个数据线D+和D-	
差分信号1:D+高电平;D-低电平
差分信号0:D-高电平;D+低电平

常见信号

USB总线的信号:USB总线的信号说经过编码最后呈现的格式
对于全速设备J状态是差分信号1,K状态时差分信号0

常见信号状态介绍
ldle空闲状态J状态,数据发、送前后总线的状态
Suspend挂起状态3ms以上的J状态
Resume恢复信号20ms的K状态+低速EOP
Reset信号主机拉低两根信号线(SE0状态)10ms,把设备设置到默认的未配置状态
SYNC3个KJ状态切换,后跟随2位时间的K状态
SOP包传输开始标志,从IDLE状态切换到K状态
EOP包传输开始标志,持续2位时间的SE0信号,后跟随1位时间的J状态

数据编解码和位填充

常见信号是由输入信号经过编码得到,下面是具体过程

-1-位填充:输入数据先经过位填充再编码
  数据流中每6个连续的“1”,就要插入1个“0”,从而保证编码数据出现电平变化
-2-编码:USB采用NRZI(非归零编码)对发送的数据包进行编码
  输入数据0, 编码成“电平翻转”
  输入数据1, 编码成“电平不变”
  编码出来的序列,高电平:J状态;低电平:K状态
-3-解码:接收方赋值解码NRZI码流,然后识别出填充位,并丢弃它们

原始数据----填充数据----NRZI编码数据的过程
在这里插入图片描述
编码出的数据即为USB总线的信号

在这里插入图片描述

USB设备的检测

主机通过设备在D+或D-上的上拉电阻检测设备的连接和断开事件,并由此判别设备的速度
  D+1.5K上拉:高速、全速设备
  D-1.5K上拉:低速设备
主机先把高速设备检测为全速设备,然后再通过总线握手机制来识别高速和全速设备

USB设备的挂起

总线连续3ms没有信号传输时,会进USB挂起模式Suspend
USB周期性地发送SOF信号或Keep Alive信号防止设备挂起
  高速信道上,主机按照125us( +/- 65ns )的周期发送SOF
  全速信道上,主机按照1ms( +/- 500ns )的周期发送SOF
  低速信道上,主机按照1ms的周期发送Keep Alive (End of Packet)

USB传输

传输依赖于Transfer,一个Transfer有多个Transaction,每个Transaction有三个Packet。

Packet

在这里插入图片描述
不同的Packet类型由不同的PID决定,包括Token令牌包、Data数据包、Handshake握手包、Special特殊包
在这里插入图片描述

Packet包种类

Token令牌包
在这里插入图片描述
SOF包:用于高速设备的周期性地发送防止挂起
在这里插入图片描述
DATA包
在这里插入图片描述
Handshake包
在这里插入图片描述

Data PID作用

数据同步:
• RX方PID为期待收到的PID,
• Reset后发送方接受方pid都是data0,
•当收到正确的PID时,RX翻转,并返回ACK,否则不翻转

数据重发:
在这里插入图片描述

• RX收到期望收到的PID,发送ACK,但ACK丢失,
• TX处PID不翻转,
• RX收到的PID与RX的PID不一致,
• RX忽略此数据,发送ACK
TX收到ACK翻转PID,此时TX发送的PID与RX期望的PID一样

Transaction

Transaction可以分成三类
  Setup transaction:主机用来向设备发送控制命令
  DataIN transaction:主机用来从设备读取数据
  DataOUT transaction:主机用来向设备发送数据

Transaction的packet组成
  Token packet:总是由主机发出
  Data packet:包含此次transaction的数据负载
  Handshake packet:可选对于Data的应答

Transfer

USB协议定义了四种传输类型控制传输,中断传输,同步传输,大容量数据传输

控制传输(Control Transfers):

非周期性,突发,双向,用于命令和状态的传输。
在这里插入图片描述

中断传输(Interrupt Transfers)

周期性,低频率,单向, 允许有限延迟的通信
在这里插入图片描述

  • 全速端点,中断传输的间隔时间在1ms到255ms之间,
  • 低速端点,间隔时间限制在10ms到255ms之间,
  • 对于高速端点,间隔为2^(bInterval−1)×125us, bInterval的值在1到16之间

同步传输(Isochronous Transfers)

周期性、单向,整个带宽都将用于保证同步传输的数据完整,不支持出错重传,并且在数据中保存时间戳的信息
在这里插入图片描述

大容量数据传输(Bulk Transfers)

非周期性,突发,单向,大容量数据的通信,数据可以占用任意带宽,并容忍延迟
在这里插入图片描述

控制传输的过程

控制传输包括建立过程(Setup Stage)–数据过程(Data Stage)–状态过程(Status Stage)
在这里插入图片描述
在这里插入图片描述
• SETUP过程transaction
主机发送令牌包:SETUP---->主机发送数据包:DATA0---->设备返回握手包:ACK或不应答
• Data过程transaction
主机发送令牌包:DataIN或DataOut---->发送方发送PID为1数据包---->接受方返回握手包
• Status过程的transaction
主机发送令牌包:DataOUT或DataIN(Data相反)---->发送方发送PID为1数据包---->接受方返回握手包

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

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

相关文章

安装QT时,安装进程(qt.tools.perl)运行期间出现错误

安装QT时,安装进程(qt.tools.perl)运行期间出现错误 解决方法

【MySQL】数据库的操作(1)

【MySQL】数据库的操作(1) 目录 【MySQL】数据库的操作(1)创建数据库数据库的编码集和校验集查看系统默认字符集以及校验规则查看数据库支持的字符集查看数据库支持的字符集校验规则校验规则对数据库的影响数据库的删除 数据库的备…

对象实例、类信息、常量、静态变量分别在运行时数据区的哪个位置?

在Java中,对象实例、类信息、常量、静态变量在运行时数据区的位置如下: 对象实例(Object Instance):对象实例通常存储在堆(Heap)中。堆是用于存储动态分配的对象的内存区域,每个对象…

TypeScript 之 介绍和入门

TypeScript简介 它是由微软开发的自由和开源的编程语言, 属于静态编程语言,在编写的时候会直接检测错误。 它是JavaScript的超集, TypeScript需要通过编译器将其编译生成为JavaScript文件才能运行,因此该语言的运行要比JavaScrip…

06 - 镜像管理之:基础知识

1 了解镜像 Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。 但注意, 镜像不包含任何动态数据&#…

什么是Linux?

目录 什么是Linux? Linux一般可以做什么? 什么是Linux? Linux是一个开源的类Unix操作系统。它的内核由林纳斯托瓦兹(Linus Torvalds)在1991年首次发布。Linux操作系统遵循自由和开源软件发展模型,意味着…

信呼OA普通用户权限getshell方法

0x01 前言 信呼OA是一款开源的OA系统,面向社会免费提供学习研究使用,采用PHP语言编写,搭建简单方便,在中小企业中具有较大的客户使用量。从公开的资产治理平台中匹配到目前互联中有超过1W的客户使用案例。 信呼OA目前最新的版本是…

【微软技术】介绍

微软技术 微软是一家全球领先的技术公司,创立于1975年,由比尔盖茨和保罗艾伦共同创立,微软开发、制造、许可、支持和销售各种电脑软件、消费电子产品、个人电脑和相关服务。以下将介绍一些微软的关键技术和产品: Windows 操作系统…

SpringSecurity接口权控(权限控制)

最近项目需要做“接口权限”控制&#xff0c;但不需要做RBAC (Role Based Access Control)这种大的业务。于是有下面的方案。 一、项目pom文件 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artif…

WSL2-在Ubuntu-22.04上安装MySQL(deb包)并配置ODBC

启用 systemd 通过链接启用 systemdhttps://learn.microsoft.com/zh-cn/windows/wsl/systemd#how-to-enable-systemd sudo nano /etc/wsl.conf #在文件中添加如下内容&#xff1a; [boot] systemdtrue #添加后重启WSL wsl.exe --shutdown 否则会出现如下错误&#xff1a;ERRO…

【HTML】HTML基础7.1(无序列表)

目录 标签 属性 效果 注意 标签 <ul> <li>列表里要装的东西</li> <li>列表里要装的东西</li> <li>列表里要装的东西</li> </ul> 属性 type&#xff1a; circle空心圆disc实心圆square方框 效果 circle空心圆效果…

operator-sdk入门(mac)

1. 安装operator-sdk brew install operator-sdk 2. 安装kubebuilder brew install kubebuilder 3.初始化一个operator脚手架 3.1 新建一个文件夹 redis-operator 3.2 执行初始化 operator-sdk init --domain lyl.com --repo github.com 参数介绍 可以通过operator-sdk --…

推荐系统评价指标介绍--CG, DCG, NDCG

基础概念 首先明确CG这一系列指标既可用于打分场景&#xff0c;又可用于点击场景&#xff0c;用于判断模型给出的推荐列表 y ^ \hat{y} y^​和用户打分&#xff08;点击列表&#xff09; r e l rel rel之间的相似性。  基于CG的评价指标的计算 基础流程为&#xff1a; 依据前…

STM32CubeMX学习笔记11 ---RTC实时时钟

1、RTC实时时钟简介 STM32的实时时钟RTC是一个独立的定时器&#xff0c;RTC模块拥有一组连续计数的计数器&#xff0c;在相应软件配置下&#xff0c;可提供时钟日历的功能&#xff0c;修改计数器的值可以重新设置系统当前的时间和日期 RTC模块和时钟配置系统&#xff08;RCC_B…

android开发教程百度网盘,成功入职网易月薪35K

前情 首先介绍一下自己的情况吧&#xff0c;由于当年高中年少轻狂&#xff0c;不努力&#xff0c;差二本线16分。我自己也没有意识到学历的区别&#xff0c;最终听了家里的安排上了一个专科&#xff0c;电气专业。 现在想想都很后悔&#xff0c;当年为什么没有自己的主见&…

Golang各版本的GC详解

go v1.3的标记清除法 清除的第一步&#xff1a;stw将可达对象标记删除未被标记对象 go v1.5三色标记法 从根节点出发&#xff0c;将下一个节点遍历为灰色&#xff0c;放入灰色集合中遍历灰色节点集合&#xff0c;把灰色能到达的节点标记为灰色&#xff0c;把自身标记为黑色&a…

【C语言】还有柔性数组?

前言 也许你从来没有听说过柔性数组&#xff08;flexible array&#xff09;这个概念&#xff0c;但是它确实是存在的。C99中&#xff0c;结构中的最后⼀个元素允许是未知⼤⼩的数组&#xff0c;这就叫做『柔性数组』成员。 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xf…

C if...else 语句

一个 if 语句 后可跟一个可选的 else 语句&#xff0c;else 语句在布尔表达式为 false 时执行。 语法 C 语言中 if…else 语句的语法&#xff1a; if(boolean_expression) {/* 如果布尔表达式为真将执行的语句 */ } else {/* 如果布尔表达式为假将执行的语句 */ }如果布尔表…

记录第一次使用QT

今晚和舍友准备搞一个QT网盘的项目&#xff0c;我之前也没有用过QT。在舍友的指导下&#xff0c;我安装了QT creator&#xff0c;然后完成了第一次的QT的编译运行&#xff0c;记录一下这激动的感觉&#xff08;2024-03-07)。 使用qmake进行的编译。qDebug进行输出调试hello qt…

掌握Nodejs高级图片压缩技巧提升web优化

掌握Nodejs高级图片压缩技巧提升web优化 在当今的数字时代,图像在网络开发中发挥着至关重要的作用。它们增强视觉吸引力、传达信息并吸引用户。然而,高质量的图像通常有一个显着的缺点——较大的文件大小会减慢网页加载时间。为了应对这一挑战并确保快速加载网站,掌握 Node…