找回密码
 立即注册
搜索
查看: 3694|回复: 22

[硬件] USB键盘和鼠标按键的输入速度极限是多少?

[复制链接]
头像被屏蔽
     
发表于 2017-3-6 14:38 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽
发表于 2017-3-6 14:50 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2017-3-6 16:05 | 显示全部楼层
游戏键鼠写着可以达到1000Hz
回复

使用道具 举报

发表于 2017-3-6 16:11 来自手机 | 显示全部楼层
仅就键鼠所使用的hid协议而言,hid客户端通过中断模式获取设备的report,可以设定最小1000hz的间隔,这个间隔指的是usb控制器轮询设备所使用的频率,有些控制器可以稳定在1000,有些只能500。对客户端程序来说,中断端点是个触发模式,但实际上是控制器轮询设备(usb设备的数据传输总是由控制器发起),并在获取到有效数据后通知上层应用
回复

使用道具 举报

     
发表于 2017-3-7 08:00 来自手机 | 显示全部楼层
一般8ms消抖,没有消抖,按下一次会被识别成好几次

----发送自 STAGE1 App for Android.
回复

使用道具 举报

头像被屏蔽
     
发表于 2017-3-7 08:06 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽
     
 楼主| 发表于 2017-3-7 09:13 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽
     
 楼主| 发表于 2017-3-7 09:14 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2017-3-7 10:17 | 显示全部楼层
本帖最后由 lotsbiss 于 2017-3-7 10:20 编辑

hid协议,单个自定义设备传输上限是1000Hz×64字节,hid键盘一次最多6个普通按键数据
回复

使用道具 举报

     
发表于 2017-3-7 14:06 来自手机 | 显示全部楼层

编辑

本帖最后由 zmw_831110 于 2017-3-7 15:02 编辑
引用第6楼abcbuzhiming于2017-03-07 09:13发表的  :
引用:zmw_831110 发表于 2017-3-7 08:00一般8ms消抖,没有消抖,按下一次会......

手指按下不是单个边沿,而是存在抖动的(能看到很多毛刺),如果不消除,就可以检测到好多触发边沿,这样就没法用了,所以一般加8ms用于消抖,也就是检测到一个边沿后,延迟8ms再判断一次,如果为低(假设没按下默认为高),就认为是一次有效按下





----发送自 STAGE1 App for Android.
回复

使用道具 举报

头像被屏蔽
     
 楼主| 发表于 2017-3-7 16:17 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2017-3-7 16:49 | 显示全部楼层
abcbuzhiming 发表于 2017-3-7 16:17
那这样的话,楼上有提到的,某些电竞设备能每秒1000次是怎么做到的,不扫描毛刺了? ...

那是微动开关特有的抖动,是设备主控的管辖范围,1000hz指的是设备到控制器的汇报率,鼠标又不是只能点还能移的啊
回复

使用道具 举报

发表于 2017-3-7 16:55 | 显示全部楼层
abcbuzhiming 发表于 2017-3-7 16:17
那这样的话,楼上有提到的,某些电竞设备能每秒1000次是怎么做到的,不扫描毛刺了? ...

刷新率提高的主要用处是你按下后系统能更快得到你的输入吧
消抖动是针对一个按键消的吧,过了这段时间才算完成一个动作
所以应该是按下->消抖动->记录数据等待下一次usb传输
1000Hz就是降低最后那个步骤的耗时
回复

使用道具 举报

头像被屏蔽
     
 楼主| 发表于 2017-3-7 16:58 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2017-3-7 17:02 | 显示全部楼层
本帖最后由 lwa190212 于 2017-3-7 17:04 编辑
abcbuzhiming 发表于 2017-3-7 16:58
那就是我理解错了,也就是说纯说按键(不包括鼠标移动)的话,其实达不到每秒1000次,也就每秒100次左右 ...

单个按键应该是这样,不过不是究极生命体大概做不到10ms的手指敲击间隔...
按不同按键就行了吧,实在不行你可以试试连上10把键盘?

回复

使用道具 举报

     
发表于 2017-3-7 18:11 | 显示全部楼层
标准的话应该是每秒 125hz*6 = 750个键,然而现在各种1000hz和全键无冲~

现在的usb键盘是靠假装自己是n个键盘这样来做到全键无冲的于是你觉得输入极限是多少?

鼠标键盘本身内部的消抖算法导致的损失另计
回复

使用道具 举报

     
发表于 2017-3-7 20:54 | 显示全部楼层
real_zyf 发表于 2017-3-7 18:11
标准的话应该是每秒 125hz*6 = 750个键,然而现在各种1000hz和全键无冲~

现在的usb键盘是靠假装自己是n个 ...

然而假装自己是6*N这个玩法在mac上行不通,mac上要求组合键的全部按键来自同一个设备,于是这些键盘要么直接死了要么按不出组合键……
回复

使用道具 举报

头像被屏蔽
     
 楼主| 发表于 2017-3-7 23:10 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2017-3-7 23:34 | 显示全部楼层
这是指usb协议里中断型endpoint的查询频率。

可能你会觉得奇怪为什么会有这个频率存在,因为天杀的usb物理接口管脚里竟然没有外部中断线,很难想象吧?

因为没有外部中断来做触发信号,所以usb主机控制器不得不采用轮询的方式不停地查询usb从机也就是键鼠当前的状态,然后通过比较临近的两次数据来获知usb从机设备的状态是否发生变化(键鼠是否有输入操作),这个1000HZ就是轮询的频率。怎么样,是不是很原始很反人类?没办法。不过这个轮询是硬件完成的,usb主机控制器通过轮询+比较后,发现数据发生变化,就会自己产生一个内部中断,来触发驱动的中断控制函数,然后驱动再通过提交和获取URB来得到新的数据并发送给应用层

当然作为应用层而言,什么中断什么轮询都是不存在的,对应用层来说都一样

至于抖动,抖动在这个流程里应该是交给usb从机设备自行处理的
回复

使用道具 举报

     
发表于 2017-3-7 23:43 | 显示全部楼层
关于轮询和中断,简单科普下
打个比方,你知道今天有快递来
如果是轮询方式,你今天一整天就站在门口前台,眼望远方,每隔0.x秒就目测一下远方是否有快递员走来
如果是中断方式,你直接干自己的事,直到快递或前台mm打电话通知你
回复

使用道具 举报

     
发表于 2017-3-8 01:10 | 显示全部楼层
本帖最后由 henvelleng 于 2017-3-8 01:25 编辑

才发现LZ问的问题,这个1000HZ只是轮询频率,轮询过程中发现键鼠状态有变化,usb主控触发中断,此时驱动可以从这个endpoint里一次性读取全部数据,并不是只有一个键的数据
还有,文中说endpoint是寄存器,其实并不是,准确地说,endpoint是usb协议抽象出来的描述符,有4种类型,单向传输,一个usb设备可能不止一个endpoint。除了endpoint之外,还有usb interface、device、config等等都是抽象出来的描述符,用来描述usb从机设备模型的。就好像小孩子用通用的积木组件搭出各种各样的东西一样,这样就能统一所有各种五花八门的usb设备的接口了

回复

使用道具 举报

发表于 2017-3-8 10:31 | 显示全部楼层
复习啦一下单片机的知识
回复

使用道具 举报

发表于 2017-3-8 10:52 | 显示全部楼层
橡皮鸭在进行hid攻击时的输入速度没有理由不是极限速度
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2025-8-18 07:17 , Processed in 0.096311 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表