gpt4 book ai didi

usb - 为什么不是USB中断驱动?

转载 作者:行者123 更新时间:2023-12-03 21:33:03 24 4
gpt4 key购买 nike

使 USB 成为轮询机制而不是中断驱动的原因是什么?我可以提出一些推理的答案是:

  • 将处理效率和粒度的控制权交给操作系统,而不是设备本身。
  • 防止故障设备造成的“中断 Storm ”。

  • 我在网上找到的一些解释说这主要是因为 USB 设备的性质。它们大多是基于微 Controller 的系统,无法对较大的传输进行排队,因此需要较短的中断间隔,而如此短的中断间隔可能不是最有效的。真的吗?

    会不会有其他原因?

    最佳答案

    有三种方法可以避免总线上的数据传输冲突:

  • 有一个有点复杂的总线管理协议(protocol)。这样的协议(protocol)必须相当复杂,因为如果太简单,它会使总线相当慢(参见 token 环,相当简单,但效率低下)。但是,拥有复杂的协议(protocol)会使所有组件变得昂贵,因为它们都需要管理逻辑并且需要了解总线的实际工作方式(请参阅 Firewire)。
  • 根本不要避开它们,允许它们,但要检测和处理它们。这也有点复杂,总线不能保证任何速度或延迟,就像不断发生冲突一样,吞吐量会下降,延迟会增加(参见没有交换机的以太网,参见 WiFi)。
  • 拥有一个总线主控器来控制谁可以在什么时间使用总线以及使用多长时间。这是便宜的,因为只有主控器必须是复杂的,并且主控器可以提供关于速度或延迟的任何可能的保证。

  • (3) 是 USB 的工作原理,甚至主 USB 芯片都不需要复杂,因为主通常是具有快速 CPU 的计算机,并且可以在软件中执行所有总线管理。
    USB 设备芯片作为 toast 转储。他们不需要了解巴士的精巧细节。他们只需要寻找发送给他们的数据包,这些数据包要么是控制数据包,例如请求元数据或选择配置,主机发送的数据包,或来自主机的轮询请求,说“如果你有东西要发送,总线现在是你的”。
    为了确保主节点按时轮询它们,他们会根据要求分发一个简单的描述表,其中解释了他们提供哪些端点,需要轮询的频率,以及在轮询时最多传输多少数据。主设备可以使用该信息来建立一个轮询时间表,以确保所有设备都按时轮询并获得足够长的总线时间以允许它们的最大传输大小。当然,这并非在所有情况下都是可能的。如果您连接了太多需要非常频繁轮询的设备并且总是想要发送大量数据,您的系统可能会拒绝添加新设备并出现错误,从而无法满足其轮询要求。然而,这种情况在实践中很少见,USB 仅限于 127 个设备(集线器算作设备,主控本身也算作设备)。
    电源管理以类似的方式工作。每个设备都告诉主设备它需要多少功率,并且主设备确保总线仍然可以提供那么多,同时考虑到有源集线器。如果您连接另一个设备并且总线无法再为其供电,则添加该设备将失败并出现错误。
    这允许一个相当复杂、强大和快速的总线系统,但组件甚至不需要真正的 CPU。最简单的 USB 芯片只是连接到串行数据线(如内部 RS-232 总线或 I2C 总线)的桥,没有真正可配置的东西,它们不能运行软件或有可以更新的固件。他们只是将传入的数据包放入缓冲区,然后通过串行总线逐位发送缓冲区内容,然后在另一个缓冲区中接收串行数据,并在轮询时返回缓冲区内容。至于告诉 master 配置(包括设备和供应商 ID,以及人类可读的字符串),他们只是发送一个小的外部 EPROM 的内容。事情再简单不过了,但这样的芯片已经足以构建大量的 USB 硬件。

    关于usb - 为什么不是USB中断驱动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7076472/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com