USB2.0概述及协议基础

目录

Ⅰ USB总线接口
1 USB接口标准
2 USB总线信号
3 USB数据编解码和位填充
4 USB拓扑结构
5 USB逻辑部件

Ⅱ USB设备
1 USB设备供电方式
2 USB设备插入检测机制
3 USB设备状态
4 USB设备枚举过程
5 USB描述符

Ⅲ USB传输
1 USB传输格式  
2 包packet  
3 事务transaction
4 传输transfer

USB是通用串行总线(Universal Serial Bus)的缩写。在USB1.0和USB1.1版本中,只支持1.5Mb/s的低速(low-speed)模式和12Mb/s的全速(full-speed)模式,在USB2.0中,又加入了480Mb/s的高速模式。

USB应用范围

ⅠUSB总线接口


1 USB接口标准

标准的USB连接器有A型、B型和Mini B型,每个型号又分为插头和插座。

USB接口标准
2 USB总线信号



USB使用差分传输模式,两根数据线D+和D-。

差分信号1:D+>2.8VD-<0.3V;
差分信号0:D->2.8VD+<0.3V
  • J状态和K状态
    低速下:D+为“0”,D-为“1”是为“J”状态,“K”状态相反;
    全速下:D+为“1”,D-为“0”是为“J”状态,“K”状态相反;
    高速同全速。
  • SE0状态
    D+为“0”,D-为“0”
  • IDLE状态
    低速下空闲状态为“K”状态;
    全速下空闲状态为“J”状态;
    高速下空闲状态为“SE0”状态。

针对全速模式,有以下几个重要信号:

  • Reset信号
    主机在要和设备通信之前会发送Reset信号来把设备配置到默认的未配置状态。即SE0状态保持10ms。
  • Resume信号
    20ms的K状态+低速EOP
  • Suspend信号
    3ms以上的J状态
  • SOP信号
    从IDLE状态切换到K状态
  • EOP信号
    持续2位时间的SE0信号,后跟随1位时间的J状态
  • SYNC信号
    3个重复的K、J状态切换,后跟随2位时间的K状态
suspend、resume信号
SYNC信号

3 USB数据编解码和位填充

USB采用NRZI(非归零编码)对发送的数据包进行编码。即:
输入数据0,编码成“电平翻转”;输入数据1,编码成“电平不变”

NRZI编码

位填充是为了保证发送的数据序列中有足够多的电平变化。填充的对象时输入数据,即先填充后编码。数据流中每6个连续的“1”,就要插入1个“0”。
接收方解码NRZI码流,然后识别出填充位,并丢弃它们。

位填充

4 USB拓扑结构

USB是一种主从结构的系统,主机叫做Host,从机叫做Device。Device包括USB function和USB HUB。

USB总线基于分层的星状拓扑结构,以HUB为中心,连接周围设备。总线上最多可连接127个设备。Hub串联数量最多5个。

USB拓扑结构
USB体系结构

5 USB逻辑部件

USB逻辑部件

Ⅱ USB设备


1 USB设备供电方式

USB设备有两种供电方式:
1)自供电设备:设备从外部电源获取工作电压
2)总线供电设备: 设备从VBUS(5v)取点

对总线供电设备,区分低功耗和高功耗USB设备。
低功耗设备是最大功耗不超过100mA。
高功耗设备是枚举时最大功耗不超过100mA,枚举完成配置结束后功耗不超过500mA。

设备在枚举工程中,通过配置描述符来向主机报告它的供电方式和功耗要求的。

2 USB设备插入检测机制


没有设备连上主机时,主机的D+和D-都在低电平(SE0状态),当SE0状态 持续一段时间了,就被主机认为是断开状态。
当设备连上主机时,主机检测到某一数据线电平拉高并持续一段时间,就认为有设备连上来了。主机必须在复位设备前,立即采样总线状态来判断设备的速度。

3 USB设备状态

