USB键盘只发送信号,还是从计算机接收信号?


83

键盘不需要来自电脑的任何信号,只需要电源,对吧?或者是否需要接收信号以及发送信号?

编辑:我没想到这个问题产生了这么大的兴趣!我问它是因为我有一个空闲的梦想,即建立一个复制信号的doohickey,这样键盘就可以同时向两台计算机发送相同的信件。由于(从我在答案中可以看出)计算机像其他设备一样主动控制键盘,这显然是不可能的。实际上并没有什么大不了的,我还没有掌握它的技能!


40
例如,它可以接收锁定键的状态。许多键盘具有指示锁定键状态的LED。尝试打开大写锁定,然后更换键盘,可能状态仍将被锁定,此信息需要来自PC。
MátéJuhász

8
即使PS / 2键盘也能从PC接收信号,否则它如何打开/关闭LED?
phuclv

8
@Devsman你不能这样做,否则锁定状态将不同步,因为它可以被软件更改。例如,如果您插入2个键盘并在其上按下numlock,则另一个上的LED将切换。使用屏幕键盘也可以实现同样的效果
2017年


7
USB设备必须具有双向数据,这仅仅是由于初始握手的要求才能启用特定设备类。
史蒂夫

Answers:


101

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

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

要更改键盘LED,键盘会接受命令来执行此操作。因此它不是“仅输入”设备(意味着它只向主机输出数据)。

话虽这么说,但是所有USB设备都需要在主机和设备之间进行来回对话的协商和枚举过程。您不能拥有“只读”USB设备。

即使在USB之前,PC键盘控制器也会接受命令,因为除了读取键盘之外它还做了一些事情(参考):

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

IBM PC AT使用Intel 8042芯片与键盘连接。这台计算机还控制着通向A20线,以实现对芯片的错误解决方法在Intel 80286 1键盘控制器也被用来启动软件CPU复位,以使CPU从保护模式,以实际的过渡模式1因为286不允许CPU从保护模式进入实模式,除非CPU复位。这是一个问题,因为BIOS和操作系统服务只能由实模式的程序调用。

这些行为已经被许多期望这种行为的软件所使用,因此键盘控制器继续控制A20线并执行软件CPU复位,即使在通过键盘控制器进行复位的需要被Intel 80386切换到的能力所避免时也是如此。保护模式下的实模式,没有CPU复位。


15
如果我们在“信号”级别讨论内容,即使我们忘记了枚举和LED,USB输入也是基于轮询。除非主机要求,否则设备无法主动向主机发送数据。只是频繁地轮询输入设备以询问它是否有任何新的报告。
Matti Virkkunen 2017年

你的意思是“只输出”吧?
丹尼尔

不知道怎么说tbh,键盘是“输入”设备,而“仅输入”意味着它只向主机发送数据,但从不接收。取决于观点是键盘还是主机。
LawrenceC

1
@Daniel大多数人都不会将键盘称为“输出”设备。外围设备是外部连接的,因此我们从PC的角度出发,将其称为输入或输出。这是我们想要使用的PC,而不是键盘,鼠标或其他外围设备
phuclv 2017年

@LưuVĩnhPhúc我知道,但他写道So it is not an "input-only" device (meaning it only outputs data to the host)让我困惑
Daniel

56

任何USB设备无论其类别如何都需要双向通信才能运行。每个USB设备(或功能在USB规范的术语)被表示为一组的端点,其可以被认为是作为接受或接收数据缓冲区。但是,即使只能发送数据的端点也可以等待一个名为token的特殊数据包,然后才能回复: 在此输入图像描述

(图像从这里开始,灰色框表示USB主机,白色框表示USB功能)

甚至所谓的中断传输也是以这种方式完成的,USB主机使用令牌包轮询连接的设备。常规(批量)传输和中断传输之间的区别在于轮询时间很短并且在后一种情况下是有保证的。但是,所有转移都是由主机发起的。


18

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

虽然USB表面看起来很简单,但实际上它的功能非常复杂。任何新的USB设备必须首先“枚举”才能开始运行。顺序如下:

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

  2. 然后主机将端口设置为“端口复位”模式,USB PHY(物理层驱动器)沿D + / D-线向下发送“USB_RESET”(两条线路都被驱动为低电平一段规定的时间)。有关FS / HS设备“端口复位”的一些信息,请参见此处

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

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

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

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

  7. 然后主机开始与设备的新一轮通信,现在在新分配的地址。所有其他设备都忽略此通信,因为它不是针对它们的。

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

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

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


If keyboard has any key pressed/depressed, the keyboard will return this information - 那么幽灵键怎么会出现?我的印象是键盘必须发送键盘和按键事件,这可以解释为什么如果一个键盘事件被错过你就会有鬼键......
暗影

2
@shadow,不知道你在问什么。如果我记得,键盘的轮询率是8毫秒。您正在异步按键,因此某些事件(make或break)可以进入不同的轮询帧,某些事件将在IN请求正在进行时发生。一个好的键盘控制器应该正确处理所有事件交叉,并且不应该丢失事件。我不知道为什么键盘会产生“鬼键”,但它与USB协议无关。
Ale..chenski 2017年

4
Ghost键与物理键的连接方式有关。更便宜的键盘控制器没有每个键的单个引脚,而是它们具有寻址的网格系统,例如行和列,其中控制器断言列线,并在行线上寻找信号。在这种情况下,除了时间之外,同时按下两个键(例如E和S)可能与按下W和D无法区分。
Ben

2

正如其他答案所解释的那样,USB需要双向通信作为其工作方式的一部分。PS / 2虽然允许双向通信,但不需要它来将密钥发送到计算机,但需要它来设置键盘LED。

从理论上讲,您可以构建一个设备来复制PS / 2信号并将其发送到第二台计算机,并丢弃来自计算机的任何命令,这样您就可以将按键发送到多台计算机,但键盘LED不会响应num lock,大写锁定和滚动锁定状态(或任何其他LED状态的变化,例如在Linux中键盘LED有时用于替代目的)。

我不确定这样一个项目会有多复杂。自从我使用PS / 2以来已经有一段时间了,所以我不知道你是否可以简单地连接几个电线/连接器,或者你是否需要一个有源设备(例如微控制器)来向一个方向传递命令但是丢弃它们在另一个。如果您确实有一个微控制器,您甚至可以使设备能够解释键盘LED命令并将它们“组合”用于显示(例如,如果LED在计算机上打开则长时间闪烁,但在计算机2上关闭,短暂闪烁LED如果在计算机2上打开但在计算机上打开,如果在两台计算机上打开,则LED稳定亮起,如果在两台计算机上打开,则LED熄灭)。那会更加先进。

此外,如果您的目标是能够从另一台计算机控制一台计算机,或者从同一桌面控制两台计算机,或者其他什么,您可能需要查看:

  • VNC(允许通过网络从另一台计算机控制一台计算机)
  • RDP(也允许通过网络控制另一台计算机,内置于Microsoft Windows但需要专业版)
  • KVM(一种允许您在两台计算机之间切换一组外围设备的硬件)

1

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.