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




  

相关话题

  2020 年 618 买机械键盘有哪些建议和推荐? 
  在图书馆里哒哒哒哒敲键盘跟打机关枪一样的人,一点没有考虑身边人的感受吗,吵死了,是不是我太敏感了? 
  欧盟新规想让 iPhone 用上 USB-C,这会促使苹果为 iPhone 换上 USB-C 接口吗? 
  为什么键盘上的一排排键钮上下是不对齐的? 
  USB芯片到底完成了哪些工作? 
  为什么使用电脑给手机充电,中间接一个 USB hub 之后会更快? 
  为什么机械键盘没有无线的? 
  机械键盘是大众用户的普遍需求吗? 
  家庭一般买一块3000+的机械键盘过分吗? 
  网线接口为什么是 RJ45 规格,而不能做成 USB 型? 

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





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