查看 USB 3.0 插座的引脚,我可以看到有单独的传输和接收对,但是对于 USB 2.0,只有一个“数据”引脚对。USB 2.0 如何确保设备不会同时通信?
USB 2.0 如何避免冲突?
USB是严格的主从。除非主机告诉它传输,否则设备不会传输。
即使所谓的“中断”模式实际上也是轮询:例如,每 8 毫秒(如果你有一个游戏鼠标,则更少),PC 会询问鼠标“你的位置是什么”,然后鼠标回复。
例如,如果您有 USB 串行接口,则相同。当接口在串行线上接收到数据时,它不会将其传输到 PC。相反,它将等待 PC 启动事务并请求数据。
这个网页对交换的数据包有很好的解释。基本上,请记住,USB 的实施是为了让最愚蠢和最便宜的外围设备发挥作用,这意味着大部分智能都在主机、主机 USB 控制器、操作系统和驱动程序中。这在阅读规范时非常明显。
Firewire(例如)有一个完全不同的理念,它更强大,它是多主设备,因此设备可以在没有主机/主设备帮助的情况下相互通信。实际上,它的理念更接近于像令牌环这样的东西,上面有同步传输,而不是 USB。然而,“多主机”意味着它需要设备中的强大微控制器,运行复杂的软件堆栈。因此它更昂贵,因此仅限于昂贵的产品,如摄像机和快速硬盘驱动器外壳。火线鼠标没有意义,太贵了。这就是 FireWire 失败的原因之一。
在 USB 框架中,设备不能同时通信,因为它们只有在 USB 主机“允许”它们说话时才会“说话”。并且 USB 主机仅在与第一个设备的顺序事务协议完成时才允许另一个设备“对话”。而USB设备本身没有任何“说话”的方式,USB中没有主动中断机制。简而言之,该学科的实施机制如下。
连接 USB 2.0 设备后,主机通过为每个设备分配唯一地址来枚举它们。
总线上的每个事务都由 USB 主机发起。
每个 USB 事务的标头都带有特定的设备地址。即使事务通过整个 USB 树(在特定的主机控制器实例上)广播,也只有地址匹配的设备才会响应事务,或者获取数据,或者响应数据。
然后,链接“合作伙伴”将向成功接收数据的方向发送确认。整个交易遵循已建立的协议,具有定义的令牌序列、超时和纠错码,以确保交易的完整性。
所有其他设备只是在侦听并忽略未定向到它们的流量。
就是这样,它是“半双工”接口。