Linux内核USB2.0驱动框架分析--USB传输

一、USB传输、事务、包的关系

USB传输、事务、包是从不同层次上去说明一次数据交互的三个概念。

举个例子可能更好些,“某领导和一个早起的程序员进行了一次交流,说了5件事”。

OK,其实这里的"这次交流"就相当于USB的一次传输,"说了5件事"就相当于这次传输过程中的5个事务,当然每件事肯定有若干句对话,就相当于每个事务里面的各种

其实通讯协议就是如此,都是从现实生活中抽象出来的,任何通讯协议都可以类比现实生活中人与人之间的交流方式。
在这里插入图片描述

二,传输
USB协议定义了四种传输类型:控制传输、中断传输、批量传输以及等时传输。其中,批量传输、等时传输、中断传输每传输一次数据就是一个事务;控制传输分为2~3个阶段:建立阶段、数据阶段(无数据控制没有此阶段)以及状态阶段,其中建立阶段和状态阶段分别是一个事务,数据阶段则可能包含多个事务。根据数据阶段的数据传输方向,控制传输又可分为3种类型:控制读取(读取USB描述符)、控制写入(配置USB设备)以及无数据控制。

①控制传输(Control Transfers): 非周期性,突发。用于命令和状态的传输。

②中断传输(Interrupt Transfers): 周期性,低频率,允许有限延迟的通信 如人机接口设备(HID)中的鼠标、键盘、轨迹球等

③批量(大容量数据)传输(Bulk Transfers): 非周期性,突发大容量数据的通信,数据可以占用任意带宽,并容忍延迟 。如USB打印机、扫描仪、大容量储存设备等

④等时(同步)传输(Isochronous Transfers): 周期性、持续性的传输,用于传输与时效相关的信息,并且在数据中保存时间戳的信息 ,如音频视频设备

其中,批量传输、同步传输和中断传输每传输一次数据都是一个事务,控制传输包括3个过程,建立过程和状态过程分别是一个事务,数据过程则可能包含多个事务。

三,事务
在USB上数据信息的一次接收或发送的处理过程称为事务处理(Transation)。事务通常由三个包组成:令牌包、数据包和握手包。

令牌包用来启动一个事务,总由主机发送;
数据包传送数据,可以由主机到设备或从设备到主机,方向由令牌包来指定。
握手包的发送着通常时数据的接收者,当数据正确接收时,发送握手信号,设备也可发送NAK握手包表示数据未准备好。

Transaction可以分成三类 :

Setup transaction:主机用来向设备发送控制命令
Data IN transaction:主机用来从设备读取数据
Data OUT transaction:主机用来向设备发送数据

在OUT和SETUP事务处理中,紧接在SETUP和OUT包后的是DATA包,DATA0和DATA1包是接替地发送的,在DATA包后面,设备将回应一个握手信号,(如果设备可以接受数据,就回应ACK包;如果设备忙,则回应NAK包;如果设备出错,则回应STALL包)。

在IN事务中,在IN包后面是设备发送的DATA包或NAK包或STALL包,(若设备忙或者出错,就发送NAK包或STALL包给主机;若设备数据准备好发送,则发送DATA包),DATA0和DATA1包也是交替发送的,紧接着DATA包后面的是主机发送给设备的握手包。(ACK表示主机可以接收数据,NAK包代表主机忙,STALL代表主机出错)

四,控制传输的结构
控制传输主要包括控制读传输、控制写传输、无数据控制传输三种, 如下图。
一次完整控制传输可以分为三个阶段:初始设置阶段—>数据阶段(可选)—>状态信息阶段。
在这里插入图片描述(1)设置过程

初始设置阶段用于固定建立SETUP事务,标志一次控制传输的开始。

(2)数据传输过程

初始设置阶段中命令如果要求读/写数据,数据阶段就会在这一阶段来具体交换数据(如果没有数据交换要求则可省去数据阶段步骤,具体有SETUP事务标准请求命令决定,如下)。

主机如果是控制读数据请求,则数据阶段为一个或者多个IN事务;

主机如果是控制写数据请求,则数据阶段为一个或者多个OUT事务;

主机如果是无数据的控制请求,则没有数据阶段。

数据阶段是由一到多个IN/OUT事务组成。这是由于有时候存在一个事务传不完的数据,所以可能存在多个连续IN/OUT事务的情况,在同一次数据传输阶段中事务类型(读写)必定相同。

在这里插入图片描述
在这里插入图片描述
数据过程的所有数据事务必须是同一传输方向,一旦数据传输方向发生改变,就会认为是进入状态阶段。数据过程的第一个包必须是DATA1包,然后每次正确传输一个数据包后就在DATA0和DATA1之间替换。

3)状态过程

状态过程用来表示整个传输的过程已完全结束。(过程类似数据传输过程,但传输方向相反,且状态过程只使用DATA1包).

