专栏首页石开之旅硬件笔记(7)----USB学习笔记4

硬件笔记(7)----USB学习笔记4

9、通讯协议

从时间角度来看,USB 通信由一系列帧构成。每一帧都有一个帧开始(SOF),随后是一个或多个数据操作。每一个数据操作都由一系列数据包构成。一个数据包由一个同步信号开始,结尾是一个数据包结束(EOP)信号。一个数据操作至少有一个令牌数据包。具体的数据操作可能有一个或多个数据数据包;一些数据操作可能会有一个握手数据包,也可能没有任何握手数据包。

数据操作是对数据包进行交换的操作,该操作使用了三种不同的数据包:一个令牌数据包、一个数据数据包(可选的)和一个握手数据包。 这些操作都在各个帧内进行,始终不会超过帧(除了高速同步传输以外)或终止其他数据操作。下图显示了数据操作的框图。

每个数据包可能带有不同的信息块。所带有的信息会因数据包类型的不同而异。

  1. 数据包 ID(PID) — (8 位:4 个类型位和 4 个错误检测位)。这些位将数据传输定义为 IN/OUT/SETUP/SOF
  2. 可选的设备地址 — (7 位:最多可支持 127 个设备)
  3. 可选的端点地址 — (4 位:最多支持 16 个端点)。USB 规范支持多达 32 个端点。虽然 4 位地址最多仅支持 16个端点,但我们具有一个 IN PID 和一个 OUT PID,它们各自使用了端点地址 1 到 16,因此共有 32 个端点。请注意,它表示端点的地址,而不是端点的编号
  4. 可选的加载数据 — (0 到 1023 字节)
  5. 可选的 CRC — (5 或 16 位)

9.1 数据包的类型

  • 令牌数据包

开始数据操作 指定与传输有关的设备 始终由主机发送

  • 数据数据包

传输加载数据 由主机或设备发送

  • 握手数据包

确认已接收到无错误的数据 由接收方发送

  • 特殊数据包

支持多种不同的速度 由主机传输给集线器设备 如上所述,数据包中的任何信息(除了 PID 之外)均是可选的。令牌、数据和握手数据包具有不同的信息组合。令牌数据包、数据数据包和握手数据包部分对各数据包所带有的信息进行了介绍。

令牌数据包:令牌数据包始终由主机发送,用于定义总线上的数据传输。令牌数据包的类型取决于所执行的传输。IN类型用于要求设备将数据传输给主机。OUT 类型用于将数据从主机传输给设备。SETUP 类型用于将命令从主机传输给设备。SOF 类型用于确定数据操作帧。IN、OUT 和 SETUP 令牌数据包都有一个 7 位设备地址、4 位端点 ID 和 5 位CRC。下图显示了这四个令牌数据包的框图。

USB令牌数据包类型

SOF 令牌数据包有助于设备确定帧的开始,并与主机进行同步化。该数据包还有助于防止设备进入挂起模式(经过 3 ms 后,如果设备未收到 SOF,会发生这种情况)。SOF 数据包适用于全速和高速设备,并且每隔 1 ms 发送一次,如下图所示。该数据包具有一个 8 位的 SOF PID、11 位的帧计数值(达到最大值时进行反转)和一个 5 位的 CRC。CRC 是该数据包使用的唯一一个错误检测方法。传输 SOF 数据包时,不会使用握手数据包。高速通信使用了更小的时间单位,即微帧。对于高速设备,SOF 每经过 125 u 发送一次,而帧计数值则每经过 1 m 递增“1”。

全速设备的USB SOF传输

数据数据包:随后 IN、OUT 和 SETUP 令牌数据包所发送的数据包。加载数据的尺寸会因传输类型的不同而异,该尺寸范围为 0 到 1024 字节。在每一个数据数据包成功传输后,数据包 ID 在 DATA0 和 DATA1 之间切换,数据包由一个 16 位 CRC 结束。数据数据包内容如下图所示。

USB数据数据包

在每一个数据数据包成功传输后,主机和设备将对数据切换进行相应的更新。数据切换的优点在于它可作为附加的错误检测方法。如果接收到的数据包 ID 同预期的不一样,则设备可判断传输中发生了错误,并可能进行适当的处理。使用数据切换的示例是 ACK 在发送后,仍未能收到时。在该示例中,发送方将数据从‘1’更新为‘0’,但接收方则没有进行相应的更新,而仍然保持为‘1’。因此,在下一个数据步骤中,主机和设备将不再同步,这样会引起错误。下图显示了一个 USB 传输中的数据切换示例。在该图以及本应用笔记的所有其他图中,白色框表示来自主机 的传输,黑色框则表示来自设备的传输。

数据切换示例

握手数据包:握手数据包指示数据操作的结束。每个握手数据包都带有一个 8 位数据包 ID,并由传输中的接收方发送。每一种 USB 速度都有不同的握手数据包响应选项。所支持的类型由 USB 速度决定:

  1. ACK:确认数据操作成功完成。(LS/FS/HS)
  2. NAK:否定确认。(LS/FS/HS)
  3. STALL:设备发送错误指示。(LS/FS/HS)
  4. NYET:表示设备当前未能接收其他数据数据包。(仅 HS)

握手数据包的指示

特殊数据包:USB 规范定义了四种特殊数据包。

  1. PRE:主机向集线器发送的数据包,用于指示下一个数据包是低速的。
  2. SPLIT:发送在令牌数据包之前,用于指示一个分割数据操作。(仅 HS)
  3. ERR:由集线器返回的数据包,用于报告分割数据操作中发生了错误。(仅 HS)
  4. PING:接收到 NYET 握手数据包后,检查批量传输 OUT 或控制写入的状态。(仅 HS)

9.2数据传输类型

