我将尝试按照您提出的顺序回答您的问题(编号可能会有所帮助)。
确实有四根线(暂时忽略 USB3.x)。确实有两个用于电源(+5V 和 GND),两个用于信号(D+ 和 D-)。
关于信号线要注意的关键是它们的名称,注意 + 和 - (有时也有 P 和 N 或 P 和 M)。这些通常在电子设备中表明存在差异。这意味着 1 和 0 由每根电缆之间的电压极性表示。这与单端相反,其中 1 和 0 作为相对于 GND 的电压传输。
极性是什么意思?想象一下 D+ 电缆被驱动到,而 D- 被驱动到。两者之差为。现在,如果 D+ 电缆被驱动到而 D- 被驱动到,则差异变为。注意减号,表示相反的极性。+3.3V0VVD+−VD−=3.3−0=3.3V0V+3.3VVD+−VD−=0−3.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 协议都在规范中。试图过去可能还是太深入了。但是话虽如此,您可能想查看另一个问题的答案,该问题提供了一些详细信息。