通讯协议----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)创建数据库数据库的编码集和校验集查看系统默认字符集以及校验规则查看数据库支持的字符集查看数据库支持的字符集校验规则校验规则对数据库的影响数据库的删除 数据库的备…

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

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

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

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

SpringSecurity接口权控(权限控制)

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

【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 --…

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…

经典算法----折半查找

二、经典算法之折半查找 很多同学对于二分法就是&#xff1a;一看就会&#xff0c;一写就废&#xff01;&#xff01;&#xff01;&#xff01; 易错点1&#xff1a;以下循环方式写哪一个&#xff1f; 方案一&#xff1a;while(left<right) 方案二&#xff1a;while(left…

【MATLAB】兔子机器人总系统_动力学模型解读(及simulink中的simscape的各模块介绍)

1、动力学模型 Rectangular Joint 控制平面上&#xff08;x&#xff0c;y轴&#xff09;的移动&#xff0c;去掉以后&#xff0c;机器人在原地翻滚不移动 Rigid Transform 坐标转换&#xff0c;B站视频已收藏 去掉&#xff0c;机体与地面贴合 此处的作用是设定机体的初…

网站建设:承诺网站打开速度,这个要求合理吗?

很多甲方都要求网站的打开速度&#xff0c;这个要求合理吗&#xff1f;其实说合理也合理&#xff0c;说不合理也不合理。 承诺打开速度的合理性的一面 要求网站打开速度是一个合理的要求。网站的打开速度对于用户体验和网站的成功至关重要。以下是一些原因说明为什么网站打开速…

2023年全国职业院校技能大赛 GZ073网络系统管理赛项 模块A:网络构建

2023年全国职业院校技能大赛 GZ073网络系统管理赛项 模块A:网络构建 卷II 一. 拓扑图 二.有线网络配置 三.无线网络配置 四.出口网络配置 二、有线配置 S1.txt S1#show running-config Building configuration... Current configuration : 5008 bytes! version RGOS 10…

[OpenWrt 22.03] ttylogin添加登录密码与禁止登录的配置

ttylogin 的使用 Openwrt 串口默认是没有密码的。Openwrt启动后,一个默认的密码将被启用去保护ssh登录和页面(http)登录,而串口登录密码却是空缺的。 对于 Openwrt,当内核初始化后,就会启动第一个进程 init,init进程会进行一系列的系统初始化工作,然后会读取 /etc/in…

微服务系列(一)springcloudAlibaba之Nacos注册和配置中心及openFeign远程调用

一&#xff0c;认识微服务 我们先看看开发大型项目采用单体架构存在哪些问题&#xff0c;而微服务架构又是如何解决这些问题的。 1.1 单体架构 单体架构&#xff08;monolithic structure&#xff09;&#xff1a;整个项目中所有功能模块都在一个工程中开发&#xff1b;项目部署…