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 以下 ...
随机推荐
- iptables:no config file
防火墙规则默认都是在/etc/sysconfig/iptables这个文件中的 出现这个问题,是因为在/etc/sysconfig/目录下没有找到iptables这个文件 可以使用service ip ...
- AutoHotkey的函数对象的Bind方法绑定参数的应用
近期在写Excel数据批处理函数,想提取某列的每个数据是否匹配某某条件的所有单元格. 这种需求比较多,比如判断的值有:单元格值,字体颜色,单元格颜色等等, 判断条件有:相同,不同,正则,或在某多行字符 ...
- 使用jMeter构造逻辑上有依赖关系的一系列并发请求
相信前端开发工程师对CSRF(Cross-site request forgery)跨站请求伪造这个概念都非常熟悉,有的时候也简写成XSRF,是一种对网站的恶意利用. 尽管听起来像跨站脚本(XSS), ...
- 移动端 html基值(转载)
(function () { document.addEventListener('DOMContentLoaded', function () { var html = document.docum ...
- dom4j.jar有什么作用?
om4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源代 ...
- Failed to read candidate component错误
<context:component-scan base-package="com.spdb"/> <mvc:annotation-driven/> 加上该 ...
- Git bash 终止git log 命令
Git bash中 可以通过键入: q ,结束该命令.
- im2rec打包图片
https://mxnet.incubator.apache.org/faq/finetune.html python ~/mxnet/tools/im2rec.py --list --recursi ...
- 19、配置嵌入式servlet容器(下)
使用外置的Servlet 嵌入式Servlet容器:应用打成可执行的j ar 优点:简单.便携: 缺点:默认不支持JSP.优化定制比较复杂 使用定制器[ServerProperti ...
- sql的寫法,推薦的寫法,全文索引提高類似like查詢的效率
說明:logistics_detail表中每個deliver_id可能對應多個loginticsType,但是我們只要獲取最大的那一個. SELECT dm.delivery_code,dm.deli ...