USB标准请求命令

USB 控制传输实战:11个标准请求命令与设备枚举流程详解 本文深入解析USB控制传输的11个标准请求命令与设备枚举流程,涵盖建立阶段、数据阶段和状态阶段的详细架构。通过实例代码和状态机解析,帮助开发者掌握USB设备与主机的通信协议,提升固件开发和驱动编程能力。重点介绍SET_ADDRESS等关键请求的实现细节及错误处理机制。 阅读详情

标准的USB设备请求命令是用在控制传输中的“初始设置步骤”里的数据包阶段(即DATA0,由八个字节构成)。标准USB设备请求命令共有

11个,大小都是8个字节,具有相同的结构,由5 个字段构成(字段是标准请求命令的数据部分),结构如下(括号中的数字表示字节数,首字

母bm,b,w分别表示位图、字节,双字节):

bmRequestType(1)+bRequest(1)+wvalue(2)+wIndex(2)+wLength(2)

各字段的意义如下:

1、bmRequestType:D7D6D5D4D3D2D1D0

     D7=0主机到设备
       =1设备到主机;

     D6D5=00标准请求命令
         =01 类请求命令
         =10用户定义的命令
         =11保留值

     D4D3D2D1D0=00000 接收者为设备
               =00001 接收者为设备
               =00010 接收者为端点
               =00011 接收者为其他接收者
               =其他 其他值保留

2、bRequest:请求命令代码,在标准的USB命令中,每一个命令都定义了编号,编号的值就为字段的值,编号与命令名称如下(要注意这里的命令代码要与其他字段结合使用,可以说命令代码是标准请求命令代码的核心,正是因为这些命令代码而决定了11个USB标准请求命令):

     1.获取状态 Get Status (00H)
       A:[To Device]获取设备的状态:
         *.位0:自供电(0表示总线供电;1表示自供电).
         *.位1:远程唤醒(0表示不支持远程唤醒;1表示远程唤醒).
         *.位2~15:保留.
         *.一般选择总线供电,不支持远程唤醒,所以返回数据就是0x0000.
       B:[To Interface]获取接口的状态:
         *.接口状态的16位字节全部保留,所以返回数据就是0x0000.
       C:[To Endpoint]获取端点的状态:
         *.位0:Halt(0表示端点允许;1表示端点禁止).
         *.位1~15:保留(复位为0).

     2.清除特性 Clear Feature (01H)
       A:[To Device]清除设备的远程唤醒功能,并返回一个空包.
       B:[To Endpoint]解禁端点.
   
     3.设置特性 Set Feature (03H)
       A:[To Device]设置设备的远程唤醒功能,并返回一个空包.
       B:[To Endpoint]禁止端点.

     4.设置地址 Set Address (05H)
       A:设置设备地址.

     5.获取描述符 Get Descriptor (06H)
       A:[To Device]获取设备描述符:
         *.描述当前USB协议的版本号.设备端点0的FIFO大小.USB设备的ID号等.
       B:[To Configuration]获取配置描述符:
         *.描述USB设备接口个数及是否有自供电能力等.
       C:[To Interface]获取接口描述符:
         *.描述端点0以外的物理端点个数等信息.
       D:[To Endpoint]获取端点描述符:
         *.描述端点0各端点的传输类型和最大信息包大小和端点的传输方向(IN/OUT).

     6.设置描述符(可选,无法更新) Set Descriptor (07H)

     7.获取配置信息 Get Configuration (08H)

     8.设置配置 Set Configuration (09H)
       A:[To Configuration]设置配置描述符.
       B:[To Interface]设置接口描述符.
       C:[To Endpoint]设置端点描述符.

      9.获取接口信息 Get Interface (0AH)     
     10.设置接口 Set Interface (0BH)

     11.SYNCH_FRAME(0CH)
        用于设备设置和报告一个端点的同步帧.


     标准的USB请求命令中的Descriptor
     Descriptor即描述符,是一个完整的数据结构,可以通过C语言等编程实现,并存储在USB设备中,用于描述一个USB设备的所有属性,USB主机是通过一系列命令来要求设备发送这些信息的。它的作用就是通过问答节中的命令Get Descriptor作来给主机传递信息,从而让主机知道设备具有什么功能、属于哪一类设备、要占用多少带宽、使用哪类传输方式及数据量的大小,只有主机确定了这些信息之后,设备才能真正开始工作,所以描述符也是十分重要的部分,要好好掌握。标准的描述符有5种,USB为这些描述符定义了编号:

     1——设备描述符
     2——配置描述符
     3——字符描述符
     4——接口描述符
     5——端点描述符

     上面的描述符之间有一定的关系,一个设备只有一个设备描述符,而一个设备描述符可以包含多个配置描述符,而一个配置描述符可以包含多个接口描述符,一个接口使用了几个端点,就有几个端点描述符。这间描述符是用一定的字段构成的

