1、USB数据传输
US四种传输类型:控制传输、中断传输、批量传输和同步传输。
一次传输可以包含一笔或者多笔事务。
2、中断传输
中断传输IN事务、OUT事务的结构
(1)、中断传输的结构
中断传输中包含了 2 种最基本的事务, 即输入 IN 事务和输出 OUT 事务, 而不包括设置 SETUP 事务。
中断传输中, 无论是 IN 事务, 还是 OUT 事务, 都包含了令牌包、数据包和握手包。
①、令牌包阶段(将 IN 事务和 OUT 事务分别讨论):
IN 事务: 主机通过发送输入包 IN(标识域 PID 为 IN), 来启动 1 个 IN 传输。
OUT 事务: 主机发送输出包 OUT (标识域 PID 为 OUT), 启动 1 个 OUT 传输。
②、数据包阶段
IN事务:设备忙,回复无效包NAK,事务提前结束。主机不断重试这个事务。
设备端点被禁止,回复错误包STALL,事务提前结束,总线进入空闲状态。
设备端点正常,且设备准备新的中断处理,则设备会按主机要求回复主机所需数据。
OUT事务:结构相对较为简单, 主机将紧接着OUT令牌包, 就发送数据, 并按照DATA0 和 DATA1 数据包交替触发的顺序来发送数据。
③、握手包阶段
IN事务:如果主机正确地接收到了数据, 那么就会给设备发送ACK; 如果数据包在传输过程中被破坏了, 那么设备就会不回复任何握手信息, 直接将总线转入空闲状态, 等待下一次传输。
OUT事务:设备忙,返回无效包NAK,总线进入空闲,直到主机重试发送该数据
设备端点被禁止,回复错误包STALL,事务提前结束,总线进入空闲状态。果发送的数据没有错误, 并且设备成功地接收, 那么设备就返回ACK, 同时通知主机可以发送新的数据。如果数据包发生了CRC校验错误, 将不会返回任何握手信息。
(2)、数据包发送的顺序
中断传输中的数据包, 一定是从DATA0数据包开始, 然后是DATA1数据包, 接着又是DATA0, 依次重复下去。
(3)、总线传输的特点
中断传输中,USB主机是以周期性的方式对设备进行轮询, 以确定设备是否有数据发送。按照USB 的规定, 全速设备可以选择的轮询周期范围是1~255ms, 低速设备的轮询周期范围则是10~255 ms。
(4)、数据包大小
USB对于中断传输中的数据包的大小也有要求。低速设备的数据包大小可以是1~8字节, 全速设备的数据包大小是1~64字节, 而高速设备的数据包大小则可达到1~1024字节。
(5)、支持设备类型
低速、全速、高速和超高速设备均支持中断传输。
3、批量传输
批量传输(Bulk Transfer)主要用于大容量数据的传输中, 比如硬盘驱动器的接口、光盘刻录机接口及数码相机等等。
(1)、结构
批量传输的结构与中断传输的结构非常相似, 也是由IN事务或OUT事务构成。
批量传输中包含了2种最基本的事务, 即IN事务和OUT事务, 而不包括SETUP事务。
批量传输中, 无论是IN事务, 还是OUT事务, 都包含了令牌包、数据包和握手包。
①、令牌包阶段
IN事务:主机通过发送输入包 IN (标识域 PID 为 IN ), 来启动 1 个 IN 传输。
OUT事务:主机发送输出包 OUT (标识域 PID 为 OUT), 启动 1 个 OUT 传输。
②、数据包阶段
IN事务:设备忙,回复无效包NAK,事务提前结束。主机不断重试这个事务。
设备端点被禁止,回复错误包STALL,事务提前结束,总线进入空闲状态。
设备端点正常,且设备准备新的中断处理,则设备会按主机要求回复主机所需数据。
OUT事务:结构相对较为简单, 主机将紧接着OUT令牌包, 就发送数据, 并按照DATA0和DATA1 数据包交替触发的顺序来发送数据。
③、握手包阶段
IN事务:如果主机正确地接收到了数据, 那么就会给设备发送ACK; 如果数据包在传输过程中被破坏了, 那么设备就会不回复任何握手信息, 直接将总线转入空闲状态, 等待下一次传输。
OUT事务:设备忙,返回无效包NAK,总线进入空闲,直到主机重试发送该数据设备端点被禁止,回复错误包STALL,事务提前结束,总线进入空闲状态。 如果发送的数据没有错误, 并且设备成功地接收, 那么设备就返回ACK, 同时通知主机可以发送新的数据。如果数据包发生了CRC校验错误, 将不会返回任何握手信息。
(2)、数据包发送顺序
批量传输的数据包的发送顺序 , 也与中断传输非常类似。从DATA0数据包开始, 然后是DATA1数据包, 接着又是DATA0, 依次重复下去。
(3)、总线传输特点
批量传输既没有固定的传输速率, 也不占有固定带宽。只有当总线处于空闲状态时, 批量传输才能够获得比较大的带宽。而当总线“忙”时, USB 就会优先进行其他类型的数据传输,而暂时停止批量传输的进行, 因而批量传输就会需要很长的时间才能完成。
(4)、数据包的大小
全速的 USB 设备的数据大小可设定为8、16、32 或 64 字节。 高速设备则必须设定为固定值 512 字节。数据传输过程中的每一个数据的大小必须满足上述的要求, 除了最后1个数据包。
(5)、支持设备类型
低速不支持,全速、高速和超高速都支持批量传输。
4、同步传输
同步传输( Isochronous T ransfer, 可简写为 ISO), 多用于音频流等需要恒定传输速率的数据传输中, 比如音箱、显示器和摄像头等设备的接口。
(1)、结构
同步传输的数据结构最为简单, 因为这类数据讲究的是传输速率的恒定, 而对于数据的准确性的要求不如批量传输那么严格。因此, 同步传输中没有握手包, 总线只优先保证其占用带宽, 而不对发送错误的数据进行重试。 同步传输仍然可由IN事务或 OUT 事务组成:
同步传输中, 总线优先支持其等时性, 即保证带宽, 因此, 对于数据的准确性的要求次之。基于此, 同步传输的事务中, 不包含握手包, 主机和设备都无需对接收到的数据返回握手信息。
同步传输中包含了 2 种最基本的事务类型, 即 IN 事务和 OUT 事务, 同中断传输和批量传输一样, 它也不支持设置 SETUP 事务。
①、令牌包阶段:
IN事务:主机通过发送输入包 IN(标识域 PID 为 IN), 来启动 1 个 IN 传输。
OUT事务:主机发送输出包 OUT (标识域 PID 为 OUT), 启动 1 个 OUT 传输。
②、数据包阶段:
IN事务:设备紧接着 IN 令牌包, 以 DATA0 和 DATA1 交替触发机制发送有效数据, 然后总线进入空闲状态, 准备进行下一次传输。
OUT事务:同输入 IN 事务一样, 主机会紧接着 OUT 令牌包, 以 DATA0 和 DATA1 交替触发机制发送有效数据给设备, 然后总线进入空闲状态, 准备进行下一次传输。
(2)、数据包发送顺序
与中断传输和批量传输不同, 对于全速设备, 同步传输中不支持数据包的交替触发机制,而且第一个数据包被初始化为 DATA0, 因此 , 数据包将 一直以 DA TA0 发送 下去。 而高速和全速设备在一定条件下支持触发机制, 情况较为复杂。
(3)、总线传输特点
全速设备的同步传输,在1个帧内,可以包含1笔IN事务或OUT事务,而高速设备可以包含3笔事务。总线将会优先保证同步传输的带宽 , 甚至会因此而暂时中止批量传输的进行。
(4)、数据包大小
全速设备数据包的大小为 0~1023 字节,而高速设备为 1024 字节。
(5)、支持设备类型
只有全速和高速设备支持同步传输 , 而低速设备不支持同步传输。
5、控制传输
控制传输( Control Tran sfer)是最为复杂的传输类型, 也是最为重要的传输类型, 是 USB 枚举阶段最主要的数据交换方式。
(1)、结构
控制传输的核心是 SETUP 事务,USB 定义了较为复杂的控制传输的结构, 将其分为 3 个大的步骤 :初始设置步骤、可选数据步骤、状态信息步骤
①、初始设置步骤
初始设置步骤,由一笔SETUP事务构成。这笔SETUP事务有令牌包、数据包和握手包组成。
令牌包阶段 : 主机发送 SETUP 令牌包。
数据包阶段 : 主机发送固定为 8 个字节的 DATA0 包, 并且有确定的结构, 将这 8 个字节分配给 5 种命令信息, 即 bmRequest Type、bRequest、wValue、wIndex 和 wLength。
握手包阶段 : 设备在接收到主机的命令信息后, 返回 ACK。此后, 总线进入空闲状态,并准备“可选数据步骤”的开始。
②、可选数据步骤
如果在上一步骤中的命令要求读/ 写数据的话, 就由这一步骤来具体交换数据。如果没有数据交换要求的, 这个步骤就可以省去。
控制传输的“可选数据步骤”中包含了 2 种最基本的事务 , 即 IN 事务和 OUT 事务。
控制传输的“可选数据步骤”中, 无论是 IN 事务, 还是 OUT 事务, 都包含了令牌包、数据包和握手包。
令牌包阶段:
IN 事务: 主机通过发送输入包 IN(标识域 PID 为 IN), 来启动 1 个 IN 传输。
OUT 事务: 主机发送输出包 OUT (标识域 PID 为 OUT), 启动 1 个 OUT 传输。
数据包阶段:需要特别注意的是, 由于“初始设置步骤”中已经包含了 1 个数据包阶段,其中的数据是 DATA0 包, 因此 “可选数据步骤”中数据包的第 1个包将是 DATA1包, 然后, 接下来仍将是 DATA0/ 1 的交替触发 :
IN 事务 : 设备首先就会对接收到令牌包进行解析如下
设备忙,回复无效包NAK,事务提前结束。主机不断重试这个事务。
设备端点被禁止,回复错误包STALL,事务提前结束,总线进入空闲状态。
设备端点正常,且设备准备新的中断处理,则设备会按主机要求回复主机所需数据。
OUT 事务 : 结构相对较为简单, 主机将紧接着 OUT 令牌包, 就发送数据, 并按照DATA0 和 DAT A1 数据包交替触发的顺序来发送数据。
握手包阶段:
IN事务:如果主机正确地接收到了数据, 那么就会给设备发送ACK; 如果数据包在传输过程中被破坏了, 那么设备就会不回复任何握手信息, 直接将总线转入空闲状态, 等待下一次传输。
OUT事务:设备忙,返回无效包NAK,总线进入空闲,直到主机重试发送该数据设备端点被禁止,回复错误包STALL,事务提前结束,总线进入空闲状态。 如果发送的数据没有错误, 并且设备成功地接收, 那么设备就返回ACK, 同时通知主机可以发送新的数据。如果数据包发生了CRC校验错误, 将不会返回任何握手信息。
③、状态信息步骤
主机的控制读操作中,应用的是OUT事务;而控制写操作中应用的是IN事务。数据阶段中发送的数据均为DATA1包的0长度数据。
控制传输的“状态信息步骤”中包含了2种最基本的事务,即输入IN事务和输出OUT事务。IN事务代表主机的写操作, OUT事务代表主机的读操作。
控制传输的“状态信息步骤”中,无论是IN事务,还是OUT事务,都包含了令牌包、数据包和握手包。
令牌包阶段:
IN 事务:主机通过发送输入包IN(标识域 PID 为 IN ), 来启动1个IN传输。
OUT事务:主机发送输出包 OUT (标识域 PID 为 OUT), 启动 1 个 OUT 传输。
数据包阶段 :
IN 事务 : 如果设备没有准备接收新的数据 , 那么设备就返回NAK;如果相应的设备端点被禁止,那么设备就发送STALL包;如果设备端点正常,并且设备准备新的中断处理, 则设备就会按主机的要求发送所需0长度的数据。
OUT事务:结构相对较为简单,主机将紧接着OUT令牌包,就发送0长度的数据,并按照 DATA0 和 DATA1 数据包交替触发的顺序来发送数据。
握手包阶段 :
IN事务:如果主机正确地接收到了数据, 那么就会给设备发送ACK; 如果数据包在传输过程中被破坏了, 那么设备就会不回复任何握手信息, 直接将总线转入空闲状态, 等待下一次传输。
OUT事务:设备忙,返回无效包NAK,总线进入空闲,直到主机重试发送该数据设备端点被禁止,回复错误包STALL,事务提前结束,总线进入空闲状态。 如果发送的数据没有错误, 并且设备成功地接收, 那么设备就返回ACK, 同时通知主机可以发送新的数据。如果数据包发生了CRC校验错误, 将不会返回任何握手信息。
(2)、控制传输数据发送顺序
(3)、总线传输特点
对于低速和全速设备,总线将会为控制传输保证至少10%的带宽; 而高速设备的控制传输将会得到至少20%的带宽。这样,当有设备连接到主机上时,将会很快得到配置,而不必担心因主机正在进行的其他 USB 传输而耽误。
(4)、数据包大小
由于控制传输的3个步骤中都包含了数据包阶段,因此,数据包的大小也要分开讨论。在初始设置步骤中,已经知道是1个固定为8 字节大小的DATA0包。在可选数据步骤中,如果是低速设备,则数据包为8字节;全速设备的数据包大小可以是8、16、32和64字节; 而高速设备的数据包大小必须为 64 字节。
(5)、支持设备类型
既然控制传输是最为重要的一类传输类型 , 是所有 USB 设备被配置和使用的前提 , 因此 ,低速、全速和高速设备都支持控制传输。
如有错误,请及时提出。谢谢谢!!!