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 以下 ...
随机推荐
- angular2 应用 不同的environment 进行 build/serve
文件目录如下: 命令行使用:ng serve --e=dev/offline/prod build 不同,像上面那样写没用.必须后面再加--prod 如: ng build --e=offline - ...
- 图的存储结构(邻接矩阵与邻接表)及其C++实现
一.图的定义 图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为: G=(V,E) 其中:G表示一个图,V是图G中顶点的集合,E是图G中顶点之间边的集合. 注: 在线性表中,元素个数可以为零, ...
- ZT JAVA WeakReference
JAVA WeakReference 分类: JAVA 2012-08-28 16:08 305人阅读 评论(0) 收藏 举报 javareferencehashmapcacheclassnull 在 ...
- 一些SAP Partners能够通过二次开发实现打通C/4HANA和S/4HANA的方法介绍
有好几位朋友在公众号后台给我留言询问SAP C/4HANA和S/4HANA集成的方案. 尽管我给这些朋友推送了一个方案:打通C/4HANA和S/4HANA的一个原型开发:智能服务创新案例,然而我得到的 ...
- Windows Server 2012/2012 R2:安装和配置 SMTP 服务器
Windows Server 2012/2012 R2:安装和配置 SMTP 服务器 安装 SMTP 服务器 以下是安装 SMTP 服务器功能的步骤: 打开“服务器管理器”:单击键盘上的 Window ...
- PhoneGap Geolocation结合百度地图api获取地理位置api
一.使用百度地图API 1.地址:http://developer.baidu.com/map/ 2.在js DEMO中获取反地址解析的DEMO 3.修改这个DEMO的密钥,去创建应用就能创建密钥,然 ...
- 解决SpringMVC拦截器拦截静态资源的问题。
在使用SpringMVC进行开发的时候,遇到了以下代码不能执行的情况.而且我已经正确导入了JQuery框架. <script type="text/javascript"&g ...
- 交叉熵Cross-Entropy
1.交叉熵:用来描述通信中将一个概率分布的最优编码用到另一个概率分布的平均比特数 公式: 2.交叉熵是不对称的 3.交叉熵的作用是表达两个概率分布的差异性 设概率分布p(x)和q(x),两个概率分布差 ...
- 新一代的IT实验室长啥样?
这个时代 “互联网”江湖门派众多 “互联网+”现代农业.“互联网+”制造业. “互联网+”信息技术服务.“互联网+”文化创意服务. “互联网+”社会服务 各种“互联网+” 在不断的改变着我们的生活 这 ...
- 20145238-荆玉茗 《网络对抗》-逆向及Bof基础实践
20145238荆玉茗<网络对抗>-逆向及Bof基础实践 1 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:m ...