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 ...
随机推荐
- jquery 取的单选按钮组的值
<input type=”radio” name=”wholesale_one” id=”wholesale_one” value=”1″ />1箱起批<input type=”ra ...
- 设置AFNetworking网络请求的超时时间
http://www.mamicode.com/info-detail-511816.html // 设置超时时间 [manager.requestSerializer willChangeValue ...
- ActiveX 技术疑点 一
1.编写基于MFC Activex 使用 静态库 .lib , MFC 的使用 在静态库中使用MFC . 生成ocx 文件 注册失败.提示: ***还是一个可执行文件,没有为这个文件类型注册的注册帮助 ...
- 大开眼界 游览Facebook香港办公室
想加入Facebook 的话不一定要跑去美国,Facebook在香港也开了一个很赞的办公室.除了无敌海景外,更可享用按摩椅.乒乓球桌.跑步机.麻将桌.酒廊.育婴室及开放式厨房.
- 团队博客——Sprint计划会议1
每日Scrum:第一天 会议时间:4.14.晚八点半 会议地点:基础教学楼一楼大厅 小组成员:郭庆樑,林彦汝,张金 认领人—使团队成员分工合作,保持团队的积极性. ID 名称(NAME) 重要性(IM ...
- MapReduce 实现数据join操作
前段时间有一个业务需求,要在外网商品(TOPB2C)信息中加入 联营自营 识别的字段.但存在的一个问题是,商品信息 和 自营联营标示数据是 两份数据:商品信息较大,是存放在hbase中.他们之前唯一的 ...
- spring mvc + freemarker优雅的实现邮件定时发送
1. spring mvc工程中引入相关freemarker\mail的包 如:pom.xml中加入类似 <dependency> <groupId>javax.mail< ...
- 极客DIY:如何构建一台属于自己的基站
写在前面(原文作者) 上周我去特拉维夫(Tel Aviv)探望我的朋友结果有了一些收获,一块崭新的BladeRF(x40),即一个支持USB3.0的SDR平台,这就意味着可以同时发送和接收信息了.而H ...
- ERP联系记录管理(十七)
联系记录管理修改页面: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Co ...
- ERP权限系统(七)
添加链接权限的字段: //权限管理 n.Target = "MainFrame"; //折叠 TreeView1.Nodes.Add(n); n.Expanded = false;