USB设备驱动开发-USB协议相关(三)

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

一、USB设备标准请求

USB设备标准请求是为所有USB设备定义的操作,即使设备还没有被分配地址或还没有被配置都必须相应设备标准请求。

标准特性选择子

image

特性选择子用于对特性使能或设置特性,若一个不支持或非法的请求发送给USB设备,设备将在数据或状态传输阶段返回STALL作为响应。若设备的默认控制通道由于错误不能通信,则设备将被reset来清除错误状态并重启默认控制通道。

1. Clear Feature

image

wValue中的特性选择子必须和操作对象匹配,即设备特性对应设备,接口特性对应接口,端点特性对应端点。

若对应的特性不存在或不能被清除,或者操作的接口或端点不存在,将返回一个请求错误状态。

在Default状态:设备接收到这个请求后的操作是未定义的;

在Address状态:对设备操作是有效的,但对接口和端点的操作将返回请求错误;

在Configured状态:所有的请求都是有效的。

其中TEST_MODE特性不能被ClearFeature请求清除。

2. Set Feature

image

设置或使能特性

3. Get Configuration

image

返回当前的设备配置值(一个字节),在配置状态下,返回非0的bConfigurationValue值。若设备没有配置则返回0。

4. Set Configuration

image

设置设备的配置

在wValue的低字节是配置值,若配置值为0,则设备将仍处于Address状态。

5. Set Descriptor

image

image

用于更新已有的描述符或新增描述符。

6. Get Descriptor

image

其中wValue的高字节表示描述符的类型,如下表所示;低字节表示描述符的索引。一个设备可以实现多个配置描述符和字符串描述符,因此只有这两种描述符才会用到索引值。

7. Get Interface

image

这个请求返回接口目前选择的可选设置(Alernate Setting)。

8. Set Interface

image

设置接口

9. Get Status

image

返回操作对象的状态。

image

image

image

10. Set Address

image

设置设备的地址

只允许对设备描述符、配置描述符和字符串描述符进行操作。

11. Synch Frame

image

在等时传输方式中,用于设置并返回端点的同步帧。

二、描述符

USB设备使用描述符来报告属性,一个描述符即预先定义好的数据结构。每个描述符的第一个字节表示描述符的长度,第二个字节表示描述符的类型。

在描述符中可能包含有对字符串描述符的引用来描述这个描述符,若设备不支持字符串描述符,则其他描述符中字符串描述符引用域必须存储,但需要设置为0来描述没有可用字符串描述符。

1. 设备描述符

设备描述符用于描述一个设备的通用信息,一个USB设备只具有一个设备描述符。高速设备的设备描述符有一个版本号bcdUSB,0200H来表示USB 2.0

image

image

 

struct usb_device_descriptor {

__u8 bLength;

__u8 bDescriptorType;

__le16 bcdUSB;

__u8 bDeviceClass;

__u8 bDeviceSubClass;

__u8 bDeviceProtocol;

__u8 bMaxPacketSize0;

__le16 idVendor;

__le16 idProduct;

__le16 bcdDevice;

__u8 iManufacturer;

__u8 iProduct;

__u8 iSerialNumber;

__u8 bNumConfigurations;

} __attribute__ ((packed));

2. Device_Qualifier

image

对于高速设备,若在其他速度下需要更改一些配置,这需要定义这个描述符。

3. 配置描述符

配置描述符描述一个设备配置的信息,其中的bConfigurationValue值作为传输传递给SetConfiguration()请求,使设备采用这个配置。

一个USB设备有一个或多个配置描述符,一个配置描述符拥有一个或多个接口,一个接口拥有0个或多个端点。在同一个配置中,一个端点不能在不同的接口之间共用,但可以在同一个接口的不同设置共有。但在不同的配置中,端点可以在接口之间共用。

一旦配置选定,则设备一般仅少有的可变设置,即接口拥有可选设置则才可能更改设置。

image

image

 

4. 接口描述符

接口描述符描述一个配置中的接口。一个配置提供一个或多个接口。当一个配置支持一个或多个接口时,接口描述将作为配置描述符的一部分返回,端点描述符将紧跟着接口描述符返回。接口描述符不能通过GetDescriptor()或SetDescriptor访问。

一个接口包含可变设置来允许在设备配置后允许端点或一些特性做一定的改变。接口默认的设置都为0,SetInterface()请求用于选择一个设置或返回默认的设置。GetInterface()请求返回选择的设置。

如果一个设备配置支持单个接口并此接口有两个可选设置,配置描述表返回以后会紧跟着返回bInterfaceNumber与bAlternateSetting域皆为0的第一个设置的接口描述表及相关的结点描述表,而随之后是另一个设置接口描述表与结点描述表第二个接口描述表的bInterfaceNumber域也应为0但bAlternate Setting域应为1 。