标准USB设备请求命令 一、标准的usb设备请求命令控制传输是最重要和结构最复杂的一种传输类型。控制传输的“初始设置步骤”中包含了1 个8 字节的DATA0 数据包( 参见图6 .6) , 这8 字节的数据包是主机用来发送控制阶段中的请求命令的, 而这些请求命令是主机配置USB 设备的关键。这里就来详细分析这8 字节请求命令的结构和内容。1.设备请求命令的格式1)bmRequestType字段2)bRequest字段标准请 阅读详情

相关推荐

USB系列五:USB设备配置描述符(重要)

在USB总线接口协议中,对于USB外部设备功能特征是通过端点(Endpoint)、配置(Configuration)和接口(Interface)来描述的,这些就是典型的USB描述符。 USB主机通过设备请求来读取外部设备的USB描述符,可以掌握该设备的接口信息和功能。USB设备请求提供了USB设备描述符的读取和写操作,包括标准设备请求和自定义请求两种。USB描述符和USB设备请求是USB外设的主要内容,是USB设备功能的体现。

挨踢农民的博客 9561

usb设备请求命令详解

USB设备请求命令 :bmRequestType + bRequest + wValue + wIndex + wLength  编号 值  名称 (0) 0  GET_STATUS:用来返回特定接收者的状态 (1) 1  CLEAR_FEATURE:用来清除或禁止接收者的某些特性 (x) 2 为将来保留 (2) 3  SET_FEATURE:用来启用或激活命令接收者的某些特性 (x)

xiongjiao0610的专栏 1673

USB 之二 USB2.0 规范详解 第二部分

注意 对于物理特性仅做简单说明 主要是针对 USB 2.0 规范的第九章、第十章和第十一章。之前章节见后续见 第一部分 下面的举例报文为使用Bus Hound监听的U盘插入时的报文,报文见后文附件。   USB 设备第一次连接到主机时, 要接收主机枚举( Enumeration) 和配置(Configuration) ,目的是让主机知道设备功能、是哪一类的USB 设备、占用多少资源、使用了...

技术干货 1万+

USB标准请求

1.USB标准设备请求的结构 1.1 标准请求 bmRequestType 的D6~D5为00的请求,USB协议定义了11个标准请求(bRequest),其名字与相应的bRequest的值如下表: 表3.5.3是各个标准请求的结构及需要传输的数据,常用的几个请求有:GET_DESCRIPTOR、SET_ADDRESS和SET_CONFIGURATION。下面详细介绍这几个请求: 1.2 GET_DESCRIPTOR 请求 需要注意的是 wValue, wIndex, wLength 这三个域都是两字

BUG之友的博客 1840

RK3588开发板实战:从零开始移植Ubuntu 24.04(讯为SDK版)

本文详细介绍了如何在RK3588开发板上从零开始移植Ubuntu 24.04系统(讯为SDK版),涵盖开发环境准备、SDK解析、根文件系统定制、驱动适配、系统集成与烧录等全流程。通过实战案例,帮助开发者快速掌握RK3588开发板的系统移植技巧,适用于嵌入式开发与定制化Linux系统构建。

sand8的博客 437

【HarmonyOS 5】鸿蒙APP使用【团结引擎Unity】开发的案例教程

以下是基于团结引擎开发鸿蒙Unity应用的详细案例教程,整合环境配置、工程适配、跨语言通信等核心环节。

2201_75709314的博客 2483

从零开始学USB(十六、标准的USB请求)

所有USB设备都响应设备默认控制管道上主机的请求。 这些请求是使用控制传输进行的。 请求和请求的参数将在Setup数据包中发送到设备。 主机负责建立表9-2中列出的字段中传递的值。 每个Set...

枫潇潇 5585

手把手教你用SlowFast训练自定义手势识别数据集(附FFmpeg抽帧技巧)

本文提供了一份基于SlowFast架构训练自定义手势识别数据集的完整实战指南。文章重点剖析了数据准备的核心挑战,详细讲解了利用FFmpeg进行高、低帧率抽帧的技巧,并介绍了构建半自动标注流水线、生成符合SlowFast要求的AVA格式数据集文件的具体方法。最后,针对手势识别场景,给出了关键的模型训练配置与调优建议,帮助开发者高效完成从数据到模型的全流程。

s1t2u3的博客 909

ZYNQ 7000 USB标准请求命令XUsbPs_StdDevReq函数

