联想拯救者R720 键盘矩阵逆向
序
朋友托我帮他的R720笔记本改装成KVM.于是便有了此文.
键盘介绍
主流键盘基本上都是矩阵键盘.这种方式比较节省IO.这块R720也不例外.
R720的键盘一共有96个键,用矩阵键盘的方式,理论上需要(6+16=22)个IO.(其实还是挺多的)
为了避免鬼键,实际的接线比理想情况下复杂.
而且相较于很多DIY机械键盘的直来直去线路:
R720这块键盘的内部Wiring就显得很乱了:
刚测出结果的时候,总感觉自己一定是弄错了什么地方.直到后来搜到了一款名叫Framework Laptop的笔记本,有着类似的KeyMap才放下心来.
KeyMap测绘
搜到一篇教人把笔记本改装为KVM的文章,文章里面提到了矩阵键盘驱动控制模块Monkey.
我一看这不和ATMEGA32U4差不多吗,应该是同一个系列的产品,淘宝上这东西卖50.这不是要了我的命吗.
自从去年单片机涨价后,Atmel的产品到现在也没恢复过去的价格,觉得自己现在要是买了就是纯纯大冤种.
况且完全可以自己做一个类似的东西,当时手上有这么多IO的板子就一个Raspberry Pi Pico,而QMK也支持了Pico,于是先借助Pico对KeyMap进行测绘.
得到如下结果
你问我怎么知道Row Pin和Col Pin的,这不是巧了吗,Google一下找到了同模具笔记本的原理图(网站).
顺便还知道了触摸板引脚定义,后面直接开启QMK的PS/2鼠标支持顺便把触摸板一起驱动了.
![32P-0.8mm-FPC](https://github.com/chaosgoo/blog_pic/blob/master/oss_backup/blog_pic/r720hacking/KB_FPC_Pin_Define.jpg?raw=true
Schematic
得到Key Map后,就可以开始画板子的工作了.
迫于当时无法使用Pico编译出支持PS/2 Mouse的固件,所以把主控换成了常见的ATMEGA32U4.
换主控后,IO开始紧缺了,不过没关系.可以使用拓展IO的芯片来应付这种情况.
看了一眼QMK仓库里面的方案,大部分都是使用的输出IO拓展来解决问题.
非常不巧的是,这块键盘的扫描方向和常规键盘相反,所以不出意外的话我就要出意外了.
于是购入74HC595对输出IO进行拓展并完美的踩了坑.重新检查才意识到我得使用74HC165拓展输入IO才行.
拖拉好久并且又踩到了PS/2 Mouse必须使用指定的IO驱动等好几个坑,最终绘制出下面使用74HC165原理图的方案(沉痛浪费很多次JLC免费打板机会.)
QMK Pin Map
参考测绘出的Key Map,再借助网页工具得到最终QMK固件所需的KeyMap
为了让多媒体键工作正常,于是设置了两层Key Map.
1 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
实物
遗憾
背光的电压是5V,但是我没有适配.我已经过了那个喜欢背光的年纪了.
More
笔记本主板的那个叫啥BoardView也下载到了,再对着这玩意人肉Convert(测量,然后手动绘制)一下就得到了DWG图.
知道了精确的开孔,再画板子就方便固定了
![Draw Outline](https://github.com/chaosgoo/blog_pic/blob/master/oss_backup/blog_pic/r720hacking/outline_drawing.jpg?raw=true
参考资料
老旧笔记本改造成便携KVM
Framework Laptop Key Matrix
QMK Firmware
Laptop Bios & Schematics