usb的包结构和传输类型

来源:互联网 发布:php默认编码方式 编辑:程序博客网 时间:2024/06/07 06:45

1:usb包结构概述

usb总线上传输数据是以包为基本单位的,一个包被分成不同的域,根据不同类型的包,所包含的域是不一样的。不过,所有的包都有共同的特点,就是都要以同步域开始,紧跟着一个包标识符PID,最终以包结束符EOP来结束这个包。同步域就是sync总线信号,包结束符就是EOP总线信号;PID用来标识一个包的类型,总共8位,高4位标识包的类型,低4位是高4位的取反,用来检验PID,usb协议规定了4中类型的包,分别是:
以下是usb1.1版本的PID类型图:


这里写图片描述

1.1:令牌包

指定数据包去向或者来源的设备地址和端点,从而保证了只有一个设备对呗广播的数据包/令牌包做出响应;简单的说就是主机发送一个令牌来通知哪个设备进行响应以及如何响应;
令牌包有四种:输出(OUT)、输入(IN)、建立(SETUP)、帧起始(SOF);
OUT:告知usb功能设备将要输出一个数据包;
IN:告知usb功能设备返回一个数据包;
SETUP:用于枚举阶段的控制传输中,通知设备将要输出数据包,输出数据包格式只能是DATA0数据包,且只能发送到设备的默认控制端点,并且usb功能设备必须要接收;
SOF:数据在usb总线上的传输以包为单位,包只能在帧内传输,高速usb总线的帧周期为125uS,全速以及低速usb总线的帧周期为1mS。帧的起始有一个特定的SOF包表示,帧尾为EOF,EOF不是包,而是一种电平状态,EOF期间不允许有数据传输;
OUT/IN/SETUP令牌包结构图,如下:
这里写图片描述
SOF令牌包结构图,如下:
这里写图片描述

1.2:数据包

数据包:包含usb传输过程中的具体的数据;
数据包结构图如下:
这里写图片描述
usb协议1.1中,只有两种类型的数据包,DATA0和DATA1,在usb协议2.0中,又增加了DATA2和MDATA数据包,之所以有不同类型的数据包,是用在当握手包出错时纠错,这种机制就是数据包类型切换机制。

1.3:握手包

握手包:表示传输的成功与否;
握手包结构图如下:
这里写图片描述
握手包有4中类型:ACK、NAK、STALL、NYET;
ACK:表示正确接收数据,并且有足够的空间来容纳数据;主机和设备都可以使用ACK来确认数据,其他的握手包只能是设备返回,主机不能使用;
NAK:表示没有数据需要返回,或者数据正确接收但是没有足够的空间存储接收到的数据,当主机收到NAK握手信号,知道设备还没有准备好,主机会在以后合适的时候进行重试传输;
STALL:表示设备无法执行这个请求,或者端点已经被挂起了,表示一种错误的状态;
NYET:usb2.0协议中定义,在高速输出事务中使用,表示设备本次接受数据成功,但是没有足够的空间接受下一次数据。主机在下一次输出数据时,先使用PING令牌来试探设备时候有足够的空间来接受数据,避免带宽浪费;

1.4:特殊包

特殊包:特殊场合使用的包;
特殊包总共有4中:PRE、ERR、SPLIT、PING;
PING:和OUT令牌类似,不同的是PING后不需要跟数据,直接等待设备的握手信号,用来判断设备是都可以接受数据,支持usb2.0的高速协议,是被使用在批量传输和控制传输的输出事务中;

2:usb的传输类型

2.1:usb事务
事务的结构:令牌包+数据包(可选)+握手包;
令牌包是用来启动一次事务,总是有主机发送;
数据包用来传输数据,可以是主机到设备,也可以是设备到主机,方向由令牌包来定;
握手包的发送者是数据的接收者,当数据接收成功后,发送握手包,确认数据接收成功,可以是主机发,有可以是设备发送;设备可以使用NAK握手包来表示数据还未准备好或者正确接收数据,不过没有空间存储;
2.2:usb事务和usb传输类型的关系
包是usb传输过程的基本单元,usb事务是包的集合,usb传输类型是usb事务的集合;其中,批量传输、中断传输、同步传输,都是一次事务;控制传输分为三个过程:建立过程和状态过程都是一次事务,数据过程可能包含多个事务;
2.3:usb协议中的4中传输类型
usb协议有4中传输类型:批量传输、同步传输、中断传输、控制传输;
批量传输
批量传输是一种可靠的单向传输,但延迟没有保证,它尽量利用可以利用的带宽完成传输,时候数据量比较大的传输;低速usb设备不支持批量传输,高速批量端点的最大包长度为512,全速批量端点的最大包长度为8、16、32、64;批量传输在访问usb总线时,相对其他传输类型具有最低的优先级,usb HOST总是优先安排其他类型的传输,当总线带宽有富余时才安排批量传输;高速的批量端点必须支持PING操作,向主机报告端点的状态,ACK表示肯定应答,已经准备好接受下一个数据包;NYET表示否定应答,没有准备好接受下一个数据包;
以下是批量传输的过程图:
图中一个方框代表一个包,灰色的包表示主机发送的包,白色的包表示设备发送的包;
这里写图片描述
一次正确的批量写传输的过程如下:
这里写图片描述
一次正确的批量读传输的过程如下:
这里写图片描述
中断传输
中断传输是一种轮询的传输方式,是一种单向的传输,主机通过固定的间隔对中断端点进行查询,若有数据传输或可以接受数据则返回数据或发送数据,否则返回NAK,表示设备没有准备好;中断传输的延迟没有保证,但并非实时传输,是一种延迟有限的可靠传输,支持错误重传;对于高速、去哪苏、低速端点,最大包长度分别可以达到1024/64/8bytes;中断传输有较高的优先级,仅次于同步传输;
以下是中断传输的过程图:
这里写图片描述
一次正确的中断写传输过程图:
这里写图片描述
一次正确的中断读传输过程图:
这里写图片描述

同步传输
同步传输是一种实时的、不可靠的传输,不支持错误重发机制,没有握手包;只有高速和全速端点支持同步传输,高速同步端点的最大包长为1024,低速的未1023;同步传输具有最高的优先级;用于对可靠性要求不高的实时数据传输,如摄像头、USB音响;
同步传输过程图:
这里写图片描述
同步写传输过程:
这里写图片描述
同步读传输过程:
这里写图片描述
控制传输
控制传输分为三个过程:第一个过程是建立过程、第二个过程是可选的建立过程、第三个过程是状态过程;
建立过程是一个建立事务,建建立事务的结构是:SETUP令牌包+DATA0数据包+ACK握手包;建立过程的流程图如下:
这里写图片描述
数据过程是一笔或者多笔数据事务,数据事务和批量传输中的批量事务是一样的,不过,数据过程中的所有数据事务的传输方向都是一致的,一旦数据传输方向发生变化,就会认为进入到状态过程,数据过程中第一个数据事务的数据包类型必须是DATA1;
状态过程是一次批量事务,传输方向和数据阶段的传输方向相反,状态过程志使用DATA1数据包格式;
控制写传输过程图:

建立过程

这里写图片描述

数据过程:一笔或者多笔写数据事务

这里写图片描述

状态过程

这里写图片描述

控制读传输过程图:

建立过程:

这里写图片描述

数据过程:一笔或者多笔读数据事务

这里写图片描述

状态过程

这里写图片描述

无数据控制写过程图:

建立过程

这里写图片描述

状态过程

这里写图片描述

1 0
原创粉丝点击