键盘不需要来自电脑的任何信号,只需要电源,对吧?或者它需要接收信号和发送信号吗?
编辑:我没想到这个问题会引起这么大的兴趣!我问它是因为我有一个空闲的梦想,那就是建造一个复制信号的 doohickey,这样键盘就可以同时向两台计算机发送相同的字母。由于(从我在答案中可以看出)计算机像任何其他设备一样主动控制键盘,这显然是不可能的。没什么大不了的,因为实际上我无论如何都没有构建它的技能!
Law*_*ceC 101
从“人机接口设备 (HID) 的设备类定义”版本 11.1规范中:
LED 状态与 CAPS LOCK、NUM LOCK、SCROLL LOCK、COMPOSE 和 KANA 事件之间的同步由主机而非键盘维护。如果使用附录 B 中的键盘描述符,则通过 Set_Report(Output) 请求向键盘发送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 重置,即使英特尔 80386 能够切换到实模式从保护模式,无需 CPU 复位。
Ale*_*ski 18
这个问题反映了一个普遍的误解,即当按下一个键(或鼠标移动)时,USB 设备会自行“发送”一些东西给 PC,这就是为什么如此受到高度关注。事实上,USB 设备在收到来自主机的相应请求之前不会发送任何内容。一个例外是从挂起的设备唤醒过程。
USB虽然表面上看起来很简单,但实际上它的功能相当复杂。任何新的 USB 设备在开始运行之前都必须先“枚举”。顺序如下:
插入键盘后,主机端口接收“连接状态”信号(对于LS信号,D-被键盘拉高)。
然后主机将端口设置为“端口重置”模式,USB PHY(物理层驱动程序)沿 D+/D- 线发送“USB_RESET”(两条线在规定的时间内被驱动为低电平)。可以在此处找到有关 FS/HS 设备的“端口重置”的一些信息。
然后主机开始以 1ms 的间隔输出帧边界数据包。对于作为普通有线键盘的低速 (LS) 设备,这些只是“保持活动”脉冲,而对于 FS,会生成特殊的 SOF - 帧起始数据包。这些数据包使设备处于活动模式并防止其进入低功耗挂起状态。
然后“枚举”开始。主机发送请求以获取设备描述符。请求被发送到设备地址为“0”的“默认管道”。[此时只有一个这样的设备 - 键盘 - 因为总线上的所有其他设备都应该有单独分配的 USB 地址]
键盘返回请求的信息,因此主机将能够确定应该加载哪种驱动程序。
主机发送一个事务,要求设备将其默认地址更改为新分配的地址。
然后主机开始与设备的新一轮通信,现在在新分配的地址。所有其他设备忽略此通信,因为它不是针对它们的。
主机可能会从其他几个描述符中读取更多信息,并最终选择“设备配置”。枚举过程到此结束。
根据 USB 设备类别,主机开始与设备通信。在键盘情况下,主机本质上是周期性地发送“IN”请求,本质上是轮询设备(即使这个周期性管道被称为“中断”管道)。如果键盘有任何按键按下/按下,键盘将返回此信息。如果不是,则不会向设备驱动程序返回任何数据。
简而言之,每个 USB 设备都必须从 USB 主机接收唯一的地址,并且两个 USB 主机将难以与一个设备进行通信——总线冲突、地址不匹配、按键数据的随机拦截等。 USB 协议使得无法共享一个设备。两个 USB 主机之间的设备。
| 归档时间: |
|
| 查看次数: |
22085 次 |
| 最近记录: |