状态传输的方向必须与数据传输方向相反,即原来是IN令牌包,则这个阶段应为OUT令牌包。对于控制读取而言,主机会发送OUT令牌包,其后为0长度的DATA1封包,此时,设备也会做出相对应的动作,送ACK、NAK或STALL握手封包。对于控制写入传输,主机会送出IN令牌包,然后设备送出表示完成阶段的0长度的DATA1封包,主机再做出相应的动作;送ACK、NAK或STALL封包。

4.1 控制读传输抓包分析

控制读传输在初始设置阶段会发起一个SETUP事务,从这个SETUP事务我们可以知道是设备给主机传输数据,并且数据长度是255,这里把先控制传输理解到位,接着在数据阶段完成数据交换(因为是设备给主机传输数据,所以是数据阶段是IN事务),最后在状态信息阶段主机给设备发送一个OUT事务表明自己接收是否异常。
在这里插入图片描述4.2 写控制传输抓包分析

控制写传输在初始设置阶段同样会发起一个SETUP事务,从这个SETUP事务我们可以知道是主机向设备传输数据,并且数据长度是12,接着在数据阶段完成数据交换(因为是主机给设备传输数据,所以数据阶段是OUT事务),最后在状态信息阶段主机发起一个IN事务,请求设备回答接收情况。
  在这里插入图片描述
五,等时传输

等时(同步)传输适用在数据量大、对实时性要求高的场合,如音频设备,视频设备等,这些设备对数据的延迟很敏感。对于音频或视频设备数据的100%正确性要求不高,少量的数据错误是可以容忍的,主要是保证数据不能停顿,所以等时传输是不保证数据100%正确的。

实时传输只需要令牌和数据两个信息包,没有握手应答包,故当数据错误时,不再重传操作。数据是否正确,由数据的CRC校验来确认。同步传输也不支持PID翻转。主机在排定事务传输时,同步传输有最高的优先级。

5.1 同步传输的结构
在这里插入图片描述

同步传输的事务比较简单,有只有1个阶段,数据阶段。

主机如果是同步读数据请求,则数据阶段为一个或者多个IN事务(同步传输事务,事务到后面讲解);

主机如果是同步写数据请求,则数据阶段为一个或者多个OUT事务;

数据阶段是由一到多个IN/OUT事务组成。这是由于有时候存在一个事务传不完的数据,所以可能存在多个连续IN/OUT事务的情况,在同一次数据传输阶段中事务类型(读写)必定相同。

5.2 同步读传输抓包分析

因为是设备给主机传输数据,所以是数据阶段是IN事务。
在这里插入图片描述因为是主机给设备传输数据,所以是数据阶段是OUT事务,和上图方式一样,只是IN变为了OUT。

六 ,批量传输
批量传输和同步传输类似,是使用批量事务(Bulk Transactions)来传输数据。批量读使用批量输入事务,批量写使用批量输出事务。批量传输通常在数据量大、对数据的实时性要求不高的场合,例如USB打印机、扫描仪、大容量存储设备等, 批量传输可以占用任意可用的数据带宽。

批量传输主要包括批量读传输、批量写传输两种, 传输事务如下图。
  
在这里插入图片描述6.1 批量读传输抓包分析

因为是设备给主机传输数据,所以是数据阶段是IN事务。
在这里插入图片描述6.2 批量写传输抓包分析
因为是主机给设备传输数据,所以是数据阶段是OUT事务,如下图
在这里插入图片描述批量传输不支持在低速下,高速最大包长度为512字节,全速下为64字节。

七,中断传输
中断传输方式总是相对于设备查询的,以确定是否有数据需要传输,因此中断传输的方向总为从USB设备到主机。中断传输由IN或OUT事务组成。中断端点在端点描述符中要报告它的查询间隔,主机会保证在小于这个时间间隔的范围内安排一次传输。这里说的中断与硬件上的中断不同,他不是由设备主动发起的一个中断请求,而是由主机保证不大于某个时间间隔内安排一次传输。

中断传输在流程上除不支持PING 之外,其他的跟批量传输是一样的。他们之间的区别也仅在于事务传输发生的端点不一样、支持的最大包长度不一样、优先级不一样等这样一些对用户来说透明的东西。

主机在排定中断传输任务时,会根据对应中断端点描述符中指定的查询间隔发起中断传输。中断传输有较高的优先级,仅次于同步传输。

同样中断传输也采用PID翻转的机制来保证收发端数据同步。

7.1 中断传输的结构

中断传输的事务只有1个阶段,数据阶段。

主机如果是中断读数据请求,则数据阶段为一个IN事务;

主机如果是中断写数据请求,则数据阶段为一个OUT事务。

7.2 中断读传输抓包分析

因为是设备给主机传输数据,所以是数据阶段是IN事务。
在这里插入图片描述
八,传输总结
下图主要对四种传输不同传输速率的有效带宽、最大数据包长度、传输错误管理、事务组成进行说明
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤舟簔笠翁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值