news 2026/9/16 19:49:19

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 ID
usb.pid0x0004USB Product ID
usb.device_version0.0.1设备版本号

主控芯片为atmega32u4(ATmega32U4,AVR 架构),Bootloader 为atmel-dfu,这意味着它遵循 QMK 对经典 AVR 键盘的常见刷写流程。矩阵定义为 5 行 × 16 列(matrix_pins中 cols 列出 16 个引脚、rows 列出 5 个引脚),二极管方向为COL2ROW,详情见 keyboard.json。

进入 Bootloader 的两种方式

readme 中明确给出了 a65i 进入 Bootloader 模式(DFU 模式)的两种途径:

  1. 使用 MCU 附近的复位(Reset)按钮:按下 PCB 上主控芯片旁边的复位按钮,即可直接进入 Bootloader。
  2. 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 配列 + 分裂 Backspace
LAYOUT_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 1(Fn 层)由右下角的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_TRNS(Transparent)表示该键位「透明」,沿用更低层(这里是 Layer 0)的按键定义,因此 Layer 1 中未重新定义的按键行为与默认层一致。
  • 数字行在 Layer 1 中映射为KC_F1~KC_F12,即FN + 1FN + =可快捷触发功能键。

分裂 Backspace 与 ISO 配列变体

仓库还提供了三种配列变体,方便不同键帽套装与使用习惯的用户直接编译使用。

ANSI + 分裂 Backspace(ansi_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 + 分裂 Backspace(iso_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 进入 Bootloader)
console启用调试控制台输出,便于通过终端观察调试信息
extrakey启用媒体键 / 系统控制键(音量、播放等)
mousekey启用鼠标键功能(用键盘模拟鼠标指针与按键)
nkro启用 N 键无冲突(NKRO)输入
locking启用锁定键(Caps Lock / Num Lock / Scroll Lock)状态同步(resync表示同步重同步行为)

如何定制自己的 keymap

你可以基于官方 keymap 快速创建自己的配列,基本流程如下:

  1. 复制一份官方 keymap:将keymaps/default/目录复制为keymaps/<yourname>/(例如keymaps/mine/),然后编辑其中的keymap.c
  2. 修改键位映射:在keymaps/<yourname>/keymap.c中按需修改 Layer 0 与 Layer 1 的键位。注意每个键位的数量与顺序必须严格匹配所选布局宏的参数个数(如LAYOUT_65_ansi_blocker有 67 个参数,LAYOUT_65_ansi_blocker_split_bs有 68 个),参数错位会导致编译错误或键位错乱。
  3. 加入更多层:可继续追加[2][3]等更高层,配合MO(x)LT(x, kc)TG(x)等层切换键码实现更复杂的功能;更多可用的量子键码可参考 docs/quantum_keycodes.md 与 docs/keycodes.md。
  4. 编译验证:执行make anomalykb/a65i:<yourname>进行编译,无错误后即可刷入键盘。
  5. 刷写固件:先进入 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 19:48:35

MIC33153+R7薄膜电容构建工业级电源稳定性闭环

1. 项目概述&#xff1a;这不是一个“调参实验”&#xff0c;而是一次面向工业级电源管理的系统性加固你手头有一块正在跑关键任务的控制板&#xff0c;可能是PLC扩展模块、边缘网关的主控单元&#xff0c;也可能是医疗设备里的信号调理子系统——它不追求炫酷的新功能&#xf…

作者头像 李华
网站建设 2026/9/16 19:47:34

从工程视角拆解 Java 缺陷系统中的状态机与事务设计

简介&#xff1a;一份面向Java开发者的缺陷检查系统源码&#xff0c;聚焦静态代码分析、语法树遍历与规则引擎设计&#xff0c;适合希望掌握代码质量检测原理并动手实践的中级开发者。压缩包共73个文件&#xff0c;以53个Java源码为主&#xff0c;辅以9个XML配置、前端样式与脚…

作者头像 李华
网站建设 2026/9/16 19:46:30

YOLOv8环境配置全指南:Win10安装CUDA 11.6与cuDNN实操

刚接触YOLOv8的时候&#xff0c;大部分人上来就pip install ultralytics&#xff0c;结果一跑就报各种 CUDA 相关的错&#xff0c;不是torch.cuda.is_available()返回 False&#xff0c;就是训练的时候直接提示找不到 GPU。问题出在哪&#xff1f;十有八九是底层环境没配对。我…

作者头像 李华
网站建设 2026/9/16 19:44:28

网盘直链下载助手快速上手指南

网盘直链下载助手快速上手指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅雷云盘 / 夸克网盘 / UC网…

作者头像 李华