1.认识USB协议

目录

前言

在嵌入式场景的具体体现

USB通信协议

总结


前言

在这之前,我们需要认识USB是什么东西,它是一种通信协议,协议只是规定数据的,在物理层面上,它可以有多种表现形式。在我们日常生活中也非常常见,包括电脑的USB接口Type-C接口,这都是USB的物理接口,具体参考以下文章,建议看完。

USB学习(1):USB基础之接口类型、协议标准、引脚分布、架构、时序和数据格式

这篇文件介绍的非常详细,在日常生活中我们常见的一些接口都是属于USB的接口,可能大部分人没有关注过并不知道,可以先把概念过一遍,至于时序我下面会讲解。

 在嵌入式场景的具体体现

不管是在学习过程中用的开发板还是研发产品时用的开发板,在设计电源电路的时候,都是考虑用USB供电的,USB总线除了通信外,还可以进行供电,这是它的特性。


mrico usb,一种老式的接口,具体参考stm32f103c8t6最小系统板

type-c 这个接口我就不多说了  这是我自己画的开发板的电源电路

我们可以知道,我们整个系统的供电都来源于USB总线,而USB总线的引脚分布也没有你想象的那么复杂,接口不同引脚的分布和数量也不一样。

这里以USB2.0标准为例

我们通信最终用到的无非就是两根信号线 :D+ (数据正极或DP)     D-(数据负极或DM)

所以在信号引脚上是比较简洁的,但是它的速度可不慢,根据标准,USB可以分为低速(LS)、全速(FS)、高速设备(HS)。

低速(1.5Mbps)   

全速(12Mbps)

高速(480Mbps)。

 上述文章中提到了USB的时序,它采用的是反向不归0编码(可以了解一下),而且D+和D-这对信号线是属于差分信号线,差分信号的特点就是抗干扰能力强,所以通信稳定。看到这里,可能有人的会迫不及待的分析时序了,但是其实没必要,因为这种东西你不可能用IO去模拟的,没有意义,而且编码的完成是完全由硬件完成,比如你告诉硬件你要发送字节0xAE,然后硬件它自己编码,然后去跳动这两根线。

所以我们只要知道就好了,这两根线的编码和我们之前的UART,SPI,I2C这种类型传输本质一样,按位传输(固定低位先发),但是差分信号是根据两根线来编码

逻辑1:D+ 为高电平  D-为低电平

逻辑0:D+ 为低电平  D-为高电平

空闲或未连接:D+ 和 D-电平相同

我们知道了差分信号,是根据D+ D- 这两根信号的电压差来检测编码的,当受到干扰时,两根线的跳变方向是一致的,所以不会对数据有影响。

讲到这里,我们可以发现,USB传输好像没有时钟线,那它是怎么同步速度的?很简单,因为USB的通信本质是 异步串行半双工。在总线上可以挂载多个设备,但是同一时间主机只能和一个设备通信,而且方向只能是单向的,要么主机到设备,要么设备到主机。至于速度的同步,很简单,就是发送脉冲信号,收到之后计算速度,原理和串口类似,大家约定好速度,收到开始的信号就开始计算,以达到同步。

到这里,我们就从物理层建立上了通信,但是这个通信并不是USB通信协议,只是说简单由(NRZI)编码根据差分信号线传输的通信。

USB通信协议

通信协议的本质是抽象的规定,它并非实体,它只是一个规定,规定你的数据要以什么表现形式才能在它的规定中算有效数据或特定数据,否则它就不认或直接算你错误,USB通信协议也是如此,如果你想和一个有通信协议的设备通信,那么你就必须按它的协议来。

如果你控制硬件发送了一些不属于USB协议的数据,通过USB接口发送到了主机电脑,电脑有可能会死机或者蓝屏(PS:我们部门的老师傅告诉我的),所以一般从0实现USB通信的要么有一台特定电脑以及USB分析仪(这个很贵)。但是我们是在硬件USB外设的基础上,所以你想控制它发出不属于USB协议的数据是不可能的,因为它是被设计好的,除非你拿D+  D-去IO控制,可能会有上述异常。

 在USB协议中,我们需要为我们的数据证明,它是USB协议的数据,所为我们需要发送特定的数据来声明 (我的数据是合法合规的)

以下这段为转载文章开头挂载的链接文章中 USB数据格式的介绍

我们可以知道,它的数据格式是以数据包形式进行的,数据包有不同的类型

令牌数据包

数据数据包

握手数据包

起始帧数据包

而数据包又有不同的字段,具体的字段根据类型又不一样。不同的字段由不同的数据组成。

