USB协议基础篇

article/2025/9/21 7:36:51

初次接触USB的同学,可能会被里面各种名词给搞晕,下面就来梳理一下这些知识,希望能帮助大家理解USB。

目录

一,从最常见的名词说起

1.1 什么是USB

1.2 USB协议版本

1.3 USB接口分类

1.4 PIPE

1.5 endpoint

1.6 管道通信方式

1.7 传输方式

1.7 逻辑设备

1.8 interface

1.9 class协议

1.10 host/device

二,USB框架/拓扑结构

三. 重要概念

3.1 描述符(description)

3.2 class

四,USB数据传输过程

4.1 基本概念

4.2 枚举

4.3 数据传输


一,从最常见的名词说起

1.1 什么是USB

这个我就不多解释了,直译就是通用串行总线。再不明白的就百度。

1.2 USB协议版本

  • USB 1.0/1.1(low/full speed),传输速率最大为12Mbps
  • USB 2.0(high speed),传输速率最大480Mbps
  • USB 3.0(super speed),传输速率最大5Gbps

协议版本向下兼容

1.3 USB接口分类

  • Type A,即使我们电脑上的那种接口。
  • Type B,不太常见,比较方正的T型接口,有的嵌入式开发板会用。
  • Type C,现在开始流行起来了,最大的好处就是可以盲插,而不用区分正反。
  • Micro/mini,手机上比较常见。

不管哪种接口,用的线都是4根,只是形状不同而已。

1.4 PIPE

usb通信的最基本形式是通过USB设备里的endpoint,而主机和endpoit之间的数据传输就是通过pipe

1.5 endpoint

端点是有方向的,主机到从机成为out端点,从机到主机成为in端点。从这个说明看出端点是单方向的。(除了0端点)

1.6 管道通信方式

pipe中的数据通信方式有两种,一种是stream一种是messagemessage要求进出进出方向必须要求同一个管道,默认就使用ep0作为message管道

1.7 传输方式

USB endpiont有四种类型,分别对应了不同的数据传输方式,分别为control transfers控制传输interrupt transfers中断传输Bluk Data transfers批量传输Isochronous Data Tranfers等时传输
控制传输通常用于配置设备,获取设备信息,发送命令到设备

1.7 逻辑设备

逻辑设备就是一系列端点的组合,逻辑设备与主机之间的通信发生在一个主机的缓冲区和设备的一个端点之间。

1.8 interface

一个逻辑设备可能包含若干个接口,每个接口包含1个或多个端点。每个接口表示一种功能。一个接口对应一个驱动程序。例如usb扬声器就包含一个键盘接口和一个音频流接口

1.9 class协议

USB协议中除了定义一些通用软硬件电气特性,还包含各种各样的class协议,用来为不同的功能定义各自的标准接口和具体总线上的数据交互内容和格式。例如u盘的Mass storage class、通用数据交换CDC class

1.10 host/device

二,USB框架/拓扑结构

USB架构中, hub负责检测设备的连接和断开,利用其中断IN端点(Interrupt IN Endpoint)来向主机(Host)报告。在系统启动时,主机轮询它的根hub(Root Hub)的状态看是否有设备(包括子hub和子hub上的设备)连接。

三. 重要概念

3.1 描述符(description)

谈到USB描述符,不得不说USB最强悍的地方就在这里。一个口可以插很多的设备,可以插U盘、上网卡、音频设备、还有的是复合设备,一个设备插上后可以虚拟出多个设备出来
主设备之所以能区分不同的从设备,靠的就是描述符。 于是USB协议里就规定了各种不同的USB描述符。让我们先看一下USB协议里四大描述符之间的关系

+------设备描述符+----------配置描述符1+----------接口描述符1+----------端点描述符1+----------端点描述符2+....+----------接口描述符2+----------端点描述符1+....+....+----------配置描述符2+----------接口描述符1+----------端点描述符1+----------端点描述符2+....+....+....

3.1.1 设备描述(device description)

故名思意用来描述USB设备的,一个设备只有一个设备描述符,包含了设备类型、设备遵循的协议、厂商ID、产品id、序列号等,一个完整的设备描述符如下:

