1.USB详解(简介)


  本小节对USB系统进行概述,包括USB由来、电气特性、如何进行传输,USB包的构成,USB传输方式,让大家对USB协议有简单、整体的认知。

1.USB简介

  USB即Universal Serial Bus,通用串行总线,由Intel、Compaq、Digital、IBM、Mircrosoft、NEC以及Northern Telecom等计算机公司和通信公司于1995年联合制定,并逐渐形成了行业标准。当时USB主要是用来解决外设不支持热拔插的问题,可以设想插个键盘/外设需要重新开机的麻烦程度,并且还具有供电简单(总线供电)、传输速度快、扩展简易(通过集线器最多可扩展127个外设)、兼容性良好等优点。USB自推出以来,以成功替代了串口和并口,成为21世纪大量计算机和只能设备的标准扩展接口和必备接口之一,现已经发展的到了USB3.2版本。

2.USB的电气特性

  usb总共有4条线(在USB OTG技术中有5条线,多余一条用来做身份识别,即设备可以做从机/主机),分别是Vbus D+ D- GND,USB传输采用差分传输(干扰性强),所以USB是单双工传输方式,使用NRZI编码的方式:数据为1时电平不翻转,为0时电平反转,为了防止数据不反转,在每6个1之后插入0翻转,发送的使用通过SIE(串行接口引擎)串行化和编码,LSB在前,接收的时候并行和反串行化。USB传输线上有如下几个状态用来传输,在低速设备(1.5Mb/s) J态:D+ =‘0’ D- =’1‘,K态:D+ =‘1’ D- =‘0‘ SE0态:D+ =’0‘ D -=‘0’, 在全速(12Mb/s)和高速(480Mb/s)中则相反,低速下空闲状态为"K",全速下空闲状态为“J”,高速下空闲状态为“SE0”。USB在未配置时能够从总线获取的电流为100ma,配置之后可以获取最大电流为500ma。

3.USB最小传输单元:包

3.1 usb包的构成

USB总线上传输数据是以包为基本单位的,一个包被分成不同的域,不同类型的包所包含的域是不一样的,但基本的格式如下所示,这里PID的低4为表示PID的类型,高四位为低四位的取反校验,而PID后面的数据则由CRC来校验。

同步域(告诉SIE开始进行传输了,在不同速度设备中不一样)PID包标识符(8位)EOP(包结束的标志,两个数据位宽的SE0,SE0通常表示一些特殊的意义:包结束、复位信号等。)

在USB2.0中有如下几种包格式:
在这里插入图片描述

3.2 令牌包,启动一次USB传输

  USB所有的数据都是主机发起的,从机只是被动响应,所以令牌包告诉从机进行响应,如何响应。输出令牌包(OUT):通知设备将要输出一个数据包。输入令牌包(IN):通知设备将要返回一个令牌包,USB规定,数据的方向都是相对于主机来说的,OUT表示主机输出,IN表示主机输入。建立令牌包(SETUP):它跟输出令牌包的作用一样,通知设备将要输出一个数据包,区别在于SETUP令牌包之后只使用DATA0数据包,且只能发到设备的控制端点,并且设备必须要接收,而OUT令牌包没有这些限制。帧起始包(SOF):在每帧(或微帧)开始时发送,它以广播的形式发送,全速设备和告诉设备可以收到。在四个令牌中,中有SOF令牌后不接数据。
SOF包结构如下所示:

同步域PID11位帧号5位CRC5EOP

IN、OUT、SETUP包的接口如下所示(可以看出总线最大设备数和每个设备对打端点数)

同步域PID7位地址4位端口号5位CRC5EOP

3.3 数据包,数据传输

DATA0、DATA1,在USB2.0中增加了DATA2和MDATA包,主要用在告诉分裂事务和高带宽同步传输中。之所以有不同的数据包类型是用在握手包出错时纠错。当数据包成功接收/发送的时候,主机/从机会切换数据包类型,当发送端没有接收到握手包,那么会重新发送,此时接收端的数据包已经切换了,就会发现数据包类型不一致,那么USB系统会试图从错误中恢复。
数据包接口如下所示:

同步域PID数据(字节0~字节N)16位CRC16EOP

3.4 握手包,传输是否被对方确认

  ACK:表示正确收到数据并有足够的空间来容纳数据,主机和从机都可以使用ACK来确认,而NAK、STALL、NYET只有从机能够返回,主机不能使用这些握手包。NAK:表示没有数据需要返回,或者数据正确接收但是没有足够的空间来容纳,主机收到NAK会在适当的时机进行重试传输。STALL:表示从机无法执行这个请求,或者端点已经被挂起了,表示一种错误的状态,,从机返回STALL之后需要主机进行干预才能解除这种STALL状态。NYET:只有在USB2.0的高速设备输出事务中使用,但没有足够的空间来接收下一次数据,主机在下一输出数据时先使用PING令牌包来试探从机是否具有空间接收数据。
  握手包的结构最简单,只有同步域、PID和EOP:

