USB协议详解第1讲(核心概念通俗理解)

news/2024/11/15 23:37:31/文章来源:https://www.cnblogs.com/linhaostudy/p/18352885

0.概括

USB协议学习中最重要几个概念如下,没有提及的就是对USB协议学习中不重要的或者编程不需要用到的。大家也不用着急,概念必须要学会,否则都不知道下面这些东西是什么还学什么通用串行总线协议,大家也不用怕,其实也没有那么高深莫测。

1.USB传输(Transfer)

2.USB传输中事务(Transaction)

3.USB事务中的包、包、包(Pack,重要的事情说3遍)

4.USB 主机

5.设备(Device)

6.配置(Configuration)

7.接口(Interface)

8.端点(Endpoint)

9.管道(Pipe)

10.USB各种各样非常重要的描述符(Descriptor)

1.USB传输(Transfer)

2.事务(Transaction)

3.包(Pack)的概念

USB传输、事务、包是从不同层次上去说明一次数据交互的三个概念。

举个例子可能更好些,"某领导和一个早起的程序员进行了一次交流,说了5件事"

OK,其实这里的"这次交流"就相当于USB的一次传输,"说了5件事"就相当于这次传输过程中的5个事务,当然每件事肯定有若干句对话,就相当于每个事务里面的各种包。

其实通讯协议就是如此,都是从现实生活中抽象出来的,任何通讯协议都可以类比现实生活中人与人之间的交流方式。

4.USB 主机(Host)

形象比作公司领导。领导完完全全控制小弟,任何事情必须领导先发话了小弟才能说话,领导不发话,小弟憋死也不能说出来。任何事物都是USB主机发起的。

5.设备(Device)

形象比作小弟本人。设备里面存储有设备描述符表来描述设备的样子,每一个设备只能有一个设备描述符表。后期我会给大家看代码让大家看下是不是如此(STM32 USB和ZYNQ 7000 USB)

6.配置(Configuration)

对设备的配置,这种配置作为数据结构可以存在多个,主机可以控制设备选择哪个具体的配置,但是设备当前只能选择一个配置。我们来想想,一个领导招聘了一个小弟,可以让这个小弟去写代码(配置1),或者让这个小弟去画电路图(配置2)等等,我们就举两个例子说明问题。由上面我们可以知道,USB设备可能有一个或者多个配置,我们常见到的USB设备一般都只有一个配置。

7.接口(Interface)

好了,领导让这个小弟去写代码,可以只写C++软件,当然为了提高效率,有时候既要写C++软件,也要写C#软件,还得写Python软件。其实每个配置信息里面包含了接口的数量,一个接口就是一个功能,一个配置可以有多个接口(一个小弟可以会多种语言),也就是一个USB设备通过接口可以扩展多个功能。

8.端点(Endpoint)

一个接口完成一种功能,每种接口(功能)配有1个或者多个端点。 端点是主机与设备之间通讯数据的接收或来源,要实现通讯功能,接口必须有端点的配备才可以,主机要给设备发送数据,端点就是数据的接收器,主机要给设备要数据,端点就是数据的发送器,然后通过多个端点配合接收和发送各种数据实现某个接口的某种功能。所以大家注意了,端点的依附于接口上的。其实一个端点就是一段存放接收和发送数据的缓冲区。这段缓冲区有一定的属性,在USB设备中,我们用端点描述符来描述这段缓冲区的属性。后期看代码。

9.管道(Pipe)

主机和端点之间的数据传输就是通过管道,看不见摸不着,也没代码,给大家附个逻辑图看看。

10.USB各种各样非常重要的描述符

USB描述符可以说是很多学生头疼和理解不全面的问题,没关系,逐一攻破,别怕。USB描述符主要是对USB设备、USB配置、USB接口、USB端点、USB字符串(就是字符串而已)用数据结构的描述,主机会在枚举此设备的时候根据设备实现的描述符去确定设备到底是一个什么样的设备、设备需要的总线资源、和设备的通讯方式等等。在这里强调一点,因为设备类型不同还会有不同的其他描述符,如下图,HID类型的设备还会有HID描述符、报告描述符、物理描述符,这三个描述符后面在讲解HID设备的时候详细讲解,可谓HID核心的核心。

