如果不使用,USB 键盘的轮询速度是否会变慢?

如果不使用,USB 键盘的轮询速度是否会变慢?

我发现最快的 USB 键盘使用具有 1000 Hz 轮询率的 USB 2.0。

如果我只是看电影并且几个小时不碰这个键盘,来回的 USB 通信真的会每 ms 重复一次吗?还是我通常会进入某种 USB 睡眠状态(例如,1 Hz 轮询)?

我的理解是,每毫秒,PC 都应该以 IN 请求开始,然后键盘应该发送 DATA 响应(表示“没有按下任何键”),然后 PC 应该发送 ACK 响应。

所以,我问这个问题是因为这一切似乎都很浪费......但也许没什么大不了的。

(这个问题是关于普通的 Windows PC 的,但我对 Android 设备也很好奇。顺便说一句,我认为PS/2如果没有触摸键盘,键盘就无法通过 PS/2 电缆进行任何来回通信,但如果我错了,请纠正我。)

答案1

如果不使用,USB 键盘的轮询通常会变慢吗

不,系统无法判断键盘何时“不曾用过”提前。
您(用户)知道您没有使用键盘,但系统无法检测到您的意图。

为了保证所有连接设备的持续和及时服务,需要轮询 USB 总线上的设备。
事件驱动方案(例如使用中断)需要更复杂的自适应解决方法,以避免低优先级或低活动设备的资源匮乏。

... 来回的 USB 通信真的每毫秒都会重复一次吗?

是的,这就是 USB 协议在共享介质上进行双向通信的定义。

或者我通常会进入某种 USB 睡眠状态(例如,1 Hz 轮询)?

不会。
如果总线本来处于空闲状态,则轮询不会带来任何损失。
自适应速率轮询的实现会增加复杂性,并且响应时间也会因此受到影响。

请注意,此轮询通常主要由主机 USB 控制器执行,而不是由 USB 主机的 CPU 执行。此轮询对 PC 处理器或操作系统的影响或负载很小。


USB 是一种在硬件和软件中实现的标准。操作系统软件方面的实现预计对于任何操作系统(包括 Windows 和 Android)都是类似的。

例如,USB 设备的轮询速率由设备本身指定,而不是由主机操作系统决定。
此轮询速率在端点描述符,范围从“低速/全速设备为 1ms,高速设备为 125us”。


我认为,如果键盘没有被触摸,PS/2 键盘就不会通过 PS/2 电缆进行任何来回通信

PS/2 接口使用时钟线来协商半双工通信的方向,而 USB 是共享的半双工总线,依赖于主从时间协议。
除非 PC 主机将时钟线拉低,否则 PS/2 设备可以随时传输数据,从而强制 PS/2 设备停止传输。

答案2

如果我只是看电影并且几个小时不碰这个键盘,来回的 USB 通信真的会每 ms 继续重复吗?还是我通常会进入某种 USB 睡眠状态(例如,1 Hz 轮询)?

每 ms,PC 应该以 IN 请求开始

实际上,“通信”并不是每毫秒都会发生。但低速 USB 主机确实会每毫秒持续向总线发送“保持活动”脉冲。这称为“USB 帧”。因此这里没有发生实际通信。

正如您所正确指出的那样,只有当主机发送轮询 (IN) 请求时才会发生“通信”。Windows 的正常轮询率为 8 毫秒,每 8 帧一次,但这取决于具体情况。如果使用专有驱动程序,如“游戏键盘”,如您所说,轮询可能每 1 毫秒发生一次。

是的,这是一个浪费的过程。这就是为什么大多数便携式设备采用省电技术的原因。它们不会降低轮询速率,而是使用标准 USB_SUSPEND 函数。如果其内部算法确定没有新信息从键盘或鼠标传出,主机将有选择地暂停每个 HID(人机接口设备)。进入 SUSPEND 状态的延迟为 8 毫秒。如果我没记错的话,不活动超时约为 200 毫秒,此后 USB 线进入 SUSPEND 状态,无需切换。

当您触摸键盘或鼠标时,它们将生成“唤醒”事件,主机将恢复 USB 流量和通信轮询。是的,此恢复比通常的轮询需要更长的时间,15-20-50 毫秒,如果整个系统在一定程度上进入睡眠状态,则需要更长的时间,因此用户可能会对“键盘延迟”感到沮丧。但这种主动管理的暂停功能确实可以节省电池寿命。

如果您只是在桌面电脑上观看电影,则对功耗的关注较少,并且键盘的轮询可能永远不会停止,尽管可能存在可以实现更积极的节能功能的配置设置。

与 USB 不同,PS/2 接口可以主动从键盘/鼠标端生成通信流量,因此接口可以保持不活动状态而无需从主机轮询。

相关内容