QMK BN009 9 键宏键盘实战指南:R1/R2 双版本矩阵、JSON 键位与 Bootloader 烧录全解

QMK BN009 9 键宏键盘实战指南:R1/R2 双版本矩阵、JSON 键位与 Bootloader 烧录全解 QMK BN009 9 键宏键盘实战指南R1/R2 双版本矩阵、JSON 键位与 Bootloader 烧录全解【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware本文围绕 QMK 固件仓库中 BINEPAD BN009 这款 3×3 正交 9 键宏键盘macropad的官方键盘文档展开完整覆盖其双硬件版本ATmega32U4 的 R1 与 STM32F103 的 R2的矩阵引脚定义、JSON 驱动的键位布局、默认数字小键盘映射以及编译、烧录和进入 Bootloader 的三种方式。读完本文你可以直接复现make binepad/bn009/r1:default/r2:default的构建流程理解两个版本在平台配置上的差异并掌握 Bootmagic 复位与物理复位按钮的进入机制。键盘概况一款 9% 宏键盘官方文档 readme.md 对 BN009 的定位非常简洁A 9% macropad即一款 9 键宏键盘由维护者binepad提供。该键盘在 QMK 仓库中维护了两个硬件版本版本处理器目录BootloaderBN009 R1ATmega32U4r1/atmel-dfuBN009 R2STM32F103r2/stm32duino这一同布局、多版本multi-version的组织方式在 QMK 中很常见父目录 info.json 存放共享的键盘元数据与布局定义r1、r2子目录则各自通过keyboard.json声明版本特有的处理器、矩阵引脚与平台配置最终编译目标形如binepad/bn009/r1与binepad/bn009/r2。共享元数据与布局定义info.jsoninfo.json 定义了两个版本共用的信息核心字段如下{ manufacturer: Binepad, keyboard_name: BN009, features: { bootmagic: true, extrakey: true, mousekey: true, nkro: false }, usb: { vid: 0x4249, pid: 0x4295 }, layouts: { LAYOUT_ortho_3x3: { layout: [ {matrix: [0, 0], x: 0, y: 0, label: k00}, {matrix: [0, 1], x: 1, y: 0, label: k01}, {matrix: [0, 2], x: 2, y: 0, label: k02}, {matrix: [1, 0], x: 0, y: 1, label: k10}, {matrix: [1, 1], x: 1, y: 1, label: k11}, {matrix: [1, 2], x: 2, y: 1, label: k12}, {matrix: [2, 0], x: 0, y: 2, label: k20}, {matrix: [2, 1], x: 1, y: 2, label: k21}, {matrix: [2, 2], x: 2, y: 2, label: k22} ] } } }可以从该配置中读出几个关键事实功能开关bootmagic: true启用了 Bootmagic 复位后文详述extrakey与mousekey分别启用扩展键方向、插入等系统键和鼠标键支持nkro: false表明该键盘不启用 N-KRO3×3 的 9 键规模下这一点影响有限。USB 描述符VID0x4249/ PID0x4295即主机侧看到的 USB 设备身份0x4249对应 Binepad 的厂商标识。布局宏名LAYOUT_ortho_3x3是一个正交 3×3 布局9 个按键按matrix: [row, col]坐标一一对应到矩阵行列。这个宏名会被键位文件引用也决定了 Configurator 等工具中看到的键位图形。R1 与 R2 的矩阵定义差异两个版本的物理键位相同但矩阵引脚随平台完全不同均声明在各自的keyboard.json中二极管方向统一为COL2ROW列扫描到行即高列低行的扫描方向。R1ATmega32U4r1/keyboard.json{ keyboard_name: BN009 R1, build: { lto: true }, bootloader: atmel-dfu, diode_direction: COL2ROW, matrix_pins: { cols: [D2, D1, D0], rows: [B6, B5, B4] }, processor: atmega32u4, usb: { device_version: 0.0.1 } }矩阵使用 AVR 的 **D 口D2/D1/D0**作列、**B 口B6/B5/B4**作行这是 AVR 平台上非常典型的双端口扫描布线。build: { lto: true }对该平台启用了链接期优化LTO用于压缩固件体积对 32U4 这类 32KB Flash 的器件比较有意义。bootloader: atmel-dfu对应 AVR 的 DFUDevice Firmware Upgrade模式配合make ...:flash时使用的 AVR 烧录工具链。R2STM32F103r2/keyboard.json{ keyboard_name: BN009 R2, bootloader: stm32duino, diode_direction: COL2ROW, matrix_pins: { cols: [A1, A2, A6], rows: [B6, B7, B2] }, eeprom: { wear_leveling: { backing_size: 4096 } }, processor: STM32F103, usb: { device_version: 2.0.0 } }与 R1 的三点主要差异引脚映射不同列接A1/A2/A6行接B6/B7/B2反映了 STM32F103 的硬件改版布线。EEPROM 磨损均衡R2 配置了eeprom.wear_leveling.backing_size: 4096。STM32 没有 AVR 那样的真实 EEPROMQMK 通过闪存模拟 EEPROM并启用磨损均衡把写入分散到 4KB 的后备扇区中避免频繁写同一扇区导致寿命问题。相关实现见 drivers/wear_leveling/。设备版本device_version为2.0.0与 R1 的0.0.1对应硬件世代。从两份keyboard.json的结构可以推断R2 是 R1 的 ARM 化改版布局与功能不变仅更换处理器与引脚同时利用了 Arm 平台的磨损均衡 EEPROM。键位JSON 格式的默认数字小键盘BN009 的默认键位以keymap.jsonConfigurator 兼容的 JSON 格式提供见 keymaps/default/keymap.json{ keyboard: binepad/bn009/r2, version: 1, author: binepad, keymap: default, layout: LAYOUT_ortho_3x3, layers: [ [ KC_7, KC_8, KC_9, KC_4, KC_5, KC_6, KC_1, KC_2, KC_3 ] ] }这份文件的几个要点layout: LAYOUT_ortho_3x3引用了 info.json 中定义的布局宏名把 9 个键按 3 行 × 3 列排列。唯一一层 keymap 把 9 个键排成标准的数字小键盘上排 7/8/9中排 4/5/6下排 1/2/3与物理布局一一吻合。keyboard: binepad/bn009/r2表明该 JSON 键位挂在 r2 目标下JSON 键位文件位于版本共享的keymaps/目录中构建时会被解析并生成对应的 C 键位数组。如果你偏好传统 C 风格 keymap也可以按 QMK 惯例在 keymaps/ 下创建keymap.c使用LAYOUT_ortho_3x3(KC_7, KC_8, ...)宏展开编译命令不变。编译与烧录官方文档给出的构建命令在配置好 QMK 构建环境后执行make binepad/bn009/r1:default或针对 R2 版本make binepad/bn009/r2:default其中binepad/bn009/r1与binepad/bn009/r2是键盘目标对应上文的keyboard.json所在目录default是键位名对应keymaps/default/。烧录命令则追加:flashmake binepad/bn009/r1:default:flashmake binepad/bn009/r2:default:flash烧录链路由各版本keyboard.json中的bootloader字段决定R1 走atmel-dfuATmega32U4 的 DFUR2 走stm32duinoSTM32 的 STM32duino bootloader。构建环境搭建与 make 指南可参考仓库内 docs/getting_started_build_tools 相关文档 及 docs/newbs_building_firmware.md。进入 Bootloader 的三种方式readme.md 列出了 BN009 进入 bootloader 的三种途径这对后续刷入新固件至关重要Bootmagic 复位按住矩阵中(0,0) 位置通常是左上角键即布局中的k00再插入 USB 线。该能力由 info.json 中bootmagic: true启用固件侧实现见 quantum/bootmagic/bootmagic.c——上电时检测 (0,0) 键被按下即跳转到 bootloader。物理复位按钮短暂按下宏键盘背面小孔下方的复位按钮。键位中的 QK_BOOT / RESET如果当前键位中映射了QK_BOOT或RESET键码按下该键即可进入 bootloaderBN009 的默认数字小键盘键位未占用这些键码可自定义一层加入。小结BN009 在 QMK 中是一个典型的小体积、多版本、JSON 键位键盘9 键 3×3 正交矩阵、COL2ROW扫描、默认数字小键盘映射R1 与 R2 分别对应 ATmega32U4atmel-dfu与 STM32F103stm32duino两套平台通过 r1/keyboard.json 与 r2/keyboard.json 精确区分引脚与 Bootloader。按照本文给出的矩阵定义、键位文件路径与编译/烧录命令你可以完成从构建到刷机的完整闭环并在 (0,0) 键位基础上扩展自定义层、宏与 Boot 键码。【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考