注:以上讲的前3个概念是与USB数据传输相关的,后面的7个概念是和USB通用总线设计理念有关(也就是这7个概念让USB成为世界上最成功、最通用的串行总线)。

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

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

相关文章

java流程控制:用户交互Scanner

1.首先输入new Scanner 然后Alt+回车 建立一个扫描器2.选择使用next方式或者nextLine方式进行接收3.使用if判断用户是否输入字符串,有hasNext和hasNextLine两种4.定义一个变量为next或nextLine方式5.输出该方式6.关闭IO类,防止占用资源next和nextLine方式的区别 next方式在输…

014.Vue3入门,style属性的几种绑定方法

1、代码如下:<template><div :style="{color:activeColor,fontSize:fontsize+px}">Style绑定1</div><div :style="styleObject">Style绑定2</div><div :style="[styleObject]">Style绑定3</div> <…

ABC366

A [link](https://atcoder.jp/contests/abc366/tasks/abc366_a]判断一下少的那个人加上剩下的所有票是否会超过另一个人,如果超过,不确定,否则目前票多的必胜。神奇的代码 #include<bits/stdc++.h>using namespace std;signed main(){int n,a,b;cin >> n >&g…

012.Vue3入门,class属性的几种绑定方法

1、代码如下:<template><h3>class绑定</h3><div :class="{ active:isActive , text-danger:hasError }">Class样式绑定1</div><div :class="classObject">Class样式绑定2</div><div :class="[arrActiv…

Linux发行版软件包数量

软件包数量很客观,质量上很主观。 Arch Linux软件包数量第一,并且软件安装上最全面,原因如下:还有一个重要的Arch Linux CN仓库非常非常实用,举两个例子clash-verge和deadbeef,前面是最常用,后面是很少见但是很好。这个软件包数量第一基本上没有异议,而Aur只需要简单的…

线性规划在数学建模中的两道例题

目录一、生产决策问题1.问题分析2.模型建立(1)符号设定(2)目标函数建立(3)约束建立3.代码求解(1)输入系数向量(2)输入不等式约束(3)输入等式约束与上下界(4)进行求解二、投料问题1.问题分析2.模型建立(1)符号设定(2)目标函数建立(3)约束建立3.代码求解(1)…

CF1674G Remove Directed Edges 题解

CF1674G 给出一个 \(n\) 点 \(m\) 边的有向无环图,你需要从中移除一些边,使得对于每一个点,其入度减少(如果原来有入边),出度也减少(如果原来有出边)。 当删完边以后,如果有一个点集,满足对于任两点 \((i,j)\) 可以从 \(i\) 走到 \(j\) 或可以从 \(j\) 走到 \(i\),那…

学习Java的第六周

第六周的学习记录来喽,本周按照黑马程序员课程安排,并没有学习新的内容,而是上了专题课:综合案例,通过这些练习题综合练习了前面所学的各个知识点,既复习了前面几周跟着课程自学的Java基础,也在做练习题的过程中“温故而知新”,学到了不少新知识新技巧,总体看来这些习…

Kubernetes-POD的健康检查

目录简介什么是探针Liveness Probe(存活探针)Readiness Probe(就绪探针)Startup Probe(启动探针)什么时候使用探针?何时使用存活探针(Liveness Probe)何时使用就绪探针(Read iness Probe)何时使用启动探针(Startup Probe)容器探测方法exechttpGettcpSocket容器探测…

一些结论

Prufer 序列 Prufer 序列可以将一个带标号 n 个节点的树用 [1,n]中的 n−2 个整数表示,即 n 个点的完全图的生成树与长度为 n−2 值域为 [1,n] 的数列构成的双射。Cayley 定理 节点个数为n的无根标号树的个数为nn-2 扩展 Cayley 定理 1 n个标号节点形成一个有s颗树的森林且给定…