Key_Mou_Pad 板


LINE

代友po,原作者:https://github.com/ziteh 各位板友好,我是 ZiTe,好久不见 今天不是要分享 ErgoSNM 键盘,而是想介绍最近在测试的键盘韧体 RMK https://haobogu.github.io/rmk 受限於 PTT 大概不太适合写太多 code block 和篇幅问题,本篇就仅以 nRF52840 做一 个简单的分享。完整的教学还请移步 Blog https://blog.ziteh.dev/posts/rmk-fw-intro 在这个 Rust 满天飞的现在,键盘韧体当然也要有 Rust 的参与,RMK 是一个以 Rust 写 成的机械键盘韧体,架构在 Embassy 非同步嵌入式应用框架上。 对我来说 RMK 对比 QMK 有以下好处: - 原生支援 nRF MCU 和蓝牙 BLE - License 是宽松的 Apache2.0 和 MIT,而非具感染性的 GPL RMK 对比 ZMK 有以下好处: - 支援 Vial 即时编辑 Keymap 键位 - Rust 开发环境比 Zephyr 更容易建立 - Kconfig + Devicetree 有一定的复杂度 - 在我的测试中 RMK 的蓝牙比 ZMK 更稳定 --- 1. 建立开发环境 首先要安装 Rust 环境,这部分就和一般开发 Rust 时要做的事情一样。 对於 Windows 使用者来说就是下载并使用 rustup 这个工具安装,此外还要下载 Visual Studio 并安装「Desktop Development with C++」 请参考:https://rustup.rs 再来要添加编译目标,因为开发韧体算是交叉编译,因此要为 Rust 添加目标平台的编译 功能。这部分的命令会因你所使用的不同开发板和 MCU 而有所不同。 以 nRF52840(Cortex-M4 with FPU)来说的话请打开终端机执行: rustup target add thumbv7em-none-eabihf 然後要安装一些工具(rmkit、flip-link、cargo-make): cargo install rmkit flip-link cargo-make 最後还要安装文字编辑器,一般推荐使用 VS Code,就照一般的软体下载安装即可。VS Code 安装好後建议再安装一些扩充套件:Even Better TOML 和 rust-analyzer。 VS Code:https://code.visualstudio.com --- 2. 建立韧体专案 开啓终端机,移动到目标路径(这里示范爲 D 槽下的 rmk 资料夹),使用 rmktit 开啓 互动式专案建立: cd D:/rmk rmkit init 只要依序回答专案名称、键盘类型和目标 MCU 即可 完成後会建立专案资料夹,例如 D:/rmk/my-rmk-kb/。使用 VS Code 开啓此资料夹。 --- 3. 编辑 keyboard.toml 首先最重要的是 keyboard.toml 这个档案,它包含了大多数的键盘设定。接下来会分各 个部分大致简介,如果想知道详细说明的话请参考官方文件: https://haobogu.github.io/rmk/keyboard_configuration.html keybaord.toml 完整范例 https://i.imgur.com/88DuNiD.png [keyboard] 包含了基本资讯,比较重要的是: - product_name 是显示名称,也就是搜寻蓝牙时会出现的装置名。 - vendor_id 和 product_id 是 USB 的东西,你不知道这是什麽的话可以不用改。 - chip 是你要用的 MCU,这里是 nrf52840。 [matrix] 定义键矩阵扫描的 IO 脚,要注意的是这里的脚位名称要使用 Embassy 里的 Peripherals 名称,对 nRF52840来说 也就是 P1_05 这种。 RMK 预设使用 col2row 方向 [layout] 定义 Keymap 按键布局。rows 和 cols 的数量要和 matrix 的 IO 脚部分配合,layers 用来定义分层数量。 keymap 就是定义按键布局,可用的 KeyCode 请参考: https://docs.rs/rmk/latest/rmk/keycode/enum.KeyCode.html 另外还有一些特殊的修饰键,如 MO(1) 代表暂时切换到 layer 1。这些修饰键和 QMK 的 定义是相同的,可以参考: https://docs.qmk.fm/feature_layers [behavior] 定义一些不同的键盘行为。例如 One Shot、Combo 键等等。这部分属於比较进阶的功能 就先跳过。 [light] 定义指示灯的 IO,包含 capslock、numslock、scrolllock。 [storage] 定义储存设定,RMK 会将 Keymap 资料和 BLE 连线资讯储存在 Flash 中的特定位置。 预设情况下它是啓用的,并且会使用最後 2 个 sector 储存资料。 有些 Bootloader(例如 Adafruit nRF52 Bootloader)会和此预设位置冲突,这时就需 要修改这边的 start_addr 设定,例如将其设为 start_addr = 0x000A0000。 另外还有一个 clear_storage,如果将其设爲 true 那每次键盘开机都会清空这些资讯, 通常用於开发测试。 [ble] 设定无线蓝牙的相关功能。对我们来说就是将 enabled = true 啓用 BLE 就行了。 --- 4. 编辑 memory.x 这个是用来定义 MCU 的 RAM 和 Flash 布局。使用 nRF52840 的话,会牵扯到你使用的 SoftDevice 要修改韧体起始位置,也就是 FLASH : ORIGIN = ???。 使用 S140 v6.1.1 的话可以使用 0x00026000,如果是 7.3.0 的话可以用 0x0027000。 这里以 S140 v6.1.1 爲例: https://i.imgur.com/6tRQNGv.png 注意这里的 1K 是 1KiB 也就是 1024 bytes --- 5. 编辑 vial.json 再来是 vial.json 档案,要设定好才能使用 Vial 编辑 Keymap,这个是 Vial 要用的, 其格式请参考文件说明: https://get.vial.today/docs/porting-to-via.htmlhttps://blog.ziteh.dev/posts/diyqmkkeyboard-vial --- 6. 编译设定 这边只要再次确认 .carbo/config.toml 里的 build.target 是不是 thumbv7em-none-eabihf 即可。 --- 7. 编译 接下来就可以进行编译了,在 VS Code 开啓终端机(上方选单列 > Terminal > New Terminal)并执行: cargo build --release 如果成功的话会产生在 target/thumbv7em-none-eabihf/release/my-rmk-kb 编译完成的韧体没有副档名,但它其实是 ELF 档案。 但我们可能更喜欢 .uf2 和 .hex,所以要改用 cargo-make,执行: cargo make uf2 --release 成功後会在专案资料夹下产生 my-rmk-kb.uf2 和 my-rmk-kb.hex --- 8. 烧录 主要有两种烧录方式。 如果你的 MCU 有 UF2 Bootloader 的话,只要用 USB 将其接上电脑并进入 DFU 模式, 此时它会变成一个随身碟,再将刚刚编译完的 .uf2 档复制贴上进去即可。 进入 DFU 模式的方法不同的 Bootloader 都不同,但通常是快速按 RESET 按钮两次。 如果你的 MCU 没有 UF2 Bootloader 的话,要使用专门的烧录器如 J-Link 或 DAP Link 等,将 MCU 或开发板接上烧录工具,再使用烧录程式(如 nrfjprog、probe-rs、 OpenOCD)。 如果你喜欢 GUI 工具的话,可以用 Nordic 官方的 nRF Connect for Desktop,里面有 个 Programmer 可以烧录。 完成烧录後就可以用 USB 或蓝牙连接到电脑,它应该已经可以正常运作了 注意! nRF MCU 要使用蓝牙功能的话会需要 SoftDevice,以 nRF52840 来说的话要使用蓝牙通 常是选择 S140,然後 RMK 目前支援 v6.x 和 v7.x。 如果你的 nRF52840 已经有烧录好 UF2 Bootloader 的话,要查看其使用的 SoftDevice 版本。 方法爲进入 DFU 後,开啓其中的 INFO_UF2.TXT 档案,内部会标注版本如 SoftDevice: S140 version 6.1.1。 如果你的 nRF52840 是完全空的,那除了烧录 RMK 韧体外,你还要先为其烧录 SoftDevice。 先到 Nordic 官网下载对应的 SoftDevice,然後用烧录器将 .hex 档案(如 s140_nrf52_7.3.0_softdevice.hex)烧进 MCU 内。 https://i.imgur.com/EPTsdgz.png 以上图为例,我加入了两个档案: - SoftDevice:s140_nrf52_7.3.0_softdevice.hex - RMK 韧体:my-rmk-kb.hex 其中绿色的部分是我们的 RMK 韧体,可以确认其起始位置是 0x00027000,没有和 SoftDevice 重叠。而蓝色的区域就是 SoftDevice,我烧录的是 S140 v7.3.0。最下面的 橘色是 MBR 开机区域。 --- 我有建立一个范例 repo 可以参考,也有预编译的 .hex 和 .uf2 可以测试 https://github.com/siderakb/rmk-example 前阵子我还在处理 ErgoSNM v3 键盘,突然看到 RMK 且用起来很不错,所以未来我开发 键盘可能都会更倾向使用它取代 QMK 和 ZMK 尤其不知道爲什麽 ZMK 不管我用其它人编译好的还是自己编译,BLE 连线都很不稳定, 用得有点头痛 但是它目前最大的问题是缺乏对游标装置的支援,所以我的 ErgoSNM 还没办法使用它 至於 ErgoSNM 的後续进度的话,因爲我最近在准备换工作,比较忙,遥遥无期呀~ --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.160.57.174 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Key_Mou_Pad/M.1742696374.A.ADB.html
1F:推 a58524andy: cool 03/23 10:48
2F:推 observer0117: 推 03/23 15:28
3F:推 denny0411: 推,感谢分享 03/23 23:51
4F:推 twetto912: 赞 03/24 13:02
5F:推 Snake5566: ZMK 这个月更新支援模拟滑鼠了 03/24 18:52
6F:推 Richun: 推Rust 03/24 19:58
7F:推 ko00385331: 推 03/25 18:52
8F:推 holoyo: 推个 03/28 14:01







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP