标准的USB设备有5种USB描述符:设备描述符,配置描述符,字符串描述符,接口描述符,端点描述符。

 // Standard Device Descriptor
typedef struct
{
u8 bLength; // 描述符的长度,固定值12H
u8 bDescriptorType; // 描述符类型,设备描述符=01H
u16 bcdUSB; // USB规范版本号(采用BCD码,0xAABC)
// AA:主板本号
// B: 次版本号
// C: 子次版本号
u8 bDeviceClass; // USB设备所属的标准设备类
u8 bDeviceSubClass; // USB设备所属的标准设备子类
u8 bDeviceProtocol; // USB设备所采用的设备类协议
u8 bMaxPacketSize0; // USB设备中端点0所支持最大数据包的长度
// 低速:bMaxPacketSize0 = 8
// 全速:bMaxPacketSize0 = 8、16、32或64
// 高速:bMaxPacketSize0 = 64
// 超速:bMaxPacketSize0 = 512
u16 idVendor; // 供应商ID
u16 idProduct; // 产品ID
u16 bcdDevice; // USB设备的版本号,一般由设备供应商指定
u8 iManufacturer; // 供应商字符串描述符的索引值,0表示没有
// 获取字符串描述符请求中的索引值
u8 iProduct; // 产品字符串描述符的索引值,0表示没有
// 获取字符串描述符请求中的索引值
u8 iSerialNumber; // 设备序列号字符串描述符的索引值,0表示没有
// 获取字符串描述符请求中的索引值
u8 bNumConfigurations; // USB设备所支持的配置数
} __attribute__((__packed__)) sDevDesc, *pDevDesc; /* Standard Configuration Descriptor */
typedef struct
{
u8 bLength; // 描述符长度,固定值09H
u8 bType; // 描述符类型,配置描述符=02H
u16 wLength; // 配置信息的总长度
// 该字段所设置的数值必须包括
// 配置描述符、接口描述符和端点描述符的总和
u8 bNumIntf; // 配置所支持的接口数
u8 bCV; // 设备的配置值(设置配置请求中需要引用到此数值)
u8 bIndex; // 配置字符串描述符的索引值,0表示没有
u8 bAttr; // 设备的配置特性
// D0~D4:保留值,一般为0
// D5:为1表示支持远程唤醒功能,否则不支持
// D6:为1表示自供电,否则不支持
// D7:为1表示总线供电,否则不支持
u8 bMaxPower; // 设备运行时需要消耗的总电流
} __attribute__((__packed__)) sCfgDesc, *pCfgDesc; // Standard Interface Descriptor
typedef struct
{
u8 bLength; // 描述符长度,固定值09H
u8 bType; // 描述符的类型,接口描述符=04H
u8 iNum; // 接口号
u8 iAltString; // 接口的可替换设置值?
u8 bEndPoints; // 接口所使用的端点数,该数值为除端点0以外的所有端点总数
u8 iClass; // 接口所属的USB设备类
u8 iSub; // 接口所属的USB设备子类
u8 iProto; // 接口所采用的USB设备类协议
u8 iIndex; // 接口字符串描述符的索引值,0表示没有
} __attribute__((__packed__)) sIntfDesc, *pIntfDesc; // Standard EndPoint Descriptor
typedef struct
{
u8 bLength; // 描述符长度,固定值07H
u8 bType; // 描述符的类型,端点描述符=05H
u8 bEPAdd; // 端点的端点号以及端点的数据传输方向
// D7:数据传输方向,0表示OUT数据传输,1表示IN数据传输
// D3~D0:端点号,0001B表示端点1,0010B表示端点2等
// 其余位均保留
u8 bAttr; // 端点的特性
// D1~D0:端点的数据传输类型
// 00控制传输,01同步传输,10块传输,11中断传输
// D3~D2:进一步描述不同的传输类型
// 如果是同步传输,这两位表示同步类型,
// 00非同步,01异步,10自适应,11同步
// D5~D4:端点的用法类型,
// 00数据端点,01显示反馈端点,10隐式反馈端点,11保留
// 其余为保留
// 对于U盘,一般这个值为02H
u16 wPayLoad; // 端点所支持最大数据包的长度
// D10~D0:数据包长度
// D12~D11:指出每小帧最多传输的事务处理数
// 其余为均保留,必须为0
u8 bInterval; // 端点数据传输的访问间隔,对于不同的端点类型,取值范围不同
// 低速中断端点,取值范围为10~255,对应的访问间隔为10~255ms
// 全速中断端点,取值范围为1~255,对应的访问间隔为1~255ms
} __attribute__((__packed__)) sEPDesc, *pEPDesc; // Standard String Descriptor
// USB字符串描述符用于保存一些供应商名称、产品序列号等文本信息。
// 在USB协议中,字符串描述符不是必需的,可以更加需要设置、增加或减少。
// 字符串描述符由3三个字段按照固定的顺序组成,该描述的总长度不是固定的,
// 其长度随字符串的数量和信息的长度而变化。
typedef struct
{
u8 bLength; // 描述符的长度(N+2字节)
u8 bType; // 描述符类型,字符串描述符=03H
bString wLang; // 字符串N
} __attribute__((__packed__)) sStrDesc, *pStrDesc;

