USB 描述符
标准的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 描述符的更多相关文章
- USB描述符概述
在USB总线接口协议中,规定了一些标准的USB描述符,如表所示. 对于USB设备来说,有些USB描述符是必需的,例如: 设备描述符 配置描述符 字符串描述符 接口描述符 端点描述符 其余一些描述符并非 ...
- USB描述符解析-->枚举.
枚举可以理解为主机按不定的顺序向USB设备讨要设备信息,好给它分配资源,若枚举不成功,就放弃分配资源,免得浪费资源.一般都是使用中断传输方式通信. 常用的描述符有以下几种:01H.设备描述符 02H ...
- usb描述符简述(二)
title: usb描述符简述 tags: linux date: 2018/12/18/ 18:25:23 toc: true --- usb描述符简述 转载自cnblog 具体描述符 https: ...
- USB学习笔记连载(十二):USB描述符
USB设备是端口,接口,配置的集合,USB协议是以各种USB描述符来表征USB设备的功能.计算机通过这些描述符来获得USB设备的功能. USB描述符包括: USB标准设备描述符,USB集线器描述符.H ...
- 2.6 USB摄像头驱动之USB描述符
学习目标:分析USB摄像头驱动的描述符: 一.USB设备描述符 在usb设备驱动分析那一节,也用到了usb描述符. usb描述符可分为: USB设备描述符(usb_device_descriptor) ...
- USB描述符【整理】
USB描述符 USB描述符信息存储在USB设备中,在枚举过程中,USB主机会向USB设备发送GetDescriptor请求,USB设备在收到这个请求之后,会将USB描述符信息返回给USB主机,USB主 ...
- USB描述符(转)
//============================================================================// 文件名: USBDESC.C// 用 ...
- 自己总结的USB数据结构及其描述符
背景: USB理论知识光看着空想总觉着丢三落四,好像哪里没法理解到位,自己做个总结. 正文: 1. USB通信的最基本单位是“包”.如果把“包”肢解的话,可以分为各种“域”(7类,即一串二进制数.每类 ...
- usb驱动开发7之接口描述符
前面struct usb_interface里表示接口设置的struct usb_host_interface被有意的飘过了,咱们在这节主要讲讲这个结构体,同样在include/linux/usb.h ...
随机推荐
- php中curl和fsockopen发送远程数据的应用
最近要用到通过post上传文件,网上盛传的有curl的post提交和fsockopen,其中curl最简单,于是从最简单的说起. 这是简单的将一个变量post到另外一个页面 $url = ''; $d ...
- YouTube技术架构
谈不上翻译,就是摘录 1 billion video views per day 1.Apache 2.Python 3.Linux (SuSe) 4.MySQL 5.psyco, a dynamic ...
- C#画线源码
画线 private void Form1_Load(object sender, EventArgs e) { this.Paint += new PaintEventHandler(Form1_P ...
- js继承实例
第一种方法:对象冒充(临时属性) 借用临时属性,指向超类,末了删除 function Person(name,gender){ this.name=name; this.gender=gender; ...
- POJ 1068 Parencodings 模拟 难度:0
http://poj.org/problem?id=1068 #include<cstdio> #include <cstring> using namespace std; ...
- Android双击返回按钮退出程序
//双击退出事件 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KE ...
- vue js 用nodejs的依赖包 --2016-08-23
今天被nodejs包依赖坑了一下,上次上传的项目突然运行不起来了,原来是package.json中定义了使用最新版本的依赖,而最新版本有可能调整了结构或者改了api,比如vux把flexbox-it ...
- Java Bad version number in .class file
错误信息: java.lang.UnsupportedClassVersionError: Bad version number in .class file at java.lang.ClassLo ...
- linux命令每日一练习-ls
ls列出目录下所有文件 ls -l列出具体信息. drwxr-xr-x 9 root root 4096 2011-11-01 tomcat6.0.32 第一个d表示是目录,如果是-表示普 ...
- windows azure中国 里面建立一个虚拟机,与虚拟机建立通信 里面部署IIS,外网访问
在windows azure中国 里面建立一个虚拟机,里面部署IIS,外网不能访问么? 外网访问的地址是给的那个DNS地址 ,比如我的是 DNS 名称 urbanairserver.cloudapp. ...