
Zephyr 中 Adafruit ItsyBitsy nRF52840 Express 板级支持详解从设备树到 UF2 烧录【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr本文基于 Zephyr 仓库中boards/adafruit/itsybitsy板级目录的官方文档与配套源码完整讲解 Adafruit ItsyBitsy nRF52840 Express 开发板在 Zephyr RTOS 中的支持细节硬件能力、引脚与外设连接方式、设备树中各外设的配置逻辑以及通过 UF2 引导程序烧录 Zephyr 应用的完整流程。读完本文后你可以独立在这块 36 mm × 18 mm 的 ARM 开发板上构建、烧录并验证 Zephyr 示例程序并理解其设备树与内存分区背后的设计。硬件概览Adafruit ItsyBitsy nRF52840 Express 是一款小型36 mm × 18 mmARM 开发板板载 RGB LED、USB 接口、2 MB QSPI 外部 Flash并将 21 个 GPIO 引脚引出。根据板级目录 board.yml 的定义其在 Zephyr 中的板级标识符为identifier: adafruit_itsybitsy/nrf52840 name: Adafruit ItsyBitsy nRF52840 Express type: mcu arch: arm ram: 256 flash: 1024即构建时使用的目标板参数为adafruit_itsybitsy/nrf52840。核心规格官方文档列出的硬件构成如下nRF52840 ARM Cortex-M4F CPU主频 64 MHz1 MB 片上 Flash 和 256 KB SRAM2 MB QSPI 外部 Flash1 个用户 LED红色1 个用户按键开关1 颗 RGB DotStar 灯珠原生 USB 接口1 个复位按钮板级 Kconfig Kconfig.adafruit_itsybitsy 中通过select SOC_NRF52840_QIAA指定了具体的 SoC 变体即 QIAA 封装的 nRF52840。支持的子系统文档中的 Supported Features 章节由 Zephyr 构建系统依据 board.yml 自动展开实际声明的支持特性为ADC模数转换BluetoothBLE 与 802.15.4 无线电Counter计数器GPIOI2CPWMSPIUSB DeviceusbdWatchdog看门狗文档同时列出了 SoC 级可用外设的完整清单包括 CLOCK、FLASH、I2S、MPU、NVIC、QSPI、RTC、UARTE、USB、WDT 等。这意味着虽然并非每个子系统都在默认配置中打开但通过 Kconfig 即可按需启用。IO 与外设连接LED、按键与 DotStar文档给出了板上关键器件的引脚映射这些定义都能在设备树 adafruit_itsybitsy_nrf52840.dts 中找到对应实现器件引脚设备树中的定义LED0红色 LEDP0.06led0: gpios gpio0 6 GPIO_ACTIVE_HIGHDotStar LEDDATA P0.08CLK P1.09挂在spi2总线下见下文用户开关 SWITCHP0.29button0: gpios gpio0 29 (GPIO_PULL_UP \| GPIO_ACTIVE_LOW)复位按钮 RESETP0.18通过uicr { gpio-as-nreset; }复用为 nRESET有两点值得注意红色 LED 为高电平有效GPIO_ACTIVE_HIGH而开关采用上拉 低电平有效GPIO_PULL_UP | GPIO_ACTIVE_LOW即按下时引脚拉低触发这与gpio-keys绑定常用的接法一致。复位按钮所在的 P0.18 并非普通 GPIO设备树通过uicr { gpio-as-nreset; }将 nRESET 引脚配置为 GPIO 输入。从源码结构看这意味着应用层可以读取该引脚状态来判断用户是否手动复位了设备而不是简单地忽略这个按键。DotStar LED 的 SPI 建模文档指出 DotStar LED has been implemented as a SPI device。在设备树中RGB DotStar 被建模为 SPI 从设备apa102APA102 协议兼容器件spi2 { compatible nordic,nrf-spi; status okay; pinctrl-0 spi2_default; pinctrl-1 spi2_sleep; pinctrl-names default, sleep; apa102: apa1020 { compatible apa,apa102; reg 0; spi-max-frequency 5250000; chain-length 1; color-mapping LED_COLOR_ID_BLUE LED_COLOR_ID_GREEN LED_COLOR_ID_RED; }; };关键参数含义chain-length 1SPI 总线上只挂了 1 颗灯珠spi-max-frequency 5250000SPI 时钟上限 5.25 MHz符合 APA102 类器件的速率要求color-mapping声明送数顺序为蓝 → 绿 → 红BG 序。APA102 系列芯片的数据帧本身就是 BG 顺序而 Zephyr LED strip 子系统通常以 RGB 顺序组织颜色因此必须显式映射否则颜色会串位设备树顶层还定义了别名led-strip apa102;示例程序可通过DT_ALIAS(led_strip)直接找到该设备无需硬编码节点名。完整引脚分配pinctrl板级 pinctrl 定义文件 adafruit_itsybitsy_nrf52840-pinctrl.dtsi 为每个外设分别声明了default与sleep两组引脚映射sleep 组额外启用low-power-enable以降低休眠功耗。整理后的完整引脚分配如下外设信号引脚UART0TXP0.24UART0RXP0.25I2C0 (TWIM)SDAP0.16I2C0 (TWIM)SCLP0.14SPI1SCKP0.13SPI1MOSIP0.15SPI1MISOP0.20SPI2DotStarSCKP1.09SPI2DotStarMOSIP0.08QSPISCKP0.19QSPIIO0P0.21QSPIIO1P0.22QSPIIO2P1.00QSPIIO3P0.17QSPICSNP0.23在 adafruit_itsybitsy_nrf52840.dts 中各外设节点的启用状态为adc、gpiote、gpio0、gpio1、i2c0、spi1、spi2、qspi、usbd、ieee802154均为status okayuart0被显式status disabled——这与下文控制台走 USB CDC的设计一致物理 UART 引脚虽然保留在 pinctrl 中但默认不参与通信reg1LDO 调压器设置regulator-initial-mode NRF5X_REG_MODE_DCDC让芯片上电后使用 DCDC 模式以降低功耗。设备树关键配置解析USB CDC ACM 作为控制台文档 Logging 一节说明日志输出通过 USB-CDC 端口完成。其实现链路在设备树中一目了然启用 USB Device 控制器zephyr_udc0: usbd { compatible nordic,nrf-usbd; status okay; };设备树末尾#include ../boards/common/usb/cdc_acm_serial.dtsi引入公共片段 boards/common/usb/cdc_acm_serial.dtsi该片段在zephyr_udc0下挂了一个board_cdc_acm_uart子节点并把zephyr,console、zephyr,shell-uart、zephyr,uart-mcumgr、zephyr,bt-mon-uart、zephyr,bt-c2h-uart等多个 chosen 节点全部指向它。也就是说串口控制台、Zephyr shell、MCUmgr、蓝牙 monitor 与 C2H 串口共享同一条 USB CDC ACM 通道。这就是为什么在这块板上启用CONFIG_SERIAL相关特性后日志与 shell 直接出现在 USB 虚拟串口上而无需外接 USB-TTL 转换器。文档建议参考logging示例与usb-cdc-acm-console示例来体验这一机制。QSPI 外部 Flash 与内存分区设备树将 2 MB 外部 Flash 声明为 GD25Q16 芯片gd25q16: gd25q160 { compatible nordic,qspi-nor; reg 0; writeoc pp4o; readoc read4io; sck-frequency 32000000; jedec-id [c8 40 15]; size 16777216; has-dpd; t-enter-dpd 20000; t-exit-dpd 20000; quad-enable-requirements S2B1v1; };size 16777216即 16 MiB 位宽容量换算正是 2 MB 字节数写入使用 4 字节地址页编程pp4o读取使用 Quad I/O 模式read4io时钟 32 MHzhas-dpd与t-enter-dpd/t-exit-dpd声明该芯片支持深度掉电模式进入/退出各需 20 ms 延时QSPI 驱动据此管理休眠时的芯片状态。此外外部 Flash 上还划出了一个 LittleFS 存储分区gd25q16 { partitions { lfs_partition: partition0 { label lfs_storage; reg 0x00000000 DT_SIZE_M(2); }; }; };而片上 1 MB Flash 的布局则由设备树引用的 dts/vendor/nordic/nrf52840_partition_uf2_sdv6.dtsi 给出它面向 UF2 引导程序 SoftDevice S140 v6 场景分区起始地址大小说明SoftDevice0x00000000152 kB只读预置蓝牙协议栈Application0x00026000792 kBZephyr 应用代码分区Storage0x000ec00032 kB存储分区UF20x000f400048 kB只读UF2 引导程序本体设备树中的chosen节点将zephyr,flash、zephyr,sram、zephyr,code-partition分别指向flash0、sram0与code_partition配合默认配置即可让链接脚本把应用正确放到 0x26000 之后。默认 Kconfig板级默认配置 adafruit_itsybitsy_nrf52840_defconfig 内容很短但每项都有明确目的CONFIG_ARM_MPUy # 使能 MPU 内存保护 CONFIG_GPIOy # 使能 GPIO CONFIG_SERIALy CONFIG_CONSOLEy CONFIG_UART_CONSOLEy # 控制台实际走 USB CDC ACM CONFIG_USE_DT_CODE_PARTITIONy # 按设备树 code 分区放置代码 CONFIG_BUILD_OUTPUT_UF2y # 构建产物生成 UF2 镜像其中CONFIG_USE_DT_CODE_PARTITIONy与上面 UF2 分区布局直接配合CONFIG_BUILD_OUTPUT_UF2y则保证west build的产物天然包含可直接拖拽烧录的zephyr.uf2文件——这正是该板烧录方式的基础。用示例程序验证板卡功能文档 Testing LEDs and buttons 一节推荐用三个官方示例验证板卡示例验证对象说明blinky红色 LEDled0别名确认 Zephyr 基本运行button用户开关与红色 LED确认 GPIO 输入/输出led-stripDotStarled-strip别名 →apa102确认 SPI2 LED strip 子系统设备树中显式提供了一组为示例程序服务的别名aliases { led0 led0; sw0 button0; watchdog0 wdt0; led-strip apa102; };led0、sw0、watchdog0、led-strip都是 Zephyr 示例程序约定的通用别名因此这些示例无需修改源码即可直接构建到本板。LED 与按键的具体引脚定义位于 boards/adafruit/itsybitsy/adafruit_itsybitsy_nrf52840.dts如前文表格所列。编程与调试支持的调试/烧录运行器board.cmake 通过 include 公共 runner 脚本声明了本板支持的运行器文档中 Supported Runners 一节即由该文件展开bossac经 boards/common/bossac.board.cmake 引入用于 UF2 烧录jlink附加参数--devicenRF52840_xxAA --speed4000pyocd附加参数--targetnrf52840 --frequency4000000nrfutil、nrfjprog、openocdopenocd-nrf5 公共配置。UF2 烧录流程ItsyBitsy 出厂预置 Adafruit 的 BOSSA 兼容 UF2 引导程序快速双击复位按钮即可进入引导模式。完整烧录步骤构建blinky示例west build -b adafruit_itsybitsy/nrf52840 samples/basic/blinky用 USB 线将 ItsyBitsy 连接到主机快速双击复位按钮进入 bootloader 模式此时设备枚举为ITSY840BOOTU 盘将构建产物samples/basic/blinky/build/zephyr/zephyr.uf2拖拽到ITSY840BOOT盘设备自动断开并重连红色 LED 开始闪烁即表示 Zephyr 运行正常。由于adafruit_itsybitsy_nrf52840_defconfig已默认开启CONFIG_BUILD_OUTPUT_UF2yzephyr.uf2会在每次构建时自动生成无需额外配置。首次使用引导程序更新文档特别提示部分批次该板出厂时带有 bug 的引导程序。建议首次使用前按照 Adafruit 官方的 UF2 Bootloader update 教程升级引导程序该教程原本面向 Feather nRF52840但操作步骤对 ItsyBitsy 同样适用ItsyBitsy 专用的引导程序发布文件可在 Adafruit 的 nRF52 Bootloader 仓库Adafruit_nRF52_Bootloader releases中获取。文档说明 Zephyr 应用的构建与烧录已在UF2 引导程序 0.7.0版本上验证通过。关键文件索引文件作用boards/adafruit/itsybitsy/doc/index.rst板级官方文档本文核心依据boards/adafruit/itsybitsy/adafruit_itsybitsy_nrf52840.dts板级设备树LED/按键/别名/QSPI 分区等boards/adafruit/itsybitsy/adafruit_itsybitsy_nrf52840-pinctrl.dtsi各外设 default/sleep 引脚映射boards/adafruit/itsybitsy/adafruit_itsybitsy_nrf52840_defconfig默认 KconfigMPU、控制台、UF2 输出boards/adafruit/itsybitsy/board.yml板级标识符、架构、支持特性清单boards/adafruit/itsybitsy/board.cmake支持的运行器及参数boards/adafruit/itsybitsy/Kconfig.adafruit_itsybitsy板级 Kconfig选择 SoC 变体dts/vendor/nordic/nrf52840_partition_uf2_sdv6.dtsiUF2 SoftDevice v6 片上 Flash 分区布局boards/common/usb/cdc_acm_serial.dtsiUSB CDC ACM 控制台公共片段适用前提说明以上分区布局、UF2 引导流程均基于仓库当前版本的板级定义若使用非 v6 版本的 SoftDevice 引导布局需检查设备树所引用的分区 dtsi 是否匹配。板载引脚与功能特性以 Adafruit 官方 Learn 站点公布的 pinouts 与原理图为准文档 References 一节指向该站点。【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考