ARTICLE DETAIL

资讯详情

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

ZMK 固件中 nice!view Adapter 转换盾(Shield)完整使用指南:复用 I2C OLED 头、CS 飞线与 SPI 总线接管

ZMK 固件中 nice!view Adapter 转换盾(Shield)完整使用指南:复用 I2C OLED 头、CS 飞线与 SPI 总线接管 固件嵌入式智能硬件蓝牙【免费下载链接】zmkZMK Firmware Repository项目地址https://gitcode.com/gh_mirrors/zm/zmk点击查看免费下载导读本文围绕 ZMK 固件仓库中nice_view_adapter这个转换盾adapter shield展开讲解如何把低功耗、高刷新率的 nice!view 显示屏接到那些只暴露 I2C OLED 接口的现有盾/板上并复用 OLED 的 SDA/SCL 引脚同时通过一根飞线bodge wire把单片机的某个引脚接到 nice!view 的 CS 引脚上。读完本文你将掌握nice_view_adapter的加入方式与 shield 顺序、它在各主控nice!nano、blueMicro840、nRFmicro、mikoto 等上的 SPI 引脚复用细节、为什么必须覆盖nice_view_spi的cs-gpios以及如何在zmk-config里自定义这条 SPI 总线。nice!view 与 Adapter 的定位为什么要一个转换盾ZMK 固件对显示器的支持分为两类传统的 I2C OLED 显示器以及 nice!view 这类通过 SPI 驱动的低功耗高刷新率显示屏。在 app/boards/shields/nice_view/README.md 中明确说明nice!view shield 要求提供一条被标记为nice_view_spi的 SPI 总线并且该总线至少需要定义 MOSI、SCK 和 CS 引脚。问题在于很多现有键盘盾如 lily58与主控板如 nice!nano只预留了 I2C OLED 的排针接口并没有现成的 SPI 排针。因此 ZMK 仓库提供了一个专用的转换盾nice_view_adapter它位于 app/boards/shields/nice_view_adapter作用是作为 nice!view 与“暴露 I2C OLED 头”的现有盾/板之间的适配器让 nice!view 复用 OLED 头的 SDA/SCL 两个引脚分别作为 SPI 的 MOSI 与 SCK剩下的 CS 引脚需要用户用一根飞线从单片机的一个特定引脚默认是pro_micro 1引脚即面向板子正面时的左上角引脚俗称 D1接到 nice!view 的 CS 引脚上。从 shield 元数据 nice_view_adapter.zmk.yml 可以看到它的声明file_format: 1 id: nice_view_adapter name: nice!view adapter type: shield url: https://nicekeyboards.com/nice-view requires: [i2c_oled] exposes: [nice_view_header]其中requires: [i2c_oled]表明它依赖提供 I2C OLED 接口的盾/板而exposes: [nice_view_header]则说明它向外暴露了 nice!view 用的排针接口。启用方式shield 顺序是成败关键README 给出的用法核心是一条命令west build -b nice_nano -- -DSHIELDlily58_left nice_view_adapter nice_view这里最关键的一点是必须把nice_view_adapter放在nice_view之前。ZMK 会按顺序解析 shield 列表nice_view_adapter需要先完成两件事接管 I2C 引脚、把原先给 OLED 用的spi0/I2C 外设重新配置为 SPI 总线并命名为nice_view_spi之后nice_view才能在这条总线上挂载它自己的ls0xx显示屏节点。顺序写反会导致nice_view找不到可用的nice_view_spi编译或运行时报错。引脚复用与飞线默认 CS 引脚是pro_micro 1Adapter 的工作原理是复用 OLED 头的 SDA/SCL 引脚将这两个引脚配置为 SPI 的 MOSI/SCK期望用户用一根飞线把单片机上的pro_micro 1引脚面向板子正面的左上角俗称 D1接到 nice!view 的 CS 引脚。如果pro_micro 1引脚在你的布局中不可用README 给出了两条替代方案在你的zmk-config例如 keymap 或 overlay 文件中覆盖nice_view_spi总线的cs-gpios或者完全不使用本 adapter自行定义一条nice_view_spi总线。从源码看各主控的适配 overlay 都落在 app/boards/shields/nice_view_adapter/boards 目录目前覆盖的主控包括nice_nano_nrf52840_zmk.overlaybluemicro840_nrf52840_zmk.overlaynrfmicro_nrf52840_zmk_1_1_0.overlaynrfmicro_nrf52840_zmk_1_3_0.overlaynrfmicro_nrf52840_flipped_zmk_1_1_0.overlaypuchi_ble_nrf52840_zmk.overlaymikoto_nrf52840_zmk.overlay以 boards/nice_nano_nrf52840_zmk.overlay 为例它的核心内容如下pinctrl { spi0_default: spi0_default { group1 { psels NRF_PSEL(SPIM_SCK, 0, 20), NRF_PSEL(SPIM_MOSI, 0, 17), NRF_PSEL(SPIM_MISO, 0, 25); }; }; spi0_sleep: spi0_sleep { group1 { psels NRF_PSEL(SPIM_SCK, 0, 20), NRF_PSEL(SPIM_MOSI, 0, 17), NRF_PSEL(SPIM_MISO, 0, 25); low-power-enable; }; }; }; nice_view_spi: spi0 { compatible nordic,nrf-spim; pinctrl-0 spi0_default; pinctrl-1 spi0_sleep; pinctrl-names default, sleep; cs-gpios pro_micro 1 GPIO_ACTIVE_HIGH; }; pro_micro_i2c { status disabled; };这段代码透露了几个关键实现细节SPI 引脚映射SCK 被配置到 P0.20即 OLED 头的 SCLMOSI 被配置到 P0.17即 OLED 头的 SDAMISO 使用 P0.25nice!view 为单向写入场景实际需要的是 MOSI/SCK/CSMISO 一并定义是为了 SPI 外设完整可用。CS 引脚cs-gpios pro_micro 1 GPIO_ACTIVE_HIGH正是 README 中“飞线到pro_micro 1D1”这一说法的代码来源。如果该引脚不可用就必须覆盖这一行。禁用 I2Cpro_micro_i2c { status disabled; };表明 adapter 会关闭原先的 I2C 控制器因为引脚已被 SPI 复用同时这也防止了 I2C OLED 驱动与 nice!view 冲突。低功耗spi0_sleep中启用了low-power-enable睡眠时引脚保持低功耗状态契合 nice!view 低功耗定位。blueMicro840 与 nRFmicro 的 overlay 结构完全一致见 boards/bluemicro840_nrf52840_zmk.overlay、boards/nrfmicro_nrf52840_zmk_1_1_0.overlay只是 SCK/MOSI 的引脚不同blueMicro840 为 P0.17/P0.15nRFmicro 1.1.0 为 P0.17/P0.15mikoto 的版本则使用 P0.20/P0.17 且 MISO 为 P0.5见 boards/mikoto_nrf52840_zmk.overlay。如果你用的主控不在上述列表中需要参考对应板子的引脚定义自行补一个同名 overlay。关闭 OLEDCONFIG_SSD1306n适配器同时提供了一个配置文件 nice_view_adapter.conf# Disable OLED CONFIG_SSD1306n含义是当启用nice_view_adapter时关闭 SSD1306常见 I2C OLED 控制器驱动避免同一组引脚上同时存在 OLED 与 nice!view 两条显示链路。这是把“I2C OLED 头”让位给“SPI nice!view”的必要步骤。覆盖 cs-gpios 的实战写法若你的布局无法使用pro_micro 1D1可在zmk-config的 keymap 或独立 overlay 中覆盖总线属性。例如nice_view_spi { cs-gpios gpio0 6 GPIO_ACTIVE_HIGH; };覆盖后请确认新引脚在你使用的布局中确实空闲可用飞线接到这个新引脚与 nice!view 的 CS 引脚之间如果连这条总线都不想用 adapter 提供的默认映射则按 nice_view/README.md 的要求自行定义一条至少包含 MOSI、SCK、CS 的nice_view_spi总线再叠加nice_viewshield。与 nice_view shield 的衔接总线要求与显示节点Adapter 的作用止于“把总线准备好”真正驱动屏幕的是nice_viewshield。查看 app/boards/shields/nice_view/nice_view.overlay 可以看到它挂载的显示节点nice_view_spi { status okay; nice_view: ls0xx0 { compatible sharp,ls0xx; spi-max-frequency 1000000; reg 0; width 160; height 68; serial-vcom-inversion; serial-vcom-interval 33; }; };也就是说nice_view期望nice_view_spi已经存在由 adapter 或用户自己提供并且只在其上追加sharp,ls0xx屏幕节点。这就解释了为什么 shield 顺序必须是nice_view_adapter在前、nice_view在后。常见问题与排查思路编译报错找不到nice_view_spi多半是 shield 顺序写反或主控没有对应的 adapter overlay。屏幕不显示但编译通过先检查飞线是否接到pro_micro 1D1以及cs-gpios是否与飞线实际引脚一致。想保留 I2C OLED 又想加 nice!view二者复用同一组引脚CONFIG_SSD1306n会关闭 OLED 驱动一般不建议同时启用。使用未在 app/boards/shields/nice_view_adapter/boards 中列出的主控需要参照现有 overlay 的写法为你的板子补齐nice_view_spi定义。小结nice_view_adapter是 ZMK 生态中衔接“传统 I2C OLED 头”与“SPI nice!view 屏”的桥接盾。它的核心价值在于不改硬件排针设计仅靠复用 SDA/SCL 加一根 CS 飞线就能把现有键盘升级到 nice!view而其实现见 app/boards/shields/nice_view_adapter/nice_view_adapter.overlay 与各主控 overlay则清晰地展示了 ZMK 中通过 pinctrl 复用外设、用cs-gpios自定义片选、以及通过CONFIG_SSD1306n避免驱动冲突的典型做法。赞分享固件嵌入式智能硬件蓝牙【免费下载链接】zmkZMK Firmware Repository项目地址https://gitcode.com/gh_mirrors/zm/zmk点击查看免费下载相关推荐5分钟搞定IDM永久试用免费激活脚本终极指南5分钟搞定IDM永久试用免费激活脚本终极指南 还在为IDM的30天试用期烦恼吗IDM Activation ScriptIAS这款开源工具为您提供了一站CLIZephyr 中的 Adafruit AHT20 Shield从 I2C 接线到 west build 完整接入指南Zephyr 中的 Adafruit AHT20 Shield从 I2C 接线到 west build 完整接入指南 Adafruit AHT20 Shiel操作系统嵌入式RTOS物联网Betaflight驱动开发终极指南I2C/SPI总线设备接入完整教程Betaflight作为开源飞控固件的领导者其强大的驱动框架为开发者提供了便捷的设备接入能力。无论您是无人机爱好者还是嵌入式开发者掌握Betaflight的嵌入式固件无人机物联网上一篇告别手动下载3步轻松批量获取网易云音乐FLAC无损音乐下一篇阴阳师自动化脚本3分钟掌握AI智能刷图的核心技术创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表