QMK 固件中的 Acai 键盘支持:Coffee Break Keyboards 10×4 正交线性键盘的构建、刷写与自定义指南
【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware
Acai 是 Coffee Break Keyboards 出品的一款 10×4 正交线性(ortholinear)键盘,PCB 由 Snipeye 设计,外壳由 Rain 与 Obabo 设计。本文基于 QMK Firmware 仓库中 Acai 的官方支持文档与配套源码,系统讲解如何搭建构建环境、编译并刷写固件、进入 Bootloader 的三种方式,并结合keyboard.json与默认键位源码,深入剖析其硬件配置(RP2040 主控、WS2812 RGB 灯效)与键位自定义方法,帮助你把这把 40 键直列键盘打造成完全属于自己的输入工具。
一、Acai 键盘与仓库中的支持文件
在 QMK 仓库中,Acai 的支持文件位于keyboards/cbkbd/acai/目录,包含三个组成部分:
| 文件 | 作用 |
|---|---|
| readme.md | 官方说明文档:硬件信息、编译与刷写命令、Bootloader 进入方式 |
| keyboard.json | 数据驱动(data-driven)配置:主控型号、引脚矩阵、RGB 灯效、USB 描述符与布局定义 |
| keymaps/default/keymap.c | 默认键位:QWERTY 主层 + 数字层 + RGB 控制层 |
Acai 同样归属在keyboards/cbkbd/厂商目录下,与同厂商的 coffeevan(同样为直列布局)一并维护。
二、硬件规格速览:从 keyboard.json 读出的真实配置
现代 QMK 键盘普遍采用数据驱动配置,Acai 的全部硬件定义都集中在 keyboard.json 中。阅读该文件可以还原出这把键盘的核心参数:
2.1 主控与矩阵
"processor": "RP2040", "bootloader": "rp2040", "diode_direction": "COL2ROW", "matrix_pins": { "cols": ["GP25", "GP24", "GP23", "GP20", "GP18", "GP7", "GP6", "GP5", "GP4", "GP3"], "rows": ["GP27", "GP28", "GP19", "GP26"] }- 主控:Raspberry Pi RP2040(双核 ARM Cortex-M0+),这意味着 Acai 属于现代 ARM 平台键盘,QMK 针对 RP2040 提供完善的 UF2 刷写支持。
- 矩阵规模:10 列 × 4 行,共 40 个按键位,与"10×4 ortholinear"的定位完全吻合。
- 二极管方向:
COL2ROW,即二极管阴极朝向列线,这是最常见的接线约定。
2.2 RGB 矩阵灯效
"features": { "rgb_matrix": true, ... }, "rgb_matrix": { "driver": "ws2812", "animations": { "alphas_mods": true, "breathing": true, ... }, "max_brightness": 125, "sleep": true }, "ws2812": { "driver": "vendor", "pin": "GP29" }- 灯珠驱动:WS2812 可寻址 RGB LED,数据引脚为 GP29,驱动方式为 RP2040 的 PIO
vendor驱动(即 drivers/led/ws2812 中针对 RP2040 的实现)。 - 灯效丰富:固件一次性启用了
alphas_mods、breathing、cycle_all、rainbow_moving_chevron、typing_heatmap、solid_reactive_wide等数十种 RGB 矩阵动画(完整列表见 keyboard.json 的animations字段),开箱即用。 - 亮度上限:
max_brightness为 125(0–255 范围),兼顾观感与功耗;sleep开启后,键盘空闲一段时间会自动关闭 RGB 以省电。
2.3 USB 描述符与动态键位
"usb": { "vid": "0x4342", "pid": "0x1075", "device_version": "0.0.1" }, "dynamic_keymap": { "layer_count": 6 }- VID/PID:厂商 ID
0x4342(对应字符串 "CB",Coffee Break 的缩写),产品 ID0x1075,固件版本 0.0.1。这些描述符在系统层面标识设备。 - 动态键位:
dynamic_keymap支持 6 层键位,配合 QMK 的 VIA/动态键位功能,可以在不重新编译固件的情况下于运行时改键。
三、搭建构建环境与编译固件
3.1 构建环境准备
Acai 的 readme 明确要求:编译前需先搭建好 QMK 构建环境。官方流程位于仓库 docs/newbs_building_firmware_workflow.md(新手引导总览见 docs/newbs.md),核心步骤为:
- 安装 QMK CLI 与其依赖(AVR、ARM 交叉编译工具链等);
- 通过
qmk setup拉取并配置 QMK Firmware 仓库; - 确认
qmk compile等命令可用。
对于刚接触 QMK 的用户,官方建议完整阅读 Complete Newbs Guide 之后再动手编译。
3.2 编译命令
环境就绪后,编译 Acai 的默认键位:
make cbkbd/acai:default这条命令的含义是:目标键盘为cbkbd/acai,键位为default。命令执行后,会在构建目录中生成对应的.uf2固件文件(RP2040 平台默认输出 UF2 格式),可进一步了解编译目标规则的细节见 docs/getting_started_make_guide.md。
3.3 自定义键位的编译方式
如果你建立了自己的键位目录(例如keymaps/mine/),只需替换键位名即可:
make cbkbd/acai:mineQMK 的 Makefile 会自动定位到keyboards/cbkbd/acai/keymaps/mine/keymap.c进行编译(键盘目录定位逻辑见 builddefs/locate_keymap.mk)。
四、刷写固件到 Acai
4.1 一条命令完成刷写
make cbkbd/acai:default:flash在make目标后追加:flash,QMK 会先编译、再自动进入刷写流程。对于 RP2040 平台,刷写工具会等待键盘进入 Bootloader(UF2 模式),随后写入固件。
4.2 RP2040 的刷写前提
由于 Acai 主控为 RP2040(bootloader: rp2040),其刷写机制与其他 AVR 键盘不同:需要键盘以 UF2 引导模式挂载为 USB 存储设备,把.uf2文件复制进去即完成刷写(相关流程参见 docs/flashing.md)。这一点决定了"进入 Bootloader"是刷写流程的必经环节——下一节将详述进入方式的细节。
五、进入 Bootloader 的三种方式
Acai 的 readme 给出了三种进入 Bootloader 的方法,这也是所有 QMK 键盘的通用入口范式:
5.1 Bootmagic 复位(推荐首选)
按住矩阵 (0,0) 位置的按键(通常是左上角键或 Esc),再插入 USB 线。
Bootmagic 在 keyboard.json 中通过"bootmagic": true开启(对应功能文档见 docs/features/feature_bootmagic.md 所在的功能特性目录)。其原理是:固件启动时检测特定按键是否被按下,若 (0,0) 被按住,则直接以键位码QK_BOOT的动作进入引导加载程序。注意:此功能依赖上电时序,因此要求"先按住键、再插线"。
对于 Acai 的默认键位(见下节),(0,0) 对应的是KC_Q,所以上电时按住左上角的 Q 键即可进入 Bootloader。
5.2 物理复位按键
短按 PCB 背面的复位按钮;部分版本可能以裸露的焊盘代替,需要用金属镊子等短接。
这是最硬核、最可靠的方式——无论固件状态如何,物理复位总是有效。RP2040 芯片上通常带有 BOOT 按键或 RUN 引脚,按下后芯片直接进入 UF2 引导模式。
5.3 键位中的 QK_BOOT 按键
按一下布局中映射了
QK_BOOT的按键(如果可用)。
QK_BOOT是 QMK 内置的复位键码,按下后固件主动跳转到 Bootloader。在 Acai 的默认键位中,第 3 层(Layer 2)的右上角键就映射了QK_BOOT(详见 keymaps/default/keymap.c),因此无需拆机、无需重新插线即可随时刷写。
六、默认键位剖析
默认键位源码位于 keymaps/default/keymap.c,共定义了 3 层键位,充分利用了 40 键直列布局与层切换能力。
6.1 第 0 层:主层(QWERTY)
[0] = LAYOUT( KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENTER, LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, RSFT_T(KC_SLSH), KC_LCTL, KC_LGUI, KC_LALT, LT(1,KC_BSPC), KC_DEL, KC_ENT, LT(2,KC_SPACE), KC_RALT, KC_RGUI, KC_RCTL ),主层的关键设计点:
- 字母区:标准 QWERTY 指位,40 键布局把数字行与功能键全部下放到其他层。
- Mod-Tap 按键:
LSFT_T(KC_Z)(Z 兼左 Shift)、RSFT_T(KC_SLSH)(/兼右 Shift)——单击输入字母/符号,长按则作为 Shift 使用,是直列键盘节省键位的主流技巧。 - 层切换(Layer-Tap):
LT(1,KC_BSPC)表示该键单击为退格、按住进入第 1 层;LT(2,KC_SPACE)同理,空格兼作第 2 层开关。左右手各有一个层切换点,方便盲打时无需移动手指。 - 拇指区:删除键、回车键与空格键均由拇指负责,符合人体工学直列键盘的布局哲学。
6.2 第 1 层:数字层
[1] = LAYOUT( KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, /* ...其余均为 KC_TRNS */ ),第一行直接映射数字 1–0,其余位置全部使用KC_TRNS(透明)透传到主层。这样设计的好处是:数字层只覆盖一行,按下左拇指的LT(1,KC_BSPC)即可快速输入数字,且未定义的键仍保持主层行为。
6.3 第 2 层:RGB 控制与系统层
[2] = LAYOUT( RM_TOGG, RM_NEXT, KC_TRNS, /* ... */ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, /* ... */ ),- RGB 控制:
RM_TOGG开关 RGB 矩阵灯效,RM_NEXT切换下一种动画——配合 keyboard.json 中启用的数十种动画,可以快速体验不同灯效。 - 方向键:右侧
KC_LEFT / KC_DOWN / KC_UP / KC_RGHT提供完整方向键功能。 - 复位入口:右上角
QK_BOOT一键进入 Bootloader,正是上一节介绍的第三种进 Bootloader 方式。
6.4 层数上限与动态键位
keyboard.json 中dynamic_keymap.layer_count为 6,即硬件层面允许最多 6 层键位,而默认固件只使用了 3 层,预留了 3 层空间供自定义或通过动态键位工具在线添加。
七、进阶自定义建议
掌握了以上结构与源码后,你可以基于 keymaps/default/keymap.c 复制出自己的键位目录进行改造,常见方向包括:
- 调整层切换手感:把
LT(1,KC_BSPC)的触发时间通过TAPPING_TERM相关配置调优,或改为MO(1)纯按住切换。 - 扩展灯效:在
keyboard.json的rgb_matrix.animations中增删动画,再重新编译;也可在主层增加RGB_M_P等预设配色键码。 - 启用更多层:在第 4、5 层放置符号层、鼠标键层(
mousekey特性已在 features 中开启)或自定义宏。 - 编译并刷写:对
keymaps/mine/执行make cbkbd/acai:mine:flash,配合 Bootmagic(按住 Q 键插线)、物理复位键或第 2 层的QK_BOOT随时更新固件。
八、小结
Acai 是一把将 RP2040 性能与 40 键直列效率结合的键盘:仓库中的 readme.md 提供了清晰的构建、刷写与 Bootloader 指引,keyboard.json 完整定义了矩阵、RGB 与 USB 硬件参数,而 默认键位 则示范了 Mod-Tap、Layer-Tap 与三层协作的成熟布局范式。无论是开箱即用的默认体验,还是深入自定义的进阶玩法,从编译命令make cbkbd/acai:default出发,你都能在几分钟内让这把键盘跑起属于你自己的固件。
【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考