zoukankan      html  css  js  c++  java
  • USB基础简介

    一、USB2.0

    Universal Serial Bus (通用串行总线) 
    符合USB总线数据通信要求的通信协议

    1、意义

    1.易用(热插拔、即插即用)

    2.易扩充(USBHub可同时操作127个设备、兼容USB1.1)

    3.高速(相对)

    2、分类(按传输速率)

    1.USB2.0 LowSpeed(1.5Mbps,适用于交互设备)

    2.USB2.0 FullSpeed(12Mbps,适用于电话、音频)

    3.USB2.0 HighSpeed(480Mbps,适用于海量存储、视频)

    备注:USB2.0 是取代 USB1.1 的,而 USB3.0 USB2.0 的补充协议

    二、USB2.0总线布局
    1、主机——设备
          1)、主机在一个USB系统中是唯一存在的
          2)、不支持主机——主机或设备——设备的连接
          3)、插头和插座(A型、B型、mini、micro )
          4)、电源线(红)、地线(黑)、D+(绿)、D-(白)
          5)、USBon-the-go技术(多一根ID选择线,接地为主,悬空为从)
    2、有层次性的星型结构
          1)、网络集线器(Hub)
          2)、根集线器(Root Hub)


    三、USB2.0总线逻辑拓扑结构



    四、USB系统逻辑结构



    五、USB2.0通信方式
    1、差分信号与NRZI编码
           1)、SE0状态:D+与D-上均为低电平(signal-ended)
           2)、J状态(信号序列皆以J开始):D-高电平,D+低电平(LS)D+高电平,D-低电平(FS)
           3)、K状态:与J状态相反的电平
           4)、状态维持时间:位周期,即位传输速率对应的时间。2.8ns/83.3ns/667ns(这就是USB物理传输速率的本质含义)
           5)、NRZI编码:NonReturn Zero-Invert(非回零,反向编码)
           6)、位插入编码:每碰到六个连续1,则插入一个0
           7)、NRZI编码的意义在于尽量消除缆线上的误差和延时



    2、高速设备的识别
          1)、低速和全速设备的高电平为大于2.8V,低电平为小于0.3V
          2)、高速设备的高电平为0.4V,低电平为0
                    a.高速设备首先作为全速设备上电

                    b.如果Hub支持2.0规范,则将上电设备的状态置为SE0

                    c.如果设备是高速设备则会往D-线反向灌17.78mA的电流,在D-上形成一个800mV的电平(设备此时整体阻抗约45欧姆),称为Chirp K信号

                    d.Hub如果支持高速设备,则通过交替向D+和D-线灌17.78mA电流的方式,形成3对维持60us左右的ChirpJ与Chirp K信号对,表明自己支持高速设备

                    e.此时设备与Hub交换速率信息过程完毕。如果满足设备与Hub都是高速的条件,设备将在500us之内通过调节自身阻抗使系统整体阻抗降低到22.5欧姆

                    f.设备恢复到J状态,此时由于整体阻抗的变化,D+信号线上的电平已经变成了400mV,系统进入高速通信状态




    六 、USB2.0传输协议

    1、端点(ENDP)
          1)、端点是可惟一识别的USB设备的一部分,一系列独立的端点构成了USB逻辑设备
          2)、每个逻辑设备有一个被主机分配的惟一地址;每个端点在设备内部有一个设备给定的端点号(端点方向+ 端点号)
          3)、每个端点都只能支持数据流入或流出(注意不是每个端点号)
          4)、每个端点在被设置前处于未知状态,不可被主机访问(端点0除外)
          5)、端点0为缺省控制端点,设备加电复位后即可访问
          6)、一个设备最多可以有16个端点(包括端点0)

    2、包(Packet)
          1)、包是USB在传输过程中的最小逻辑单位
          2)、所有的包都以同步字段封包和包末尾(SYNC / EOP)开始和结束
          3)、所有的包都包含包标识符(PID)
          4)、PID用于表示包类型
          5)、包本身没有方向概念
    3、同步字段
          1)、全速/低速设备的SYNC是3对KJ,然后两个K(00000001)
          2)、高速设备的SYNC是15对KJ,然后两个K
          3)、EOP为两个SE0,然后回到J
          4)、总线解析包格式的时候不会等待EOP,而是必须在包的格式要求的最后一个字段后紧接EOP,否则该包即使格式满足要求也会被放弃

    注:此后提到“包”这个概念的时候,将不再包括SYNC和EOP

    类型

    子类型

    PID值

    描述

    Token

    OUT

    0001

    Out事务开始

    IN

    1001

    In事务开始

    SOF

    0101

    帧事务开始

    SETUP

    1101

    建立事务开始

    Data

    DATA0

    0011

    偶同步位数据包

    DATA1

    1011

    奇同步位数据包(两者总是交错的)

    DATA2*

    0111

    用于高速设备微帧同步传输的数据包,MDATA为切分后的数据包

    MDATA*

    1111

    Handshake

    ACK

    0010

    确认包

    NAK

    1010

    不确认,不能发送或不能接收

    STALL

    1110

    端点挂起,或一个请求不被支持

    NYET*

    0110

    设备接收无响应(实际已确认)

    Special

    PRE

    1100

    仅用于低速,启动低速设备数据传输

    ERR*

    1100

    以高速总线传送全速或低速事务时切分事务出错的握手

    SPLIT*

    1000

    以高速总线传送全速或低速事务时切分事务

    PING*

    0100

    主机询问设备是否有空间接收数据


    4、包格式



    5、事务(Transaction)
       1)、以标记包开始完成一个单一动作的包的集合
       2)、USB上的数据传输由各种类型的事务组成
       3)、所有的事务均由主机发起,设备只能应答
       4)、事务通常由请求包开始,以握手包结束,但同步传输中没有握手包
       5)、根据请求包类型,事务也被分为帧、建立、IN、OUT四种大类型
       6)、在高速设备中还有PING事务(只包含一个PING包和一个握手包),在高速总线上使用低速传输时,一个事务可以被SPLIT包拆分

    6、帧事务
       1)、一个帧事务只有一个SOF包
       2)、USB总线连接建立开始即由主机产生帧事务
       3)、帧事务以每1ms(FS)/125us(HS)一次的额定速率产生
       4)、一个SOF包中含有一个从USB总线连接建立起顺序递增的帧号
       5)、SOF事务不产生任何数据流传输和任何返回
       6)、SOF事务不保证设备可以接收到
       7)、SOF事务用于逻辑端点产生独立时间片


    7、建立事务
       1)、一个建立事务由一个SETUP请求包,一个八字节长度DATA0包和一个握手包组成
       2)、建立事务只能以ACK握手
       3)、ACK握手后,进入空闲


    8、IN事务
       1)、一个IN事务从IN请求包开始,表明主机要求设备产生数据
       2)、如果要求的IN事务中的数据包不止一个,则必须以DATA0包和DATA1包交替(奇校验位和偶校验位交替)
       3)、IN事务可以没有握手包,若是有握手,以NAK、或STALL握手则提前结束事务。
       4)、若以数据传送正确,则以ACK包握手
       5)、IN事务不能以NYET握手


    9、OUT事务
       1)、一个OUT事务从OUT请求包开始,表明主机将要产生数据
       2)、如果要求的OUT事务中的数据包不止一个,则必须以DATA0包和DATA1包交替(奇校验位和偶校验位交替)
       3)、OUT事务可以没有握手包,若是有握手,以NAK、或STALL握手则提前结束事务。
       4)、若以数据正确,则以ACK包或NYET包握手,高速设备推荐以NYET握手


    10、PING事务
        1)、一个PING事务从PING包开始,表明主机询问设备是否有应答
        2)、PING事务必须握手
        3)、若设备不能应答则以NAK握手,设备错误或端点挂起则以STALL握手,设备能应答则以ACK握手。

    注:此讲义在此后将忽略PING事务,在高速USB传输中,OUT事务前一搬都会有不间断的PING事务,直到PING事务以ACK握手,OUT事务才产生



    11、传输(Transfer)
        1)、传输由各种事务构成,具有方向特性
        2)、每个端点的传输类型在端点设置时就被固定下来了
        3)、四种传输类型:控制、同步、中断、批量
        4)、控制传输
             a)、所有的USB设备都需要控制传输
             b)、某些型号的USB-KEY
        5)、同步传输
             USB话筒
        6)、中断传输
             USB鼠标、键盘
        7)、批量传输
             U盘

    12、控制传输
        1)、控制传输至少有建立和状态两个阶段,并根据需要可能拥有数据阶段
        2)、建立事务中的数据内容决定是否有数据阶段,数据阶段为一个带握手的IN事务或OUT事务,一次控制传输中的数据阶段不能即有IN事务又有OUT事务
        3)、如果一次控制传输中数据阶段为IN事务则此次控制传输为上行,如果为OUT事务则为下行
        4)、状态阶段为一个和数据阶段相反的事务,若没有数据阶段则状态阶段为一个IN事务
        5)、状态阶段的DATA包数据长度为0,且必为DATA1包



    13、同步传输
        1)、一次同步传输只有一个没有握手包的IN事务或OUT事务
        2)、IN事务同步传输为上行,OUT事务同步传输为下行
        3)、同步传输由帧事务决定时间片,但帧事务并不是同步传输的一部分
        4)、同步传输中的DATA包不用DATA0和DATA1交替,而是全以DATA0包传输。



    14、中断传输
        1)、一次中断传输只有一个IN事务或OUT事务,该事务可以有握手也可以不握手
        2)、IN事务为上行,OUT事务为下行
        3)、中断条件生成则主机产生OUT或IN请求包



    15、批量传输
        1)、一次批量传输可以有一个或多个IN事务或OUT事务
        2)、一次批量传输不能即有IN事务又有OUT事务
        3)、由IN事务组成的批量传输为上行,由OUT事务组成的批量传输为上行
        4)、在一个IN或OUT事务若以ACK握手则表示可以开始下一个事务,若以NAK握手则重传这次事务,若以STALL握手,则传输被停止,需要软件干预解除状态
        5)、若数据出错可以没有任何握手,主机会重新生成该次事务
        6)、批量传输的数据负载量由具体传输协议定义



    16、批量传输与中断传输的差异
        1)、中断传输数据量小(一次一个事务),批量传输数据量大(一次多个事务)
        2)、中断传输有固定的数据长度,批量传输则是一个范围

    17、同步传输与中断传输的异同
        1)、中断传输强调触发条件,同步传输强调实时(可以理解为帧数是唯一触发条件)
        2)、中断传输数据量小,同步传输数据量较大
        3)、中断传输和同步传输都有固定的数据长度,但中断传输的数据长度由端点配置决定,同步传输则完全固定
        4)、中断传输可以靠具体传输协议来处理数据错误及通道STALL的状态,而同步传输不行

    18、USB设备状态


    1)、设备连接
         USB协议不定义设备离开总线的行为
    2)、设备加电
         USB设备即可自供电也可由总线供电,USB设备在自供电时不一定处于加电状态,必须由总线的VBUS供电时才是加电状态
    3)、复位
         a、USB设备上电后必须收到主机的复位请求后才开始响应USB总线上的请求
         b、在复位后USB设备使用默认设备地址
    4)、地址分配
         主机给USB分配一个地址后,设备将以分配的地址响应
    5)、设备配置
         USB设备接收到配置请求后,按照设备、接口、端点描述符的信息配置设备功能
    6)、设备挂起
         USB设备在一定周期内和总线没发生数据交换则进入挂起状态

    19、USB总线枚举过程
    1)、Hub通知主机有USB设备连接到USB总线上
    2)、主机通过查询Hub获得设备信息(设备在哪个端口)
    3)、主机等待100ms,待供电稳定后向设备发送复位请求
    4)、主机通过设备端点0为设备分配一个地址(Set Address)
    5)、主机通过设备端点0向设备依次发送获取设备、配置、字符串标准描述符请求(Get Descriptor)
    6)、主机根据设备的配置信息向设备发送配置请求(Set Config)
    7)、主机根据获得的设备类型调用适合的驱动开始与设备正常通信

    20、枚举请求
    1)、在总线枚举时,请求是主机通过设备的端点0以控制传输方式进行的
    2)、USB总线标准请求的格式被封装在控制传输的建立事务的DATA0包中(通常我们所说的“SETUP包”,但是这个说法并不准确)
    3)、一个请求格式包含6个字段共8个字节

    偏移

    字段

    长度

    值类型

    作用

    0

    bmRequestType

    1

    位图

    请求特征(方向、种类、对象)

    1

    bRequest

    1

    具体请求

    2

    wValue

    2

    值型参数

    4

    wIndex

    2

    索引

    索引或偏移型参数

    6

    wLength

    2

    数据阶段长度


    功能

    bmRequestType

    bRequest

    wValue

    wIndex

    wLength

    数据要求

    分配地址

    00H

    05H

    地址

    0

    0

    获取设备描述符

    80H

    06H

    01H

    0

    描述符长度

    IN,设备描述符

    获取配置描述符

    80H

    06H

    02H

    0

    描述符长度

    IN,配置描述符+接口描述符+端点描述符(可选)

    获取字符串描述符

    80H

    06H

    03H

    指定的字符串索引

    字符串描述符长度

    IN,指定的字符串描述符

    配置设备

    00H

    09H

    配置值

    0

    0

    设置设备特性

    00H

    03H

    特性值

    0

    0

    设置接口特性

    01H

    03H

    特性值

    接口号

    0

    设置端点特性

    02H

    03H

    特性值

    端点号

    0



    21、设备描述符
    1)、设备描述符描述USB设备的一般信息
    2)、一个物理意义上的USB设备只能有一个设备描述符
    3)、设备描述符传递的关键信息包括
         a、设备的缺省控制传输通道的最大包长
         b、设备的类型
         c、设备使用的协议
         d、PID/VID
         e、其他用于描述设备的关键字符串的索引
    4)、设备类型和协议可以不在设备描述符中指出,而在接口描述符中指出,对于可能由多个接口的设备,在接口描述符中指出设备类型和协议是更好的选择
    5)、设备描述符包含14个字段,共18字节:

    偏移

    字段

    长度

    类型

    描述

    0

    bLengh

    1

    常量

    描述符自身的长度(12H)

    1

    bDescriptorType

    1

    常量

    描述符类型(01H)

    2

    bcdUSB

    2

    BCD码

    USB版本号(USB2.0取{00H,02H})

    4

    bDeviceClass

    1

    00H:接口指定

    01H~FEH:标准定义的设备类型

    FFH:厂商自定义设备类型

    5

    bDeviceSubClass

    1

    若设备类型为0,则此字段必须为0

    6

    bDevicePortocol

    1

    00H:接口指定

    01H~FEH:标准定义的协议

    FFH:厂商自定义协议

    7

    bMaxPacketSize0

    1

    缺省通道最大包长,即端点0最大包长(8、16、32、64)

    8

    idVendor

    2

    BCD码

    VID(合法VID值必须由USB-IF授权)

    10

    idProduct

    2

    BCD码

    PID(厂商自订)

    12

    bcdDevice

    2

    BCD码

    设备发型号

    14

    iManufacturer

    1

    索引

    描述厂商信息的字符串描述符索引

    15

    iProduct

    1

    索引

    描述产品信息的字符串描述符索引

    16

    iSerialNumber

    1

    索引

    产品序列号字符串描述符索引

    17

    bNumConfigurations

    1

    可能拥有的配置描述符数量


    22、配置描述符
    1)、一个设备可以有多种配置,配置描述符中的bConfiguration Value字段和配置设备请求中的相应字段匹配即可
    2)、配置描述符必须和其后的接口描述符、端点描述符(如果有的话)合并在一起构成一个设备配置
    3)、设备、配置、接口、端点四个概念有如下关系:
         a、一个设备有一个或多个配置
         b、每个配置有一个或多个接口
         c、每个接口有零个或多个端点
         d、在同一配置下,一个端点不会在多个接口间共享
         e、在两个配置下的端点可以复用
         f、一次枚举,设备只能按一个配置描述,可以通过软件或硬件手段在配置间切换后重新枚举
    4)、配置描述符包含8个字段,共9个字节:

    偏移

    字段

    长度

    类型

    描述

    0

    bLengh

    1

    常量

    描述符自身的长度(09H)

    1

    bDescriptorType

    1

    常量

    描述符类型(02H)

    2

    wTotalLength

    2

    配置信息总长度(包括配置、接口、端点、类描述符)

    4

    bNumberInterface

    1

    此配置支持的接口个数

    5

    bConfigurationValue

    1

    与设备配置请求中选定该配置的值相同

    6

    iConfiguration

    1

    索引

    描述该配置的字符串描述符索引

    7

    bmAttributes

    1

    位图

    配置特性:

    可配置在此配置下的设备是否为自供电;是否可远程唤醒主机

    8

    MaxPower

    1

    该值乘以2的结果为在此配置下设备的耗电量。



    23、接口描述符
    1)、一个接口可能拥有多个可选的设置
    2)、在同一个接口的不同设置下,端点可复用
    3)、一个接口描述符可以通过SetInterface请求来切换其可选设置
    4)、接口描述符中提到的端点个数,是指此接口用到的除了端点0以外的端点个数
    5)、配置描述符包含9个字段,共9个字节:

    偏移

    字段

    长度

    类型

    描述

    0

    bLengh

    1

    常量

    描述符自身的长度(09H)

    1

    bDescriptorType

    1

    常量

    描述符类型(04H)

    2

    iInterfaceNumber

    1

    索引

    该接口在该配置中的索引(该配置中的第一个接口该值为0,该配置中的第二个接口该值为1…)

    3

    iAlternateSetting

    1

    索引

    当前接口所使用的设置索引(当前接口若使用第一种设置该值为0;第二种设置该值为1…)

    4

    bNumberEndpoints

    1

    该接口所使用的非零端点数量

    5

    bInterfaceClass

    1

    该接口的类型

    0:保留

    1~254:USB定义的接口类型(8:MassStrorage、3:HID)

    255:厂商自定义

    6

    bInterfaceSubClass

    1

    子类型

    该值在不同的bInterfaceClass中有不同定义(6:SCSI、4:UFI)

    7

    bInterfaceProtocol

    1

    协议类型,该值在不同的bInterfaceClass中有不同定义(50H:Bulk Only、0:CBI)

    8

    iInterface

    1

    索引

    描述此接口的字符串描述符索引值



    24、端点描述符
    1)、端点描述符用于描述接口中使用端点的类型及带宽需求
    2)、端点0不需要描述
    3)、一个接口描述符后面接着该接口需要的端点描述符,然后才是下一个接口的描述符
    4)、端点描述符包含6个字段,共7个字节:

    偏移

    字段

    长度

    类型

    描述

    0

    bLengh

    1

    常量

    描述符自身的长度(07H)

    1

    bDescriptorType

    1

    常量

    描述符类型(05H)

    2

    bmEndpointAddr

    1

    位图

    Bit3~0:端点号(0~15)

    Bit6~4:保留(0)

    Bit7:方向(控制传输类型的端点此处忽略)

    Out:0

    In:1

    3

    bmAttributes

    1

    位图

    Bit0、1表示传输类型:

    00=控制传输

    01=同步传输

    10=批量传输

    11=中断传输

    其他位全保留

    4

    wMaxPacketSize

    2

    对于中断、控制、批量传输,该字段表述该端点下传输的最大数据包的大小;

    对于同步传输该字段为每次传输的数据净负荷预留时间

    6

    bInterval

    1

    中断、同步传输:两次请求包的帧数间隔,同步必须为1,中断可取1~255

    控制、批量传输:忽略



    25、字符串描述符
    1)、除索引0外,其他字符串描述符是可有可无的
    2)、之前所提到的描述符中的某个字符串如果没有的话,将索引写0即可
    3)、字符串描述符中的字符串必须采用UNICODE编码
    4)、字符串描述符支持多国语言,索引号为0的字符串专门描述USB设备所支持的语言

    偏移

    字段

    长度

    类型

    描述

    0

    bLengh

    1

    描述符自身的长度(2x + 2, x为支持的语言数)

    1

    bDescriptorType

    1

    常量

    描述符类型(03H)

    2

    wLANGID[0]

    2

    语言ID

    4

    wLANGID[1]

    2

    语言ID

    6

    2x+ 2

    wLANGID[x]

    2

    语言ID



    有兴趣的朋友请登录 www.usb.org 下载最新版本协议,了解 USB 最新动态。
















  • 相关阅读:
    739. Daily Temperatures
    556. Next Greater Element III
    1078. Occurrences After Bigram
    1053. Previous Permutation With One Swap
    565. Array Nesting
    1052. Grumpy Bookstore Owner
    1051. Height Checker
    数据库入门及SQL基本语法
    ISCSI的概念
    配置一个IP SAN 存储服务器
  • 原文地址:https://www.cnblogs.com/james1207/p/3313165.html
Copyright © 2011-2022 走看看