QMK 固件中的 Corne (CRKBD) 分体键盘完全指南:构建刷写、Bootloader 与 RGB Matrix 进阶配置
【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware
Corne(CRKBD)是当前开源社区中极具代表性的 3×6 垂直错列分体键盘,单侧 3 行 6 列共 18 个按键,外加 3 枚拇指键,并支持扩展列与旋转编码器。本文以 QMK Firmware 仓库中 keyboards/crkbd/readme.md 为骨架,结合仓库内 rev1/rev4 的配置数据与crkbd.c、默认 keymap 等源码,系统讲解 Corne 的固件编译与刷写命令、Bootloader 进入方式,以及用 RGB Matrix 替代 RGB Light 的完整配置方案。读完本文,你将能独立完成 Corne 各版本固件的编译刷写,并掌握逐键 RGB 动画的精细调校。
Corne 在 QMK 仓库中的组织方式
在 QMK 仓库中,Corne 相关代码全部位于 keyboards/crkbd/ 目录,按版本与变体组织:
rev1/:v1–v3 PCB 的固件定义(keyboard.json),基于 Pro Micro(ATmega32U4)平台;rev4_0/与rev4_1/:v4 PCB,改用 RP2040 主控,并提供mini与standard两种子型号的布局数据;r2g/:全 SMD 贴装版本 CRKBD R2G 的独立支持目录;keymaps/default/:官方默认键位(keymap.c)与 config.h;crkbd.c:键盘级逻辑,主要是 OLED 显示的实现;- 顶层 info.json 声明了全系列公共属性。
顶层 info.json 中可以看到 Corne 的核心硬件事实:制造商(maintainer)为 foostan,USB VID 为0x4653,已启用bootmagic、extrakey、nkro、oled与rgb_matrix特性(rgblight默认关闭),并声明了LAYOUT_split_3x5_3、LAYOUT_split_3x6_3两种社区布局——前者即裁掉最外侧一列的 3×5 变体。layout_aliases中的LAYOUT指向LAYOUT_split_3x6_3,这也是默认 keymap 实际使用的布局宏名。
固件编译与刷写:v1–v3 与 v4 的命令差异
原文档给出的刷写命令按版本区分,直接决定了你要用的-kb目标名称。
v1–v3 版本(Pro Micro 主控):
qmk flash -kb crkbd/rev1 -km defaultv4 版本(RP2040 主控):
qmk flash -kb crkbd/rev4 -km default这两条命令都会使用 keymaps/default 作为键位方案编译固件并直接烧录。其中-kb crkbd/rev4实际会被解析到 rev4_0/rev4_1 的具体配置(仓库中以rev4_0/、rev4_1/目录分别存放其 info.json)。若使用传统 make 方式,命令等价写作make crkbd/rev1:default。
对比两份键盘配置,可以看到两代硬件在 QMK 侧的差异点:
| 配置项 | rev1(v1–v3) | rev4_0/rev4_1(v4) |
|---|---|---|
| 主控/开发板 | Pro Micro(development_board: "promicro") | RP2040 |
| Bootloader | 常规 AVR bootloader | rp2040,并启用RP2040_BOOTLOADER_DOUBLE_TAP_RESET(见 rev4_0/config.h) |
| 矩阵接线 | 行列扫描,COL2ROW,列脚F4/F5/F6/F7/B1/B3、行脚D4/C6/D7/E6 | 直接接线(direct pins)矩阵,左右手分别定义 |
| 分体串行 | 半双工串行(split.serial.pin: "D2") | 全双工 USART(SERIAL_USART_TX_PIN GP12、SERIAL_USART_RX_PIN GP13),driver: "vendor" |
| WS2812 灯带 | 引脚D3 | 引脚GP10,driver: "vendor" |
| 旋转编码器 | 默认无 | GP5/GP7、GP6/GP7两组(右手侧另有定义),并启用encoder特性 |
此外 rev4 还额外启用了mousekey特性,并在 rev4_0/info.json 中配置了dynamic_keymap.layer_count: 6,即动态键位表预留 6 层,支持在运行时通过 QMK VIA 等工具编辑键位。分体通信方面,rev4 开启了split.transport.watchdog与usb_detect.timeout: 500,用于在单侧未接 USB 时可靠启动。
R2G 变体的刷写命令略有不同(键位示例为mb_via):
qmk flash -kb crkbd/r2g -km mb_via编译与刷写的前提是完成 QMK 构建环境配置。新手可以按仓库中的 docs/newbs.md 与 docs/newbs_building_firmware.md 一步步搭建环境、创建自己的 keymap,刷写细节可参考 docs/flashing.md。
进入 Bootloader 的两种方式
原文档指出,Corne PCB 在 TRRS 插座旁提供了Reset与Boot两颗按钮,按下即可直接进入 bootloader 等待刷写。
更方便的方式是利用 Bootmagic:按住Q(左半侧最上方外侧键)或P(右半侧对应位置)再插入 USB 线,键盘会跳转进入 bootloader,同时重置 EEPROM(持久化存储)。这个键位选择与布局定义中的bootmagic.matrix配置一一对应:
- 左手侧 Bootmagic 矩阵位置
[0, 1]; - 分体模式下右半侧对应位置为
[4, 1](见 info.json)。
文档特别说明:由于 PCB 最外侧一列设计为可掰断(breakaway column),理论上最角落的键位([0, 0]与[4, 0])可能已被移除,因此 Bootmagic 入口保留在 Q/P 两个键上以兼容不同焊接方案。
对于 v4(RP2040),还有第三种方式:RP2040_BOOTLOADER_DOUBLE_TAP_RESET被启用后(rev4_0/config.h),在上电后的RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT(500ms)窗口内快速双击 Reset 也可进入 bootloader。此外,默认 keymap 第 3 层把左上角键位绑定为QK_BOOT(keymap.c),开机后按下MO(3)层再按该键同样能触发复位。
用 RGB Matrix 替换 RGB Light:逐键灯效的完整配置
原文档的核心实操内容,是把 Corne 的灯效系统从 RGB Light 切换到 RGB Matrix。前者只能整体统一变色,而后者支持逐键独立控制的动画效果,体验明显更好。前提是键盘确实焊接了轴下灯(in-switch LEDs),否则无需进行此项改造。
第一步:在 keymap 的rules.mk中切换特性
RGBLIGHT_ENABLE = no RGB_MATRIX_ENABLE = yes这两行的作用是把 RGB Light 关闭、RGB Matrix 打开。仓库顶层 info.json 中features字段的rgblight: false、rgb_matrix: true正是这套推荐的默认组合;而 rev1 的 keyboard.json 里features.rgblight: true保留了旧版灯效支持的兼容入口,方便希望沿用 RGB Light 的用户。
第二步:在config.h中启用行为宏与动画宏
在原文档给出的完整配置基础上,逐项说明其作用:
#ifdef RGB_MATRIX_ENABLE # define RGB_MATRIX_KEYPRESSES // reacts to keypresses // # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) # define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_FRAMEBUFFER_EFFECTS // # define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) // # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 150 out of 255. Higher may cause the controller to crash. # define RGB_MATRIX_HUE_STEP 8 # define RGB_MATRIX_SAT_STEP 8 # define RGB_MATRIX_VAL_STEP 8 # define RGB_MATRIX_SPD_STEP 10 /* Enable the animations you want/need. You may need to enable only a small number of these because * * they take up a lot of space. Enable and confirm that you can still successfully compile your firmware. */ // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: // https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects # define ENABLE_RGB_MATRIX_ALPHAS_MODS # define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN # define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT # define ENABLE_RGB_MATRIX_BREATHING # define ENABLE_RGB_MATRIX_BAND_SAT # define ENABLE_RGB_MATRIX_BAND_VAL # define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT # define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL # define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT # define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL # define ENABLE_RGB_MATRIX_CYCLE_ALL # define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT # define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN # define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON # define ENABLE_RGB_MATRIX_CYCLE_OUT_IN # define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL # define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL # define ENABLE_RGB_MATRIX_CYCLE_SPIRAL # define ENABLE_RGB_MATRIX_DUAL_BEACON # define ENABLE_RGB_MATRIX_RAINBOW_BEACON # define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS # define ENABLE_RGB_MATRIX_RAINDROPS # define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS # define ENABLE_RGB_MATRIX_HUE_BREATHING # define ENABLE_RGB_MATRIX_HUE_PENDULUM # define ENABLE_RGB_MATRIX_HUE_WAVE # define ENABLE_RGB_MATRIX_PIXEL_RAIN # define ENABLE_RGB_MATRIX_PIXEL_FLOW # define ENABLE_RGB_MATRIX_PIXEL_FRACTAL // enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined # define ENABLE_RGB_MATRIX_TYPING_HEATMAP # define ENABLE_RGB_MATRIX_DIGITAL_RAIN // enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE # define ENABLE_RGB_MATRIX_SOLID_REACTIVE # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS # define ENABLE_RGB_MATRIX_SPLASH # define ENABLE_RGB_MATRIX_MULTISPLASH # define ENABLE_RGB_MATRIX_SOLID_SPLASH # define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH #endif关键宏的含义与调校建议:
RGB_MATRIX_KEYPRESSES/RGB_MATRIX_KEYRELEASES:让灯效对按键按下/释放产生反应,是 reactive 类动画的前提;RGB_MATRIX_SLEEP:系统挂起时自动关闭灯效,省电且避免 OLED/背光常亮;RGB_MATRIX_FRAMEBUFFER_EFFECTS:开启帧缓冲类效果(如打字热力图TYPING_HEATMAP、DIGITAL_RAIN数字雨);RGB_MATRIX_MAXIMUM_BRIGHTNESS 150:把最大亮度限制在 255 的 150,文档明确警告过高亮度可能导致控制器崩溃——这一约束在仓库数据中同样存在:rev1 的rgb_matrix.max_brightness为 120,rev4 更保守地设为 50;RGB_MATRIX_HUE_STEP/SAT_STEP/VAL_STEP/SPD_STEP:控制每次按键调节色相、饱和度、亮度、速度的步进值,步进越大调节越快;- 注释中的
RGB_MATRIX_LED_PROCESS_LIMIT与RGB_MATRIX_LED_FLUSH_LIMIT:分别限制单次任务处理的 LED 数量与动画刷新频率(16ms ≈ 60fps),可用于提升键盘响应速度,适合在开启大量动画后固件性能吃紧时启用; - 每个
ENABLE_RGB_MATRIX_*只负责把对应动画编入固件(以节省 Flash 空间),实际运行中通过RM_*键码切换。需要注意依赖关系:TYPING_HEATMAP、DIGITAL_RAIN需要RGB_MATRIX_FRAMEBUFFER_EFFECTS,SOLID_REACTIVE_*、SPLASH系列需要RGB_MATRIX_KEYPRESSES或RGB_MATRIX_KEYRELEASES,配置时请按注释成组启用,并确认编译通过。
完成以上配置后,键盘就使用 RGB Matrix 效果,操作逻辑回归 QMK 标准的 RGB 控制键码。这一点在默认 keymap 中有直观体现:第 3 层(Adjust 层)的按键即RM_TOGG(开关灯效)、RM_NEXT(下一个动画)、RM_HUEU/RM_HUED、RM_SATU/RM_SATD、RM_VALU/RM_VALD(调节色相/饱和度/亮度),见 keymap.c;该层同时把旋转编码器顺时针/逆时针绑定为RM_VALU/RM_VALD(ENCODER_MAP_ENABLE分支中的encoder_map),实现了不用看键盘即可滚动调节亮度的操作体验。
从仓库数据理解灯珠布局
rev1 的 keyboard.json 声明了rgblight.led_count: 54与split_count: [27, 27]——即左右手各 27 颗 LED 共 54 颗,并在rgb_matrix.layout中以matrix坐标 +x/y物理坐标 +flags的形式逐颗定义了 LED 与按键的映射关系(flags 1 表示键位灯、2 表示下灯/背光、4 表示可随键位变化的按键灯)。理解这份映射,是后续手动定制逐键动画(如按层变色)的基础。rev4 由于去掉了最外侧 breakaway 列,LED 总数调整为 46 颗(split_count: [23, 23])。
配套的 OLED 与分体特性(源码佐证)
虽然原文档未展开,但仓库源码显示了 Corne 与上述灯效并列的两项关键能力,有助于完整理解这块键盘在 QMK 中的实现:
OLED 显示:crkbd.c 在OLED_ENABLE下实现了完整的键盘级 OLED 逻辑——主手(master)一侧渲染当前层状态(Default/Lower/Raise/Adjust)与最近按键日志(行列号、键码、字符),副手(offhand)一侧通过oled_init_kb翻转 180° 并渲染 Corne logo 位图(oled_render_logo)。字符位图来自 lib/glcdfont.c,rev4 的 post_config.h 将OLED_FONT_H指向该文件并把OLED_UPDATE_INTERVAL设为 50ms。
分体架构:rev1 通过split.serial.pin走半双工串行同步矩阵状态;rev4 改用全双工 USART 并允许通过GP21引脚(split.handedness.pin)在固件层判定左右手,配合split.enabled与矩阵/编码器的左右手镜像定义,保证任意一侧单独接 USB 都能正常工作。
小结
围绕 Corne 在 QMK 中的使用,可以归纳为三条主线:按版本选择正确的编译目标(v1–v3 用crkbd/rev1,v4 用crkbd/rev4,R2G 用crkbd/r2g);用 Reset/Boot 按钮、Q/P Bootmagic 或 RP2040 双击 Reset 进入 bootloader;以及在rules.mk与config.h中启用 RGB Matrix 并获得逐键动画能力。本文给出的所有配置项均可在仓库对应文件中直接核对,结合 keymaps/default 与各版本 info.json,你可以在此基础上定制自己的分层灯效、编码器映射与 OLED 显示,构建出完全个人化的 Corne 固件。
【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考