USB 协议是如何工作的?

电器工程 USB
2022-01-21 19:12:16

我一直想知道 USB 设备实际上是如何通信的。当我剥掉 USB 电缆时,我注意到有四根不同的电线。其中两根用于电源(正极和接地)以及另外两根电线。

我已经搜索了另外两个 USB 连接的引脚名称,它们被称为 data+ 和 data-。这两根线是否用于发送数据信号,如果是,为什么有两根(每个设备的每个数据输出一根?)

如果两个设备处于两个不同的时钟频率怎么办?这不会弄乱数据交换吗?真正让我头疼的问题是,一个设备如何“知道”另一个设备是否需要电源,如果另一个设备没有电源来“告诉”“主设备”它需要电源?有人可以概述一下 USB 协议的工作原理吗?

3个回答

我将尝试按照您提出的顺序回答您的问题(编号可能会有所帮助)。

确实有四根线(暂时忽略 USB3.x)。确实有两个用于电源(+5V 和 GND),两个用于信号(D+ 和 D-)。


关于信号线要注意的关键是它们的名称,注意 + 和 - (有时也有 P 和 N 或 P 和 M)。这些通常在电子设备中表明存在差异。这意味着 1 和 0 由每根电缆之间的电压极性表示。这与单端相反,其中 1 和 0 作为相对于 GND 的电压传输。

极性是什么意思?想象一下 D+ 电缆被驱动到,而 D- 被驱动到两者之差为现在,如果 D+ 电缆被驱动到而 D- 被驱动到,则差异变为注意减号,表示相反的极性。+3.3V0VVD+VD=3.30=3.3V0V+3.3VVD+VD=03.3=3.3V

为此,两条数据线必须互补(一根为高,另一根为低)才能传输数据,因此必须以相同的频率工作。您可能会想为什么要麻烦,只需使用一根电缆。问题是这个世界是一个相当嘈杂的地方,单端(共模)线很容易在高速下(即使在恶劣环境中的低速下)产生噪声,这可能会破坏数据(使 1 变为 0)。在差分信号中,两条电缆都暴露在相同的噪声中,所以它被抵消了!

一个简单的例子。假设您发送的信号是还可以说,在每根电线上,您都会得到的噪声(不切实际,但只是一个例子)。对于单端,您在接收器上的信号将是这显然是逻辑 1,或者在这一点上你不知道它是什么. 然而,对于差分,接收器上的信号将是两者都是一样的,就好像根本没有噪音一样!2V0V1V2+1=3V0+1=1V(2+1)(0+1)=2V(0+1)(2+1)=2V


拥有两根电线还有其他优点。在不发送数据时,USB规范将两条线独立用于控制信号,例如同步信号,复位命令等。这些可以通过各种可能过于深入的技巧与数据包清楚地区分(这都是在评论中提到的 USB 规范中)。


在 USB 中,两个设备需要具有相同的频率。这通常是 12MHz 的倍数 - 这就是为什么您会看到 USB 设备以 48MHz 或 12MHz 等时钟频率运行的原因。这些频率由晶体参考产生,通常精确到 20ppm 左右(12MHz 晶体为 240Hz )。这通常足够接近,由于数据线上的同步脉冲和数据以突发形式发送的事实(意味着频率漂移不会长时间累加),两个设备可以保持同步。如果您不小心使用了 16MHz 晶振,设备可能无法枚举。


主设备如何知道设备需要电源?很简单,所有 USB 设备都可以在不请求的情况下汲取一定量的电流——据我所知,最高可达这为设备提供了足够的电源来打开,断言它的存在(在 D+ 线上使用上拉电阻 - 再次可能太深了)。一旦主机知道该设备,它就会为该设备分配一个功率余量并询问它是否需要更多(例如,对于高功率设备,如果它想要高电流余量)。100mA500mA


USB 协议都在规范中。试图过去可能还是太深入了。但是话虽如此,您可能想查看另一个问题的答案,该问题提供了一些详细信息

USB 1.x(1.5 Mbit/s 和 12 Mbit/s)和 2.0(480 Mbit/s)使用四根线,V_ (+5)、D+、D- 和 GND。D+ 和 D- 形成差分对。还有一个名为 OTG(On-The-Go)的扩展,它允许设备充当 USB 主机或设备,这利用了我们可以忽略的第五个 ID 引导。BUS

如果每个主机和设备的最大速率不同,则进行协商并使用两者共同的最高速率。

在此处输入图像描述

差分信号提供了高度的抗噪性。数据信号在 D+ 线上发送为正,在 D- 线上发送为负。在接收端,正极引线送入比较器的正极(作为减法器),负极引线送至比较器的负极。

在此处输入图像描述

对于有效脉冲,这两个相加(因为负向脉冲被发送到比较器的 - 引线,所以它们相加)。但是如果线路上产生了噪声,它通常会对 D+ 和 D- 线路产生相同的影响,比较器会将它们减去。

该图显示了仅向一个方向传输的数据。那是因为USB信号是半双工的,数据一次只去一个方向。

USB 3.0(高达 10 Gbit/s)使用 9 根线而不是 4 根线,并提供全双工操作,因为传输和接收的每一路都有差分对。

设备无需“询问”即可消耗高达 100 mA 的电流。对于 USB 1.x 和 2.0,设备可以要求主机提供高达 500 mA 的电流。对于 USB 3.0,这已增加到 900 mA。有一个单独的协议用于电池充电(无数据交换);在某些情况下,这可以高达 5A。

USB 使用差分信号来减少干扰并允许长距离高速传输。差分总线由两根线构成,一根代表传输的数据,另一根代表补码。这个想法是电线上的“平均”电压不携带任何信息,从而减少干扰。大多数现代串行总线(USB、以太网、PCIe、SATA 等)都是差分的,因为额外线路的成本远远超过了降噪方面的优势。USB 2 也是所谓的“半双工”。这意味着该链接在任何给定时刻仅在一个方向上起作用。比如说,您的计算机可以向您的鼠标发送消息。或者您的鼠标可以向您的计算机发送消息。但不能同时两者。公共汽车必须“掉头”

就时钟而言,USB 利用称为串行器和解串器的设备。串行器负责在发送端生成串行数据,解串器负责恢复另一端的位。串行器的部分工作是通过包含帧和同步信息以易于解码的方式对数据进行编码。解串器的部分工作是恢复时钟信号。USB 使用称为 NRZI 或不归零反转的编码。在 NRZI 中,逻辑 0 由转换表示,逻辑 1 由无转换表示。USB 使用位填充来限制通过线路发送的连续 1 的长度。这意味着有足够频繁的转换来恢复所有位,即使发射器和接收器上的时钟不以完全相同的速率滴答作响。不过,它们确实必须相对接近。还有与数据一起发送的显式同步序列。

就功率而言,允许设备在不询问主机的情况下吸取一定的功率。要绘制更多内容,需要进行协商以确保主机不会超载。设备必须等到获得许可才能消耗更多电流。