标准USB设备请求命令

2023-05-16

一、标准的usb设备请求命令

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

1.设备请求命令的格式

这里写图片描述

1)
bmRequestType字段

这里写图片描述

2)
bRequest字段

标准请求命令的编号

请求命令名称编号( bRequest 字段的值)描述
GET_STATUS0用来返回特定接收者的状态
CLEAR_FEATU RE1用来清除或禁止接收者的某些特性
Reserved for future use2
SET_FEATURE3用来启用或激活命令接收者的某些特性
Reserved for future use4
SET_ADDRESS5用来给设备分配地址
GET_DESCRIPTOR6主机获取设备的特定描述符
SET_DESCRIPTOR7修改设备中有关的描述符,或者增加新的描述符
GET_CONFIGURATION8主机获取设备当前设备的配置值(注同上面的不同)
SET_CONFIGURATION9主机指示设备采用的要求的配置
GET_INTERFACE10获取当前某个接口描述符编号
SET_INTERFACE11主机要求设备用某个描述符来描述接口
SYNCH_FRAME12设备设置和报告一个端点的同步帧

3)
wValue字段

命令信息。占用2 个字节。每一种请求命令都可以自行来定义这个字段的内容。根据不同的命令,含义也不同

4)
wIndex字段

索引信息。占用2 个字节。命令也可以自定义该字段的内容, 但一般该字段的内容为索引值或偏移量。

a.传输端点索引值

这里写图片描述
D7为方向位,为0时表示输出OUT端点,1为输入IN端点
D3~D0表示端点号

b.传输接口索引值

这里写图片描述

5)
wLength字段

传输的数据大小。共有2 字节。该字段表示在控制传输的“可选数据步骤”中要传输的数据大小。当然, 数据是主机发送给设备的, 那么该字段中的值便是实际的数据大小; 而当数据发送方向是设备到主机时, wLength 的值是设备能够发送的最大数据包的大小, 当然, 设备实际发送的数据可以比wLength 的值小。

二、命令详解

USB标准命令

这里写图片描述

获取描述符类型

这里写图片描述

1)
GET_STATUS获取状态请求

具体见上图

a.返回数据:

(1)命令接收者为设备时, 设备返回的数据格式如图所示。仅D1 和D0 位有效。
D1 位用于表示设备的远程唤醒能力, 当D1 = 1 时, 表示设备被使能, 能够远程唤醒; 当D1 = 0 时, 表示设备的远程唤醒能力被禁止。在系统复位后,D1 位默认为0。主机可以通过ET_FEA TURE和CLEAR_FEAT URE 命令来改变设备的远程唤醒能力。D0 位指示设备的供电模式, 当D0 = 0时, 表示设备是总线供电; 当D0 = 1 时, 表示设备为自供电。主机无法改变设备的供电模式。
这里写图片描述
(2)命令接收者为接口时, 返回的数据不带有任何信息,如图所示。
这里写图片描述

(3)命令接收者为端点时, 返回的状态信息数据格式如图所示。
仅D0 位有效, 指示该端点是否被禁止( Halt )。当D0 = 0 时, 表示该端点处于禁止状态; 当D0 = 1 时, 表示该端点状态正常。
这里写图片描述

2)
CLEAR_FEATURE清除特性请求

这里写图片描述

a.wValue 字段:

填入的该字段内容是特性选择器。这个特性选择器其实就是代表了一些特定的需要被清除或禁用的特性代码,如下图所示。
这里写图片描述
比如DEVICE_REMOTE_WAKEUP 特性选择器, 就是主机用来管理设备的远程唤醒的能力。通过此请求命令, 主机可以禁用设备的远程唤醒功能。而ENDPOINT_HALT特性选择器选择
端点的禁用特性, 主机可以利用此命令来解除一个端点的禁用状态。由于特性选择器的接收者不同,此字段的值要与bmRequestType 字段的值相匹配。

b.wIndex 字段