/*****************************************************************************/ /** * This function handles a standard device request. * * @param InstancePtr is a pointer to XUsbPs instance of the controller. * @param SetupData is a pointer to the data st.

一个早起的程序员 1346

Arduino DHT11 ESP8266 在OneNet云平台上读取 温湿度

#include "ESP8266.h" #include "dht11.h" #include "SoftwareSerial.h" #define SSID "540ND" #define PASSWORD "" #define HOST_NAME "api.heclouds.com" #define DEVICE_ID "" #define HOST_PORT (80) String APIKey = " "; #define INTER

weixin_45852947的博客 2430

手把手教你排查I2C通信故障:当上拉电阻配置不当会发生什么?

本文深入解析I2C通信中上拉电阻配置不当导致的常见故障,包括波形畸变和通信失败现象。通过示波器波形分析和系统化解决方案,帮助工程师快速诊断和优化I2C总线性能,特别适用于嵌入式系统和智能设备开发场景。

weixin_33725722的博客 341

标准的USB设备请求命令

标准的USB设备请求命令是用在控制传输中的“初始设置步骤”里的数据包阶段(即DATA0,由八个字节构成),请看回问答四的内容。标准USB设备请求命令共有11个,大小都是8个字节,具有相同的结构,由5个字段构成(字段是标准请求命令的数据部分),结构如下(括号中的数字表示字节数,首字母bm,b,w分别表示位图、字节,双字节): bmRequestType(1)+bRequest(1)+wvalue(...

weixin_30268921的博客 241

华为OD机试 - 小火车最多人时所在园区站点(Java 2024 E卷 100分)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 996

标准USB设备请求命令(摘抄自高手 “大头BB“)

当该命令获取的是配置描述符时, 设备将会按顺序返回该配置描述符, 以及该配置支持的所有接口描述符和接口使用的所有端点描述符。而当数据发送方向是设备到主机时, wLength 的值是设备能够发送的最大数据包的大小, 当然, 设备实际发送的数据可以比wLength 的值小。控制传输的“初始设置步骤”中包含了1 个8 字节的DATA0 数据包( 参见图6 .6) , 这8 字节的数据包是主机用来发送控制阶段中的请求命令的, 而这些请求命令是主机配置USB 设备的关键。填入的该字段内容是特性选择器。

DvXu123456的博客 533

JEDEC 标准半导体功率循环热阻测试(JESD51 系列)

【代码】JEDEC 标准半导体功率循环热阻测试(JESD51 系列)

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 470

TC8:IPv4_HEADER_05-09

所有主机都必须准备好接受最多576个字节的数据报我们知道最大传输单元MTU通常是1500个字节,也就是说一条IP数据报的Header+payload最大1500,那为什么这条测试用例又要求主机准备好接受最多576个字节的IP数据报呢。

jasonj333 512

USB设备请求命令详解

USB设备请求命令 :bmRequestType + bRequest + wValue + wIndex + wLength 编号 值 名称 (0) 0 GET_STATUS:用来返回特定接收者的状态(1) 1 CLEAR_FEATURE:用来清除或禁止接收者的某些特性 (x) 2 为将来保留(2) 3 SET_FEATURE:用来启用或激活命令接收者的某些特性 (x) 2 为...

weixin_34212189的博客 1285

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

USB学习日志(一) 标准请求

USB通信需要由端点(endpoint)和管道(pipe)来完成,端点相当于传输的地址,管道相当于传输的路径。具体定义见USB2.0协议。USB设备一旦连接到主机,首先就要与主机进行通信,把设备信息传给Host,同时Host根据USB设备特性进行适当配置之后才可以正常使用,而这些工作都是由端点0(USB设备唯一的一个双向端点)通过默认信息通道(有格式的信息通道)完成的,这个过程主要是通

seth1104的专栏 1964

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

八、USB标准请求指令

    控制传输是最重要和结构最复杂的一种传输类型。整个USB枚举的过程,都是使用了控制传输。USB枚举过程中的指令,我们称为标准的USB设备请求指令。包括了: 标准USB设备请求指令 请求命令名称 bRequest字段值 作用 GET_STATUS 0 用于返回特定接收者的状态信息 , 比如端点、接口等的状态 CLEAR_FEATURE 1 主机清...

beArobot的博客 2614

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

USB设备请求命令

  USB设备的产品信息和设备的能力在USB的描述符中进行了定义。 当USB功能设备连接到USB主机上后,USB主机通过标准的USB请求命令和USB功能设备通信,读取USB描述符,从而获得USB的功能设备的产品信息和功能配置,以便加载相应的USB驱动。   标准的USB设备请求命令是用在控制传输中的“初始设置步骤”里的数据包阶段(即DATA0,由八个字节构成),标准USB设备请求命令共有11个,...

weixin_33973600的博客 122

USB请求和USB描述符

USB请求和USB描述符 一、USB命令   在USB规范里,对命令一词提供的单词为“Request”,但这里为了更好的理解主机与设备之间的主从关系,将它定义成“命令”。   所有的USB设备都要求对主机发给自己的控制命令作出响应,USB规范定义了11个标准命令,它们分别是:Clea...

139
上一篇: USB描述符详解
下一篇: wav文件格式分析详解
alien75
博客等级 码龄25年 195粉丝 116原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值