• 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 最新动态。
















  • 相关阅读:
    Educational Codeforces Round 1 (C) (atan2 + long double | 大数)
    AC自动机模板
    JSP 过滤器
    JSP 动作元素
    Hibernate 拦截器
    Hibernate 批处理
    Hibernate 缓存
    单例模式数据库连接
    JavaScript限制前端页面用户表单输入
    注册页面手机验证码无跳转接收[html+js+ajax+php]
  • 原文地址:https://www.cnblogs.com/james1207/p/3313165.html
Copyright © 2020-2023  润新知