SYNC:同步字段,用于同步数据的信号,每个包的头必须是这个字段

EOP:  结束字段,用于表示一个包的结束,每个包的结束必须是这个字段

还有一系列字段等等,具体看上述图片中的文章,大概过一遍。

接下来我们看一个令牌数据包(setup)实际波形。信号的时间轴从左往右流逝。

我们看 PID字段 8位

在USB规范中,PID值是低位 ,补码是高位,所以setup的值为 10110100 (左为低位)

看信号分析值  左到右也是  10110100 ,由于在传输中是反正不归零编码,1为上一个电平,0是翻转电平,所以在电压上表现为  低高高高低低高低,逻辑值为(01110010)(左为低位)

 逻辑值为(01110010)

 D+: 低高高高低低高低

 D-:高低低低高高低高

所以到这里就非常清晰了,因为上述文章中的博主在说字段值的时候,没有说明是左为低位高位,而且我这里是以实际信号和官方规范为准,这样就说的通了。 

基本解析到这就应该很清楚,我们学习的时候过一遍时序就可以了,我上面拿一个字段来练习,因为这些东西硬件都会帮我们完成,我们根本不用操心,只需要知道什么时候发令牌包,什么时候发什么包就可以了,比如在一次传输中  一般先发令牌数据包  在发数据数据包若干个,最后发握手数据包,只有数据数据包的数据才是真正意义上的数据。

总结

USB通信协议本质上就是在搭建好的通信物理层上,一层又一层的规定,根据应用特性扩展的复杂规定,其复杂程序已经出过不少书籍。但是对我们而言,很多东西有规律可循,而且我们也不需要关心这么多。

在USB协议中一层又一层数据包中包含的数据数据包,就是真正意义上发送的数据,但是当主机解开USB协议(正确找到接收到数据数据包中的数据字段)拿到真正的数据后,它怎么知道这个数据是拿来干嘛的?它怎么知道这个数据该怎么用,所以又引出了子协议的概念,也就是设备类的概念。这个我们在下一章再说。

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

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

相关文章

FebHost:什么是挪威.no域名,如何注册?

挪威国家域名介绍 挪威是一个位于北欧的国家,北面和西面是大西洋和北海,东面和南面则与瑞典、芬兰接壤。挪威是一个高度发达的经济体,其政府在经济管理和可持续发展方面也取得了很多成就。挪威的人均GDP在世界范围内排名非常靠前&#xff0c…

【Unity】 使用代码分析(Roslyn Analyzers)实现自动代码审查(Code Review)

索引 Roslyn AnalyzersCode Review自动 Code Review 案例1.public、internal权限的字段建议以大写字母开头。2.private、protected权限的字段建议以下划线小写字母开头。3.不建议直接继承 MonoBehaviour,建议继承至 HTBehaviour。4.不建议使用 Input 判断输入或获取…

命令执行。

命令执行 在该项目的readme中,描述了怎么去调用的flink 通过java原生的runtime来调用flink,下一步就是去看看具体的调用过程了,是否存在可控的参数 找到具体提交命令的类方法CommandRpcClinetAdapterImpl#submitJob() 这里要确定command&am…

C++-6

使用模板类&#xff0c;实现顺序栈。 #include <iostream>using namespace std; template <typename T> class Seqlite {T data[30];int len0; public:void head_inst(T date);void head_dele();void show(); }; template <typename T> …

Phi-3-mini-4k-instruct 的功能测试

Model card 介绍 Phi-3-Mini-4K-Instruct 是一个 3.8B 参数、轻量级、最先进的开放模型&#xff0c;使用 Phi-3 数据集进行训练&#xff0c;其中包括合成数据和经过过滤的公开可用网站数据&#xff0c;重点是 高品质和推理密集的属性。 该型号属于 Phi-3 系列&#xff0c;Mini…

Django框架之ORM操作

