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




  

相关话题

  98 键键盘 100 元左右有什么推荐吗? 
  电脑的usb口3.0和2.0对于鼠标有什么区别吗? 
  micro USB接口和type–b接口有何区别?接口大致的分类怎么分? 
  为什么USB-C不做成圆口的形态? 
  像豌豆荚之类的软件是如何通过USB数据线知道手机型号的? 
  如何看待小米MIX4仍使用USB 2.0,USB3.0对于手机来说可有可无吗? 
  有哪些程序员用起来舒适的键盘推荐? 
  surface pro3 键盘盖驱动丢失 如何解决? 
  为什么很多人用笔记本都要外接个键盘? 
  如何评价 8 月 26 日李楠举办的怒喵科技首场发布会?有什么亮点和槽点? 

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





© 2024-11-24 - tinynew.org. All Rights Reserved.
© 2024-11-24 - tinynew.org. 保留所有权利