HID描述符:

 struct hid_class_descriptor {
u8 bDescriptorType;
u16 wDescriptorLength;
} __attribute__ ((packed)); struct hid_descriptor {
u8 bLength;
u8 bDescriptorType;
u16 bcdHID;
u8 bCountryCode;
u8 bNumDescriptors;
struct hid_class_descriptor desc[];
} __attribute__ ((packed));

相关链接:

http://wiki.osdev.org/Universal_Serial_Bus#Introduction

http://blog.csdn.net/alien75/article/details/4622319

http://blog.csdn.net/mcgrady_tracy/article/details/8129992

USB 描述符的更多相关文章

  1. USB描述符概述

    在USB总线接口协议中,规定了一些标准的USB描述符,如表所示. 对于USB设备来说,有些USB描述符是必需的,例如: 设备描述符 配置描述符 字符串描述符 接口描述符 端点描述符 其余一些描述符并非 ...

  2. USB描述符解析-->枚举.

    枚举可以理解为主机按不定的顺序向USB设备讨要设备信息,好给它分配资源,若枚举不成功,就放弃分配资源,免得浪费资源.一般都是使用中断传输方式通信. 常用的描述符有以下几种:01H.设备描述符  02H ...

  3. usb描述符简述(二)

    title: usb描述符简述 tags: linux date: 2018/12/18/ 18:25:23 toc: true --- usb描述符简述 转载自cnblog 具体描述符 https: ...

  4. USB学习笔记连载(十二):USB描述符

    USB设备是端口,接口,配置的集合,USB协议是以各种USB描述符来表征USB设备的功能.计算机通过这些描述符来获得USB设备的功能. USB描述符包括: USB标准设备描述符,USB集线器描述符.H ...

  5. 2.6 USB摄像头驱动之USB描述符

    学习目标:分析USB摄像头驱动的描述符: 一.USB设备描述符 在usb设备驱动分析那一节,也用到了usb描述符. usb描述符可分为: USB设备描述符(usb_device_descriptor) ...

  6. USB描述符【整理】

    USB描述符 USB描述符信息存储在USB设备中,在枚举过程中,USB主机会向USB设备发送GetDescriptor请求,USB设备在收到这个请求之后,会将USB描述符信息返回给USB主机,USB主 ...

  7. USB描述符(转)

    //============================================================================// 文件名: USBDESC.C// 用 ...

  8. 自己总结的USB数据结构及其描述符

    背景: USB理论知识光看着空想总觉着丢三落四,好像哪里没法理解到位,自己做个总结. 正文: 1. USB通信的最基本单位是“包”.如果把“包”肢解的话,可以分为各种“域”(7类,即一串二进制数.每类 ...

  9. usb驱动开发7之接口描述符

    前面struct usb_interface里表示接口设置的struct usb_host_interface被有意的飘过了,咱们在这节主要讲讲这个结构体,同样在include/linux/usb.h ...

随机推荐

  1. quartz Web项目基础最简单配置

    web方面的quartz 配置资料,从网上搜索出来的很难找到完整可用的代码样例.自己上传一个. IDE:Intellij tomcat jdk1.7 quartz 2.1.5 这里下载: http:/ ...

  2. C#学习7.31判断体重是否超标

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. 使用WebView视图显示网页-----迷你浏览器

    Android提供了WebView组件,表面上来看,这个组件与普通ImageView差不多,但实际上,这个组件的功能要强大得多,WebView组件本身就是一个浏览器实现,它的内核基于开源WebKit引 ...

  4. Grunt设置

    Grunt完成对LESS实时编译. 安装 安装grunt需要先安装node.js. 之后需要借助npm来安装grunt-cli,在cmd中npm install -g grunt-cli.(测试gru ...

  5. 保护WIFI无线网络的安全

    本篇博客属于我们隐私与安全小贴士系列博客的一部分,其目的是确保您以及您的家人的上网安全.隐私与安全问题无论对我们还是对您都至关重要.我们在“不可 不知的小知识”网站上为您提供了如何安全,便捷地使用互联 ...

  6. CRF++使用小结

    1. 简述 最近要应用CRF模型,进行序列识别.选用了CRF++工具包,具体来说是在VS2008的C#环境下,使用CRF++的windows版本.本文总结一下了解到的和CRF++工具包相关的信息. 参 ...

  7. SQL CAST, CONVERT 比较

    本文转自:http://www.cnblogs.com/denylau/archive/2010/12/01/1893371.html if (@StartTime > @EndTime)    ...

  8. 10款最好用的MySQL数据库客户端图形界面管理工具

    MySQL Workbench 该工具由MySQL开发,是一个跨平台的可视化数据库设计工具.它是DBDesigner4项目备受期待的替代者,它是一个本地图形化工具,支持的操作系统包括Windows.L ...

  9. C/C++中函数参数传递详解(一)

    *在定义时使用代表指针类型,其他情况代表取内容.&在定义时使用代表引用(别名),在其他情况代表取地址 在编写个人函数的时候,你将会受到C++中的一条基本的原则的限制:在默认的情况下,变量只能以 ...

  10. 【SQL查询日志】查看数据库历史查询记录

    --关键字:cross apply & outer apply --最后更新:2011-10-20 作者:Ronli--更新链接:http://www.cnblogs.com/ronli/ar ...