USB协议详解第1讲(核心概念通俗理解)
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成为世界上最成功、最通用的串行总线)。
USB协议详解第1讲(核心概念通俗理解)的更多相关文章
- 【转载】TCP /IP协议详解
首先,TCP/IP不是一个协议,而是一个协议族的统称. 里面包括了IP协议,IMCP协议,TCP协议,以及http.ftp.pop3协议等等. TCP/IP协议分层 提到协议分层,我们很容易联想到IS ...
- DNS协议详解
DNS协议详解 简介 DNS(Domain Name System)域名系统,主要实现的功能是将域名转换成ip地址的一个服务.它是由一个分层的DNS服务器实现的分布式数据库,同时.他也是一个使得主机能 ...
- 高效开发之SASS篇 灵异留白事件——图片下方无故留白 你会用::before、::after吗 link 与 @import之对比 学习前端前必知的——HTTP协议详解 深入了解——CSS3新增属性 菜鸟进阶——grunt $(#form :input)与$(#form input)的区别
高效开发之SASS篇 作为通往前端大神之路的普通的一只学鸟,最近接触了一样稍微高逼格一点的神器,特与大家分享~ 他是谁? 作为前端开发人员,你肯定对css很熟悉,但是你知道css可以自定义吗?大家 ...
- TCP /IP协议详解【转】
转自:https://www.jianshu.com/p/0cf648510bce?utm_campaign=maleskine&utm_content=note&utm_medium ...
- RocketMQ详解(四)核心设计原理
专题目录 RocketMQ详解(一)原理概览 RocketMQ详解(二)安装使用详解 RocketMQ详解(三)启动运行原理 RocketMQ详解(四)核心设计原理 RocketMQ详解(五)总结提高 ...
- OSPF协议详解
CCNP OSPF协议详解 2010-02-24 20:30:22 标签:CCNP 职场 OSPF 休闲 OSPF(Open Shortest Path Fitst,ospf)开放最短路径优先协议,是 ...
- bt协议详解 DHT篇(上)
bt协议详解 DHT篇(上) 最近开发了一个免费教程的网站,突然产生了仔细了解bt协议的想法,这篇文章是bt协议详解系列的第三篇,后续还会写一些关于搜索和索引的东西,都是在开发这个网站的过程中学习到的 ...
- linux usb 驱动详解
linux usb 驱动详解 USB 设备驱动代码通过urb和所有的 USB 设备通讯.urb用 struct urb 结构描述(include/linux/usb.h ). urb 以一种异步的方式 ...
- HTTP协议详解以及URL具体访问过程
1.简介 1.1.HTTP协议是什么? 即超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准.从 ...
- (转)HTTP 协议详解(基础)
HTTP 协议详解 作者: 小坦克 来源: 博客园 发布时间: 2012-02-14 13:32 阅读: 95523 次 推荐: 99 原文链接 [收藏] 相关文章:HTTP 协议 ...
随机推荐
- ios的idp/iep证书的生成方法,无苹果电脑
在这个多端开发的年代,出现了很多优秀的开发框架,比如hbuilder和uniapp等等.我们可以使用这些框架来开发APP,假如我们要打包ios的app,则需要一个idp/iep证书. 那么这个证书是如 ...
- web3 产品介绍:Decentraland:开启你的虚拟现实区块链游戏之旅
Decentraland(https://decentraland.org/)是一款基于区块链技术的虚拟现实游戏,它将去中心化的概念引入游戏世界,为玩家提供了一个创造.交互和探索的虚拟空间.在Dece ...
- 【Hearts Of Iron IV】钢铁雄心4 安装笔记
一.解决Steam购买游戏和下载问题 我可能是正版受害者 Steam平台这个游戏本体是购买锁国区的 然后在淘宝上面买激活码激活的 都激活过了的Key,所以放出来也无所谓了 钢铁雄心4学员版本体:7B0 ...
- 一群伪专家讨论“motherland”和“fatherland”,说说个人的观点
看了一个视频: 中国的文化里在找妈,美国的文化里在找爸!如何真正教育子女? ============================================= ================ ...
- 升级JDK时涉及的工作任务
JDK版本升级,通常引入新的语言特性.新的API,废弃一些API,从而导致一些不兼容的现象. 因此在升级产品使用的JDK版本时,通常有如下考虑: 新产品包括新建设的项目以及刚启动不久的项目,使用高版本 ...
- 零基础学习人工智能—Python—Pytorch学习(四)
前言 接续上一篇的optimizer的学习. optimizer 代码和上一篇文章的一样,如下: import torch import numpy as np import torch.nn as ...
- Linux命令lsscsi详解
@ 目录 一.什么是scsi 二.常见硬盘接口 1. IDE接口的硬盘 2. SCSI接口硬盘 3. SATA接口类型 三. lsscsi命令 1. lsscsi 命令安装 2. lsscsi命令英文 ...
- 2023 PTA天梯赛补题(L1 & L2)
2023 天梯赛 L1 & L2 补题 L1 L1-089 最好的文档 输入输出题 #include<bits/stdc++.h> using namespace std; int ...
- 处理报错 ResizeObserver loop completed with undelivered notifications.
// 处理报错 ResizeObserver loop completed with undelivered notifications. export const handlerResizeObse ...
- 使用Packer构建镜像
什么是Packer Packer 是一个强大的工具,它可以帮助我们轻松地构建各种类型的镜像,如虚拟机镜像.Docker 镜像等. Packer 的工作原理是通过定义一个配置文件,该文件描述了要构建的镜 ...