标准的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. PDF 补丁丁 0.4.1.804 测试版发布:合并文件夹的图片和PDF文件,自由生成多层次书签

    新的测试版增强了合并文件的功能,可以合并文件夹内的图片和PDF文件,还可以在合并文件列表上直接指定与合并文件对应的PDF书签标题.通过拖放文件项目生成多层次的PDF书签.如下图所示: 另外,新的测试版 ...

  2. Apache Thrift - 可伸缩的跨语言服务开发框架

    To put it simply, Apache Thrift is a binary communication protocol 原文地址:http://www.ibm.com/developer ...

  3. js控制html文字提示语的出现和隐藏

    有时我们需要在点击html输入框的时候,旁边会出现提示语.在输入字符的时候,输入框下边会出现输入了多少字符的提示. 请看下面实例. <!DOCTYPE html> <html> ...

  4. C# 定时器事件(设置时间间隔,间歇性执行某一函数,控制台程序)

    定时器事件代码 static void Main(string[] args) { Method(); #region 定时器事件 Timer aTimer = new Timer(); aTimer ...

  5. 走进AngularJs(七) 过滤器(filter) - 吕大豹

    时间 2013-12-15 16:22:00  博客园-原创精华区 原文  http://www.cnblogs.com/lvdabao/p/3475426.html 主题 AngularJS 过滤器 ...

  6. (DFS)hdoj1175:连连看

    题目链接 这道题被稍微改编当作过去年的期末上机题,也被直接放到了这次这一届的第二次练习赛.当初刚看到这道题时DFS并没有系统的学过,做起来极其费劲.现在学过之后开始实践练习,发现这道题真的是很水. 我 ...

  7. JSON初步

    1.什么是JSON (1)JSON(Java Script Object Notation)是一种轻量级的数据交换语言, 以文本字符串为基础,且易于让人阅读 XML就是一个重量级的数据交换语言 (2) ...

  8. FG模型

    一直没搞懂CvBGStatModel和CvFGDStatModel有什么区别.CvBGStatModel模型的创建用cvCreateGaussianBGModel,CvFGDStatModel模型的创 ...

  9. Rhel6-lanmp架构配置文档

    l--操作系统:windows  linux  unix  mac OS a--网页发布软件:apache nginx iis m--数据库:mysql  pgsql  oracle... p--网页 ...

  10. Dom操作html详细

    <p name='pn'>xxx</p> <p name='pn'>xxx</p> <p name='pn'>xxx</p> & ...