如果一个接口仅使用节点0则接口描述表以后就不再返回节点描述表并且此接口表示的是一个请求接口它使用连在节点0上的缺省通道在这种情况下bNumberEndpoints域应被设置成0 ,一个接口描述表的节点个数不把结点0计在内。

image

image

5. 端点描述符

接口的端点拥有自己的描述符,描述符包含主机分配每个端点带宽的信息。每个端点描述符是作为配置信息的一部分在GetDescriptor请求中返回的。端点描述符不能直接通过GetDescriptor()或SetDescriptor()请求访问,这点与接口描述符一致。端点0没有端点描述符。

image

image

image

6. 字符串描述符

字符串描述符是可选的,但若设备不支持字符串描述符,则设备中配置描述符、接口描述符中对字符串描述符的引用值必须设置为0。字符串描述符使用UNICODE编码方式。USB设备可能需要支持多种语言,字符串描述符中16位的LANGID来表示支持的语言。

image image

Linux USB 驱动开发(五)—— USB驱动程序开发过程简单总结 设备驱动程序是操作系统内核和机器硬件之间的接口,由一组函数和一些私有数据组成,是应用程序和硬件设备之间的桥梁。在应用程序看来,硬件设备只是一个设备文件,应用程序可以像操作普通文件一样对硬件设备进行操作。       设备驱动程序是内核的一部分,主要完成以下功能:对设备的初始化和释放;把数据从内核传送到硬件设备和从硬件设备读取数据;读取应用程序数据传送给设备文件和回送应用程序请求的数据;检测和处理 阅读详情

相关推荐

学习windows驱动(WDF USB设备驱动开发)