DEVICE DESCRIPTORbLength: 18bDescriptorType: 0x01 (DEVICE)bcdUSB: 0x0200bDeviceClass: Vendor Specific (0xff)bDeviceSubClass: 255bDeviceProtocol: 255bMaxPacketSize0: 64idVendor: Marvell Semiconductor, Inc. (0x1286)idProduct: Unknown (0x812a)bcdDevice: 0x0000iManufacturer: 3iProduct: 2iSerialNumber: 0bNumConfigurations: 1

3.1.2 配置描述符(configrue description)

配置描述就是用来配置设备的,没错,就是这么简单。但是要记住一点:一个设备同一时刻只能有一种配置生效,而且要区分配置和设置的区别。还是来看一下配置描述符的内容

CONFIGURATION DESCRIPTORbLength: 9bDescriptorType: 0x02 (CONFIGURATION)wTotalLength: 121bNumInterfaces: 4bConfigurationValue: 1iConfiguration: 0Configuration bmAttributes: 0xc0  SELF-POWERED  NO REMOTE-WAKEUP1... .... = Must be 1: Must be 1 for USB 1.1 and higher.1.. .... = Self-Powered: This device is SELF-POWERED..0. .... = Remote Wakeup: This device does NOT support remote wakeupbMaxPower: 250  (500mA)

设置是什么,暂时不多解释,后面再谈。

3.1.3 接口描述符(interface description)

一个interface就代表一个设备。USB interface用来处理一类 USB 逻辑连接, 例如一个鼠标, 一个键盘, 或者一个音频流. 一些 USB 设备有多个接口。也就是复合设备,例如一个 USB 扬声器可能有 2 个接口: 一个 USB 键盘给按钮和一个 USB 音频流。

INTERFACE DESCRIPTOR (2.0): class Vendor SpecificbLength: 9bDescriptorType: 0x04 (INTERFACE)bInterfaceNumber: 2bAlternateSetting: 0bNumEndpoints: 2bInterfaceClass: Vendor Specific (0xff)bInterfaceSubClass: 0x00bInterfaceProtocol: 0x00iInterface: 8

一个interface包含多个endpoint

3.1.4 端点描述符(endpoint description)

USB通信的基本物理单位,一个endpiont只能承载一个方向的数据。endpiont分为如下几种:

  • CONTROL

控制端点被用来允许对 USB 设备的不同部分存取. 通常用作配置设备, 获取关于设备的信息, 发送命令到设备, 或者获取关于设备的状态报告. 这些端点在尺寸上常常较小. 每个 USB 设备有一个控制端点称为"端点 0", 被 USB CORE用来在插入时配置设备. 这些传送由 USB 协议保证来总有足够的带宽使它到达设备.

  • INTERRUPT

中断端点传送小量的数据, 以固定的速率在每次 USB 主请求设备数据时. 这些端点对 USB 键盘和鼠标来说是主要的传送方法. 它们还用来传送数据到 USB 设备来控制设备, 但通常不用来传送大量数据. 这些传送由 USB 协议保证来总有足够的带宽使它到达设备.

  • BULK

块端点传送大量的数据. 这些端点常常比中断端点大(它们一次可持有更多的字符). 它们是普遍的, 对于需要传送不能有任何数据丢失的数据. 这些传送不被 USB 协议保证来一直使它在特定时间范围内完成. 如果总线上没有足够的空间来发送整个 BULK 报文, 它被分为多次传送到或者从设备. 这些端点普遍在打印机, 存储器, 和网络设备上.

  • ISOCHRONOUS

同步端点也传送大量数据, 但是这个数据常常不被保证它完成. 这些端点用在可以处理数据丢失的设备中, 并且更多依赖于保持持续的数据流. 实时数据收集, 例如音频和视频设备, 一直都使用这些端点.

BULK端点描述符数据内容如下:

ENDPOINT DESCRIPTORbLength: 7bDescriptorType: 0x05 (ENDPOINT)bEndpointAddress: 0x86  IN  Endpoint:61... .... = Direction: IN Endpoint.... 0110 = Endpoint Number: 0x6bmAttributes: 0x02.... ..10 = Transfertype: Bulk-Transfer (0x2)wMaxPacketSize: 512.... ..10 0000 0000 = Maximum Packet Size: 512bInterval: 0

3.2 class

