我在OSDev wiki上了解到,端点0是默认控制管道,允许双向控制传输。这用于设备配置,例如检索设备描述符。 USB 2.0 spec在第5.5节控制转移中解释了这一点。
还有可用的端点数量有限(2个用于低速,15个用于全速和高速设备)。在USB 2.0规范的某处,我已经读过必须有至少一个控制管道。这意味着可能存在多个控制端点,但它的用途是什么?您是否知道将EP配置为控制管道的任何特定USB设备或类?
后来,我在规范10.1.2 控制机制中找到了这个:
特定的USB设备可能允许使用其他消息管道 传输特定于设备的控制信息。这些管道使用 与默认管道相同的通信协议,但信息 传输特定于USB设备,并未标准化 USB规范。
如果我理解正确,这意味着非EP0不能用于配置设备(例如,GET_DESCRIPTOR
等标准请求)。但是设置/数据/状态阶段似乎仍然可用(" [..]使用相同的通信协议[...]")。它是否正确?或者是否禁止非EP0使用标准/类别请求?
背景:在QEMU中处理模拟USB设备时,出现了用于调试目的的USB监视器的需求。在检查QEMU核心USB代码期间,我注意到它只处理了EP0的控制命令。其他端点将被视为数据。有些虚拟设备(host-libusb)总是拒绝那些其他端点的控制传输。因此,问题是这是否是正确的行为(如果有效,是否存在真正实现此功能的设备)。
答案 0 :(得分:0)
据我所知,非EP0控制端点没有用处。我开发了几种在端点0上使用自定义控制传输的产品,作为发送特定于设备的请求的主要方式,我没有遇到任何基本问题。
如果您确实制作了非EP0控制端点,我认为您的理解是正确的;您将无法将其用于标准请求,但您可以将其用于自定义请求,并且事务序列与EP0上的相同。