学习WDF USB驱动开发, 那么怎么进行WDF USB设备驱动开发呢? 我们需要懂什么? 需要做什么呢? 根据《竹林蹊径 深入浅出Windows驱动开发》第4章 WDF USB设备驱动开发里介绍的目录可以初见端倪,需要了解USB设备硬件结构,USB软件结构,内核开发, 数据I/O操作,设备控制,用户程序。USB设备硬件结构。 USB是Universal Serial Bus(通用串行总

mofabang的专栏 6170

USB 设置接口SetInterface

USB 设置接口SetInterface 描述述包括设备描述符请求,配置描述符请求、字符串描述符请求和其它描述符请求。 ID 请求码 说明 11 SET_INTERFACE 用于主机要求设备用某个描述符来描述接口 SetInterface请求用于USB主机为设备指定的接口选择一个合适的替换值,该请求没有数据阶段。 bmRequestType(1) bRequest(1) wValue(2) wIndex(2) wLength(2) 01 0B 可替换接口值 接口 0

qq_27846717的博客 3355

Linux设备驱动probe过程(三)

本周把最后一个坑填上,看下热插拔设备驱动是如何probe的。这部分的代表设备有PCI和USB。鉴于USB流传度和通用性更广,本文选用USB作为分析示例。

zxcv788999的博客 2244

【USB笔记】 标准请求 设置接口Set Interface

USB笔记 标准请求 设置接口 Set Interface 格式 bmRequestType bRequest wValue wIndex wLength Data 00000001B SET_INTERFACE Alternate Setting Interface Zero None 功能 这个请求用于主机为指定的接口选择替代设置(alternate setting)。 bmRequestType bmRequestType 10000000B   bmRequest

4178

uboot usb设备驱动

介绍usb device设备驱动 uboot在init_dm中会扫描dtb和代码中driver进行匹配,匹配成功就调用driver驱动进行bind 以dwc3为例进行介绍 DTS中定义 usb0: usb0@ff9d0000 { #address-cells = <2>; #size-cells = <2>; status = "disabled"; compatible = "xlnx,zynqmp-dwc3"; //匹配的compatible reg = <0x

osnet的博客 4475

RK3399平台开发系列讲解(USB设备驱动)5.28、USB 协议标准

USB 协议标志

内核笔记 2889

【USB笔记】 标准请求 清除特性Clear Feature

USB笔记 标准请求 清除特性 Clear Feature 格式 bmRequestType bRequest wValue wIndex wLength Data 00000000B00000001B00000010B CLEAR_FEATURE Feature Selector ZeroInterfaceEndpoint Zero None 功能 这个请求用于清除或禁用特定的特性(feature)。 bmRequestType 共有三种接收端Recipient:设备(Device),

5567

深入理解USB设备驱动开发:使用USB_SKELETON框架

在当今的计算机世界中,USB(通用串行总线)技术已经成为连接外围设备的标准方式。开发者在为各种USB设备编写驱动程序时,使用统一的框架可以大大简化开发过程。USB Skeleton框架,顾名思义,就是USB驱动开发的骨架代码,它提供了一个基础的模板,使得开发者可以在此基础上构建自己特定的驱动程序。本章将介绍USB Skeleton框架的基础知识,以及它如何帮助开发者快速开始USB驱动开发。我们会从框架的目的、基本组成以及在Linux内核中的位置开始,逐步深入了解USB驱动开发的入门知识。

weixin_35950531的博客 1267

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设备请求

这十一个USB设备请求由主机通过控制管道发出,USB设备必须全部支持,最低也要返回一个空响应。 当 USB设备连接到USB主机上的时候,USB主机首先通过标准的 USB设备请求和USB功能设备进行通信。 USB主机读取描述符,从而获得该USB功能设备的产品信息和功能配置。当然也可以使用自定义的请求,来实 现简单的控制。

(UE4 4.27) HISM性能优化:从空间剔除到合批渲染的实战解析

本文深入解析了UE4 4.27中HISM(UHierarchicalInstancedStaticMesh)组件的性能优化原理与实战技巧。核心在于利用其N叉树空间结构实现高效的CPU视锥剔除,并结合GPU实例化进行合批渲染。文章详细探讨了从控制叶子节点粒度、平衡剔除精度与渲染效率,到结合LOD系统等关键参数的调优方法,为开放世界或大场景的植被性能瓶颈提供了系统解决方案。

weixin_29015051的博客 327

C语言与USB设备驱动开发:USB协议解析、设备类驱动实现与固件升级(三)

C语言作为USB设备驱动开发的基石,将持续发挥其在协议解析、设备驱动实现以及固件升级等方面的优势。随着对新标准的适应、跨平台兼容性的提升以及安全性的强化,C语言将在未来的USB设备驱动开发领域中保持其核心地位,助力开发者应对日益复杂和多元化的USB设备生态。

weixin_56154577的博客 1949

RTKLIB PPP与RTK_POST精密定位实战:从实时到事后处理的完整流程解析

本文详细解析了如何使用RTKLIB进行精密单点定位(PPP)的完整流程,涵盖从实时处理到事后处理(RTK_POST)的关键步骤。文章深入探讨了数据准备、软件配置、核心参数设置(如电离层、对流层、潮汐改正)以及常见问题排查,旨在帮助用户掌握高精度GNSS定位技术,实现从入门到精通的实战应用。

weixin_29047919的博客 279

Linux驱动开发——USB设备驱动

Linux驱动开发——USB设备驱动

qq_52479948的博客 3775

【低空经济】无人机充电站设计方案

随着无人机技术的快速发展和广泛应用,其在物流、农业、巡检、救援等领域的应用日益普及。然而,无人机的续航能力一直是限制其大规模应用的关键因素之一。为了解决这一问题,无人机充电站的设计与建设显得尤为重要。本项目旨在设计一套高效、智能、可扩展的无人机充电站系统,以满足不同场景下无人机的充电需求,提升其作业效率和应用范围。无人机充电站的设计将围绕以下几个核心目标展开:首先,充电站应具备快速充电能力,以减少无人机的停机时间,提高作业效率;

2959

识别产品外观的合格软件_工业视觉工业质检视觉识别机器视觉视觉检测智能制造工业检测缺陷...

随着工业物联网技术的迅猛发展,掀起了以云计算、大数据、以及人工智能 AI 等信息技术正与传统工业深入融合,由此衍生的 “智能制造4.0” 理念,正在为全球工业带来深远变革。中国的制造业巨头也纷纷借此发力,向智能化、数字化制造演进,实施战略转型。如何高效科学的管理和分析制造业务链上的生产价值,推进制造企业生产工艺优化与产品质量提升是每一个制造企业在数字化、智能化转型过程中的必经之路。业务发展带来的挑...

weixin_42502419的博客 751

C语言与USB设备驱动开发:USB协议解析、设备类驱动实现与固件升级(一)

USB(Universal Serial Bus)技术以其卓越的便携性、高效的数据传输速率和广泛的设备兼容性,在全球范围内得到广泛应用,已然成为现代计算机系统中不可或缺的核心组成部分。无论是个人电脑、移动设备、工业自动化设备,还是消费电子产品、医疗仪器、汽车电子系统,USB接口几乎无处不在,为各类外设提供了标准化、即插即用的连接方式。其强大的扩展能力和灵活的数据交换能力,使得用户能够轻松连接键盘、鼠标、打印机、摄像头、存储设备、音频设备、网络适配器等各种设备,极大地提升了用户体验和工作效率。

weixin_56154577的博客 2106

AWD线下攻防赛总结

在本地组策略编辑器里面,依次展开计算机配置—>管理模板—>Windows组件—>远程桌面服务—>远程桌面会话主机—>连接—>限制连接的数量。8.Web目录环境查找相关可疑文件:jpg/png/rar,属性、解压。进程线程:netstat / ps -aux/netstat -apt。4.查看/etc/init.d/rc.local中启动服务有无异常。1.不使用默认口令,修改成复杂的,并确保和web环境连接。5.使用脚本开启进程监控、目录监控、流量监控。文件操作监控.exe/御剑文件监控.exe。

XuJL89的博客 630

Linux设备驱动开发详解

Linux设备驱动开发详解Linux设备驱动开发详解Linux设备驱动开发Linux设备驱动开发详解1. linux设备驱动概述及开发环境搭建2. 驱动设计的硬件基础3. linux内核及内核编程4. linux内核模块5. linux文件系统与设备文件6. 字符设备驱动7. linux设备驱动中的并发控制8. linux设备驱动中的阻塞与非阻塞I/O9. linux设备驱动中的异步通知与异步I/O10. 中断与时钟11. 内存与I/O访问12. linux设备驱动的软件架构思想13. linux块设备驱.

tan1666的博客 2万+

TC397 EB MCAL开发从0开始系列 之 [13.1] Dma配置实战 -实现M2M数据传输(读存储写存储)

TC3XX TC397 MCAL DMA 从0搭建测试用例-实现M2M 存储到存储数据传输

yy九歌的博客 1913

Qualcomm 常用NV列表

^ NV ITEM ^ 功能^^ |NV10 |mode prefer,找网模式|新平台使用NV80000| ^NV74 NV74=0关闭自动接听电话^ |NV240 |NV240=FALSE|EVDO出现网络的问题,此项必须设定为FALSE| |NV255 |CDMA规避网络列表(SID/NID号)| |NV256 |

sdrgtywretyeruet的专栏 5769

windows USB 设备驱动开发-总章

windows usb驱动开发

王马的博客 5305

【华为OD技术面试手撕真题】1、长度最小的子数组 | 手撕真题+思路参考+代码解析(C & C++ & Java & Python & JS)(三种解法)

【华为OD面试手撕真题】长度最小的子数组,本专栏更新每年华为OD机试的高频手撕代码题,每个题目都会使用五种语言进行解答(C & C++& Java & Python & JS),思路分析都非常详细, 实现最低的时间复杂度和高通过率,每个解题思路超过百字,内含各个编程语言的八股文面试题,欢迎大家订阅学习, 代码可以直接运行使用,全网限时最低价,持续更新

KJ.JK 1万+

Linux USB 主机侧设备驱动匹配流程

Linux USB 主机侧设备驱动匹配流程如下: 1. usb 初始化,注册 hub 驱动与通用设备驱动。 2. usb 控制芯片与驱动匹配后,创建一个主机控制器设备(如 xhci)。 3. 主机控制器设备与驱动匹配后,创建一个 roothub 设备。 4. roothub 设备与 hub 驱动匹配后,设置中断。 5. usb 设备插入后,触发中断,初始化设备,读取设备描述符,根据设备描述符,选择、设置设备配置,匹配到具体设备驱动。 6. 在具体设备驱动中控制 usb 设备。

joyxysetu的博客 1292

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Linux设备驱动之usb设备驱动详解

1.Linux usb设备驱动框架USB是通用串行总线的总称,Linux内核几乎支持所有的usb设备,包括键盘,鼠标,打印机,modem,扫描仪。Linux的usb驱动分为主机驱动与gadget驱动。前者是设备连接到计算机上,通过主机驱动扫描usb设备,控制所连接的设备。而gadget驱动一般用于嵌入式设备,gadget驱动用于控制嵌入式设备。Linux的usb驱动两种类型图如下:左侧是usb的主机驱动,右侧是gadget驱动。下面着重介绍一下usb的主机驱动:(1)usb主机控制器-直接与硬件设备交互。(

1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

鸿蒙next教程:扩展外设驱动开发(开发适用USB协议的设备驱动)

本文介绍了HarmonyOS的USBDDK(USB驱动开发套件),支持开发者基于用户态开发USB设备驱动,适用于内核标准驱动不支持的扩展外设。

qq_39652397的博客 1353

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

上一篇: USB设备驱动开发-USB协议相关(二)
下一篇: 浅入浅出Liunx Shellcode
asmxpl
博客等级 码龄15年 9粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值