键盘不需要来自电脑的任何信号,只需要电源,对吧?或者是否需要接收信号以及发送信号?
编辑:我没想到这个问题产生了这么大的兴趣!我问它是因为我有一个空闲的梦想,即建立一个复制信号的doohickey,这样键盘就可以同时向两台计算机发送相同的信件。由于(从我在答案中可以看出)计算机像其他设备一样主动控制键盘,这显然是不可能的。实际上并没有什么大不了的,我还没有掌握它的技能!
键盘不需要来自电脑的任何信号,只需要电源,对吧?或者是否需要接收信号以及发送信号?
编辑:我没想到这个问题产生了这么大的兴趣!我问它是因为我有一个空闲的梦想,即建立一个复制信号的doohickey,这样键盘就可以同时向两台计算机发送相同的信件。由于(从我在答案中可以看出)计算机像其他设备一样主动控制键盘,这显然是不可能的。实际上并没有什么大不了的,我还没有掌握它的技能!
Answers:
从“ 人机接口设备的设备类定义(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复位。
So it is not an "input-only" device (meaning it only outputs data to the host)
让我困惑
任何USB设备无论其类别如何都需要双向通信才能运行。每个USB设备(或功能在USB规范的术语)被表示为一组的端点,其可以被认为是作为接受或接收数据缓冲区。但是,即使只能发送数据的端点也可以等待一个名为token的特殊数据包,然后才能回复:
(图像从这里开始,灰色框表示USB主机,白色框表示USB功能)
甚至所谓的中断传输也是以这种方式完成的,USB主机使用令牌包轮询连接的设备。常规(批量)传输和中断传输之间的区别在于轮询时间很短并且在后一种情况下是有保证的。但是,所有转移都是由主机发起的。
这个问题反映了一种常见的误解,即当按下按键(或鼠标移动)时,USB设备会自动向PC发送内容,这就是为什么如此高度关注的原因。实际上,USB设备在收到来自主机的相应请求之前不会发送任何内容。一个例外是来自挂起设备的唤醒过程。
虽然USB表面看起来很简单,但实际上它的功能非常复杂。任何新的USB设备必须首先“枚举”才能开始运行。顺序如下:
插入键盘后,主机端口接收“连接状态”信号(对于LS信号,D-通过键盘拉高)。
然后主机将端口设置为“端口复位”模式,USB PHY(物理层驱动器)沿D + / D-线向下发送“USB_RESET”(两条线路都被驱动为低电平一段规定的时间)。有关FS / HS设备“端口复位”的一些信息,请参见此处。
然后主机开始以1ms的间隔输出帧边界数据包。对于作为普通有线键盘的低速(LS)设备,这些只是“保持活动”脉冲,而对于FS,则生成特殊的SOF - 帧起始数据包。这些数据包使设备保持活动状态,并防止它进入低功耗SUSPEND。
然后“枚举”开始。主机发送获取设备描述符的请求。请求被发送到“默认管道”,设备地址为“0”。[此时只有一个这样的设备 - 键盘 - 因为总线上的所有其他设备已经应该具有单独分配的USB地址]
键盘返回请求的信息,因此主机将能够确定应该加载哪种类型的驱动程序。
主机发送一个事务,要求设备将其默认地址更改为新分配的地址。
然后主机开始与设备的新一轮通信,现在在新分配的地址。所有其他设备都忽略此通信,因为它不是针对它们的。
主机可能会从其他几个描述符中读取更多信息,并最终选择“设备配置”。这就是枚举过程的结束。
根据USB设备类别,主机开始与设备通信。在键盘情况下,主机周期性地发送“IN”请求,基本上轮询设备(即使这个定期管道被称为“中断”管道)。如果键盘按下/按下任何键,键盘将返回此信息。如果没有,则不会将数据返回给设备驱动程序。
简而言之,每个USB设备必须从USB主机接收唯一的地址,并且两个USB主机将难以与设备通信 - 总线冲突,地址不匹配,按键数据的随机拦截等.USB协议使得无法共享两个USB主机之间的设备。
If keyboard has any key pressed/depressed, the keyboard will return this information
- 那么幽灵键怎么会出现?我的印象是键盘必须发送键盘和按键事件,这可以解释为什么如果一个键盘事件被错过你就会有鬼键......
正如其他答案所解释的那样,USB需要双向通信作为其工作方式的一部分。PS / 2虽然允许双向通信,但不需要它来将密钥发送到计算机,但需要它来设置键盘LED。
从理论上讲,您可以构建一个设备来复制PS / 2信号并将其发送到第二台计算机,并丢弃来自计算机的任何命令,这样您就可以将按键发送到多台计算机,但键盘LED不会响应num lock,大写锁定和滚动锁定状态(或任何其他LED状态的变化,例如在Linux中键盘LED有时用于替代目的)。
我不确定这样一个项目会有多复杂。自从我使用PS / 2以来已经有一段时间了,所以我不知道你是否可以简单地连接几个电线/连接器,或者你是否需要一个有源设备(例如微控制器)来向一个方向传递命令但是丢弃它们在另一个。如果您确实有一个微控制器,您甚至可以使设备能够解释键盘LED命令并将它们“组合”用于显示(例如,如果LED在计算机上打开则长时间闪烁,但在计算机2上关闭,短暂闪烁LED如果在计算机2上打开但在计算机上打开,如果在两台计算机上打开,则LED稳定亮起,如果在两台计算机上打开,则LED熄灭)。那会更加先进。
此外,如果您的目标是能够从另一台计算机控制一台计算机,或者从同一桌面控制两台计算机,或者其他什么,您可能需要查看: