USB标准请求

本文章主要来自《圈圈教你玩USB》的学习笔记

本章节属于控制传输的范畴,控制传输的过程如下:

主机在设置阶段,发出setup令牌包后,数据请求在DATA0中,详细说明可以看看之前的文章USB的四种传输类型-优快云博客

USB标准设备请求结构

这里只介绍USB协议定义的标准请求,既bmRequestType的D6~5位00的请求。

不同的请求对于其接收者,wValue和wIndex,其各字段的意义是不一样的。

下表是各个标准请求的结构以及数据过程需要传输的数据。其中第一列有的有多个,主要是最低5位的不同,即表示接收者不同。有的请求只能发送到设备,而有的请求可以发送到设备、接口和端点。

 常用的几个请求为GET_DESCRIPTOP、SET_ADDRESS和SET_CONFIGURATION。

GET_DESCRIPTOP请求

主机通过发送获取获取描述符请求读取设备的的各种描述符。

wValue域的第一个字节(低字节)表示的是索引号,用来选择同一种描述符中具体的哪一项。第二个字节表示描述符的类型编号。各种描述符类型编号如下定义:

wIndex域只在获取字符串描述符中有用,它表示字符串的语言ID号,获取除字符串描述符的其它描述符时,wIndex的值为0。

wLength域为请求设备返回数据的字节数,设备实际返回的字节数可以比该域指定的字节数少。

设备在收到获取描述符请求后,应按照所请求的描述符类型编号,在数据过程中返回响应的描述符。

对于全速模式和低速模式,获取描述符的标准请求只有三种:获取设备描述符、获取配置描述符、获取字符串描述符。另外的接口描述符和端点描述符是跟随配置描述符一并返回的,不能单独请求返回。

SET_ADDRESS请求

设置地址请求是主机请求设备使用指定地址的请求

指定的地址就包含在wValue字段中第一个字节。(第一个字节为设备地址)

设置地址请求没有数据过程,所以wLength的值为0。wIndex也用不着,值为0。

当设备收到设置地址请求后,就直接进入状态过程,等待上位机读取0长度的状态数据包。主机成功读取到状态数据包(用ACK响应设备)后,设备将启动新的地址。

SET_CONFIGURATION请求

设置配置请求和设置地址请求很类似。区别在于wValue域的含义。第一个字节为配置的值,当该值与某配置描述符中的配置编号一致时,表示选中该配置。

该值通常为1,因为大多数USB设备只有一种配置,配置编号为1;如果该值为0,则会让设备进入设置地址状态。设备只有收到非0配置后,才会启用它的非0端点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值