为什么不是USB中断驱动?
使USB成为轮询机制而不是中断驱动机制背后的原理是什么?我能给出一些理由的答案是:为什么不是USB中断驱动?,usb,hardware,Usb,Hardware,使USB成为轮询机制而不是中断驱动机制背后的原理是什么?我能给出一些理由的答案是: 将处理效率和粒度的控制权留给操作系统,而不是设备本身 防止故障设备造成“中断风暴” 我在网上找到的一些解释说,这主要是因为USB设备的特性。它们大多是基于微控制器的系统,不能对较大的传输排队,因此需要较短的中断间隔,而这种较短的中断间隔可能不是最有效的。这是真的吗 还有其他原因吗?USB发展的首要前提是“廉价芯片”。这是通过使用轮询实现的,轮询减少了对更高仲裁协议的需要 Firewire确实允许来自设备甚至D
- 将处理效率和粒度的控制权留给操作系统,而不是设备本身
- 防止故障设备造成“中断风暴”
还有其他原因吗?USB发展的首要前提是“廉价芯片”。这是通过使用轮询实现的,轮询减少了对更高仲裁协议的需要 Firewire确实允许来自设备甚至DMA的中断,但其成本要高得多。因此USB在低成本领域获胜,firewire在低延迟/低开销方面获胜。。。领域由于历史原因,USB多多少少获胜 使USB成为轮询机制而不是中断驱动机制背后的原理是什么 这似乎是反USB FUD(如在恐惧、不确定和怀疑中) 原因是,这大大简化了硬件级别的事情——例如,不再发生冲突。USB是半双工的,可以减少电缆中的电线数量,所以无论如何只有一个人可以通话 当USB在线路上使用轮询时,一旦你在软件中使用它,你就会注意到USB中有中断。唯一的问题是在大多数用例中延迟的轻微增加是可以忽略的。由于轮询通常在硬件IIRC中实现,因此只有在有新数据时才会通知软件
在软件层面上,有所谓的“中断端点”——猜猜看,每个HID设备都使用它们:鼠标、键盘和筷子都是隐藏的。有三种方法可以避免总线上的数据传输冲突:
这允许一个相当复杂、强大和快速的总线系统,但组件甚至不需要真正的CPU。最简单的USB芯片只是连接串行数据线的网桥(如内部RS-232总线或I2C总线),没有任何真正可配置的功能,它们无法运行软件或更新固件。他们只是将传入的数据包放入一个缓冲区,然后通过串行总线逐位发送缓冲区内容,然后在另一个缓冲区接收串行数据,并在轮询时返回缓冲区内容。至于告诉主机配置(包括设备和供应商ID,以及人类可读的字符串),它们只需发送一个小型外部EPROM的内容。事情再简单不过了,但这样的芯片已经足以构建大量的USB硬件。我正在考虑给你一个-1,因为这显然是一个错误的前提,你是指控制器还是总线本身?@Hasturkun:我是指让主机硬件不断轮询USB设备的部分。那部分就是总线/协议本身。主机无法判断设备是否有数据可用,除非它轮询设备以获取该数据,因此它必须连续轮询是否存在端点内以及来自驱动程序的活动请求以在该端点上接收数据。USB是半双工的吗