class用来描述设备属于哪种设备,例如音频、键盘、U盘等。设备通过class来确认和加载相应的驱动。class分为device class 和interface class。具体的class值以及含义,参考define class。

https://www.usb.org/defined-class-codes

class 包含

  1. class
  2. subclass
  3. protocol

组合在一起,用来指出设备具体功能。

device class举例

DEVICE DESCRIPTORbLength: 18bDescriptorType: 0x01 (DEVICE)bcdUSB: 0x0200bDeviceClass: Miscellaneous (0xef)bDeviceSubClass: 2bDeviceProtocol: 1 (Interface Association Descriptor)bMaxPacketSize0: 64idVendor: Marvell Semiconductor, Inc. (0x1286)idProduct: Unknown (0x4e31)bcdDevice: 0x0100iManufacturer: 1iProduct: 2iSerialNumber: 3bNumConfigurations: 1

interface class举例

INTERFACE DESCRIPTOR (1.0): class CDC-DatabLength: 9bDescriptorType: 0x04 (INTERFACE)bInterfaceNumber: 1bAlternateSetting: 0bNumEndpoints: 2bInterfaceClass: CDC-Data (0x0a)bInterfaceSubClass: 0x00bInterfaceProtocol: No class specific protocol required (0x00)iInterface: 5

class值如图下所示:

四,USB数据传输过程

4.1 基本概念

  • 一个【传输(Transfer)】(控制、批量、中断、等时):由多个【事务(Transaction)】组成
  • 一个【事务(Transaction)】(IN、OUT、SETUP):由一多个【Packet】组成。

USB数据在【主机软件】与【USB设备特定的端点】间被传输。【主机软件】与【USB设备特定的端点】间的关联叫做【pipes】。一个USB设备可以有多个管道(pipes)。

4.2 枚举

  • 上电状态(usb device插入host)
    插入host后,host的每个hub对应端口上都有供电,连接着的设备就进入供电状态

  • host检测到device插入

    hub通过检测USB总线空闲时的差分线的高低电压来判断所连接设备的速度类型,当host发来Get_Port_Status请求时,hub就可以将此设备的速度类型信息回复给host。USB 2.0规范要求速度检测要先于复位(Reset)操作。

    根据是D+还是D-被拉高来判断到底是什么设备(全速/低速)插入端口。如下图。

  • Host了解连接的设备
    hub通过检测USB总线空闲(Idle)时差分线的高低电压来判断所连接设备的速度类型

  • host复位设备(不是正的复位设备,是复位USB通信)
    hub通过驱动数据线到复位状态(D+和D-全为低电平 ),并持续至少10ms

  • 主机发送Get_Descriptor请求获取默认管道的最大包长度
    默认管道(Default Pipe)在设备一端来看就是端点0。主机此时发送的请求是默认地址0,端点0,设备描述符的第8字节代表设备端点0的最大包大小

  • 设置地址
    主机给设备分配一个地址,在完成这次传输之后,设备进入地址状态(Address state),之后就启用新地址继续与主机通信。

  • 获取设备配置
    主机获取设备的信息

枚举就是从设备读取一些信息,知道设备是什么样的设备,如何进行通信,这样主机就可以根据这些信息来加载合适的驱动程序。调试USB设备,很重要的一点就是USB的枚举过程,只要枚举成功了,那么就已经成功大半了。

一旦获悉有新设备连接上来,主机就会发送一系列的请求(Resqusts)给设备所挂载到的hub,再由hub建立起一条连接主机(Host)和设备(Device)之间的通信通道。然后主机以控制传输(Control Transfer)的方式,通过端点0(Endpoint 0)对设备发送各种请求,设备收到主机发来的请求后回复相应的信息,进行枚举(Enumerate)操作。所有的USB设备必须支持标准请求(StandardRequests),控制传输方式(Control Transfer)和端点0(Endpoint 0)。

