五、USB数据传输类型

1、USB数据传输

  US四种传输类型:控制传输、中断传输、批量传输和同步传输。

  一次传输可以包含一笔或者多笔事务。

2、中断传输

  中断传输(Interrupt Transfer), 可用于键盘、鼠标等 HID 设备的数据传输中, 由IN事务或 OUT 事务组成。

中断传输IN事务、OUT事务的结构
中断传输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事务构成。

批量传输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 事务组成:

同步传输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。此后, 总线进入空闲状态,并准备“可选数据步骤”的开始。

初始设置步骤SETUP事务

 

②、可选数据步骤

    如果在上一步骤中的命令要求读/ 写数据的话, 就由这一步骤来具体交换数据。如果没有数据交换要求的, 这个步骤就可以省去。

可选数据步骤(IN、OUT事务)结构

 

    控制传输的“可选数据步骤”中包含了 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 设备被配置和使用的前提 , 因此 ,低速、全速和高速设备都支持控制传输。

如有错误,请及时提出。谢谢谢!!!

                  上一篇                                                                        下一篇(软件篇)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值