USB 键盘是否只发送信号,还是也接收来自计算机的信号?

USB 键盘是否只发送信号,还是也接收来自计算机的信号?

键盘不需要任何来自计算机的信号,只需要电源,对吗?或者它需要接收信号和发送信号吗?

编辑:我没想到这个问题会引起这么大的兴趣!我问这个问题是因为我有一个梦想,想做一个可以复制信号的小玩意,这样键盘就可以同时向两台计算机发送同一个字母。因为(从我在答案中可以看出)计算机像任何其他设备一样主动控制键盘,所以这显然是不可能的。没什么大不了的,因为实际上我也没有能力来建造它!

答案1

来自 ”人机接口设备 (HID) 的设备类定义”版本 11.1“ 规格:

LED 状态与 CAPS LOCK、NUM LOCK、SCROLL LOCK、COMPOSE 和 KANA 事件之间的同步由主机而不是键盘维护。如果使用附录 B 中的键盘描述符,LED 状态由发送通过 Set_Report(输出)请求向键盘发送 5 位绝对报告。

要更改键盘 LED,键盘需要接受命令。因此它不是“仅输入”设备(即它仅向主机输出数据)。

话虽如此,所有 USB 设备都有一个协商和枚举过程,需要主机和设备之间来回对话。您不能拥有“只读”的 USB 设备。

甚至在 USB 出现之前,PC 键盘控制器就可以接受命令,因为除了读取键盘之外,它还可以做一些事情(参考):

如果键盘是独立的外围系统单元(例如大多数现代台式计算机),则键盘控制器不直接连接到按键,而是通过某种串行接口从嵌入键盘的微控制器接收扫描码。在这种情况下,控制器通常还通过电线将数据发回键盘来控制键盘的 LED。

IBM PC AT 使用 Intel 8042 芯片与键盘连接。该计算机还控制对 A20 线的访问,以便实现解决 Intel 80286 芯片缺陷的方案。1键盘控制器还用于启动软件 CPU 重置,以便允许 CPU 从保护模式转换为实模式1因为 286 不允许 CPU 从保护模式进入实模式,除非 CPU 被重置。这是一个问题,因为 BIOS 和操作系统服务只能由实模式下的程序调用。

许多期望这种行为的软件都使用了这些行为,因此,即使由于 Intel 80386 具有无需 CPU 重置即可从保护模式切换到实模式的能力,从而避免了通过键盘控制器进行重置,键盘控制器仍会继续控制 A20 线路并执行软件 CPU 重置。

答案2

任何 USB 设备,无论其类别如何,都需要双向通信才能运行. 每个 USB 设备(或功能就 USB 规范而言)表示为一组端点可以将其视为接受或接收数据的缓冲区。但是,即使是只能发送数据的端点也会等待一个称为令牌他们才能回复: 在此处输入图片描述

(图片来自这里(灰色框代表USB host,白色框代表USB function)

甚至所谓的中断传输也是这样进行的,USB 主机使用令牌包轮询连接的设备。常规(批量)传输和中断传输之间的区别在于,后者的轮询时间很短,而且有保证。不过,所有传输都是由主机发起的。

答案3

这个问题反映了一个常见的误解,即当按下某个键(或移动鼠标)时,USB 设备会自动向 PC“发送”某些内容,这就是引起如此关注的原因。事实上,USB 设备在收到主机的相应请求之前不会发送任何内容。一个例外是从挂起的设备唤醒的过程。

虽然 USB 看上去很简单,但实际上其功能非常复杂。任何新的 USB 设备在开始工作之前都必须先进行“枚举”。顺序如下:

  1. 插入键盘后,主机端口接收“连接状态”信号(对于 LS 信号,D- 被键盘拉高)。

  2. 然后主机将端口设置为“端口重置”模式,USB PHY(物理层驱动程序)将“USB_RESET”发送到 D+/D- 线路(两条线路均在规定的时间内处于低电平)。有关 FS/HS 设备的“端口重置”的一些信息可以找到这里

  3. 然后主机开始以 1ms 的间隔输出帧边界数据包。对于低速 (LS) 设备(如普通有线键盘),这些只是“保持活动”脉冲,而对于 FS,则会生成特殊的 SOF - 帧起始数据包。这些数据包使设备保持活动模式,并防止其进入低功耗 SUSPEND 状态。

  4. 然后开始“枚举”。主机发送获取设备描述符的请求。该请求被发送到设备地址为“0”的“默认管道”。[此时只有一个这样的设备 - 键盘 - 因为总线上的所有其他设备都应该已经具有各自分配的 USB 地址]

  5. 键盘返回请求的信息,因此主机将能够确定应该加载哪种驱动程序。

  6. 主机发送一个交易,要求设备将其默认地址更改为新分配的地址。

  7. 然后主机开始与设备进行新一轮通信,此时设备已分配了新地址。所有其他设备都会忽略此通信,因为此通信不是发给它们的。

  8. 主机可能会从其他几个描述符中读取更多信息,并最终选择“设备配置”。这就结束了枚举过程。

  9. 根据 USB 设备类别,主机开始与设备通信。在键盘情况下,主机定期发送“IN”请求,本质上是轮询设备(即使此定期管道称为“中断”管道)。如果键盘上有任何键被按下/压下,键盘将返回此信息。如果没有,则不会向设备驱动程序返回任何数据。

简而言之,每个 USB 设备都必须从 USB 主机接收唯一的地址,并且两个 USB 主机将难以与设备通信 - 总线冲突、地址不匹配、随机拦截按键数据等。USB 协议使得两个 USB 主机之间无法共享设备。

答案4

在 USB 键盘出现之前,PS/2 键盘使用了一种更简单的协议,可以将一个键盘连接到 2 个设备并使其工作。只需一个简单的 Y 型连接即可。

较旧的 USB 键盘仍内置有 PS/2 仿真模式;使用其中一个紫色连接器适配器,您可以将其插入计算机背面的 PS/2 端口。因此,在两台计算机上使用 USB 转 PS/2 分支电缆,然后将紫色适配器连接到 USB 键盘可能会很好用。

较新的 USB 键盘放弃了传统的 PS/2 模式,因此在这种情况下不起作用。

相关内容