在讲解枚举之前,先大概说说USB的一种传输模式——控制传输。这种传输在USB中是非常重要的,它要保证数据的正确性,在设备的枚举过程中都是使用控制传输的。控制传输分为三个阶段:①建立阶段。②数据阶段。③确认阶段。 建立(setup)阶段:都是由USB主机发起,它是一个setup数据包,里面包含一些数据请求的命令以及一些数据。如果建立阶段是输入请求,那么数据阶段就要输入数据;如果建立阶段是输出请求,那么数据阶段就要输出数据。如果在数据阶段,即便不需要传送数据,也要发一个0长度的数据包。数据阶段过后就是确认阶段。确认阶段刚好跟数据阶段相反,如果是输入请求,则它是一个输出数据包;如果是输出请求,则它是一个输入数据包。确认阶段用来确认数据的正确传输。

4.3 数据传输

usb host与usbfunction之间采用的是一种“非对称”的传输,也就是说,无论usb接受数据还是发送数据,都是由usb host首先发起。
首先,主机发第1个packet给从机,声明数据传送方向,数据传输地址,数据传输类型。
其次,主机发第2个至第n个packet载有实际数据
最后,从机返回一个packet是一个ACK包,报告数据传输的结果,比如接受出错或成功等信息,这样主机
就可以借此了解到这次传输情况,从而有可能来作出相应措施如决定是否重发。

控制传输
一个Usb的控制式传输分为两个或三个阶段进行传输:setup stage,data stage(视情况而定),status stage。 首先发起setup,之后发起以data0为起始的setup data,最后usb function回应ack结束一次交互。

数据传输
USB除了EP0外,其它的EP都是有方向的,如果从机有数据要上发,先放到对应的EP的buf中,最迟等一个frame就会被host主动读走。


下面是我的个人微信公众号,关注【一个早起的程序员】精彩系列文章每天不断。

 


http://chatgpt.dhexx.cn/article/5RrDHeJY.shtml

相关文章

USB协议简介

1.USB协议简介 https://blog.csdn.net/songze_lee/article/details/77658094 2017年08月28日 23:20:16 songze_lee 阅读数:22978 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/songze_lee/article/details/7…

USB协议详解

本博客整理自网络,仅供学习参考,如有侵权,联系删除。邮箱:rom100163.com 一个transfer(传输)由一个或多个transaction(事务)构成,一个transaction(事务)由一个或多个packet(包)构成,一个packet(包)由一个或…

简单说说USB协议(一)

目录 USB是什么 USB协议的传输结构 USB的电气特性 拓扑结构 编码方式 描述符 USB是什么 USB,通用串行总线,是一种计算机与外围设备进行数据交互的通信协议。 任何东西的出现都是有理可循的,在以前计算机刚兴起的时候,要连接…

USB协议介绍

目录 前言 1、概述 1.1 USB协议 1.2 USB充电协议 1.3 USB接口 1.3.1 type-a 1.3.2 Type-C 1.3.3 USB2.0/3.0/3.1/3.2速率 1.3.4 ULPI/UTMI 前言 开始整理USB相关基础概念,仅用于基础介绍、USB概念入门。更深入的内容请参考USB协议手册。部分图文来自参考文…

usb 传输协议

USB,是英文Universal Serial Bus(通用串行总线)、支持设备的即插即用和热插拔功能。在1994年底由英特尔、IBM、Microsoft等公司联合提出的,在此之前PC的接口杂乱,扩展能力差,热拔插不支持等。USB正是为了解…

USB协议(1)USB基础知识

USB(Universal Serial Bus)是通用串行总线的缩写,它是连接计算机系统与外部设备的一种串口总线标准,也是一种输入输出接口的技术规范,被广泛地应用于个人电脑和移动设备等信息通讯产品,并扩展至摄影器材、数…

linux免费的内网穿透

参考:https://www.cpolar.com/blog/how-to-install-cpolar-under-android-termux-hyper-terminal 下载包:https://www.cpolar.com/download 由于我的linux版本是装在安卓手机上的Alpine linux,所以下载的是如下图版本 下载后使用xftp工具上传到服务器&…

钉钉内网穿透 免费内网穿透工具 让你的电脑成为web服务器

什么是内网穿透? 就是让你个人电脑内建立的网站,在外网可以访问,例如你的手机,其他电脑等。 例如你在电脑部署了一个web服务器,你在浏览器访问127.0.0.1可以打开这个网站,但是你用手机访问127.0.0.1却打不…

免费的内网穿透(钉钉)

