一、USB设备描述结构

1.逻辑组织结构

  在USB设备的逻辑组织中,包含设备、配置、接口和端点4个层次。设备通常有一个或多个配置,配置通常有一个或多个接口,接口有零或多个端点。

每个USB设备都可以包含一个或多个配置,不同的配置使设备表现出不同的功能组合,配置由多个接口组成。在USB协议中,接口代表一个基本的功能,一个功能复杂的USB设备可以具有多个接口,而接口是端点的汇集。

一个USB播放器带有音频,视频功能,还有旋钮和按钮。
配置1: 音频(接口)+旋钮(接口)
配置2: 视频(接口)+旋钮(接口)
配置3: 音频(接口)+视频(接口)+按钮(接口)
音频接口,视频接口,按钮接口,旋钮接口均需要一个驱动程序。

USB设备中的唯一可寻址的部分是设备端点,端点的作用类似于寄存器。每个端点在设备内部有唯一的端点号,这个端点号是在设备设计时给定的。主机和设备的通信最终都作用于设备上的各个端点。每个端点所支持的操作都是单向的,要么只读,要么只写。

2.描述符

在每一个USB设备内部,包含了固定格式的数据,通过这些数据,USB主机就可以获取USB设备的类型、生产厂商等信息。这些固定格式的数据,我们就称之为USB描述符。标准的USB设备有5种USB描述符:设备描述符,配置描述符,接口描述符,端点描述符,字符串描述符。

2.1 设备描述符

bLength : 描述符长度,固定为0x12。
 bDescriptorType : 设备描述符类型,固定为0x01。
 bcdUSB : USB 规范发布号。表示了本设备能适用于那种协议,如2.0=0200
 bDeviceClass : 类型代码。
 bDeviceSubClass : 子类型代码。
 bDeviceProtocol : 协议代码。
 bMaxPacketSize0 : 端点0最大分组大小。
 idVendor : 供应商ID。
 idProduct : 产品ID(由厂商分配)。
 bcdDevice : 设备出产编码,由厂家自行设置。
 iManufacturer : 厂商描述符字符串索引.索引到对应的字符串描述符。
 iProduct : :产品描述符字符串索引。
 iSerialNumber : 设备序列号字符串索引。
 bNumConfigurations : 可能的配置数。

2.2 配置描述符

bLength : 描述符长度,固定为0x09。
 bDescriptorType : 配置描述符类型,固定为0x02。
 wTotalLength : 返回整个数据的长度,指此配置返回的配置描述符,接口描述符以及端点描述符的全部大小。
 bNumInterfaces : 配置所支持的接口数,指该配置配备的接口数量,也表示该配置下接口描述符数量。
 bConfigurationValue : 作为Set Configuration的一个参数选择配置值。
 iConfiguration : 用于描述该配置字符串描述符的索引。
 bmAttributes : 供电模式选择。Bit4-0保留,D7:总线供电,D6:自供电,D5:远程唤醒.
 MaxPower : 总线供电的USB设备的最大消耗电流,以2mA为单位。

2.3 接口描述符

bLength : 描述符长度,固定为0x09。
 bDescriptorType : 接口描述符类型,固定为0x04。
 bInterfaceNumber: 该接口的编号。
 bAlternateSetting : 用于为上一个字段选择可供替换的设置。
 bNumEndpoint : 使用的端点数目,端点0除外。
 bInterfaceClass : 类型代码(由USB组织分配)。
 bInterfaceSunClass : 子类型代码(由USB组织分配)。
 bInterfaceProtocol : 协议代码(由USB组织分配)。
 iInterface : 字符串描述符的索引。

2.4 端点描述符

bLength : 描述符大小,固定为0x07。
 bDescriptorType : 接口描述符类型,固定为0x05。
 bEndpointType : USB设备的端点地址。Bit7,方向,对于控制端点可以忽略,1/0:IN/OUT。Bit6-4,保留。BIt3-0:端点号.
 bmAttributes : 端点属性,Bit7-2,保留。BIt1-0:00控制,01同步,02批量,03中断。
 wMaxPacketSize : 本端点接收或发送的最大信息包大小。
 bInterval : 轮训数据传送端点的时间间隔.对于批量传送和控制传送的端点忽略.对于同步传送的端点,必须为1,对于中断传送的端点,范围为1-255。

二、USB数据通讯

1. 通讯模型

2. 传输

USB的数据通讯首先是基于传输(Transfer)的,传输的类型有:中断传输(比如USB,键盘)、批量传输(大容量传输:比如U盘)、同步传输、控制传输.

3. 事物

一次传输由一个或多个事务(transaction)构成,事务可分为:In事务,Out事务,Setup事务

4. 包

一个事务由一个或多个包(packet)构成,包可分为:令牌包(setup)、数据包(data)、握手包(ACK)和特殊包

5. 域

一个包由多个域构成,域可分为:同步域(SYNC),标识域(PID),地址域(ADDR),端点域(ENDP),帧号域(FRAM),数据域(DATA),校验域(CRC)

