百科问答小站 logo
百科问答小站 font logo



为什么 USB HID 的标准(Boot 模式)的键盘协议不设计成全无冲? 第1页

  

user avatar   bei-ji-85 网友的相关建议: 
      

不是太理解要问的是什么,就从我的理解来说一下吧,我认为题主要问的是:为什么USB HID的report格式要设计成这样,以及为什么以现在这种轮询方式工作。

首先,USB协议设计的时候,一个指导思想就是:只允许主机发起轮询式,不允许设备主动上报中断。这样的设计可以最大程度上减轻设备端的芯片复杂度,也能节约系统资源(减少中断号占用),但坏处也很明显:不能像PS/2键盘那样主动上报状态。

那么这种情况下,USB键盘如果上报的格式仍然是PS/2的那种扫描码的通码或者断码的话,主机如果性能比较差,或者总线比较忙的话,很有可能会丢掉某个键码,导致键盘状态异常,因为软件层面的轮询效率要远远低于中断模式。解决的方法就是:改成报告按键状态的模式。

好了,既然是report模式,那么问题来了:为什么report最多只容纳了6个按键(不含modifier)?

因为当年DOS上能处理的按键中断队列也不过6-8个键码,USB HID上来就支持6个按键,并不少了,这就跟当年认为640KB内存足够用了是一个道理,理论上当年的机械键盘确实可以做到全无冲,问题是有多少人会用呢?拿PC去玩游戏的人太少了。

况且对于USB芯片来说,只支持interrupt传输(HID协议)和同时支持interrupt传输和bulk传输(U盘)的硬件成本是不一样的,既然interrupt传输足够用(最大包长是8字节,也就是HID report的长度),那么何必要增加成本做的像U盘那样复杂呢?

总结原因基本就是上面这两点:1、当年设计规范的人觉得6个键码足够用了;2、设计太复杂的话会增加成本。

USB协议层面上,在保持兼容HID协议的基础上,做到全键无冲其实是有很多方法的,比如多interface方式,hub方式等等,只有高端一点的键盘厂商才会这么做,难倒是不难,就是成本问题。

升级HID协议的可能性,我认为是不太大的,虽然这个协议已经用了快20年了,从长远上看,USB键盘这种外设还能在民用市场存活多久都是个问题,USB-IF没有必要再设计一套全新的规范出来,况且这种需求实在是太小了。




  

相关话题

  为什么我那个当程序员的男朋友,一直特别想要一个机械键盘? 
  PS2 接口键盘和 USB 接口键盘间有何区别? 
  电脑的usb口3.0和2.0对于鼠标有什么区别吗? 
  USB3.1与Type-c接口是同一回事吗? 
  为什么大写锁定键(Capslock)使用不多,却被设计在键盘的黄金位置上? 
  非 x86 平台,USB 主控制器规范还是主流的 xhci 和 ehci 吗? 
  在Windows中,U盘或者移动硬盘关不掉时,怎么知道是被哪个程序占用了呢? 
  USB有可能整合TCP/IP协议吗? 
  怎么样才能只用键盘不用鼠标,包括任何指针触控设备,并优雅地使用电脑? 
  USB芯片到底完成了哪些工作? 

前一个讨论
为什么USB-C不做成圆口的形态?
下一个讨论
如果用VxWorks内核和Mips架构开发专用硬件防火墙是否性能上会比宏内核OS和CISC架构更强?





© 2024-12-26 - tinynew.org. All Rights Reserved.
© 2024-12-26 - tinynew.org. 保留所有权利