QMK B.fake 键盘配置详解:60% RGB 键盘的矩阵、RGB 驱动与构建实战
2026/9/17 10:57:04 网站建设 项目流程

QMK B.fake 键盘配置详解:60% RGB 键盘的矩阵、RGB 驱动与构建实战

【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware

B.fake 是 QMK 固件中收录的一款 60% 规格 RGB 键盘,其 PCB 复刻自 winkeyless 出品的 B.face,但开关矩阵与 FaceW(ps2avr 系 PCB)完全一致。本文基于仓库中的 B.fake 说明文档、键盘配置文件 与 默认键位源码,完整讲解它的硬件特征、矩阵引脚映射、RGB 实现方式、布局宏以及make构建/烧录流程,帮助你在理解配置含义的基础上完成固件定制。

一、背景:B.fake 与 B.face、FaceW 的关系

根据 readme.md 的说明,B.fake 有三个关键事实:

  • 它是一块带 RGB 灯效的 60% 键盘(无数字区、无方向键区的紧凑布局);
  • 其 PCB 是 winkeyless 销售的B.face PCB 的复刻板,因此外观与结构沿用 B.face;
  • 开关矩阵与 FaceW 相同。FaceW 是 mechanicalkeyboards.com 销售的 ps2avr 系 PCB,在仓库中对应 keyboards/facew/ 目录。

这一点对二次开发非常关键:B.fake 的引脚与矩阵定义可以直接对照 FaceW 理解。对比两份配置文件 keyboards/bfake/keyboard.json 与 keyboards/facew/keyboard.json,两者共享完全相同的matrix_pinsdiode_directionbacklightrgblightws2812配置,主要差异在于:

