百科问答小站 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没有必要再设计一套全新的规范出来,况且这种需求实在是太小了。




  

相关话题

  机械键盘买青轴好还是茶轴好? 
  为什么现在很多人都推崇机械键盘? 
  ubuntu下,最多可以挂载多少个USB-U盘? 
  买游戏键盘,应该主要关注哪些指标? 
  高性价比的入门机械键盘有哪些推荐? 
  对于USB3.0的上行接口和下行接口,有什么区别和各有什么用途? 
  买笔记本电脑有没有必要再买一个键盘? 
  2019 年 618 购物活动中,有哪些值得入手的电脑配件? 
  如何看待小米MIX4仍使用USB 2.0,USB3.0对于手机来说可有可无吗? 
  普通布局键盘为什么要那么大一个空格,拆分成几个按键不是很好吗? 

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





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