三、USB数据枚举

USB设备在正常工作以前, 第一件要做的事就是枚举。枚举是让主机认得这个USB设备, 并且为该设备准备资源,建立好主机和设备之间的数据传递通道。

1. 获取设备描述符
2. 复位
3. 设置地址
4.再次获取设备描述符
5. 获取配置描述符
6. 获取接口、端点描述符
7. 获取字符串描述符
8. 选择设备配置

USB协议分析的更多相关文章

  1. usb协议分析-设备描述符配置包-描述符

    /* usb协议分析仅供大家参考---设备描述符配置包,设备描述符, 地址设置, 配置描述符, 字符串描述符 */ /* -1- usb设备描述符配置包 */ typedef struct _USB_ ...

  2. [国嵌攻略][162][USB协议分析]

    USB设备逻辑结构 在USB设备的逻辑组织中,包含设备.配置.接口和端点4个层次.设备通常有一个或多个配置,配置通常有一个或多个接口,接口通常有零个或多个端点. USB设备描述符 当我们把USB设备( ...

  3. Linux usb 2. 协议分析

    文章目录 0. 背景 1. USB 协议传输格式 1.1 Packet 1.1.1 Token Packet 1.1.2 Data Packet 1.1.3 Handshake Packet 1.1. ...

  4. USB Mass Storage协议分析

    目录 简介 指令数据和状态协议 CBW指令格式 CSWCommand Status Wrapper状态格式 SCSI命令集 Format Unit Inquiry MODE SELECT 简介 USB ...

  5. 【转】USB协议架构及驱动架构

    1. USB协议 1.1 USB主机系统 在USB主机系统中,通过根集线器与外部USB从机设备相连的处理芯片,称为USB主机控制器.USB主机控制器包含硬件.软件和固件一部分. 1.2 USB设备系统 ...

  6. 蓝牙协议分析(3)_BLE协议栈介绍

    1. 前言 通过“蓝牙协议分析(2)_协议架构”的介绍,大家对蓝牙协议栈应该有了简单的了解,但是,肯定还有“似懂非懂.欲说还休”的感觉.有这种感觉太正常了,毕竟蓝牙协议是一个历史悠久又比较庞大的协议, ...

  7. Google的Protobuf协议分析

    protobuf和thrift类似,也是一个序列化的协议实现,简称PB(下文出现的PB代表protobuf). Github:https://github.com/google/protobuf 上图 ...

  8. 蓝牙协议分析(7)_BLE连接有关的技术分析

    转自:http://www.wowotech.net/bluetooth/ble_connection.html#comments 1. 前言 了解蓝牙的人都知道,在经典蓝牙中,保持连接(Connec ...

  9. 协议分析TMP

    最近闲来有事, 分析了一个非常低端(非常低端的意思是说你不应该对她是否能取代你现有的QQ客户端作任何可能的奢望,她只是一个实验性的东西)的手机QQ的协议, 是手机QQ3.0,      所用到的TCP ...

随机推荐

  1. ASP.Net软件工程师基础(一)

    本人目前是一名有1年左右ASP.Net开发经验的的软件开发工程师,目前公司用的是MVC+EF+...做的网站.写这套总结性系列文章的目的有两个:一是帮助自己总结一下自己到底有多少斤两,而不是一味的学新 ...

  2. python 实例属性之单,双下划线

    具体区别看下面例子 class A: def __init__(self,name='Andy'): self._name = name class B: def __init__(self,name ...

  3. 向Page对象注册脚本

    在madn上ClientScriptManager 类的示例: <%@ Page Language="C#"%> <!DOCTYPE html PUBLIC &q ...

  4. canvas-7globleCompositeOperation2.html

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. Mac OS下Boot2Docker的网络映射设置

    Mac系统下安装Boot2Docker造成了三层网络:Mac->VirtualBox->Docker,通过docker run 参数-p/-P,能手动或自动设置VirtualBox与Doc ...

  6. 【PL/SQL】异常处理:

    如果在PLSQL块中没有做异常处理,在执行PLSQL块时,出现异常,会传递到调用环境,导致程序运行出错! SCOTT@ prod> declare v_ename emp.ename%type; ...

  7. Oracle 时间相减得出毫秒、秒、分、时、天,,【转】

    http://blog.csdn.net/redarmy_chen/article/details/7351410 oracle 两个时间相减默认的是天数 oracle 两个时间相减默认的是天数*24 ...

  8. Activity的四种launchMode 详细分析

    launchMode在多个Activity跳转的过程中扮演着重要的角色,它可以决定是否生成新的Activity实例,是否重用已存在的 Activity实例,是否和其他Activity实例公用一个tas ...

  9. uinavigation样式

    UINavigationController* pNav = [[UINavigationController alloc] initWithRootViewController:pView]; [p ...

  10. java基础回顾(二)——内部类

    一.常规内部类 public class Outer { int count; void say(){ count++; System.out.println("我是外部类"); ...