首页 > 其他分享 >USB协议详解第1讲(核心概念通俗理解)

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

时间:2024-08-10 22:38:34浏览次数:13  
标签:USB 配置 接口 描述符 详解 端点 通俗 设备

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,配置,接口,描述符,详解,端点,通俗,设备
From: https://www.cnblogs.com/linhaostudy/p/18352885

相关文章

  • SMA2:代码实现详解——Image Encoder篇(FpnNeck章)
    SMA2:代码实现详解——ImageEncoder篇(FpnNeck)总配置YAML文件、OmegaConf和hydraSAM2的官方实现是使用yaml文件来配置整体的模型结构与参数的。关键代码如下:defbuild_sam2(config_file,ckpt_path=None,device="cuda",mode="eval",hydra_overr......
  • 【Rust光年纪】探秘Rust地理空间数据处理利器:详解六大库
    探秘Rust地理空间数据处理与索引库:六大利器揭秘前言地理空间数据处理和空间索引是当今许多应用程序的重要组成部分,因此使用Rust语言开发的相关库具有极大的实用价值。本文将介绍几个用于处理地理空间数据和进行空间索引的Rust库,包括quadtree-rs、spatial、R-tree、Geosp......
  • RWKV模型详解与开源代码
    RWKV模型详解目录RWKV模型详解1.背景与简介2.RWKV原理与模型介绍2.1架构2.2TokenShift2.3WKV操作符2.4输出门控2.5Transformer-like训练2.6RNN-like推理2.7额外优化3.与现有大模型对比4.开源代码(代码来自论文中的开源链接:[RWKV](https://github.com/Blink......
  • MySQL基础详解(2)
    文章目录多表查询MySQL函数数字函数字符串函数日期函数高级函数使用Python操作MySQL1、安装第三方模块pymysql2、操作MySQLMySQL中的多表查询是数据库操作中非常常见且重要的一个环节,多表查询是数据库查询中非常强大的功能,能够让你根据需要从多个表中提取和组合数......
  • MySQL基础详解(1)
    文章目录Sql1.什么是Sql2、SQL通用语法3、SQL分类DDL:操作数据库、表3.1操作数据库:CRUD3.2操作表CRUDDML:增删改表中数据1.添加数据:2.删除数据:3.修改数据:DQL:查询表中的记录1.语法:2.基础查询3.条件查询4.排序查询其他函数5.聚合函数6.分组查询7.分页查询:DCL:管理用户......
  • Java IO 流详解
    概述流是一个抽象的概念,代表了数据的无结构化传递。流的本质是数据在不同设备之间的传输。在Java中,数据的读取和写入都是以流的方式进行的在Java中,根据数据流向的不同,可以将流分为输入(Input)流和输出(Output)流。根据单位的不同,可以将流分为字节流和字符流。根据等级的不同,可以......
  • 【Linux必备工具】自动化构建工具makefile的使用详解
    ✨                        听风八百遍,才知是人间    ......
  • JAVA里的xml(详解)
    1.xml1.1概述【理解】万维网联盟(W3C)万维网联盟(W3C)创建于1994年,又称W3C理事会。1994年10月在麻省理工学院计算机科学实验室成立。建立者:TimBerners-Lee(蒂姆·伯纳斯·李)。是Web技术领域最具权威和影响力的国际中立性技术标准机构。到目前为止,W3C已发布了200多......
  • 记录5:ESP32S3的usb使用
    0、前期准备1、会使用idf开发环境2、懂得kconfig1、知识储备1.1概述​TingUSB是一个开源的跨平台的USB主机/设备的usb协议栈,常用在mcu开发平台,由于不采用动态分配内存以及阻塞所有中断事件,将中断事件要处理的事情都放在,非中断函数中处理,因此该usb栈内存设计非常安全......
  • C语言指针变量详解(函数指针,函数指针数组,转移表)
    指针变量 1.字符指针变量在指针的类型中我们知道有⼀种指针类型为字符指针char*;⼀般使⽤:intmain(){charch='w';char*pc=&ch;*pc='w';return0;}还有⼀种使⽤⽅式如下:intmain(){const......