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