配置项B.fakeFaceW
manufacturerNotWinkeylessSPRiT
features.bootmagictruefalse
indicatorscaps_lock: D1caps_lock: D1num_lock: D0
community_layouts未声明(内置LAYOUT_60_ansi声明60_ansi为社区布局

可以推断,B.fake 在 FaceW 的电气设计基础上启用了 Bootmagic 按键(默认键位中的QK_BOOT正是依赖此特性),并去掉了数字指示灯。

二、硬件与 USB 标识

keyboard.json中的基础信息:

  • 键盘名称:B.fake,制造商字段为NotWinkeyless,维护者为qmk(即 QMK Community,与 readme 中 "Keyboard Maintainer: QMK Community" 一致);
  • USB 描述符:vid: 0x20A0pid: 0x422Ddevice_version: 2.0.0。注意该 VID/PID 与 FaceW 完全相同,若同时连接两块板,系统层面需要靠串号或描述区分;
  • 处理器与引导加载器:processor: atmega32abootloader: bootloadhidbootloadhid是 QMK 面向 AVR 平台的 HID 引导加载器,烧录失败时可通过 HID 方式重新进入下载模式,无需额外的 DFU 工具。

板载功能开关(features段):

"features": { "backlight": true, // 白色背光,控制脚 D4 "bootmagic": true, // Bootmagic 按键,用于进入/恢复 bootloadhid "command": true, // command() 命令接口 "extrakey": true, // 扩展键(F 键、方向键、媒体键等) "mousekey": true, // Mouse Keys 模拟鼠标 "nkro": false // 未启用 NKRO,走默认滚动检测 }

从源码结构看,nkro为 false 意味着采用 QMK 默认的扫描方式,多键同时按下时可能出现滚键(ghosting),这是 8 行 × 11 列矩阵在普通二极管扫描下的常见特性。

三、键盘矩阵:8 行 × 11 列,COL2ROW 二极管方向

B.fake 的矩阵引脚在配置中显式定义:

"matrix_pins": { "cols": ["A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "C7", "C6", "C5"], "rows": ["B0", "B1", "B2", "B3", "B4", "B5", "B6", "B7"] }, "diode_direction": "COL2ROW"

要点解读:

  • 列(COL)使用 PORTA 的 8 个引脚 A0–A7 加 PORTE 侧的 C7、C6、C5,共 11 列;
  • 行(ROW)使用全部 8 个 B 口引脚 B0–B7;
  • 总矩阵容量为 8 × 11 = 88 个点位,足以容纳 68 键的 60% 布局并留有扩展余量(右上角 ESC 键与部分行尾键占用了独立点位);
  • COL2ROW表示二极管方向为"列接正、行接负":扫描时驱动某列为高电平、其余行读取低电平即可判定按键,这与 QMK 默认扫描逻辑一致。

矩阵点位到物理按键的映射关系完全由布局宏决定(见下文第五节),这也是为什么同一块矩阵可以派生出LAYOUT_allLAYOUT_60_ansi两套键位模板。

四、RGB 灯效:16 颗 WS2812,经 I2C 控制器驱动

B.fake 的 RGB 配置是本文最值得关注的硬件部分:

"rgblight": { "led_count": 16, "animations": { "breathing": true, "rainbow_mood": true, "rainbow_swirl": true, "snake": true, "knight": true, "christmas": true, "static_gradient": true, "rgb_test": true, "alternating": true, "twinkle": true } }, "ws2812": { "driver": "i2c" }, "backlight": { "pin": "D4" }, "indicators": { "caps_lock": "D1" }
  • 16 颗 WS2812 RGB LED,由 QMK 的 rgblight 子系统管理,上面 10 种动画效果全部启用。这意味着你在 keymap 里可以直接使用RGB_TOGRGB_MODRGB_SAIRGB_SPI等键码切换模式、速度与亮度,无需额外配置;
  • ws2812.driver: i2c说明数据线上并非直连 MCU,而是经过一颗 I2C 接口的 WS2812 控制器(B.face/B.fake 板卡上的典型设计)。QMK 会选用对应的 i2c 版 WS2812 驱动完成初始化与数据发送,用户不需要在 keymap 中关心 I2C 地址细节;
  • 白色背光独立于 RGB,由 D4 引脚控制(PWM 调光);
  • 大写锁定指示灯使用 D1 引脚,indicators.caps_lock配置后由 QMK 自动点亮/熄灭。

五、两套布局宏:LAYOUT_all 与 LAYOUT_60_ansi

keyboard.jsonlayouts段内置了两套布局,键位顺序即keymap.c中按行排列的参数顺序:

LAYOUT_all(68 键):为每个物理键独立编号。五行的键数为 15 / 14 / 13 / 14 / 8,例如第 1 行从{"matrix": [6, 1]}开始依次覆盖 A0–C5 各列,第 5 行以{"matrix": [3, 10], "w": 6.25}描述 6.25u 的空格键(w为以格为单位的键帽宽度,供工具链与文档生成使用)。

LAYOUT_60_ansi(65 键语义):与LAYOUT_all的差异集中在第 3、4 行——第 3 行将 Backspace 合并为 2.25u 单键({"matrix": [1, 9], "w": 2.25}),第 4 行右 Shift 为 2.75u 单键({"matrix": [4, 9], "w": 2.75}),不再拆分出额外的\与右侧 Esc 独立点位。

选择原则:如果你的键帽是标准 60% ANSI 分模键帽(带独立\键与右侧 Esc),用LAYOUT_all;如果是整宽 Backspace/右 Shift 的 60_ansi 键帽,用LAYOUT_60_ansi,避免键位错行。

六、默认键位解析

默认键位位于 keymaps/default/keymap.c,共 3 层(版权头注明原作者为 Luiz Ribeiro,2017):

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT_all( QK_GESC, KC_1, KC_2, ... KC_BSLS, KC_GRV, KC_TAB, KC_Q, ... KC_BSPC, MO(1), KC_A, ... KC_ENT, KC_LSFT, KC_NO, ... KC_RSFT, MO(1), KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL), [1] = LAYOUT_all( KC_GRV, KC_F1, ... KC_DEL, ... KC_HOME, KC_END, KC_DEL, MO(1), ... KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, ...), [2] = LAYOUT_all( ... QK_BOOT, /* 右上角 */ ...); };

三层分工明确:

  • Layer 0(基础层):标准 ANSI 排列,QK_GESC放在数字行首位(带 Caps Lock 联动行为);左下 Caps 位置改为MO(1)常驻进入 F 键层,右下原 Esc 位置同样放置MO(1),形成双手均可切入的功能层入口;数字键之间的KC_NO对应 60% 键盘被裁掉的小数点/方向键区域。
  • Layer 1(F 键层):顶行 F1–F12,右侧提供 HOME / END / DEL,右 Shift 行内嵌方向键(← ↓ ↑ →)与 PGUP / PGDN;行尾的MO(2)用于临时进入第三层。
  • Layer 2(维护层):几乎全部KC_TRNS,仅保留MO(1)以便随时退出,右上角放置QK_BOOT——按下即进入 bootloadhid 引导加载器,配合bootmagic: true特性,这是 AVR 板无硬件复位电路时恢复固件的标准手段。

七、构建与烧录

在配置好构建环境后(构建工具与环境搭建参见 构建环境指南,make用法参见 make 指南,QMK 新手可先看 新手指引),B.fake 的标准命令为:

# 编译默认键位 make bfake:default # 编译并烧录到键盘 make bfake:default:flash
  • 目标名bfake对应keyboards/bfake目录;default对应keymaps/default/keymap.c。若你新建了自定义 keymap(例如keymaps/myname/keymap.c),则改用make bfake:myname即可,无需改动keyboard.json
  • 烧录通过 bootloadhid 完成:正常状态下make bfake:default:flash会直接触发 HID 下载流程;若固件损坏导致设备失联,短接 Bootmagic 引脚(或按下QK_BOOT)后重新执行烧录命令即可恢复。

八、小结与深入路径

B.fake 的价值在于它展示了 QMK 数据驱动配置的典型形态:一份 keyboard.json 同时声明了矩阵引脚、二极管方向、RGB 拓扑(I2C WS2812 × 16)、背光/指示灯引脚、USB 描述符与布局几何,而 keymap.c 只负责键位逻辑。建议的延伸阅读路径:

  • 对照 FaceW 配置 与 FaceW 说明,理解"同矩阵、不同外设开关"的键盘变体是如何表达的;
  • 参考 keymap 文档 与 高级键码文档 扩展自定义层;
  • 参考 RGB 特性文档(仓库docs/features/目录)掌握 rgblight 的运行时控制命令。

掌握以上内容后,你应当能够:独立编译并烧录 B.fake 固件、根据键帽模数正确选择LAYOUT_all/LAYOUT_60_ansi、在三层键位结构中增删自定义键码,并理解其矩阵引脚与 I2C RGB 驱动的硬件约束。

【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询