同步域PIDEOP

3.5 特殊包

  特殊包在一些特殊的重要场合使用,PRE、ERR、SPLIT、PING。PRE、SPLIT、PING是令牌包,ERR是握手包,ERR、PING、SPLIT是USB2.0协议新增的。PRE:通知集线器打开其低速端口的前导包,PRE令牌包与握手包的结构一样,只有同步域、PID和EOP。PING:在USB2.0中,当数据接收完之后没有足够的空间来接收下一次数据,从机会返回NYET包,主机会在适当时机使用PING令牌包查看设备是否具备接收能力。SPLIT:高速事务分裂令牌包,通知集线器将告诉数据包转化为全速或者低速数据包发送给其下面的端口。

4.USB的四种传输模式

4.1 USB事务

  USB传输事务通常由一个/多个事务组成,事务通常由两个或三个包组成:令牌包、数据包、握手包。令牌包:启动一个事务,总是由主机进行发送。数据包:可以从主机到设备,也可以从设备到主机,方向由令牌包来指定。握手包:数据接收者发送,当数据接收正确之后发送握手包。

4.2 批量传输

  一次批量传输事务由三个阶段:令牌包阶段、数据包阶段和握手包阶段。
在这里插入图片描述

4.2.1 批量输出

1.主机发送一个OUT令牌包,包含了设备地址、端点号。
2.主机发送数据包。
3.设备解码令牌包、数据包都准确无误,则使用ACK或者NYET(没有能力接收下一次),从机是挂起则回复STALL。

4.2.2 批量输入

1.主机发送一个IN令牌包,包含了设备地址、端点号。
2.设备检测到错误则不应答,等待主机超时。若果没有错误但没有数据需要返回,则使用NAK来应答主机,从机是挂起状态则使用STALL应答
3.主机检测数据无错误则应答ACK,若由错误则不应答,等待超时。

4.2.3 高速设备PING

在高速设备中增加一个PING令牌包,不发出数据,直接等待设备握手包,检测设备是否由能力接收数据或需要发送数据,避免发送数据浪费带宽,因此PING事务只有令牌包和握手包。

4.3 中断传输

  中断传输是一种保证查询频率的传输。除了对端点查询的策略上不一样之外,中断传输和批量传输的结构基本上是一样的,只是中断传输中没有PING和NYET两种包。
在这里插入图片描述

4.4 等时传输

等时传输用在数据量大,对实时性要求高的场合,例如音频设备、视频设备,对数据的正确性要求不要,所以等时传输不能保证数据100%正确的。等时事务如下图所示:
在这里插入图片描述

4.5 控制传输

控制传输比前面三种传输方式复杂,主要有2个以上个事务过程,数据过程会有多个事务。控制传输有三个过程:建立过程、数据过程(可选)、状态过程。

4.5.1 建立过程

  建立过程使用一个建立事务,建立事务是一个输出数据的过程,与批量输出事务相比,有几处不一样:首先令牌包不一样,建立事务使用SETUP令牌包,其次是数据包类型,SETUP只能使用DATA0包;最后是握手包,设备只能使用ACK来应答,而不能使用NAK或者STALL来应答,即设备必须要接收建立事务的数据。
在这里插入图片描述
在这里插入图片描述

4.5.2 数据过程

  数据过程是可选的,即一个控制传输可能没有数据过程,数据过程使用批量事务。如果有可能有一笔/多笔数据过程。需要注意的是,数据过程必须传输同一个方向,控制写必须输出,控制读必须输入,一旦数据传输方向发生变化,就会认为进入到状态过程。数据过程必须以DATA1包开始,然后再DATA0和DATA1之间交替。

4.5.3 状态过程

  状态过程的方向与数据过程的方向相反(也是使用批量事务),控制写使用批量输入事务,控制读使用批量输出事务。

4.6 传输类型与支持的最大包长

  每个端点描述符中规定了端点所支持的最大数据包长。主机每次发送的数据包,都不能超过端点的最大包长。
1.控制传输的端点,低速模式最大包长固定为8字节,高速模式最大包长固定为64字节,而全速模式可在8、16、32、64字节中选择。
2.等时传输的端点,全速模式最大包长上限为1023字节,高速模式最大包长上限为1024字节,低速模式不支持等时常熟。
3.中断传输的端点,低速模式最大包长上限为8字节,全速模式最大包长上限为64字节,高速模式最大包长上限为1024字节。
4.对于批量传输的端点,高速模式固定为512字节,全速模式包长可在8、16、32、64字节中选择,低速模式不支持批量传输。

5.参考文档

usb官网:usbmassbulk_10
usb_20.pdf

  • 11
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值