USB 2.0如何避免冲突?


33

查看USB 3.0插座的插针,我可以看到有单独的发送和接收对,但是对于USB 2.0,只有一对“数据”插针。USB 2.0如何确保设备无法同时通信?


2
您可能也会对CSMA / CD之类的东西感兴趣,这就是在其他情况下如何解决的问题
PlasmaHH

1
分开的发送/接收对不能解决所有冲突。假设您有一个Pendrive和一个调制解调器,它们都想向主机发送一些数据,所以它们都开始传输。哪里?在同一对上:主机接收。冲突仍然存在。这不是USB的工作方式,而是10/100以太网的工作方式:每个方向都有它自己的对,但集线器上的“冲突”指示灯不断闪烁。
Agent_L

Answers:


67

USB严格是主从设备。除非主机指示其发送,否则设备不会发送信息。

甚至所谓的“中断”模式也确实在轮询:例如,每8毫秒(如果您有游戏鼠标,则更短),PC会询问鼠标“您的位置是什么”,然后鼠标答复。

例如,如果您具有USB串行接口,则相同。当接口在串行线上接收数据时,它将不会将其传输到PC。相反,它将等待PC启动事务并请求数据。

网页对交换的数据包有很好的解释。基本上,请记住,实现USB是为了使最笨拙,最便宜的外围设备正常工作,这意味着大多数智能功能都在主机,主机USB控制器,操作系统和驱动程序中。阅读规范时,这非常明显。

例如,Firewire具有完全不同的理念,它的功能强大得多,它是多主设备,因此设备无需主机/主设备的帮助即可相互通信。实际上,与USB相比,它的哲学实际上更类似于令牌环,其顶部具有同步传输的令牌传输。但是,“多主设备”意味着它需要设备中功能强大的微控制器,并运行复杂的软件堆栈。因此,它更昂贵,因此仅限于诸如摄录机和快速硬盘驱动器外壳之类的昂贵产品。火线鼠标没有任何意义,太贵了。这就是FireWire失败的原因之一。


3
出色的解释,并且与FireWire进行了非常合适的比较(是的,让我们构建一个基于令牌的仲裁网络,用于...实际上是总线上最多5台设备)。
MarcusMüller18年

3
这是一个很好的答案,但是如果您提到枚举,我认为它会更加完整。发现没有仲裁功能的设备连接到动态网络(例如多主网络)将是一个不容易的问题,并且在许多方面定义了USB为什么不能使用真正的总线拓扑的原因。
乔恩

谢谢;)我不知道主机方面有关枚举的详细信息。但是,IMO真正的理由是USB是在1990年代中期设计的,当时微控制器的价格要比今天贵,而制造廉价设备的方法是使它们尽可能的笨拙,而RAM和代码更少尽可能。此外,它的效果非常好,很不错。
peufeu

5
不正确,USB是总线。与更熟悉的“线性”总线相反,它具有不同的拓扑结构(星形)。所有USB 2.0(HS)主机事务都在星形的所有部分中广播,因此它与“线性”总线没有太大区别。与线性总线类似,所有设备几乎都能立即看到总线活动。唯一的区别是,位于不同分支上的其他某些设备看不到设备响应。
Ale..chenski

2
@rahuldottech可以正常工作,但是FireWire的可靠性比USB低得多,尤其是WRT即插即用。借助USB,您可以使用额外的集线器轻松地将多个驱动器连接到单个端口。有一个性能折衷,但可靠性和易用性胜过。
大约

18

在USB框架中,设备无法同时通信,因为它们仅在USB主机“允许”它们交谈时才“交谈”。USB主机仅在与第一个设备的顺序事务协议完成后才允许另一个设备“交谈”。而且USB设备本身没有任何“交谈”的手段,USB中没有活动的中断机制。简而言之,实施该学科的机制如下。

连接USB 2.0设备后,主机通过为每个设备分配唯一的地址来枚举它们。

总线上的每个事务都由USB主机启动。

每个USB事务的标头都带有特定的设备地址。即使在整个USB树上(在特定的主机控制器实例上)广播事务时,只有具有匹配地址的设备才会响应事务,并接收数据或响应数据。

然后,链接“合作伙伴”将按照成功接收数据的人的方向发送确认。整个交易遵循已建立的协议,该协议具有定义的令牌,超时和纠错码序列,以确保交易的完整性。

所有其他设备都只是在侦听并忽略了未定向到它们的流量。

就是这样,它是“半双工”接口。


1
不熟悉USB协议,主机如何知道正确的设备响应?
德里克·朕会功夫,

@Derek朕会功夫,主持人知道这一点,因为这是应该响应的唯一设备,没有其他人会响应。USB 2.0事务是“原子的”,没有延迟的响应,一切都取决于超时。没有及时的响应(未完成的交易)将导致重试。
Ale..chenski

接下来,我的问题是,由于每个设备都连接到同一总线,是什么阻止我假装成为另一个也已连接的设备?
德里克·朕会功夫

7
@Derek朕会功夫:没事。这就是为什么您不插入从街外市场获得的随机USB密钥的原因。你不能相信他们。
与莫妮卡(Monica)进行的轻度比赛

7
@Derek朕会功夫,除了恶意的意图之外,USB设备在枚举过程中必须接受一个地址,而另一个设备将具有一个不同的地址,这些地址均由主机控制。这与将几个内存模块连接到并行总线没有什么不同,但是每个模块仅响应地址解码器/芯片选择。而且,如果两个USB设备意外响应(例如,主机用地址分配搞砸了),则总线上将出现一堆冲突,并且没有数据包将通过CRC(附加到每个USB令牌),并且相应的端口将通过由于大量错误而被禁用。
Ale..chenski
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.