USB设备有插入、供电、初始化、分配地址、配置和挂起六中状态,其状态转移图如下。

USB设备状态

4 USB设备枚举过程

对应USB设备的状态,host对USB设备会有以下活动:


在枚举过程中,都是使用控制传输。

  • 复位阶段
    USB主机检测到USB设备插入后,就会对设备复位。USB设备在总线复位后其地址为0,这样主机就可以通过地址0和那些刚刚插入的设备通信。USB主机往地址为0的设备的端点0发送获取设备描述符的标准请求。设备会将设备描述符返回给主机,主机在成功获取到数据包后,就会返回一个确认数据包给设备,从而进入接下来的分配地址阶段。
  • 分配地址阶段
    主机对设备又一次复位,就进入到分配地址阶段。主机往地址为0的设备的端点0发送一个设置地址的请求,新的设备地址就包含在建立过程的数据包中。具体的地址由主机负责管理,主机会分配一个唯一的地址给刚接入的设备。设备在收到这个建立过程后,就会进入到状态过程。设备等待主机请求状态返回,收到状态请求后,设备就返回0长度的状态数据包。如果主机确认该状态包已经正确收到,就会发送应答包ACK给设备,设备在收到这个ACK之后,就要启用新的设备地址了。这样设备就分配到了一个唯一的设备地址。
  • 获取描述符阶段
    获取描述符可以形象地表述如下:

Host:你是什么设备?

Device:12 01 0100....Device Descriptor
Host:你有几种功能?
Device:09 02 09....Configuration Descriptor
Host:每个功能有几个接口?
Device:09 04 00....Interface Descriptor
Host:每个接口使用哪几个端点?
Device:06 05 82....Endpoint Descriptor
Host:好了,我知道你是谁了,开始传输设备吧!
Device:OK,Read Go!

5 USB描述符

USB描述符有以下11类:

每种描述符的第一个字节描述该描述符包含的字节数目,第二个节描述该描述的类型。

  • Device Descriptor

  • Configuration Descriptor

  • Interface Descriptor

  • Endpoint Descriptor

  • String Descriptor

Ⅲ USB传输


1 USB传输格式

USB总线上传输数据是以包(packet)为基本单位的,必须把不同的包组织成事务(transaction)才能传输数据。
USB协议规定了四种传输(transfer)类型:批量传输、同步传输、中断传输和控制传输。其中,批量传输、同步传输和中断传输每传输一次数据都是一个事务,控制传输包括三个过程,建立过程和状态过程分别是一个事务,数据过程则可能包含多个事务。

2 包packet

一个包被分为不同域,根据不同类型的包,所包含的域是不一样的。但都要以同步域SYNC开始,紧跟一个包标识符PID,最终以包结束符EOP来结束这个包。

packet的组成
  • PID域
    PID是用来标识一个包的类型的。它共有8位,只使用4位(PID0PID3),另外4位是PID0PID3的取反,用来校验PID。

    PID

    PID规定了四类包:令牌包、数据包、握手包和特殊包。同类的包又各分为具体的四种包。
    包类型

    仅在帧首传输一次SOF包。
  • 地址域
    地址共占11位,其中低7位是设备地址,高4位是端点地址。

    地址
  • 帧号域
    帧号占11位,主机每发出一个帧,帧号都会自加1,当帧号达到0x7FF时,将归零重新开始计数。

  • 数据域
    根据传输类型的不同,数据域的数据长度从0到1024字节不等。

    数据长度
  • CRC域

    CRC校验
A. 令牌包

令牌包有四种:

  • OUT: 通知设备将要输出一个数据包
  • IN: 通知设备返回一个数据包
  • SETUP: 只用在控制传输中,也是通知设备将要输出一个数据包,与OUT令牌的区别是:只使用DATA0数据包,且只能发到device的控制端点
  • SOF: 在每帧开始时以广播的形式发送,针对USB全速设备,主机每1ms产生一个帧,USB主机会对当前帧号进行统计,每次帧开始时通过SOF包发送帧号。

