标准的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. curl,chkconfig

    1. Linux系统服务管理 工具ntsysv 类似图形界面管理工具,如果没有该命令使用 yum install -y ntsysv 安装 常用服务:crond, iptables, network, ...

  2. Disaster Recovery, High Availability, and Continuous Availability - What's the Difference?

    Disaster Recovery, High Availability, and Continuous Availability - What's the Difference? Posted by ...

  3. php base64_decode 解码方法

    <?php header('Content-Type:text/html;charset=utf-8'); function encode_file_contents($filename) { ...

  4. Java爬虫,信息抓取的实现

    转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/23272657 今天公司有个需求,需要做一些指定网站查询后的数据的抓取,于是花了点 ...

  5. lucas 定理学习

    大致意思就是求组合数C(n , m) % p的值, p为一个偶数 可以将组合数的n 和 m都理解为 p 进制的表示 n  = ak*p^k + a(k-1)*p^(k-1) + ... + a1*p ...

  6. 在shell脚本中进行条件控制以及使用循环

    转载请标明:http://www.cnblogs.com/winifred-tang94/ if条件语句语法: if [ 条件表达式 ] then 代码 else 代码 fi 注意:在上面的if条件语 ...

  7. IOS多线程之NSOperation学习总结

    NSOperation简介 1.NSOperation的作用 配合使用NSOperation和NSOperationQueue也能实现多线程编程 2.NSOperation和NSOperationQu ...

  8. 新版的tomcat里面get请求通过http协议的时候似乎默认是UTF-8的编码了吗?

    不在servler.xml的connector中添加URICoding=“UTF-8”,使用默认值一样没有乱码,而添加URICoding=“iso-8859-1”就是乱码了. POST请求还是用iso ...

  9. C#移动无标题栏窗体的四种代码

    第一种采用,需注意窗体上的控件是否把窗体覆盖了...MouseDown.MouseMove.MouseUp事件应该是鼠标所处位置最顶层的控件的事件在窗体的类中声明两个变量private Point m ...

  10. SwipeRefreshLayout

    也许之前下拉刷新你可能会用到一些第三方开源库,如PullToRefresh, ActionBar-PullToRefresh.XlistView等 但现在已经有官方的组件了---SwipeRefres ...