USB枚举过程中的各种获取描述符的标准请求

本文详细介绍了STM32中USB2.0设备处理GET_DESCRIPTOR请求的过程,包括判断请求类型、识别设备描述符、配置描述符和字符串描述符,以及如何响应GET_STATUS请求,包括设备状态、接口状态和端点状态的获取。此外,还涉及了清除特征请求用于修复端点问题。

前言 

     最近学习了USB2.0的一些知识,这里就当笔记,回顾记录一下,参考的资料是B站的刘凯老师STM32 培训教程和龙虎老师的USB应用精粹分析,如果有哪些错误的理解,也希望大佬们指点一二,谢谢!

回到Data_Setup0()函数,如果主机发出“获取描述符” GET_DESCRIPTOR的请求。

8d72c1d72d3a412897b05740ff94a16d.png

那么我们就要判断是 这个 Type_Recipient,他是一个宏定义,取出了USBbmRequestType的低七位,其中包含了请求种类与接收方。

3a8d81d455b54ba7a466281753d71c11.png

如果是标准请求(STANDARD_REQUEST 0x00)且接收方是设备(DEVICE_RECIPIENT0x00)

188b578d00f4487098e4fc76812ad64f.png

接下来需要进一步判断USBwValue1是获取设备,配置还是字符串描述符,然后将相应的函数指针赋给CopyRoutine

a6e476a9912d4ced8ce059a4f5aab66c.png

获取设备描述符的函数实际是uint8_t *Joystick_GetDeviceDescriptor(uint16_t Length)

其中实际执行的是Standard_GetDescriptorData(Length, &Device_Descriptor);

2af1add452e24bb0b5336d6895302943.png

第一个形参是长度(length)

我们第一次调用Standard_GetDescriptorData(Length, &Device_Descriptor)函数时,

Length传参的是0,

d3120700588f4d638f6c49786792f431.png

第二次Length传参 传的是发送数据包的字节长度(在DataStagein函数中),

b461ba5e7e994108963ddec4e7344ff6.png

第二个形参是 传的是Device_Descriptor的首地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值