ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

QMK 固件中的 AnomalyKB a65i 键盘支持指南:从刷机、进入 Bootloader 到配列定制

QMK 固件中的 AnomalyKB a65i 键盘支持指南:从刷机、进入 Bootloader 到配列定制 QMK 固件中的 AnomalyKB a65i 键盘支持指南从刷机、进入 Bootloader 到配列定制【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware本指南聚焦 QMK Firmware 仓库中对 AnomalyKB a65i一款由 Lfgberg 设计 PCB 的 65% 布局键盘的官方支持。文中将以 keyboards/anomalykb/a65i/readme.md 为核心骨架结合同目录下的 keyboard.json 与四套官方 keymap 源码完整讲解该键盘的硬件配置、两种进入 Bootloader 的方式、官方编译命令以及 ANSI / ISO / 分裂 Backspace 等配列的编译与自定义方法帮助你完成从拿到 PCB 到刷入自定义固件的全流程。键盘概况与硬件身份a65i 是 AnomalyKB 推出的一款 65% 布局键盘 PCB由 Lfgberg 设计并作为 QMK 仓库中该键盘的 Maintainer维护者。在仓库的键盘元数据中它的官方身份信息定义在 keyboards/anomalykb/a65i/keyboard.json字段值说明keyboard_nameA65IQMK 编译系统中使用的键盘名manufacturerAnomalyKB制造商 / 品牌maintainerLfgberg仓库维护者usb.vid0x4C47USB Vendor IDusb.pid0x0004USB Product IDusb.device_version0.0.1设备版本号主控芯片为atmega32u4ATmega32U4AVR 架构Bootloader 为atmel-dfu这意味着它遵循 QMK 对经典 AVR 键盘的常见刷写流程。矩阵定义为 5 行 × 16 列matrix_pins中 cols 列出 16 个引脚、rows 列出 5 个引脚二极管方向为COL2ROW详情见 keyboard.json。进入 Bootloader 的两种方式readme 中明确给出了 a65i 进入 Bootloader 模式DFU 模式的两种途径使用 MCU 附近的复位Reset按钮按下 PCB 上主控芯片旁边的复位按钮即可直接进入 Bootloader。Bootmagic 快捷方式在插入 USB 的同时按住 ESC 键通过 Bootmagic 触发进入 Bootloader。第二种方式尤其重要——它意味着即使 PCB 上没有独立复位按钮或键盘已装入外壳不便触达按钮时你依然可以仅凭按键进入刷写模式。从仓库实现看该功能通过 keyboard.json 的features.bootmagic启用。QMK 当前的 Bootmagic 功能专注于「仅处理跳转进 Bootloader」非常适合没有物理复位按钮的板子官方说明见 docs/features/bootmagic.md。触发方式是插入键盘时按住该键不松手即可默认按键位置即多数键盘的 ESC 位。需要注意的是文档同时给出警告使用 Bootmagic总会重置 EEPROM因此通过该方式进入刷写模式会丢失已保存的设置如层状态、背光亮度等自定义配置见 docs/features/bootmagic.md。编译与刷写在完成 QMK 构建环境搭建后编译 a65i 默认固件的命令如下make anomalykb/a65i:default这条命令会编译defaultkeymap 并产出可直接刷入的固件。如果环境尚未搭建可以参考仓库中的构建环境设置与 Make 使用指南docs/newbs_building_firmware.md、docs/getting_started_make_guide.md对完全的新手建议从 docs/newbs.md 开始。由于键盘使用atmel-dfuBootloader刷写时通常会先将键盘置于 DFU 模式上述两种方式任选其一再用 QMK 工具链完成烧录具体刷写方法可参考 docs/flashing.md。编译后生成的固件文件名遵循anomalykb_a65i_default的命名习惯。官方配列与 keymap 文件结构a65i 在仓库中提供了四种官方配列layout全部定义在 keyboard.json 的layout_aliases中并映射到 QMK 标准的 65% 布局宏别名对应布局宏配列说明LAYOUT_ansiLAYOUT_65_ansi_blockerANSI 配列含右上方 blocker 分隔LAYOUT_ansi_splitbsLAYOUT_65_ansi_blocker_split_bsANSI 配列 分裂 BackspaceLAYOUT_isoLAYOUT_65_iso_blockerISO 配列含右上方 blocker 分隔LAYOUT_iso_splitbsLAYOUT_65_iso_blocker_split_bsISO 配列 分裂 Backspace此外还定义了一个LAYOUT_all完整矩阵布局16 列全展开见 keyboard.json用于需要覆盖所有矩阵键位的场景。LAYOUT_all中可以看到诸如 2.25U 左 Shift、6.25U 空格、右侧 1.25U 高的竖向按键等尺寸定义与下方默认 keymap 的 ASCII 布局图完全对应。对应的官方 keymap 目录结构为keyboards/anomalykb/a65i/keymaps/ ├── default/ # ANSI 配列默认层 Fn 层 ├── ansi_splitbs/ # ANSI 分裂 Backspace ├── iso/ # ISO 配列 └── iso_splitbs/ # ISO 分裂 Backspace各 keymap 的布局图可对照各目录下的keymap.c内 ASCII 注释查看。默认 keymap 解析ANSI 双层布局defaultkeymap 位于 keyboards/anomalykb/a65i/keymaps/default/keymap.c使用LAYOUT_65_ansi_blocker宏定义了两层Layer 0 / Layer 1布局。Layer 0默认层是一个标准的 65% ANSI 布局,----------------------------------------------------------------. |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| |Backsp |Home| |----------------------------------------------------------------| |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |PgUp| |----------------------------------------------------------------| |Caps | A| S| D| F| G| H| J| K| L| ;| |Return |PgDn| |----------------------------------------------------------------| |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|Del | |----------------------------------------------------------------| |Ctrl|Win |Alt | Space |Alt| FN|Ctrl|Lef|Dow|Rig | ----------------------------------------------------------------对应的 C 代码为节选 default/keymap.c[0] LAYOUT_65_ansi_blocker( KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PSCR, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),Layer 1Fn 层由右下角的MO(1)临时层触发按住在 Layer 0 中标为FN的按键即可临时切换到本层见 default/keymap.c[1] LAYOUT_65_ansi_blocker( QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),要点解析QK_BOOT即旧的RESET键位放在 Layer 1 的左上角ESC 位置在默认层按FN Esc即可触发 Bootloader 跳转——这实际上提供了第三种软进入刷写模式的方式无需触碰物理按钮或重新插拔 USB。MO(1)是临时层切换键按住时进入 Layer 1松开自动回到默认层。KC_TRNSTransparent表示该键位「透明」沿用更低层这里是 Layer 0的按键定义因此 Layer 1 中未重新定义的按键行为与默认层一致。数字行在 Layer 1 中映射为KC_F1~KC_F12即FN 1到FN 可快捷触发功能键。分裂 Backspace 与 ISO 配列变体仓库还提供了三种配列变体方便不同键帽套装与使用习惯的用户直接编译使用。ANSI 分裂 Backspaceansi_splitbs位于 keyboards/anomalykb/a65i/keymaps/ansi_splitbs/keymap.c使用LAYOUT_65_ansi_blocker_split_bs宏。与默认 ANSI 配列的核心区别在第一行原本 2U 的 Backspace 被拆成「~反引号 Backspace」两个键同时右上角仍保留 Home 键Layer 1 中对应KC_F1~KC_F12的布局不变见其 keymap.c[0] LAYOUT_65_ansi_blocker_split_bs( KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PSCR, ...注意该层第一行的键位数量比默认配列多一个多出KC_GRV因此两端与默认层不同键盘顶部实际键位总数更多需要在LAYOUT_65_ansi_blocker_split_bs对应的布局定义中体现。ISO 配列iso位于 keyboards/anomalykb/a65i/keymaps/iso/keymap.c使用LAYOUT_65_iso_blocker宏。与 ANSI 相比它的差异集中在回车区附近Enter 为倒 L 形 ISO 回车并在其左侧补齐KC_NUHS非美式#~键同时KC_BSLS反斜杠移到左 Shift 右侧见 iso/keymap.c[0] LAYOUT_65_iso_blocker( KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PSCR, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGUP, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN, KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),ISO 分裂 Backspaceiso_splitbs位于 keyboards/anomalykb/a65i/keymaps/iso_splitbs/keymap.c使用LAYOUT_65_iso_blocker_split_bs宏同时具备 ISO 回车区与分裂 Backspace~ Backspace两个特征见 iso_splitbs/keymap.c。四套 keymap 的 Layer 1 结构一致左上角均为QK_BOOT进入 Bootloader、数字行均为 F1~F12其余键位全部KC_TRNS透明保证 Fn 层行为在不同配列间保持一致。硬件特征与功能配置除配列外keyboard.json 中还定义了该键盘启用的一组 QMK 功能features: { bootmagic: true, console: true, extrakey: true, mousekey: true, nkro: true }, qmk: { locking: { enabled: true, resync: true } }逐项说明配置项含义bootmagic启用 Bootmagic插入 USB 时按住 ESC 进入 Bootloaderconsole启用调试控制台输出便于通过终端观察调试信息extrakey启用媒体键 / 系统控制键音量、播放等mousekey启用鼠标键功能用键盘模拟鼠标指针与按键nkro启用 N 键无冲突NKRO输入locking启用锁定键Caps Lock / Num Lock / Scroll Lock状态同步resync表示同步重同步行为如何定制自己的 keymap你可以基于官方 keymap 快速创建自己的配列基本流程如下复制一份官方 keymap将keymaps/default/目录复制为keymaps/yourname/例如keymaps/mine/然后编辑其中的keymap.c。修改键位映射在keymaps/yourname/keymap.c中按需修改 Layer 0 与 Layer 1 的键位。注意每个键位的数量与顺序必须严格匹配所选布局宏的参数个数如LAYOUT_65_ansi_blocker有 67 个参数LAYOUT_65_ansi_blocker_split_bs有 68 个参数错位会导致编译错误或键位错乱。加入更多层可继续追加[2]、[3]等更高层配合MO(x)、LT(x, kc)、TG(x)等层切换键码实现更复杂的功能更多可用的量子键码可参考 docs/quantum_keycodes.md 与 docs/keycodes.md。编译验证执行make anomalykb/a65i:yourname进行编译无错误后即可刷入键盘。刷写固件先进入 Bootloader复位按钮、插电按住 ESC或在默认层按FN Esc再执行刷写操作详见 docs/flashing.md。若希望为 a65i 添加新布局宏例如更特殊的配列可参考LAYOUT_all的定义方式在 keyboard.json 的layouts段中新增条目该键盘已采用 QMK 的 contenteditable="false">【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表