STM32 USB设备描述符、配置描述符、端点描述符含义
查了一整天的资料,自己把不懂的全部试了一遍
一下是程序以及注释
/* USB设备描述符*/
const uint8_t CustomHID_DeviceDescriptor[CUSTOMHID_SIZ_DEVICE_DESC] =
{
0x12, /*bLength 描述符的长度*/
USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType 描述符的类型(设备描述符为0x01)*/
0x00, /*bcdUSB USB协议的版本*/
0x02, 0x00, /*bDeviceClass 类代码*/
0x00, /*bDeviceSubClass 子类代码*/
0x00, /*bDeviceProtocol 设备所使用的协议*/
0x40, /*bMaxPacketSize 端点0的最大包长*/
/*idVendor 厂商ID*/
LOBYTE(USB_VID),
HIBYTE(USB_VID),
/*idProduct 设备ID*/
LOBYTE(USB_PID),
HIBYTE(USB_PID), 0x00, /*bcdDevice rel 设备版本号*/
0x02, , /*描述生产厂家的字符串描述符的索引*/
, /*描述产品的字符串描述符的索引*/
, /*产品序列号的字符串描述符的索引*/
0x01 /*bNumConfigurations 可能的配置数*/
}
; /* CustomHID_DeviceDescriptor */ /* USB配置描述符 */
/* All Descriptor s (Configuration, Interface, Endpoint, Class, Vendor */
const uint8_t CustomHID_ConfigDescriptor[CUSTOMHID_SIZ_CONFIG_DESC] =
{
//以下为配置描述符
0x09, /* bLength: 端点描述符长度*/
USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: 描述符类型 (配置描述符为0x02) */ LOBYTE(CUSTOMHID_SIZ_CONFIG_DESC),/* wTotalLength: 配置描述符集合总长度 */
HIBYTE(CUSTOMHID_SIZ_CONFIG_DESC), 0x01, /* bNumInterfaces: 该配置所支持的接口数*/
0x01, /* bConfigurationValue: 该配置的值*/
0x00, /* iConfiguration: 描述配置的字符串描述符的索引*/
0xA0, /* bmAttributes:该设备的属性(总线供电,支持远程唤醒)
bit 4 ... 0: 保留(必须为0)
bit 5: 1表示支持远程唤醒
bit 6: 1表示设备是自供电 0表示是总线供电
bit 7: 保留(必须为1) */ 0xC8, /* MaxPower 设备所需要的电流(单位为2mA)400 mA*/ //以下为接口描述符
0x09, /* bLength: 接口描述符长度*/
USB_INTERFACE_DESCRIPTOR_TYPE,/* bDescriptorType: 描述符类型 (接口描述符为0x04)*/
0x00, /* bInterfaceNumber: 该接口编号(从0开始) */
0x00, /* bAlternateSetting: 该接口的备用编号 */
0x02, /* bNumEndpoints 该接口所使用的端点数*/
0x03, /* bInterfaceClass: 该接口所使用的类*/
0x00, /* bInterfaceSubClass : 该接口所使用的子类 */
0x00, /* nInterfaceProtocol : 该接口所使用的协议 0 =无,1 =键盘,2 =鼠标*/
, /* iInterface: 描述该接口的字符串描述符的索引 */ //以下为HID描述符
0x09, /* bLength: HID描述符长度 */
HID_DESCRIPTOR_TYPE, /* bDescriptorType: 描述符类型 (接口描述符为0x21) */
0x10, /* bcdHID: HID 协议版本号 */
0x01,
0x00, /* bCountryCode: 国家代码 (美式键盘代码为0x21)*/
0x01, /* bNumDescriptors:下级描述符的数量*/
0x22, /* bDescriptorType 下级描述符的类型*/
LOBYTE(CUSTOMHID_SIZ_REPORT_DESC),/* wItemLength: 下级描述符的长度*/
HIBYTE(CUSTOMHID_SIZ_REPORT_DESC), //以下为端点描述符
/******************** Descriptor of Custom HID endpoints ******************/
0x07, /* bLength:端点描述符长度 */
USB_ENDPOINT_DESCRIPTOR_TYPE, /* 描述符类型 (端点描述符为0x05)*/
0x81, /* bEndpointAddress:端点地址
bit 3 ... 0:端点号
bit 6 ... 4:保留(设置为0)
bit 7:0(OUT),1(IN)*/
0x03, /* bmAttributes: 端点属性
bit 1 ... 0:表示该端点的传输类型
0 控制传输
1 等时传输
2 批量传输
3 中断传输
bit 7 ... 2:如果该端点是非等时传输 则bit 7 ~ 2 保留(设置为0)
如果该端点是等时传输
bit 3 ... 2: 表示同步类型
0 无同步
1 异步
2 适配
3 同步
bit 5 ... 4: 表示用途
0 数据端点
1 反馈端点
2 暗含反馈的数据端点
3 保留
bit 7 ... 6: 保留*/
0x40, /* wMaxPacketSize: 该端点支持的最大包长度 */
0x00,
0x0A, /* bInterval:端口的查询时间*/ //以下为输出端点1描述符
0x07, /*bLength:端点描述符大小 */
USB_ENDPOINT_DESCRIPTOR_TYPE, /* 端点描述符类型*/
0x01, /* bEndpointAddress:端点地址
bit 3 ... 0:端点号
bit 6 ... 4:保留
bit 7:0(OUT),1(IN)*/
0x03, /* bmAttributes: 中断端点 */
0x40, /* wMaxPacketSize: 最多64个字节 */
0x00,
0x0A, /* bInterval: 轮询间隔(20毫秒)*/
};
STM32 USB设备描述符、配置描述符、端点描述符含义的更多相关文章
- usb协议分析-设备描述符配置包-描述符
/* usb协议分析仅供大家参考---设备描述符配置包,设备描述符, 地址设置, 配置描述符, 字符串描述符 */ /* -1- usb设备描述符配置包 */ typedef struct _USB_ ...
- usb驱动开发6之端点描述符
学到这里不容易,先说一段故事吧. 二兄弟住一大楼的第80层,某深夜回家忘看通知(内容今夜停电). 兄弟俩背着沉重的大背包,在楼底下商量一下,决定一鼓作气,爬楼梯回家.两人抖擞精神,开始爬楼.爬到20楼 ...
- USB设备描述符
/* USB Standard Device Descriptor */ const u8 Virtual_Com_Port_DeviceDescriptor[] = { 0x12, /* bLeng ...
- USB设备描述符和请求命令
USB设备描述符和请求命令 介绍标准的USB设备描述符和请求命令. 标准的USB描述符 当USB设备第一次连接到主机上时,要接收主机的枚举和配置,目的就是让主机知道该设备具有什么功能.是哪一类的USB ...
- 8 -- 深入使用Spring -- 1...4 重写占位符配置器
8.1.5 重写占位符配置器 (PropertyOverrideConfigurer) PropertyOverrideConfigurer是Spring提供的另一个容器后处理器.PropertyOv ...
- 8 -- 深入使用Spring -- 1...4 属性占位符配置器
8.1.4 属性占位符配置器 PropertyPlaceholderConfigurer 是一个容器后处理器,负责读取Properties属性文件里的属性值,并将这些属性值设置成Spring配置文件的 ...
- linux内核中的文件描述符(二)--socket和文件描述符
http://blog.csdn.net/ce123_zhouwei/article/details/8459730 Linux内核中的文件描述符(二)--socket和文件描述符 Kernel ve ...
- STM32 USB Virtual COM
STM32 USB Virtual COM USB转串口的功能实现 这次讲的是如何实现USB转串口功能的实现.首先看看工程的布局吧: 我们主要要介绍的文件的在USB_User这个组文件.从上面的截 ...
- STM32 USB 问题汇总(转)
源:STM32 USB 问题汇总 汇总1:STM32的USB例程修改步骤,来自http://blog.csdn.net/cy757/archive/2010/01/01/5117610.aspx 以下 ...
随机推荐
- sqlite 用法整理
转载:http://blog.csdn.net/zhaoweixing1989/article/details/19080593 先纪录到这,以后慢慢整理. 1. 在Android下通过adb she ...
- hashcode方法 简析
package com.ycgwl; import java.util.HashMap; class People{ private String name; private int age; pub ...
- js中公有方法、特权方法、静态方法
1.公有属性和公有方法 1 2 3 4 5 6 7 8 9 function User(name,age){ this.name = name;//公有属性 this.age = age; } ...
- java访问windows远端共享文件的方法
没密码的,直接用url访问就可以了,跟本地文件相同. 有密码的,用smb. 远端需要开启smb. win10启动smb的方法:https://jingyan.baidu.com/article/47a ...
- July 15th 2017 Week 28th Saturday
If I can't hear your heartbeat, you are too far away. 如果我听不见你的心跳,那是因为你离我太远了. Only when the two tight ...
- MQ--API总结
研究MQ很长时间了, 每个类,方法,都查了很长时间,在此总结一下! Java编写访问MQ的程序 1.MQQueueManager―――队列管理器访问类 常用方法: public MQQueueMan ...
- 人类主动探索地外文明(METI)活动正在进行中
请看下图: 这是位于俄罗斯克里米亚境内的行星际深空通讯雷达(口径70米,2-300GHz,建造于1978年)的外观.借助该雷达的强大发射功率,有关国际 ...
- 【转】Android单帧动画Rotate旋转
项目有一个需求,有一个刷新按钮,上面放着一个常见的静止的刷新圆圈,如下图: 一旦用户按了刷新按钮,需要让这个刷新圆圈转动起来,让用户感觉到程序还在运行着,而不是卡死了. 有两个思路,一是将这个图按照旋 ...
- webstorm使用svn
http://www.jetbrains.com/phpstorm/webhelp/using-subversion-integration.html 下载slikSVN http://subvers ...
- building for production...Killed
npm run build报错 building for production...Killed 原理 按照他人的说法是,服务器内存不够用了,这样就给他配置一个单独的内存出来就解决了 解决方法 sud ...