TKL 键盘矩阵图完全解读)
QMK 矩阵坐标图解4pplet waffling80Rev A/BTKL 键盘矩阵图完全解读【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware本篇技术指南以 QMK 固件仓库中 keyboards/4pplet/waffling80/matrix_diagram.md 为核心系统解读 4pplet waffling80 这款 TKLTenkeylessPCB 的矩阵坐标图从两位坐标编码规则、六个物理分区到 Standard / Tsangan(WKL) / Tsangan Split Space 三种底部配列变体再到与 info.json 中LAYOUT_all及 16 个社区配列的一一对应关系。读完本文你将能独立读懂任何 QMK 键盘的 matrix_diagram 文档并能利用矩阵坐标排查按键失效、自定义键位映射以及正确选择与你的键帽配列匹配的 LAYOUT 宏。waffling80 与矩阵图一张图看懂整块 PCBwaffling80 是 4pplet 推出的 TKL 机械键盘 PCB根据 keyboards/4pplet/waffling80/readme.md 的描述它是一块试图实现 a87 兼容性、支持不同轴体与多种配列选项的 PCB而 Rev A 与 Rev B 版本见 rev_a/readme.md进一步扩展为a87 与 a88 兼容。仓库内共维护三个可独立编译的目标rev_a、rev_b与rev_b_ansi对应目录见 rev_a、rev_b、rev_b_ansi。matrix_diagram.md正是这块 PCB 的接线图——它用 ASCII 艺术图标注出每一个物理键位所对应的矩阵坐标。在 QMK 中矩阵坐标[row, col]直接决定了固件如何扫描按键每一行对应一条行扫描线每一列对应一条列扫描线键位按下即相当于该行该列交叉点导通。因此这张图是理解 waffling80 固件映射、排查某个键不响应问题的第一手资料也是从矩阵层面区分 F13 行a88 风格与标准行a87 风格两种顶部配列的关键依据。矩阵图编码规则两位坐标 [row, col]waffling80 的矩阵图使用两位数字/字母组合表示矩阵坐标例如20、67、B7。其规则为第一位0–9、A、B表示矩阵行号row第二位0–7表示矩阵列号col与 info.json 中每个键位的matrix: [row, col]字段一一对应。例如Esc 在图中标注为00对应 info.json 中的{label: Esc, matrix: [0, 0], ...}F13 标注为16对应{label: F13, matrix: [1, 6], ...}Pause 标注为37对应{label: Pause, matrix: [3, 7], ...}。理解了这一规则整张图就可以翻译成一张键位 → 矩阵坐标的对照表。整个矩阵共使用12 行 × 8 列行号 0–11其中 A、B 表示 10、11列号 0–7构成一个最多容纳 96 个物理位置的扫描网格为多配列支持预留了充足空间。分区逐一解读六块区域的矩阵坐标顶部行F13 行与标准行a88 / a87 双布局矩阵图第一行展示了 F13 变体a88 风格的顶部键位┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐┌───┬───┬───┐ │00 ││10 │01 │11 │02 ││12 │03 │13 │04 ││14 │05 │15 │06 ││16 ││07 │17 │37 │ F13 Row └───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘└───┴───┴───┘其中00Esc10F101F211F302F412F503F613F704F814F905F1015F1106F1216F1307Print Screen17Scroll Lock37Pause共 17 个键位与 info.json 中LAYOUT_allF13 变体的顶部行完全吻合。第二行则是无 F13 的标准 TKL 顶部行a87 风格┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐┌───┬───┬───┐ │00 │ │01 │11 │02 │12 │ │03 │13 │04 │14 │ │05 │15 │06 │16 ││07 │17 │37 │ └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘└───┴───┴───┘即00Esc、01F1、11F2、……、16F12、07/17/37PrScr/ScrLk/Pause。对比可见F13 变体与标准变体在矩阵坐标上是两套不同的映射例如 F1 在 F13 布局中是10在标准布局中是01这正是 info.json 中同时定义LAYOUT_all含 F13与LAYOUT_tkl_ansi等无 F13 配列的原因也是这块 PCB 兼容 a87/a88 两种壳体布局的矩阵层面体现。数字行与 2u Backspace第三行是数字行┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐┌───┬───┬───┐ ┌───────┐ │20 │30 │21 │31 │22 │32 │23 │33 │24 │34 │25 │35 │26 │36 │67 ││27 │57 │97 │ │67 │ 2u Backspace ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤├───┼───┼───┤ └─┬─────┤主键区依次为20、301、212、313、224、325、236、337、248、349、250、35-、26、36\、67Backspace右侧导航列为27Insert、57Home、97Page Up。图中还单独标注了 **2u Backspace 67**也就是说Backspace 位置在矩阵上固定为[6, 7]既可以承载标准 2u 单键也可以与36组合形成 1.5u 1u 的拆分形式——具体使用哪种由所选 LAYOUT 宏决定如LAYOUT_tkl_ansi使用 2u Backspace而LAYOUT_tkl_ansi_split_bs_rshift等 split_bs 配列则使用拆分的\ Backspace。主键区三行QWERTY、大写锁定行与 Shift 行QWERTY 行Tab 起首├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤├───┼───┼───┤ └─┬─────┤ │40 │50 │41 │51 │42 │52 │43 │53 │44 │54 │45 │55 │46 │56 ││47 │77 │B7 │ │ │40Tab1.5u、50Q、41W、51E、42R、52T、43Y、53U、44I、54O、45P、55[、46]、56\1.5u导航列为47Delete、77End、B7Page Down。大写锁定行Caps Lock 起首├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤├───┼───┼───┤ ┌──┴┐76 │ ISO Enter │60 │70 │61 │71 │62 │72 │63 │73 │64 │74 │65 │75 │76 ││B0 │ │A2 │ │66 │ │60Caps Lock1.75u、70A、61S、71D、62F、72G、63H、73J、64K、74L、65;、75、76EnterANSI 2.25u 或 ISO 竖排 2u 高的上半部分导航列还有两个额外的B0[11, 0]与A2[10, 2]键位它们在 info.json 中均被定义为 Fn 功能键。Shift 行LShift 起首├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤└───┼───┼───┘ └───┴────┘ │80 │90 │81 │91 │82 │92 │83 │93 │84 │94 │85 │95 │86 │96 │ │87 │80左 Shift、90\、81Z、91X、82C、92V、83B、93N、84M、94,、85.、95/、86右 Shift、96Fn上方独立标注87↑。注意 Fn 键96占据右 Shift 右侧的位置这在 split right shift 配列中用于补足 1.75u 右 Shift 之后的剩余空间。底部修饰键行与方向键├────┼───┴┬──┴─┬─┴───┴──┬┴───┼───┴───┴──┬┴───┼───┴┬────┬┴───┤┌───┼───┼───┐ │A0 │B1 │A1 │B2 │A3 │B3 │A4 │B4 │A5 │B5 ││A6 │B6 │A7 │ └────┴────┴────┴────────┴────┴──────────┴────┴────┴────┴────┘└───┴───┴───┘这是LAYOUT_all的完整底部行A0Ctrl、B1GUI、A1Alt、B2Space2.25u、A3Space1.25u、B3Space2.75u、A4Fn、B4Alt、A5GUI、B5Ctrl导航列为A6←、B6↓、A7→。其中三个 Space 位置B2/A3/B3正是分裂空格Split Space配列的基础而标准/Tsangan 配列则只使用其中若干位置见下节。ISO Enter 的矩阵实现矩阵图在右侧专门标注了ISO Enter它由66#矩阵[6, 6]与76Enter矩阵[7, 6]共同构成——在 ISO 配列中#键与 2 行高的竖排 Enter 共享列 6两键在物理上呈上下叠放关系对应 info.json 中 ISO 配列对#与 Enterw: 1.25, h: 2的定义。这也解释了为何 ANSI 与 ISO 配列必须分开定义同一个76位置在 ANSI 下是 2.25u 横向 Enter在 ISO 下则是 2u 高竖排 Enter 的下半段键位宽度与高度属性完全不同。底部配列三种变体Standard / Tsangan(WKL) / Tsangan Split Space矩阵图的最后三行给出了底部配列的所有合法组合关键坐标如下┌────────┐ ┌──────────┐ │80 │ 2.25u LShift 2.75u RShift │86 │ └────────┘ └──────────┘2.25u 左 Shift 与 2.75u 右 Shift左 Shift 固定使用80[8, 0]右 Shift 固定使用86[8, 6]。当选择 2.25u/2.75u 宽度时标准 TKL矩阵坐标不变仅键帽宽度变化当选择 1.75u 右 Shift 时split rshift右侧多出的位置由96Fn 填补。┌────┬────┬────┬────────────────────────┬────┬────┬────┬────┐ │A0 │B1 │A1 │A3 │A4 │B4 │A5 │B5 │ Standard └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘Standard标准A0Ctrl(1.25u)、B1GUI(1.25u)、A1Alt(1.25u)、A3Space(6.25u)、A4Alt(1.25u)、B4GUI(1.25u)、A5Menu(1.25u)、B5Ctrl(1.25u)。即1.251.251.25 6.25 空格 1.25×4的经典 6.25u 空格配列对应LAYOUT_tkl_ansi等标准配列。┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐ │A0 │B1 │A1 │A3 │B4 │A5 │B5 │ Tsangan/WKL └─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘Tsangan / WKLA0Ctrl(1.5u)、B1GUI(1u)、A1Alt(1.5u)、A3Space(7u)、B4Alt(1.5u)、A5Menu(1u)、B5Ctrl(1.5u)。即1.511.5 7u 空格 1.511.5的 Tsangan 底部行对应LAYOUT_tkl_ansi_tsangan等配列。┌─────┬───┬─────┬───────────┬───┬───────────┬─────┬───┬─────┐ │A0 │B1 │A1 │B2 │A3 │B3 │B4 │A5 │B5 │ Tsangan/WKL Split Space └─────┴───┴─────┴───────────┴───┴───────────┴─────┴───┴─────┘Tsangan/WKL Split Space分裂空格A0Ctrl(1.5u)、B1GUI(1u)、A1Alt(1.5u)、B2Space(2.25u)、A3Space(1.25u)、B3Space(2.75u)、B4Alt(1.5u)、A5Menu(1u)、B5Ctrl(1.5u)。空格被拆成 2.25u 1.25u 2.75u 三段这正是LAYOUT_all及LAYOUT_tkl_f13_ansi_split_space_split_bs_rshift这类配列所采用的底部结构。从矩阵图到 info.jsonLAYOUT 宏与社区配列的对应矩阵图描述的是物理矩阵层的坐标而 info.json 中的layouts字段把这些坐标与逻辑键位绑定起来。waffling80 共定义了一个全功能LAYOUT_all以及 16 个标准 TKL 社区配列community_layouts配列族变体tkl_ansitkl_ansi、tkl_ansi_split_bs_rshift、tkl_ansi_tsangan、tkl_ansi_tsangan_split_bs_rshifttkl_f13_ansitkl_f13_ansi、tkl_f13_ansi_split_bs_rshift、tkl_f13_ansi_tsangan、tkl_f13_ansi_tsangan_split_bs_rshifttkl_isotkl_iso、tkl_iso_split_bs_rshift、tkl_iso_tsangan、tkl_iso_tsangan_split_bs_rshifttkl_f13_isotkl_f13_iso、tkl_f13_iso_split_bs_rshift、tkl_f13_iso_tsangan、tkl_f13_iso_tsangan_split_bs_rshift另外 info.json 中还保留了LAYOUT_tkl_f13_ansi_split_space_split_bs_rshift与LAYOUT_tkl_f13_iso_split_space_split_bs_rshift两个分裂空格专用配列它们与LAYOUT_all一样包含B2/A3/B3三段空格。这些配列名在 QMK Configurator 中直接可见方便用户在不写代码的情况下选用。LAYOUT_all的特殊之处在于它是唯一包含全部 96 个矩阵槽位的配列不仅包含三键分裂空格、F13 键还包含B0/A2两个 Fn 位与97Page Up等导航位供默认键位与高级用户使用。默认键位 keymaps/default/keymap.c 正是以LAYOUT_all编写主层layer 0定义了完整的 ANSI 键位并在底部行使用KC_SPC×3 填满三段空格同时用MO(1)挂载 Fn 层Fn 层layer 1除QK_BOOT一键进 DFU与KC_TRNS透传外全部透明。键位末尾注释 extra keys for alps dual action switches 表明LAYOUT_all中多出的槽位同时服务于 Alps 双动作开关的额外触点。实战如何利用矩阵图排查问题与定制键位定位按键失效若某个键按下无反应先在矩阵图中找到该键的坐标如 Backspace67再到 info.json 的对应配列中确认该坐标确实被映射、且你的 keymap 中该位置不是KC_TRNS或KC_NO。若坐标在矩阵图中存在但在所选 LAYOUT 中缺失例如选择tkl_ansi后B2/A3三段空格只剩A3一段说明该键属于其他配列的专属槽位。选择匹配的 LAYOUT根据你的键帽配列——是否 F13、是否 ISO、是否 Tsangan、是否分裂空格、是否分裂 Backspace/右 Shift——在 info.json 的community_layouts中挑选对应名称的宏可保证矩阵坐标与物理键位严格对齐。理解双布局 F 区F13 行与标准行的矩阵坐标不同10与01的位置互换切勿在两种配列间混用同一份 keymap 中的 F 区顺序。检查 RGB 指示灯逻辑Rev A/B 的 rev_a.c 与 rev_b.c 通过led_update_kb()将 Caps Lock / Scroll Lock 状态映射到 RGB 指示位索引 0、1默认跟随当前 HSV 值也可通过定义CAPS_LOCK_COLOR、SCROLL_LOCK_COLOR固定颜色。这提示矩阵图中07/17PrScr/ScrLk区域对应的锁键状态会驱动 RGB 指示。构建与刷写在搭建好 QMK 构建环境后可按 readme.md 提供的命令分别编译三个硬件目标make 4pplet/waffling80/rev_a:default make 4pplet/waffling80/rev_b:default make 4pplet/waffling80/rev_b_ansi:default进入 DFU 刷写模式有两种方式Rev A轻触 PCB 背面的物理复位键或短接标有 RESET 的复位排针若已刷入预编译固件可拔线后同时按住Spacebar 与 B插线等待约 1 秒再松开。Rev B按住 PCB 背面复位排针数秒若已刷入固件可拔线后按住Esc插线等待约 1 秒再松开详见 rev_b/readme.md。进入 DFU 后即可使用make ...:flash或 QMK Toolbox 烧录固件。小结waffling80 的矩阵图本质上是物理矩阵 → 逻辑键位的桥梁两位坐标XY对应[rowX, colY]顶部 F13/标准双布局、2u Backspace67、ISO Enter6676、三段分裂空格B2/A3/B3以及 Standard / Tsangan / Tsangan Split Space 三种底部行共同构成了这块 PCB 兼容 a87/a88、覆盖 ANSI/ISO 与 F13 的全部配列空间。将矩阵图与 info.json、默认 keymap 对照阅读即可完整掌握这块 PCB 的扫描结构为固件定制与问题排查提供最底层的依据。【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考