同GET_STATUS请求命令一样, 该字段的值要与bmRequest Type 字段的内容匹配。当该命令获取的是设备的状态时, 值为0x00; 当命令接收者是接口时, 该字段的值即为相应接口的编号, 即接口描述符的bInter faceNumbe r 字段。当命令接收者是端点时, 该字段的值即为相应的端点号, 即端点描述符的bEndpointAddress字段

3)
SET_FEATURE设置特性请求

这里写图片描述
与CLEAR_FEAT URE 相对应,wValue字段选择与上面一致。测试模式具体请看手册chapter9.4.9

4)
SET_ADDRESS设置地址请求

这里写图片描述

5)
GET_DESCRIPTOR获取描述符请求

该命令能够获取的描述符只有3 类: 设备描述符(包括速度限定描述符)、配置描述符(other_speed_configuration)和字符串描述。
这里写图片描述

a.wValue 字段

此字段占用了2 字节, 其高字节为描述符的类型编号,具体编号看上面的获取描述符类型图表, 低字节为描述符的字符串索引。这些值都可以在描述符中找到字段值对应
这里写图片描述

b.wIndex 字段

如果该命令获取的是字符串描述符, 则此字段的内容即为与字符串有关的语言ID。如果该命令获取的是设备或配置描述符, 则此字段的值为0。

语言ID代码:
http://www.usb.org/developers/docs/USB_LANGIDs.pdf

c.返回数据

此数据即为设备在控制传输的“可选数据步骤”中返回的描述符。当该命令获取的是配置描述符时, 设备将会按顺序返回该配置描述符, 以及该配置支持的所有接口描述符和接口使用的所有端点描述符。发送的顺序是: 首先发送配置描述符, 然后发送第一个接口描述符, 再发送该接口使用的端点描述符; 接下来, 才发送该配置支持的第二个接口描述符(如果存在的话) , 再发送该接口使用的所有端点描述符。

6)
SET_DESCRIPTOR设置描述符请求

主机利用该请求命令来修改设备中的有关描述符, 或者增加新的描述符
这里写图片描述

a.wIndex

如果该命令修改或增加的是字符串描述符,则此字段的内容即为与字符串有关的语言ID;如果该命令修改或增加的是设备或配置描述符,则此字段值为0。注意,该命令能够修改或增加的描述符只有3类:设备描述符、配置描述符和字符串描述。

7)
GET_CONFIGURATION获取配置请求

这里写图片描述

a.返回数据

即在控制传输的“可选数据步骤”中设备返回给主机的当前配置值,即配置描述符中的bConfigurationValue字段的值。

8)
SET_CONFIGURATION设置配置请求

这里写图片描述

a.wValue 字段

值为主机要求设备采用的配置的配置值, 即配置描述符中的bConfigurationValue 字段内容。

9)
GET_INTERFACE获取接口请求

这里写图片描述

a.wIndex 字段

值为接收该命令的接口的编号, 即接口描述符中的bInterfaceNumbe r 字段的值。

b.返回数据

该数据为设备在“可选数据步骤”中返回给主机的与特定接口描述符一一对应的接口描述符编号, 即接口描述符中的bAlternat eSetting 字段的值。

10)
SET_INTERFACE设置接口请求

这里写图片描述

a.wValue 字段

值为主机希望设定的接口描述符编号, 即接口描述符中的bAlternat eSetting 字段。

b.wIndex 字段

值为接收该命令的接口编号, 即接口描述符中的bInter faceNumbe r 字段的值。

11)
SYNCH_FRAME同步帧请求

此命令用于设备设置和报告一个端点的同步帧
这里写图片描述

a.wIndex 字段

值为端点号, 即端点描述符中的bEndpointAddres s 字段。

b.返回数据

内容即为端点返回的帧号。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

