
QMK 矩阵配线图完全解读以 4pplet Waffling60 Rev E ISO 的 5×14 按键矩阵为例【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware本文以 QMK Firmware 仓库中 keyboards/4pplet/waffling60/rev_e_iso/matrix_diagram.md 为骨架系统讲解如何阅读和理解键盘的矩阵配线图Matrix Diagram从行列坐标命名规则、特殊键位映射到keyboard.json中matrix_pins、diode_direction与各LAYOUT宏的对应关系。读完本文你将能够独立读懂任意 QMK 键盘的矩阵图并能据此定位按键坐标、理解布局变体、编写正确的keymap.c以及排查按键无响应等硬件问题。为什么 60% 键盘需要一张矩阵配线图Waffling60 是一款 60% 布局的 MX 轴体 PCB支持热插拔与焊接两个版本Rev E 增加了底灯underglow与旋转编码器支持见 keyboards/4pplet/waffling60/rev_e_iso/readme.md。60% 键盘的配列极为丰富同一张 PCB 往往要兼容 ANSI / ISO / Tsangan / WKL / HHKB / 分裂空格等多种配列而固件与硬件的桥梁正是按键矩阵key matrix。在 QMK 中键盘的物理按键并不像 USB HID 那样一一对应键码而是按“行 × 列”的网格布线MCU 通过扫描行列交叉点来检测按键通断。矩阵配线图就是这个网格的“地图”——它告诉你每一个物理键位对应哪个(row, col)坐标也直接决定你在keymap.c里写LAYOUT_all(...)时参数的顺序。因此矩阵图是移植、排障、设计配列的起点。读懂矩阵图的坐标体系Waffling60 Rev E ISO 的矩阵图来自 keyboards/4pplet/waffling60/rev_e_iso/matrix_diagram.md如下┌───────┐ 2u Backspace │1D │ └───────┘ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │1D │ ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ │10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │ │ ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐2D │ │20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │ │ ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┤ │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │ ├────┴┬──┴┬──┴──┬┴───┴───┴──┬┴──┬┴───┴───┴──┬┴───┴┬───┬─┴───┤ │40 │41 │42 │44 │46 │48 │4B │4C │4D │ └─────┴───┴─────┴───────────┴───┴───────────┴─────┴───┴─────┘ ┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐ │40 │41 │42 │46 │4B │4C │4D │ Tsangan/WKL/HHKB └─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘ ┌─────┬───┬───────────────────────────────────────┬───┬─────┐ │40 │41 │46 │4C │4D │ 10u Spacebar └─────┴───┴───────────────────────────────────────┴───┴─────┘坐标命名采用行列的十六进制缩写第一位是行号第二位是列号。例如00表示第 0 行第 0 列1D表示第 1 行第 13 列D 134B表示第 4 行第 11 列。这套坐标与 QMK 中matrix[row][col]的索引一一对应也与 keyboard.json 中matrix: [row, col]的写法完全一致。硬件矩阵与引脚定义5 行 × 14 列Waffling60 Rev E ISO 的矩阵是一个5 行 × 14 列的网格与矩阵图的坐标范围行 0~4列 0~D吻合。对应引脚定义位于 keyboard.jsondiode_direction: COL2ROW, matrix_pins: { cols: [B2, A4, A3, A0, F1, F0, C15, C14, C13, B9, B8, B7, A15, B3], rows: [B14, A9, B6, B5, B4] }cols数组有 14 个元素从B2到B3对应列 0~D即 0~13rows数组有 5 个元素从B14到B4对应行 0~4diode_direction: COL2ROW表示二极管方向为“列驱动、行读取”这是 QMK 扫描矩阵时决定如何驱动引脚的基础设置。硬件上该键盘采用 STM32F072 处理器与stm32-dfu引导程序同一 keyboard.json并启用了 bootmagic、RGBLight17 颗灯珠数据脚 A8与旋转编码器A2/A1 脚分辨率 2。当你需要对照原理图排查问题时矩阵图上的坐标可以直接映射到这些列/行引脚。从源码结构看Rev E ISO 与 Rev E、Rev E ANSI 共享同一套 5 行矩阵但列引脚存在细微差异例如 Rev E 的列 1 为A5而 ISO 版为A4这也解释了为什么每个变体都单独维护一份keyboard.json。逐行拆解特殊键位如何占用矩阵位置对照矩阵图与 keyboard.json 中LAYOUT_all的matrix字段可以还原每一行的布线逻辑第 0 行00~0D 1D数字行与Esc。0D第 0 行第 13 列是数字行最后一个键位1D第 1 行第 13 列被借来承担2u Backspace——这正是图中 Backspace 上方单独标注1D的原因。在LAYOUT_all中可见{matrix: [1, 13], x: 14, y: 0}即它被放置在物理第一行最右侧宽度为 1u。第 1 行10~1CTab到右括号。该行的1D坐标被 Backspace 占用因此本行末尾止于1C。第 2 行20~2CCaps Lock到 ISO 回车区。2D位置在图中被 ISO Enter 竖排按键的上半部分覆盖LAYOUT_all中对应{matrix: [2, 13], x: 13.75, y: 1, w: 1.25, h: 2}——这是一个高 2u 的键位ISO 回车。第 3 行30~3D左 Shift 到右 Shift。3C是加宽的右 Shift3D是右 Shift 右侧的Fn键图中LAYOUT_all的{matrix: [3, 13], x: 14, y: 3}。第 4 行40~4D底排。坐标不连续40、41、42、44、46、48、4B、4C、4D因为空格区域跨越了多个列坐标不同配列只会用到其中一部分。ISO 布局的两个“多余键”——KC_NUBS反斜杠位于左 Shift 右侧与KC_NUHS键位于 Enter 左侧——分别落在[3, 1]与[2, 12]可在 default/keymap.c 的LAYOUT_all调用中看到[0] LAYOUT_all( KC_ESC, KC_1, ... KC_NO, KC_BSPC, KC_TAB, ... KC_CAPS, KC_A, ... KC_NUHS, KC_ENT, KC_LSFT, KC_NUBS, KC_Z, ... KC_RSFT, MO(1), KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL),这段代码是矩阵图最直接的“落地”LAYOUT_all的参数顺序与图中从上到下、从左到右的坐标顺序一致KC_NUHS、KC_NUBS的位置也能在图中第 2、3 行找到对应坐标。三种底排变体同一矩阵不同配列矩阵图下方的三行示意图展示了 PCB 支持的三种底排形态它们在矩阵坐标上完全复用第 4 行配列使用的矩阵坐标说明Standard标准40, 41, 42, 44, 46, 48, 4B, 4C, 4D6.25u 空格444648 三段、1.25u 修饰键Tsangan / WKL / HHKB40, 41, 42, 46, 4B, 4C, 4D7u 空格仅 46、两侧 1.5u 修饰键移除 44 与 48 的 1.25u 键位10u Spacebar40, 41, 46, 4C, 4D单颗 10u 空格仅 46左右仅保留 1u/1.5u 修饰键这些变体在 keyboard.json 中被实现为四个独立的LAYOUT宏LAYOUT_60_iso_tsangan_split_bs_rshift7u 空格 分裂 Backspace/右 Shift对应community_layouts中的60_iso_tsangan_split_bs_rshiftLAYOUT_60_iso_wkl_split_rshiftWKL无 Win 键配列底排仅用 40、42、46、4B、4D 五个坐标LAYOUT_60_iso_wkl_split_bs_rshiftWKL 分裂 Backspace/右 ShiftLAYOUT_all包含全部矩阵坐标用于自定义配列或defaultkeymap。对比LAYOUT_60_iso_wkl_split_rshift与LAYOUT_60_iso_tsangan_split_bs_rshift的底排定义可以发现前者使用[4, 0]宽 1.5u与[4, 2]宽 1.5u后者使用[4, 0]、[4, 1]、[4, 2]加 7u 空格[4, 6]这正是矩阵图中“Tsangan/WKL/HHKB”一行 40、41、42、46、4B、4C、4D 七个坐标的 JSON 化表达。矩阵图在开发与排障中的实战用法1. 编写 keymap以坐标定参数顺序keymap.c中LAYOUT_xxx(...)宏的参数顺序由 keyboard.json 中layout数组的顺序决定而该顺序又严格对应矩阵图。当你需要新增一个键位时在矩阵图上找到目标物理位置读出坐标例如4C是底排右数第三个键到LAYOUT_all或目标LAYOUT中确认该坐标出现的位置在keymap.c的对应位置填入键码。例如 default/keymap.c 的功能层将00Esc替换为QK_BOOT将底排的4C右 Win替换为KC_TRNS这些修改都能在矩阵图上直接定位。2. 排查按键失效如果某个按键无响应可以按以下思路排查确认坐标用矩阵图确定该键的(row, col)再到 keyboard.json 查对应引脚确认二极管方向diode_direction: COL2ROW意味着扫描时列引脚输出、行引脚读取若硬件焊接方向与之一致则无需修改确认 keymap 覆盖检查 keymap 中该位置是否误填了KC_NO或KC_TRNS如默认 keymap 第 0 行第 13 列KC_NO即为故意留空的位置对应矩阵图第一行的 0D 与 1D 之间的空白。对照变体若使用的是 Tsangan 或 10u 空格配列确认 keymap 选择的LAYOUT宏与矩阵图底排坐标一致避免“键位在图上存在但宏里没有”的情况。3. 对比兄弟版本理解差异仓库中 rev_e/matrix_diagram.mdRev E Solder 版与 rev_e_ansi/matrix_diagram.md 展示了几乎相同的 5 行结构但底排存在差异Solder 版底排为 40、41、42、44、46、48、49、4A、4B、4C支持 6u 底排与 3u 分裂空格而 ISO 版则为 40、41、42、44、46、48、4B、4C、4D。这说明热插拔与焊接版本在 PCB 走线和矩阵分配上并不完全相同——阅读矩阵图时务必使用与硬件版本匹配的那一份。结语矩阵配线图是 QMK 键盘固件开发中连接“物理 PCB”与“逻辑 keymap”的关键文档。通过 Waffling60 Rev E ISO 这张 5×14 的矩阵图我们完整还原了从坐标命名、引脚映射、特殊键位2u Backspace、ISO Enter、KC_NUHS/KC_NUBS到底排三种配列的整套映射逻辑。无论你是为这块 PCB 编写自定义配列还是排查按键故障matrix_diagram.md 配合 keyboard.json 与 default/keymap.c 三者对照使用即可快速定位任意键位的矩阵坐标与固件配置。【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考