abcbuzhiming 发表于 2017-3-6 14:38

88d25a3221430fa 发表于 2017-3-6 14:50

aithinkso 发表于 2017-3-6 16:05

游戏键鼠写着可以达到1000Hz

zatsuza 发表于 2017-3-6 16:11

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

zmw_831110 发表于 2017-3-7 08:00

一般8ms消抖,没有消抖,按下一次会被识别成好几次

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

Geminize 发表于 2017-3-7 08:06

abcbuzhiming 发表于 2017-3-7 09:13

abcbuzhiming 发表于 2017-3-7 09:14

lotsbiss 发表于 2017-3-7 10:17

本帖最后由 lotsbiss 于 2017-3-7 10:20 编辑

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

zmw_831110 发表于 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.

abcbuzhiming 发表于 2017-3-7 16:17

zatsuza 发表于 2017-3-7 16:49

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

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

lwa190212 发表于 2017-3-7 16:55

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

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

abcbuzhiming 发表于 2017-3-7 16:58

lwa190212 发表于 2017-3-7 17:02

本帖最后由 lwa190212 于 2017-3-7 17:04 编辑

abcbuzhiming 发表于 2017-3-7 16:58
那就是我理解错了,也就是说纯说按键(不包括鼠标移动)的话,其实达不到每秒1000次,也就每秒100次左右 ...
单个按键应该是这样,不过不是究极生命体大概做不到10ms的手指敲击间隔...
按不同按键就行了吧,实在不行你可以试试连上10把键盘?

real_zyf 发表于 2017-3-7 18:11

标准的话应该是每秒 125hz*6 = 750个键,然而现在各种1000hz和全键无冲~

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

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

Gato_shin 发表于 2017-3-7 20:54

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

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

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

abcbuzhiming 发表于 2017-3-7 23:10

henvelleng 发表于 2017-3-7 23:34

这是指usb协议里中断型endpoint的查询频率。

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

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

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

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

henvelleng 发表于 2017-3-7 23:43

关于轮询和中断,简单科普下
打个比方,你知道今天有快递来
如果是轮询方式,你今天一整天就站在门口前台,眼望远方,每隔0.x秒就目测一下远方是否有快递员走来
如果是中断方式,你直接干自己的事,直到快递或前台mm打电话通知你

henvelleng 发表于 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设备的接口了

longooyue 发表于 2017-3-8 10:31

复习啦一下单片机的知识

桑纳法比驰 发表于 2017-3-8 10:52

橡皮鸭在进行hid攻击时的输入速度没有理由不是极限速度
页: [1]
查看完整版本: USB键盘和鼠标按键的输入速度极限是多少?