基于 RP2040 的 5x12 正交键盘 Ortho60 v2:QMK 固件配置、编译与刷写实战指南
【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware
本文以 QMK Firmware 仓库中的 Ortho60 v2 键盘支持目录为核心,讲解这款由 CannonKeys 出品、板载 RP2040 主控的 5x12 正交线性(Ortholinear)键盘的固件结构、数据驱动配置、默认键位图、背光 PWM 底层实现,以及三种进入 Bootloader 的方式。读完本文,你将能够从零搭建构建环境、编译并刷写 Ortho60 v2 的固件,并能依据keyboard.json与config.h
等文件自行裁剪键盘功能。
一、Ortho60 v2 键盘概览
根据 readme.md,Ortho60 v2 是一块 5 行 × 12 列的正交键盘,最大特点是由板载的RP2040 主控 驱动,无需外接 Pro Micro 等控制器模块。其关键信息如下: 该目录下的文件非常精简,是典型的现代 QMK 数据驱动键盘结构: Ortho60 v2 采用 QMK 的数据驱动配置(Data-Driven Configuration)方式,硬件描述全部集中在 keyboard.json 中,无需编写传统 。逐段解读如下。 特性开关直接决定了固件链接哪些模块: 。 QMK 官方推荐使用 完成工具链、依赖与仓库克隆。全新的初学者请按照 newbs.md(完整新手指南)与 newbs_building_firmware_workflow.md(构建环境设置与工作流)操作;命令行的详细用法参见 getting_started_make_guide.md。 在仓库根目录(本文所在工作目录即 QMK Firmware 仓库根目录)执行: 该命令会: 若要为其他键位图编译,将 替换为目标键位图目录名即可。 默认键位图位于 keymaps/default/keymap.c,采用三层层叠设计,充分利用 60 键正交布局配合层切换实现全功能输入。 层聚焦符号输入与媒体控制: 层则侧重数字区重排与编辑键: 三层配合 按住层切换机制(详见 feature_layers.md),使 60 键键盘可覆盖标准全尺寸键盘的全部输入能力。 ,但 PWM 驱动如何落到 RP2040 外设上,则由目录下的三个头文件协同完成: config.h 中: 将 QMK 背光 PWM 驱动绑定到 ChibiOS 的 )。 halconf.h 中: 通过 在保留 ChibiOS 默认配置的基础上,仅追加开启 PWM 抽象层。 mcuconf.h 中: 在 ChibiOS 默认配置之上,将 RP2040 的 PWM6 外设标记为启用。三层配置叠加后,QMK 背光子系统即可通过 输出 PWM,实现 15 级亮度与呼吸效果。 原文档明确给出了进入刷写模式的三种方式,这是 Ortho60 v2 刷机流程中最关键的操作知识: 进入 Bootloader 后,RP2040 会以 USB 大容量存储(UF2)模式挂载,将编译产物 一键烧录,详细流程参见 newbs_flashing.md。 由于主控为 RP2040,使用与移植时需留意该平台特性(详见 platformdev_rp2040.md): Ortho60 v2 是 QMK 数据驱动键盘配置的典型范例:仅凭 keyboard.json 一个文件即可完成主控、矩阵、特性、编码器、背光与布局的完整描述;配合 config.h、halconf.h、mcuconf.h 三个头文件精确控制 PWM 底层外设;默认键位图则展示了基于层的 60 键功能全覆盖方案。对开发者而言,无论是直接编译使用,还是参考其数据驱动写法移植自己的 RP2040 正交键盘,这份目录都是极佳的样板。 【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware项目 内容 键盘形态 5x12 Ortholinear 主控 RP2040(树莓派 Pi 同款双核 ARM Cortex-M0+) 键盘维护者 Andrew Kannan 硬件厂商 CannonKeys 固件目录 keyboards/cannonkeys/ortho60v2/keyboards/cannonkeys/ortho60v2/ ├── keymaps/default/keymap.c # 默认键位图(三层) ├── config.h # 背光 PWM 驱动与通道配置 ├── halconf.h # 启用 ChibiOS PWM HAL ├── mcuconf.h # 启用 RP2040 PWM6 外设 ├── keyboard.json # 数据驱动配置(矩阵/特性/布局) └── readme.md # 键盘说明文档二、数据驱动配置:
keyboard.json全解析
rules.mk与大部分config.h2.1 基础标识
{ "keyboard_name": "Ortho60 v2", "maintainer": "awkannan", "manufacturer": "CannonKeys", "processor": "RP2040", "bootloader": "rp2040", "usb": { "vid": "0xCA04", "pid": "0x0019", "device_version": "0.0.1" }, "url": "https://cannonkeys.com" }processor与bootloader声明主控型号为 RP2040,对应 QMK 的rp2040引导加载器(UF2 格式),这也决定了固件编译目标与刷写方式。0xCA04:0x0019,用于系统识别该键盘设备。2.2 矩阵与二极管方向
"diode_direction": "COL2ROW", "matrix_pins": { "cols": ["GP7", "GP6", "GP5", "GP4", "GP3", "GP2", "GP1", "GP0", "GP13", "GP24", "GP23", "GP22"], "rows": ["GP27", "GP18", "GP19", "GP25", "GP26"] }diode_direction为COL2ROW,即二极管阳极接列、阴极接行,扫描时序由 QMK 矩阵扫描逻辑决定。关于矩阵扫描原理可参考 how_a_matrix_works.md。GPx命名法,对应 RP2040 的 GPIO 编号(注意与 PCB 上丝印编号不一定一致,详见 platformdev_rp2040.md)。2.3 启用特性
"features": { "bootmagic": true, "extrakey": true, "mousekey": true, "nkro": true, "backlight": true, "encoder": true }特性 作用 bootmagic支持 Bootmagic 复位与启动时键位覆盖 extrakey支持媒体键/系统键(默认键位图中的 KC_MNXT、KC_VOLU等依赖此项)mousekey支持鼠标键模拟 nkro支持全键无冲(N-Key Rollover) backlight启用背光子系统 encoder启用旋转编码器子系统 2.4 旋转编码器与背光
"encoder": { "rotary": [ {"pin_a": "GP28", "pin_b": "GP29"} ] }, "backlight": { "breathing": true, "levels": 15, "pin": "GP12" }GP28/GP29,可在键位图中通过ENCODER_CW/ENCODER_CCW自定义旋转行为(编码器驱动实现见 drivers/encoder)。GP12,支持呼吸效果(breathing: true)与 15 级亮度调节。2.5 布局
LAYOUT_ortho_5x12keyboard.json中定义了唯一布局LAYOUT_ortho_5x12,为每个按键标注了矩阵坐标[row, col]与可视位置(x, y)。例如首行以`(matrix[0,0])开头、以Del结尾,最底行则为Brite/Ctrl/Alt/Super/Lower/空格/Raise/方向键的经典正交布局。该布局名即是键位图中使用的宏名LAYOUT_ortho_5x12三、编译固件:从环境搭建到出固件
3.1 搭建构建环境
qmk setup3.2 编译命令
make cannonkeys/ortho60v2:defaultdefault的键位图;.uf2固件文件(默认位于qmk_firmware/.build/目录下)。default四、默认键位图深度解读:三层键位设计
4.1 层与自定义键码声明
enum custom_layers { _BASE, _RAISE, _LOWER, }; enum custom_keycodes { QWERTY = SAFE_RANGE, LOWER, RAISE };_BASE/_RAISE/_LOWER仅为可读性命名,实际层索引即枚举顺序。custom_keycodes中虽然声明了QWERTY、LOWER、RAISE,但默认键位图实际使用的是 QMK 内置的层切换键码MO(_LOWER)、MO(_RAISE)(按住切换),声明自定义键码仅保留了扩展空间。4.2 基础层
_BASE(Qwerty)
[_BASE] = LAYOUT_ortho_5x12( KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, BL_TOGG, KC_LCTL, KC_LALT, KC_LGUI, MO(_LOWER), KC_SPC, KC_SPC, MO(_RAISE), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT ),MO(_LOWER),右空格旁为MO(_RAISE)。KC_LEFT/DOWN/UP/RGHT)。BL_TOGG为背光开关(见下文背光章节)。4.3 功能层
_LOWER与_RAISE_LOWER[_LOWER] = LAYOUT_ortho_5x12( KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY ),KC_TILD~KC_PIPE将数字键位映射为符号;KC_UNDS、KC_PLUS、KC_LCBR、KC_RCBR、KC_PIPE补齐键盘上未印出的符号。S(KC_NUHS)/S(KC_NUBS)为 ISO 布局用户提供~与|的移位组合。KC_HOME/KC_END用于行首行尾。QK_BOOT(即RESET键码),按下即可直接进入刷写模式——这正是原文档所述第三种进入 Bootloader 的方式在默认键位图中的具体落点。KC_MNXT(下一曲)、KC_VOLD(音量减)、KC_VOLU(音量加)、KC_MPLY(播放/暂停)。_RAISE[_RAISE] = LAYOUT_ortho_5x12( KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, _______, _______, BL_UP, BL_DOWN, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY ),-、=、[、]、\等标点,以及KC_PGUP/KC_PGDN翻页键。BL_UP/BL_DOWN与基础层的BL_TOGG配合,构成完整的背光调节方案。MO()五、背光 PWM 的底层实现:从 HAL 到通道
keyboard.json声明了背光引脚GP125.1
config.h:指定 PWM 驱动与通道
#define BACKLIGHT_PWM_DRIVER PWMD6 #define BACKLIGHT_PWM_CHANNEL RP2040_PWM_CHANNEL_APWMD6,并指定使用该 PWM 的 A 通道(RP2040_PWM_CHANNEL_A5.2
halconf.h:启用 PWM HAL
#define HAL_USE_PWM TRUE #include_next #include_next5.3
mcuconf.h:启用 PWM6 外设
#include_next #undef RP_PWM_USE_PWM6 #define RP_PWM_USE_PWM6 TRUEPWMD6的 A 通道驱动GP12六、进入 Bootloader 的三种方式
keyboard.json中启用的bootmagic特性,相关键码细节可参考 keycodes_magic.md。RESET的按键。默认键位图中,_LOWER层左下角的QK_BOOT即为此用途(见 keymaps/default/keymap.c)。.uf2文件拖入即可完成刷写;命令行用户也可使用qmk flash -kb cannonkeys/ortho60v2 -km default七、RP2040 平台注意事项
GPx(GPIO 编号),与 PCB 丝印编号并非一一对应,务必以 RP2040 数据手册引脚图为准。W25Q080兼容芯片提供二级 bootloader,Ortho60 v2 未在配置中覆写该项,说明其采用默认兼容的 Flash 方案。八、总结
# 一键编译 Ortho60 v2 默认键位图 make cannonkeys/ortho60v2:default
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考