一、选择数据库 1、默认数据库 Django默认的数据库是sqlite3数据库 DATABASES {default: {ENGINE: django.db.backends.sqlite3,NAME: BASE_DIR / db.sqlite3,} }2、指定数据库 修改连接到MySQL数据库 DATABASES {default: {ENGINE: django.db.backends.mysql,# 数据库名…

一、安装Redis并运行

Windows安装Redis 1.打开网址下载 下载地址&#xff1a;https://github.com/tporadowski/redis/releases。 Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择 我选择的是 然后一步步安装 可以参考&#xff1a;https://blog.csdn.net/zbx931197485/article/d…

李廉洋:4.29黄金原油最新走势分析,做单必看策略,

传统定价框架下&#xff0c;黄金兼具货币、商品和金融三重属性&#xff0c;对应货币、抗通胀和避险价值&#xff0c;因此通常与美元、美债利率反向变动。但近期这一定价规律“失灵”了&#xff0c;黄金、利率和美元同涨。三者同涨后&#xff0c;一个月后续转为下跌的频率超过一…

JS - 以工厂模式和原型模式方式建造对象、JS的垃级回收机制、数组的使用

创建对象的方式 使用工厂方法来建造对象 在JS中我们可以通过以下方式进行创建对象&#xff1a; var obj {name:"孙悟空",age:18,gender:"男",sayName:function(){alert(this.name);}};var obj2 {name:"猪八戒",age:28,gender:"男",…

【Java EE】总结12种锁策略以及synchronized的实现原理

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

基于yolov5实时实例分割

是一个结合了最新技术进展&#xff08;State-of-the-Art, SOTA&#xff09;的实时实例分割项目&#xff0c;基于著名的YOLOv5目标检测架构&#xff0c;并对其进行扩展以实现对图像中每个对象实例的精确像素级分割。以下是该项目的中文介绍&#xff1a; YOLOv5&#xff1a; YOL…

Java后端利用百度地图全球逆地理编码,获取地址

声明&#xff1a;本人是在实习项目的时候遇到的问题 一.使用Api分为四步骤全球逆地理编码 rgc 反geo检索 | 百度地图API SDK 步骤1,2自行完成 接下来去获取AK 二.申请AK 登录百度账号 点击创建应用&#xff0c;选择自己想用的服务&#xff0c;我只单选了逆地理编码&#xff…

go语言实现简单认证样例

目录 1、代码实现样例 2、postman调用 1、代码实现样例 package mainimport ("net/http""strings""github.com/dgrijalva/jwt-go""github.com/gin-gonic/gin" )var (// 密钥&#xff0c;用于验证 JWT 令牌signingKey []byte("…

【1762】java校园单车投放系统Myeclipse开发mysql数据库web结构jsp编程servlet计算机网页项目

一、源码特点 java校园单车投放管理系统是一套完善的java web信息管理系统 采用serlvetdaobean&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S 模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#…

C语言基础知识笔记——万字学习记录

Hi&#xff0c;大家好&#xff0c;我是半亩花海。本文主要参考浙大翁恺老师的C语言讲解以及其他博主的C语言学习笔记&#xff0c;进而梳理C语言的基础知识&#xff0c;为后续系统性学习数据结构和其他语言等知识夯实一定的基础。&#xff08;其他博主学习笔记的链接包括&#x…

网络服务SSH-远程访问及控制

一.SSH远程管理 1.SSH介绍 SSH&#xff08;Secure Shell&#xff09;是一种安全通道协议&#xff0c;最早是由芬兰的一家公司开发出来&#xff0c;并且在IETF &#xff08;Internet Engineering Task Force&#xff09;的网络草案基础上制定而成的标准协议。主要用来实现字符…

案例-部门管理-删除

黑马程序员JavaWeb开发教程 文章目录 一、查看页面原型二、查看接口文档三、开发1、Controller2、Service&#xff08;1&#xff09;service接口层&#xff08;3&#xff09;service实现层 3、Mapper4、Postman 一、查看页面原型 二、查看接口文档 三、开发 1、Controller 因…

短视频账号“四部定位法”,让流量噌噌上涨 沈阳短视频剪辑培训

在当下短视频的风潮中&#xff0c;企业纷纷涉足这一领域&#xff0c;希望通过短视频平台吸引用户、提升品牌知名度、促进销售转化。 然而&#xff0c;面对海量的内容和激烈的竞争&#xff0c;企业如何才能在短视频领域脱颖而出&#xff1f; 在企业涉足短视频领域之前&#xf…

用友裁应届

下半年准备来用友的24应届生们&#xff0c;请三思&#xff01;&#xff01;&#xff01; 我是23届某9研究生&#xff0c;2月份用友以绩效低为由被裁&#xff08;我一个应届生跟老员工比绩效&#xff0c;搞笑呢&#xff09;。 半年被裁&#xff0c;找工作太难了&a…

# 使用 spring boot 时,@Autowired 注解 自动装配注入时,变量报红解决方法:

使用 spring boot 时&#xff0c;Autowired 注解 自动装配注入时&#xff0c;变量报红解决方法&#xff1a; 1、使用 Resource 代替 Autowired 注解&#xff0c;根据类型注入改为根据名称注入&#xff08;建议&#xff09;。 2、在 XXXMapper 上添加 Repository 注解&#xff0…