标准USB设备请求命令 的相关文章

  • 关闭 USB 端口的电源

    我正在寻找扭转的方法power关闭 然后重新打开 USB 端口 解决方案可以是 C bash 等 我使用运行 32 位 Ubuntu 16 04 的 BeagleBone for armhf gt uname srvm Linux 4 4
  • Mac中如何获取usb设备的设备描述符和配置描述符?

    I have minimum exposure to xcode and I Okit framework I have seen device descriptor and configuration descriptor of a us
  • 发现多个 USB-IrDA 设备,打开并连接每个设备的套接字

    对于任何优秀的套接字程序员 是否可以使用套接字枚举通过 USB 端口连接到 PC 的多个活动 IrDA 设备 如果是这样 怎么办 这确实是我的主要问题 帖子的其余部分完善了细节并描述了我所尝试的内容 我正在使用 Microsoft SDK
  • 无法使用 Android Studio、Windows 7 连接到 Samsung Galaxy Tab S

    我有一台漂亮的新三星 Galaxy Tab S 我正在尝试将其与 Android Studio 连接 我已在平板电脑上启用 USB 调试 并通过执行 SAMSUNG USB Driver for Mobile Phones v1 5 45
  • USB 调试 - 安装 Epson Moverio 驱动程序时出现问题

    Android 开发新手 我使用以下命令制作了一个小应用程序Eclipse http en wikipedia org wiki Eclipse 28software 29在虚拟 Android 设备上完美运行 现在 我想在真实的设备上运行
  • 如何对 USB/HID/蓝牙适配器进行逆向工程。使用什么工具?

    需要对蓝牙USB鼠标适配器进行逆向工程 并使用鼠标板测量距离 并用绘图库 http matplotlib org 我发现这些工具可以帮助完成此任务 Linux lsusb usbmon usbhid转储 rfcomm hidrd 转换 xx
  • Silverlight 能否访问可访问 USB 端口的 .Net 库?

    我们有一个 Net 库 可以通过 USB 端口访问一些自定义硬件 我读到 Silverlight 包含 Net 运行时的子集 所以 我的问题是 这个子集足以让 Net 库运行吗 不可以 您不能使用从 Silverlight 内部访问 USB
  • 如何枚举所有HID设备? C#

    我需要枚举连接到我的 PC 的所有 HID 设备 我尝试使用这个答案 https stackoverflow com a 3331509 902424 但它枚举了 USBHub 设备 但我在那里找不到我的 HID 设备 EDIT 我很高兴知
  • 我可以从哪里开始使用可编程硬件?

    一段时间以来 我一直渴望至少学习一点有关硬件编程的知识 并想在这里提出要求以获得一些起点 我是一位相当有成就的程序员 具有 Delphi 和 Objective c 经验 但从未听过设备端口 中断 我什至不知道术语 更不用说对硬件进行编程了
  • STM32 传输结束时,循环 DMA 外设到存储器的行为如何?

    我想问一下 在以下情况下 STM32 中的 DMA SPI rx 会如何表现 我有一个指定的 例如 96 字节数组 名为 A 用于存储从 SPI 接收到的数据 我打开循环 SPI DMA 它对每个字节进行操作 配置为 96 字节 是否有可能
  • 时间:2019-03-17 标签:c#usbdecision

    我们当前的应用程序中有几个进程 一个进程处理 USB 加载程序的检测和删除 处理检测和删除的代码如下 protected override void WndProc ref Message m switch m Msg case Win32
  • Android USB_DEVICE_ATTACHED 持久权限

    如何让 Android 在每次重新连接 USB 设备时都不再请求权限 我想让它记住 USB 设备的 默认使用 复选标记 这样我就不必每次都向同一设备授予权限 我以编程方式检测 USB 设备 Android 手机 何时连接到我的主机设备 An
  • libusb 和轮询/选择

    我正在使用 Linux 操作系统 想知道是否有任何文件描述符可以轮询 选择 当数据等待从 USB 设备读取时会触发这些文件描述符 我也在使用 libusb 库 但尚未找到可以使用的文件描述符 Use libusb 的轮询函数 http li
  • 如何在java中访问USB端口[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试编写一个java应用程序来访问USB端口以读取和写入通过USB连接的设备 我面临的问题是我不
  • 如何在 ADB 连接期间禁用电池充电?

    问题描述 每次我在电脑和手机之间连接 USB 线时 电池都会自动充电 我想使用 ADB 协议 但我不想在 ADB 连接期间为电池充电 是否可以关闭此充电功能 当然 我该怎么做呢 环境 Android 操作系统 4 及更高版本的手机 我只需要
  • 有没有办法通过 WiFi 部署/调试 Cordova Android Ionic 应用程序? [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 这是一个双胞胎this https stackoverflow com questions 46596236 is there a w
  • 我的 Android 设备需要安装哪个驱动程序才能运行我的应用程序?

    我购买了 intex mobile 来在真实设备中测试我的 Android 应用程序 然而 该设备不存在于 OEM USB 驱动程序列表中 android 提供的设备列表中 我检查了 intex 官方网站 但不确定到底需要安装哪个驱动程序
  • 如何在非零端点(libusb)上发送 USB 控制事务?

    我正在编写代码来了解 Freescale Kinetis 微控制器上的 USB 外设 我已经设法在 Linux 主机上完成枚举 并且可以使用 EP0 上的供应商自定义代码发送和接收数据包 与 libusb 测试程序交互 看起来我可以在微控制
  • 作为附件的 Android 设备

    我有 2 个 Android 设备 我想用 USB OTG 电缆连接它们 并在两个设备之间进行来回通信 据我了解 一台 Android 设备将充当 USB 主机 运行 4 4 的 Nexus 7 另一台 Android 设备将充当 USB
  • 当前有哪些 USB 设备(友好名称)连接到 PC?

    我可以获得当前连接到计算机的设备列表吗 我检查了this https stackoverflow com q 3331043 75500 and this https stackoverflow com questions 3685615

随机推荐

  • 经典算法之一:快速排序

    快速排序由于排序效率在同为O N logN 的几种排序方法中效率较高 xff0c 因此经常被采用 xff0c 再加上快速排序思想 分治法也确实实用 xff0c 因此很多软件公司的笔试面试 xff0c 包括像腾讯 xff0c 微软等知名IT公
  • 矩阵乘法测试

    对于时间的函数 gettimeofday 函数使用方法 xff1a http blog csdn net hurmishine article details 60326345 矩阵乘法测试 xff1a 代码 xff1a 1 为了试验简单
  • Python爬虫自动获取CSDN博客收藏文章

    CSDN的Python创意编程活动开始第一天就看到了 xff0c 但是认为自己是菜鸟 xff0c 就向当 吃瓜群众 xff0c 后来看到有好多人的代码是关于爬虫的 xff0c 当初我就是由于对爬虫 感兴趣才自学的Python 现在也打算参加
  • 全网最!详!细!Tarjan算法讲解。

    Tarjan算法讲解的博客网上找到三篇比较好的 现在都转载了 个人只研究了第一篇 正如博主所说 讲的标比较详细 清晰 剩下两篇也可以看一下 卿学姐视频讲解 https www bilibili com video av7330663 以下内
  • MFC计算机图形学(1)

    这学期上了计算机图形学 xff0c 用MFC来绘制简单的图形 下面就简单介绍一下用cv 43 43 来绘制图形 VC 43 43 安装 VC 43 43 我基本不用的 xff0c 平时写C C 43 43 的代码都用Code Blocks
  • MFC计算机图形学(2)

    这里呢 xff0c 先把上一讲的联系讲一下 一般人都用是一个一个的去画 xff0c 但是那样好麻烦 xff0c 计算机的有点就是容易处理重复的事情 xff0c 那就定义成一个画正方形函数吧 xff0c 每次调用就可以了 怎么自定义函数呢 x
  • MFC计算机图形学(3)

    之前我们已经可以画出直线和曲线了 但是算法虽容易理解 xff0c 但是复杂度高 xff0c 今天就介绍比较流行的DDA画线法 xff0c 还有 xff0c 对鼠标进行事件有所响应 xff0c 即 xff0c 在画板上 xff0c 鼠标左键单
  • Ubuntu18.04安装realsense viewer

    一 下载realsense安装包 mkdir p librealsense install cd librealsense install git clone b v2 31 0 https github com IntelRealSens
  • 用D435i录制自己的数据集运行ORBslam2并构建稠密点云

    一 录制rosbag 二 播放rosbag并用rviz查看topic xff0c 记下rgb和depth流话题名 三 用如下脚本 xff08 python2而不是3 xff09 保存rgb和depth图片同时生成rgb txt depth
  • Unrecoverable error: corrupted cluster config file.

    from https www cnblogs com topicjie p 7603227 html 缘起 正在欢乐的逗着孩子玩耍 xff0c 突然间来了一通电话 xff0c 值班人员告诉我误重启了一台服务器 xff0c 是我负责的服务 x
  • 树莓派3B+无屏幕和键盘配置树莓派WiFi和SSH

    前言 树莓派3B 43 安装系统Raspbian xff0c 默认的SSH是关闭的 xff0c 如何在无屏幕和键盘的情况下 xff0c 让笔记本通过WIFI访问树莓派 树莓派3B 43 发布后不久 xff0c 树莓派官方 Raspbian
  • ubuntu分区设置

    ubuntu分区设置 swap区 xff1a 逻辑分区 xff0c 虚拟内存类似 xff0c 大小和电脑内存一样大 xff1b boot区 xff1a 主分区 xff0c 引导系统的 xff0c 分配200M 500M xff0c 条件好些
  • 图像系统概述和名词解析

    图像系统组成 光源 xff08 包含人造光 自然光 闪光灯 xff09 照到物体上 xff0c 光线反射进入成像系统 xff0c 经过镜头 xff08 对于变焦镜头有驱动马达调整镜片位置 xff0c 实现变焦 xff09 光圈 滤光片 快门
  • 海思IQ图像清晰度调试策略

    总策略 影响清晰度的关键指标 xff1a 锐度 噪点和gamma Gamma调试步骤 YUVsharpen锐度调试 LDCI局部对比度调节 Dehaze调节 去雾算法主要用在有场景中做处理 xff0c 调整图像的对比度使更加清 去雾算法主要
  • 海思ISP曝光调整策略

    AE曝光调整 Exposure Attr 影响参数 xff1a ExpTimeRange Min Max 曝光时间Gain 各种增益控制Speed 曝光速度 xff08 影响到曝光收敛 xff0c AE闪烁 xff09 Compensati
  • ADS(ARM Developer Suite)安装与卸载中的问题(转)

    ADS用来对ARM的裸机代码进行编辑和调试 我在安装ADS1 2的过程中 xff0c 遇到了一个小问题 xff0c 写下来和大家分享一下解决方法 1 在安装程序 xff0c 进度条到100 时 xff0c 会一直停在那 xff0c 十几分钟
  • ucosIII 学习资料汇总

    网站 书籍 1 嵌入式实时操作系统uc OS III 邵贝贝译 这本书其实就是一本工具书 xff0c 我参考了官方的说明文档 xff0c 发现雷同很高 感觉就是官方说明文档翻译的 xff0c 用来应用查查接口还有点用 xff0c 不是十分推
  • USB协议传输结构

    USB作为数据通信标准 xff0c 固件可分为枚举配置和类协议部分 xff0c 枚举配置实现USB主机对设备的枚举和配置 xff0c 类协议实现设备各自的数据传输 usb2 0协议chapter8 protocol layer 1 USB协
  • 蓝牙HCI协议

    HCI 层位于蓝牙高层协议和低层协议之间 xff0c 提供了对基带控制器和链路管理器的命令以及访问蓝牙硬件的统一接口 它是我们实现自己的蓝牙设备要接触的第一个蓝牙协议 起着承上启下的作用 HCI通过包的方式来传送数据 命令和事件的 xff0
  • 标准USB设备请求命令

    一 标准的usb设备请求命令 控制传输是最重要和结构最复杂的一种传输类型 控制传输的 初始设置步骤 中包含了1 个8 字节的DATA0 数据包 参见图6 6 这8 字节的数据包是主机用来发送控制阶段中的请求命令的 而这些请求命令是主机配置U