ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

深入解析 ZMK 的 Makerdiary M60 60% ANSI 键盘 Shield:矩阵配线与按键映射实战

深入解析 ZMK 的 Makerdiary M60 60% ANSI 键盘 Shield:矩阵配线与按键映射实战 固件嵌入式智能硬件蓝牙【免费下载链接】zmkZMK Firmware Repository项目地址https://gitcode.com/gh_mirrors/zm/zmk点击查看免费下载导读本篇文章以 ZMK 固件仓库中 m60 Shield 的官方 README 为核心骨架结合其完整的 overlay 设备树、keymap 按键映射 与 Kconfig 构建配置系统讲解如何为一个基于 MakerDiary M.2 nRF52840 模块的 60% ANSI 键盘定义矩阵扫描、物理布局与分层按键行为。读完本文你将掌握 ZMK Shield 从硬件接线到固件配置的完整落地路径并理解矩阵变换matrix transform与物理布局physical layout的协作原理可直接参照为自己的键盘编写 ZMK 配置。M60 Shield 是什么M60 是由 MakerDiary官方产品页 目录下配套的核心硬件特性在 README 中被概括为三点Per key RGB LED每键独立的 RGB 背光使用 MakerDiary M.2 nRF52840 模块主控为 M.2/NGFF 封装形式的 nRF52840 无线 SoC 模块同时支持 USB 与 BLE 输出矩阵布线Matrix wiring按键采用标准行列矩阵扫描结构。从元数据文件 m60.zmk.yml 可以确认该 Shield 的依赖关系与能力声明file_format: 1 id: m60 name: MakerDiary m60 type: shield url: https://makerdiary.com/pages/m60-mechanical-keyboard requires: [makerdiary_nrf52840_m2] features: - keys - studio其中requires: [makerdiary_nrf52840_m2]表示它必须搭载 MakerDiary nRF52840 M.2 模块interconnect而features中的studio表明该 Shield 还支持 ZMK Studio 的运行时键位编辑能力。硬件的官方资料入口README 将硬件的详细规格如 PCB 原理图、引脚定义、走线细节指向了 MakerDiary 官方 Wiki 的硬件开发者指南https://wiki.makerdiary.com/m60/developer_guide/hardware/。在 ZMK 仓库内我们无法获得 PCB 层面的完整图纸但可以通过 m60.overlay 精确反推出固件视角下真实的 GPIO 接线方案——这正是下一节要深入讲解的内容。矩阵扫描配置从硬件走线到设备树8×8 矩阵与 col2row 二极管方向m60.overlay 中定义了kscan0扫描节点kscan0: kscan { compatible zmk,kscan-gpio-matrix; wakeup-source; diode-direction col2row; row-gpios gpio0 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN) , gpio0 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN) , gpio0 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN) , gpio0 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN) , gpio1 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN) , gpio1 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN) , gpio0 12 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN) , gpio0 11 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN) ; col-gpios gpio0 19 GPIO_ACTIVE_HIGH , gpio0 20 GPIO_ACTIVE_HIGH , gpio0 21 GPIO_ACTIVE_HIGH , gpio0 22 GPIO_ACTIVE_HIGH , gpio0 23 GPIO_ACTIVE_HIGH , gpio0 24 GPIO_ACTIVE_HIGH , gpio0 25 GPIO_ACTIVE_HIGH , gpio0 26 GPIO_ACTIVE_HIGH ; };解读要点如下8 行 × 8 列row-gpios与col-gpios各有 8 个引脚构成 64 个矩阵交点恰好覆盖 60% 布局的 61 个按键diode-direction col2row二极管从列指向行扫描时行作为输入、列作为输出行引脚启用GPIO_PULL_DOWN行端在未按下时被拉低按下时变为高电平配合GPIO_ACTIVE_HIGH即可稳定识别触发同时配置了wakeup-source允许按键唤醒设备跨 GPIO 控制器行信号分布在gpio0与gpio1两个端口上列信号全部位于gpio0这反映了 PCB 走线对引脚分配的约束也是编写其他键盘 overlay 时需要注意的细节。矩阵变换把物理行列映射为逻辑按键位置矩阵扫描得到的是行列坐标而键位图需要的是一维的按键位置编号。default_transform节点compatible zmk,matrix-transform负责完成这层转换声明了columns 8; rows 8;并通过map将矩阵坐标逐一映射到按键盘物理排列的序号default_transform: keymap_transform_0 { compatible zmk,matrix-transform; columns 8; rows 8; map RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(3,3) RC(3,2) RC(3,1) RC(3,0) RC(2,7) RC(2,6) RC(2,5) RC(2,4) RC(2,3) RC(2,2) RC(2,1) RC(2,0) RC(1,7) RC(1,6) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(5,0) RC(6,4) RC(6,3) RC(6,2) RC(6,1) RC(6,0) RC(5,7) RC(5,6) RC(5,5) RC(5,4) RC(5,3) RC(5,2) RC(5,1) RC(6,5) RC(6,6) RC(6,7) RC(7,0) RC(7,1) RC(7,2) RC(7,3) RC(7,4) ; };RC(row, col)是矩阵变换头文件 matrix_transform.h 提供的宏含义是矩阵第 row 行、第 col 列。从映射顺序可以直观看出行 0、行 1 的前几列承载主键区左 Shift、Caps Lock 等大键被分配到如RC(3,3)、RC(3,4)等对角线上的矩阵交点这是 PCB 为绕开走线冲突而做的矩阵压缩设计空格键6.25U只占用RC(7,0)一个交点符合单键单交点的常规做法。复用官方 60% ANSI 物理布局M60 没有重新定义按键的物理尺寸与坐标而是直接复用了 ZMK 仓库内置的 60percent/ansi.dtsi 物理布局并通过chosen与 transform 完成装配/ { chosen { zmk,kscan kscan0; zmk,physical-layout layout_60_ansi; }; }; layout_60_ansi { transform default_transform; };zmk,kscan指向kscan0扫描节点zmk,physical-layout指向layout_60_ansi该布局在 ansi.dtsi 中定义了 61 个按键的物理尺寸1U、1.5U、2U、6.25U 空格等与坐标并为每颗按键标注了display-name 60% ANSItransform default_transform将矩阵坐标桥接到物理布局的按键序号。这种官方通用物理布局 私有矩阵变换的组合是 ZMK 生态中常见的做法物理形状交给通用模板矩阵压缩逻辑留在各 Shield 自己的 overlay 中职责清晰、便于维护。按键映射默认层与 Fn 层的实战设计m60.keymap 展示了完整的键位图。它引入了三个头文件#include behaviors.dtsi #include dt-bindings/zmk/keys.h #include dt-bindings/zmk/bt.hbehaviors.dtsi 提供kp按键按下、mo瞬时层、trans透传、bootloader、sys_reset、bt、none等行为keys.h 定义 HID 键值宏N1、Q、LSHFT等bt.h 定义蓝牙行为参数BT_CLR、BT_SEL 0等。默认层标准 60% ANSI 键位默认层布局与 README 描述的 60% ANSI 完全一致字母区、数字区、修饰键且保留了 Windows 风格的空格行LCTRL / LGUI / LALT / SPACE / RALT / MO(1) / RGUI / RCTRL。关键行如下kp ESC kp N1 ... kp MINUS kp EQUAL kp BSPC kp TAB kp Q ... kp LBKT kp RBKT kp BSLH kp CLCK kp A ... kp SEMI kp SQT kp RET kp LSHFT kp Z ... kp COMMA kp DOT kp FSLH kp RSHFT kp LCTRL kp LGUI kp LALT kp SPACE kp RALT mo 1 kp RGUI kp RCTRLmo 1是唯一的非普通按键按住进入 Fn 层松开即退出属于瞬时层行为。bindings 数组的书写顺序必须与物理布局中按键的物理排列顺序一一对应任何错位都会导致按键错乱。Fn 层功能键、蓝牙与系统控制第二层fn_layerdisplay-name Fn Layer演示了 ZMK 多层键位图的典型玩法共四类用法功能键行F1 ~ F12与GRAVE波浪号~系统级行为bootloader进入刷写模式与sys_reset软件重启蓝牙配置bt BT_CLR清除配对信息、bt BT_SEL 0至bt BT_SEL 4在 5 个 BLE profile 间切换选择这些参数由 bt.h 定义对应 ZMK 的多 profile 蓝牙架构导航与透传kp LEFT / DOWN / UP / RIGHT方向键以及大量trans透传——按下 Fn 层中标记为trans的位置时行为会继续沿用默认层对应键的绑定这是分层键位图中避免重复声明常用键的标准手法。none则用于显式屏蔽某键在 Fn 层的功能。kp GRAVE kp F1 ... kp F12 bootloader trans bt BT_CLR none ... sys_reset trans bt BT_SEL 0 bt BT_SEL 1 bt BT_SEL 2 bt BT_SEL 3 bt BT_SEL 4 kp LEFT kp DOWN kp UP kp RIGHT none none trans trans none ... trans trans trans trans trans trans trans trans trans注意 Fn 层最后一行全部是trans这意味着 Fn空格等组合仍会透传到底层绑定行为符合直觉。构建集成Kconfig 与元数据Kconfig.shield 与默认键盘名m60 目录下的两个 Kconfig 文件负责把 Shield 接入 Zephyr 构建系统Kconfig.shieldconfig SHIELD_M60通过$(shields_list_contains,m60)在构建时检测是否选择了 m60 ShieldKconfig.defconfig当SHIELD_M60使能时将ZMK_KEYBOARD_NAME默认设为m60从而决定 BLE 广播与 USB 描述符中显示的设备名称。主控与互联的依赖链m60 依赖的makerdiary_nrf52840_m2interconnect 定义在 app/boards/interconnects/makerdiary_nrf52840_m2/makerdiary_nrf52840_m2.zmk.yml其描述指出该 M.2 模块通过 M.2/NGFF 封装暴露大量 GPIO可灵活挂接 I2C、SPI 等外设而实际主控板则由 app/boards/makerdiary/nrf52840_m2 目录下的nrf52840_m2//zmk板定义提供arch: arm输出支持usb与ble。因此 M60 的完整依赖链是Board: nRF52840 M.2 (nrf52840_m2//zmk) └─ Interconnect: makerdiary_nrf52840_m2 └─ Shield: m60使用与构建方式要基于本仓库构建 M60 固件可按标准 ZMK 构建流程操作确保已按 docs/development/local-toolchain 中的说明配置好 Zephyr SDK 与 west 环境后在 app 目录执行类似如下的构建命令west build -b makerdiary_nrf52840_m2 -- -DSHIELDm60构建产物可通过 USB 或 BLE 刷写到 M.2 模块上。之后即可通过修改 m60.keymap 自定义各层键位通过调整 m60.overlay 中的row-gpios/col-gpios与default_transform适配自定义接线利用features: studio元数据启用 ZMK Studio在运行时通过上位机直接编辑键位。小结M60 Shield 是 ZMK 中官方硬件 社区固件协作的典型样本README 只给出了硬件概貌与外部资料入口真正的技术细节沉淀在 overlay8×8 矩阵扫描 矩阵压缩变换、keymap默认层 Fn 层的分层设计、Kconfig构建集成与元数据依赖与能力声明四类文件中。对自研键盘开发者而言这套矩阵压缩 物理布局复用 分层键位的组合模式正是从 PCB 走线约束走向可用固件的最短路径值得在同类项目中直接借鉴。赞分享固件嵌入式智能硬件蓝牙【免费下载链接】zmkZMK Firmware Repository项目地址https://gitcode.com/gh_mirrors/zm/zmk点击查看免费下载相关推荐ZMK 中的 BFO-9000 分体正交键盘 Shield硬件特性、矩阵配置与默认键位深度解析ZMK 中的 BFO 9000 分体正交键盘 Shield硬件特性、矩阵配置与默认键位深度解析 BFO 9000 是一款可自定义尺寸的全尺寸full siz固件嵌入式智能硬件蓝牙ZMK 固件 TG4x Shield 适配指南40% 键盘矩阵、键位分层与 RGB 灯带配置ZMK 固件 TG4x Shield 适配指南40% 键盘矩阵、键位分层与 RGB 灯带配置 TG4x 是一款采用 8×7 矩阵扫描的 40% 键盘其 ZM固件嵌入式智能硬件蓝牙QMK Nearfield 键盘矩阵深度解析ASCII 矩阵图、行列引脚分配与键位布局映射QMK Nearfield 键盘矩阵深度解析ASCII 矩阵图、行列引脚分配与键位布局映射 本文以 QMK 固件仓库中 Cannonkeys Nearfiel嵌入式固件驱动开发硬件开发上一篇推荐开源项目noise——打造去中心化应用的高效P2P网络栈下一篇Termux-MiUnlock常见问题解决7个最常见错误及修复方法创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表