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 以下 ...
随机推荐
- ssh_exchange_identification: Connection closed by remote host
用服务器内网ip连接同子网服务器的时候显示ssh_exchange_identification: Connection closed by remote host 防火墙什么都关闭了,还是显示这个问 ...
- QT的定时器使用
http://blog.csdn.net/steven6977/article/details/9310997
- 设计模式:访问者(Visitor)模式
设计模式:访问者(Visitor)模式 一.前言 什么叫做访问,如果大家学过数据结构,对于这点就很清晰了,遍历就是访问的一般形式,单独读取一个元素进行相应的处理也叫作访问,读取到想要查看的内容+ ...
- SAP Fiori + Vue = ?
2017年3月28日,我到国内一个SAP CRM客户那里,同他们的架构师关于二次开发的UI框架选择SAP UI5还是Vue进行了一番探讨.回到SAP研究院之后,我把这个问题扔到了公司的微信群里,引起了 ...
- 异常:Neither BindingResult nor plain target object for bean name 'command' available as request attribute
Neither BindingResult nor plain target object for bean name 'command' available as request attribute ...
- UVa 10817 - Headmaster's Headache(状压DP)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- BZOJ2662:[BJWC2012]冻结(分层图最短路)
Description “我要成为魔法少女!” “那么,以灵魂为代价,你希望得到什么?” “我要将有关魔法和奇迹的一切,封印于卡片之中„„” 在这个愿望被实现以后的世界里,人们享 ...
- log4net快速使用流程
以下内容大部分来自这里,对原作者流子表示感谢 1.Nuget安装,当前版本2.0.8 2.创建log4net.config文件,文件内容如下: <?xml version="1.0&q ...
- table中实现数据上移下移效果
html 由于vue+Element项目中的table,没有开放的上移下移的api,但是能对数据操作,故思路为数组中的一条数据,再重新添加一条数据,办法有点笨,但是好歹也是实现了,望有好的办法的,请留 ...
- 记录 iOS 各种跳转到系统应用
MARK ----拨打电话 NSString* phoneVersion = [[UIDevice currentDevice] systemVersion]; if (phoneVersion.fl ...