USB 数据传输是指主机和设备之间的数据传输方式。一共有三种不同的数据传输类型,它们经常使用不同名称来代表相同的概念。这三种不同的数据传输类型具体如下。

9.2.1 IN/读取/上行数据传输

IN、读取和上行是专用术语,表示从设备到主机的数据传输方式。通过发送一个 IN 令牌数据包,主机将启动这些数据传输。目标设备将发送一个或多个数据包,主机则发送一个握手数据包来作出响应。在下图中,白框显示的是从主机发送的数据传输,黑框显示的是从设备发送的数据传输。

IN/读取/上行框图

在下图中,设备发送了 NAK 作为响应,从而指出主机发送请求时,它还没准备好发送数据。主机持续发出请求,如果设备已经准备好,它将发送一个数据包来响应主机。然后,主机将发送一个 ACK 握手数据包来确认接收到设备发送的数据。

IN数据传输示例

9.2.2 OUT/写入/下行数据传输

OUT、写入和下行是专用术语,指的是从主机到设备的数据传输方式。在这种数据传输类型中,主机将发送相应的令牌数据包(包括 OUT 或 SETUP),然后发送一个或多个数据包。接收设备将发送相应的握手数据包,以结束数据传输。在下图中,白框显示的是从主机发送的数据传输,黑框显示的是从设备发送的数据传输。

OUT/写入/下行框图

在下图中,主机将发送 OUT 令牌数据包和 DATA0 数据包,但会接收到设备所发送的 NAK 信号。然后,主机会重新尝试发送数据。请注意,由于握手数据包被拒绝,因此不会改变数据切换位的状态。如果主机再次尝试发送数据,设备 将发送一个 ACK 信号来响应主机,从而指出 OUT 数据传输已经成功。

OUT数据传输示例

9.2.3 控制数据传输

控制数据传输用于识别、配置和控制设备。这种数据传输使主机能够读取设备的信息、设置设备地址、建立配置和发送特定命令。控制数据传输始终针对设备的控制端点。控制数据传输有三个阶段:建立阶段、(可选)数据阶段和状态阶段。下图显示的是由主机传送的三个阶段。数据阶段外的虚线表明这是一种可选的数据传输。

控制数据传输框图

建立阶段(或建立数据包)仅用于一个控制数据传输。需要将大小为 8 字节的数据包(包含 USB 请求)从主机发送到设备。设备必须始终确认建立阶段,不能否认一个建立阶段。

建立阶段数据传输

在一个控制数据传输中,可以选择使用数据阶段。该阶段可以进行多次数据传输。只有在主机和设备之间传送数据负载时,才需要使用数据阶段。通常,控制阶段的相应数据可以在建立阶段中传送。

建立阶段数据传输

最终阶段 — 状态阶段包括单个 IN 或 OUT 数据传输,这种数据传输会报告先前阶段是否成功。数据包始终为 DATA1(与在 DATA0 和 DATA1 间切换的 IN 和 OUT 正常数据传输不同),并且包含了长度为零的数据包。接收先前数据包的设备会发送一个握手数据传输,以结束状态阶段。

USB 通信一共有三种控制数据传输类型:控制写入、控制读取和控制无数据。下图分别显示了这些数据传输的示例。

控制无数据传输

控制写入数据传输示例

控制读取数据传输示例

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Allegro使用技巧(3)----PCB规则检查

    layout完成后,需要对PCB进行规则检查,选择Tools--Quick Reports,依次检查 shape Dynamic state,Unconnect...

    小火柴棒
  • 图像处理笔记(3)----OpenCV图像算术运算

    我想把OpenCV的标志放到另一幅图像上,如果使用相加add函数,颜色会改变,使用addWeighted函数会得到透明效果,怎么做呢?

    小火柴棒
  • 小甲鱼《零基础学习Python》课后笔记(十三):元组——戴上了枷锁的列表

    7.上节课我们通过课后作业的形式学习到了“列表推导式”,那请问如果我把中括号改为小括号,会不会得到“元组推导式”呢?

    小火柴棒
  • Centos7防火墙Iptables的概述

    netfilter/iptables : IP信息包过滤系统,它实际上由两个组件netfilter 和 iptables 组成。

    萧晚歌
  • 如何解决web系统session劫持

    往期精选 session劫持是一种比较复杂的攻击方法。大部分互联网上的电脑多存在被攻击的危险。这是一种劫持tcp协议的方法,所以几乎所有的局域网,都存在被劫持 ...

    企鹅号小编
  • 为什么时间戳对网络流量数据包捕获很重要?

    网络上发生的所有事件都是时间敏感的,这就是为什么在讨论数据包捕获和分析时,给数据包加上时间戳非常重要。 此功能不仅可以防止和分析网络攻击,而且还能...

    虹科网络可视化与安全
  • 网络测量之EverFlow(SIGCOMM-2015)

    SIGCOMM 2015年中,由微软研究院发表了题为《Packet-Level Telemetry in Large Datacenter Networks》的...

    我是东东东
  • 数据抓包分析基础

    设置连接的交换机的端口镜像功能,将交换机其他一个或多个端口的经过的数据包复制一份到嗅探器连接的端口上。

    Mirror王宇阳
  • 计算机网络系列 --- 什么是电路交换和分组交换?

    首先我们来了解下分组的概念。所谓分组,就是将一个数据包分成一个个更小的数据包。例如对于一个10GB的数据包,总不可以一次性发送过去吧,而是把它分成若干个小的数据...

    帅地
  • OSI第3层:网络层

    4) 解封。(网络层解封该数据包,然后将数据包中包含的第 4 层 PDU 向上传 送到传输层的相应服务。)

    py3study

扫码关注云+社区

领取腾讯云代金券