2024年4月27日星期六

键盘输入延迟

前文1前文2

大体来说,键盘输入延迟主要来源有 3:

USB polling rate。对于 USB Full Speed (FS) 来说,一帧单位是 1ms,最小延迟是逐帧发送,也就是 1000Hz。而对于 USB High Speed (HS) 来说,一帧还可以再分为 8 个微帧,也就是说,理论上限是 8000Hz。目前键盘上用的 MCU 大部分还是只支持 FS 的,所以上限就是 1000Hz 了。最简单的办法就是在设备属性里面看是 12Mb/s 还是 480Mb/s (HS)。

QMK 支持的 MCU 其实并不算多:列表。其中对于 HS 支持比较好的是 NXP 系列。无外乎 EVGA Z15 用的也是 NXP 的 LPC5516,虽然这个特定型号并不在 QMK 的支持列表里面。

另外一个自己 DIY 键盘主控的博主用的也是基于 NXP 的 Teensy 开发版。

国内做各种 MCU 的厂商其实很多,价格也不贵,但是软件生态始终比较恶劣,希望以后能见到更多支持 HS 甚至 USB 3 的 MCU。USB 3 就可以不用走 polling 而是中断了,理论上来说延迟可以更低,但是和 2.4G 的干扰也是需要考虑的。

QMK 用的是 USB_POLLING_INTERVAL_MS 这个参数,虽然文档说默认参数是 10,实际上代码里面除了 atsam 以外默认都是 1,不用改。

Debounce 延迟。机械开关轴由于金属弹片的振动,需要一段时间的稳定期,稳定了以后才会确认触发或者关闭,这段时间就叫做 debounce time。而 Cherry 给出来的建议是 5ms。在实践中,Cherry 自家的轴往往可以做到 1ms 以下,而其他厂的轴浮动就比较大了,我见过最糟糕的是 20ms 以上。所以 Cherry 轴你可以说它轴心稳定性差、模具粗糙、润滑差等,但唯独弹片质量一直是没得说,而且非常耐久,不像有些轴弹片镀层磨损很快。Cherry 这个优势对于其他类型的机械开关也是如此,我的鼠标基本上都换了 Cherry DG4 微动,目前还没有一个双击或者拖动中断的。而欧姆龙基本上高强度使用半年到两年是必定双击的。

这段 debounce time 对于机械开关轴是没有办法省略的,所以有不同的算法减少延迟,比如 QMK 里面的 asym_eager_defer_pk 设置就是按下的时候直接触发,之后稳定期不响应,弹起的时候正常等待稳定期。这个设定对于触发需要低延迟但是关闭的时候不需要就很合适。如果是关闭也需要低延迟的话可以使用 sym_eager_pk

矩阵扫描延迟。大多数键盘由于主控的 IO 接口数量有限,是通过横竖矩阵扫描的方式获取单个按键的状态,这种方式需要每个键用一个二极管来防止 ghosting。稚晖君的翰文键盘是另外一个思路,不使用纵向扫描,而是每行按键用一个移位寄存器去做序列化,然后 MCU 再做反序列化。

影响矩阵扫描的因素很多,比如 MCU 自身的频率、固件的定时器/轮询精度和优化程度,包括外部元件也会有影响。比如 Keychron 这点其实做得不错:

/* Increase I2C speed to 1000 KHz */
#define I2C1_TIMINGR_PRESC 0U
#define I2C1_TIMINGR_SCLDEL 3U
#define I2C1_TIMINGR_SDADEL 0U
#define I2C1_TIMINGR_SCLH 15U
#define I2C1_TIMINGR_SCLL 51U

另外还有一些选项也许会有一些影响,比如 GPIO_INPUT_PIN_DELAY,前面自己 DIY 的老哥就很激进地设置为 0 了。QMK 默认会等待一段时间:

#ifndef GPIO_INPUT_PIN_DELAY
#    define GPIO_INPUT_PIN_DELAY (CPU_CLOCK / 1000000L / 4)
#endif

这个时间其实基本可以忽略

2024年4月17日星期三

一张名为后现代的二向箔

前文

二向箔的打法是自身主动降维,而对方毫无防备的情况下被降维打击只有灭亡一条路。

而如今,这张名为后现代的二向箔正一步一步吞噬着人与人的空间,而主席台上的人浑然不知。

不光是打拳或是动保,而是借着一切可能的机会创造对立、放大对立,人的思维逐渐二极化的同时,在网络的自我意识却如同 AI 一般,升到了不知道多少维,每个维度都能找到党同伐异的空间。人不再是一个个的群体,而是高维空间的漫天星云。

而这一切伴随着巨型城市化进程的嘎然而止,乡镇的退化却加速进行,我已经看不到任何扭转的机会。以前觉得战争是唯一能消化过剩产能,并且逆转后现代的方式,现在看起来,能抵抗拖延的时间点已经错过了。

不过没关系的,都一样。