OUT/IN/SETUP令牌包没有帧号域和数据域。

OUT/IN/SETUP令牌包结构

SOF令牌包没有地址域和数据域。

SOF令牌包结构
B.数据包

数据包没有地址域和帧号域。根据transfer的类型不同,数据包最大长度有所不同。

数据包结构
C.握手包

握手包有四种可选:

  • ACK: 传输正确完成
  • NAK: 设备暂时没有准备好接收数据,或没有准备好发送数据
  • STALL: 设备不能用于传输
  • NYET/ERR: 仅用于高速传输,设备没有准备好或出错

握手包仅有PID域。

握手包结构

3 事务transaction

事务可以分成三类

  • setup事务:主机用来向设备发送控制命令
  • 数据输入事务:主机用来从设备读取数据
  • 数据输出事务:主机用来向设备发送数据

事务组成:Token packet + Data packet + 可选的Handshake packet

4 传输transfer

USB协议定义了四种传输类型:控制传输(Control transfer)、大容量数据传输(Bulk transfer)、同步传输(Isochronous transfer)和中断传输(Interrupt transfer)。

传输类型 特点 应用场景
控制传输 非周期性,突发 命令和状态的传输
大容量传输 非周期性,突发 数据可以占用任意带宽,容忍延迟
同步传输 周期性 持续性传输,传输与时效相关的信息,并且在数据中保存时间戳的信息
同步传输 周期性,低频率 允许有延迟的通信
A.大容量传输 bulk transfer
bulk transfer流程图

图中一个方框表示一个 Packet,灰色的包表示主机发出的包,白色的包表示Device 发出的包。批量传输是可靠的传输,需要握手包来表明传输的结果。若数据量比较大,将采用多次批量事务传输来完成全部数据的传输,传输过程中数据包的PID 按照 DATA0-DATA1-DATA0-…的方式翻转,以保证发送端和接收端的同步。
一次批量传输( Transfer)由 1 次到多次批量事务传输( Transaction)组成。

bulk transfer
B.中断传输 interrupt transfer
interrupt transfer流程图

中断传输在流程上除不支持 PING 之外,其他的跟批量传输是一样的。他们之间的区别也仅在于事务传输发生的端点不一样、支持的最大包长度不一样、优先级不一样等这样一些对用户来说透明的东西。
这里所说的中断,跟硬件上的中断是不一样的,它不是由设备主动发出一个中断请求,而是由主机保证在不大于某个时间间隔内安排一次传输。
主机在排定中断传输任务时,会根据对应中断端点描述符中指定的查询间隔发起中断传输。中断传输有较高的优先级,仅次于同步传输。

中断传输
C.同步传输 Isochronous transfer
Isochronous transfer流程图

同步传输是不可靠的传输,所以它没有握手包,也不支持 PID 翻转。主机在排定事务传输时,同步传输有最高的优先级。

同步传输
D.控制传输 Control transfer

一次控制传输分为三(或两个)个阶段:建立( Setup)、 数据( DATA)(可能没有)以及状态( Status)。 每个阶段都由一次或多次事务传输组成。

  • 建立过程 setup stage
    使用一个建立事务,如下:
    control transfer的setup stage流程图
  • 数据过程 data stage
    数据过程是可选的。一个数据过程包含一笔或者多笔数据事务。数据过程的第一个数据包必须是DATA1包,然后每次正确传输一个数据包就在DATA0和DATA1之间交替。
  • 状态过程 status stage
    状态过程也是一笔批量事务。状态过程只使用DATA1包。

设备枚举过程中各种描述符的获取以及设置地址和设置配置等,都是通过控制传输来实现的。

控制传输

猜你喜欢

转载自blog.csdn.net/stoic163/article/details/80352380