1.简介 阿里钉钉提供的免费内网穿透,是基于ngrok 的,可以实现 Http 穿透,可以将我们本地服务暴露给外部访问,可以用作我们调试一些回调接口,或者共享一些文件。 优点:网速快,估计是台带宽为100…

免费 内网穿透工具 实测好用

花生壳:已卸载 免费的版本根本不支持http协议,只支持TCP。 星空内网穿透:已卸载 需要注册账号 需要加入QQ群 需要实名认证,填写身份证号 钉钉内网穿透: 没试验,只记录在此 Utools中的内网穿透&#x…

推荐一款真正永久免费的内网穿透

神卓互联内网穿透,是一款真正的永久免费的内网穿透,每月不限流量、访问地址固定不变。 目录 1. 安装神卓互联内网穿透工具 神卓互联内网穿透客户端 控制台-界面清洁-一目了然 2.添加本地web项目-创建映射规则 3.神卓互联-增加通道检测功能&#xff0…

(不打广告)推荐这款永久免费内网穿透软件-神卓互联

内网穿透是一种将内部网络中的应用程序公开到公共网络上的技术。在许多情况下,由于网络安全限制或配置问题,内部网络中的应用程序可能无法通过公共网络访问。这时,内网穿透技术就可以解决这个问题,使得我们可以在没有公共 IP 地址…

内网穿透工具(全免费)

文章目录 前言一、NATAPP是什么?二、使用步骤1.访问官网注册2.客户端下载3 登录,配置参数1 登录,购买免费隧道2 配置参数3 根据authtoken 运行 natapp.exe 4 试试效果 总结 前言 平时开发微信公众号,小程序, 或者给他人演示项目等,难免会遇到需要开通外网的情况,作…

无需设置路由器,无需公网ip 实现永久免费内网穿透

用网云穿在 N1 盒子上实现 Openwrt 的内网穿透 软路由器情况 N1(已经刷入 Armbian) 中使用 docker 创建 Openwrt 容器作为旁路由。 我的内网 ip 信息 内网 IP 因人而异,以下是我自己的设置 Armbian:192.168.123.2 Openwrt:192.168.123.10 思路 N1 的 Armbian 中部…

如何免费使用内网穿透

背景: 疫情期间公司不能上班,工作又不能落下,所以只能选择在家办公~;公司的部分网站是内网的,所以得想办法内网穿透。经过众多对比后选择了小蝴蝶内网穿透! 网址: www.npsvip.com 准备工作&…

永久免费的内网穿透

名称:DPFRP内网穿透 注册赠送30000GB流量,流量用完还可以用! 官网:frpc.cc 官网:fwqcz.com 1.打开官方网,注册账号 2.登录账号 3.个人中心 4.创建隧道 5.下载客户端 6.修改frpc.ini文件 在配置文件页面选择你刚才创建的服务器隧道,复制配…

钉钉免费实现内网穿透

场景: 有时候开发者想把私有电脑作为服务器,需要把开发机电脑上的项目暴露到公网,方便远程访问和调试,这时候就需要使用内网穿透,这里介绍一下阿里巴巴旗下钉钉内网穿透工具的使用 一、下载钉钉穿透工具,官…

【免费内网穿透】公网环境下,Windows系统远程桌面控制树莓派

系列文章 【免费内网穿透】公网环境下,Windows系统远程桌面控制树莓派【无需公网IP】为远程桌面树莓派配置固定的公网TCP端口地址 远程桌面控制树莓派,我们可以用xrdp协议来实现,它内部使用的是windows远程桌面的协议。我们只需要在树莓派上…

【群晖NAS】真·免费内网穿透方案 及踩坑合集

一.介绍 一篇科普贴,帮助那些刚入门NAS的朋友尽量避免踩坑。因为本人实践了其中几种穿透方案,也积攒了一些经验,跟大家分享一下。 在这里想说一句,现在网上充斥着各种《内网穿透方案对比》,可以负责任地说一下&#xf…

永久免费内网穿透不限制速度

市面上的免费内网穿透大都有格式各样的限制,什么限制流量啊,每个月要签到打卡啊,还有更改域名地址等,只有神卓互联内网穿透是永久免费没有限制的,白嫖也可以。 这篇文章分享了3个方案,按照性能和综合指标排…