Zephyr 开发指南:nRF52840 DK (PCA10056) 板级支持详解与实战
Zephyr 开发指南nRF52840 DK (PCA10056) 板级支持详解与实战【免费下载链接】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 仓库中的 nRF52840 DKPCA10056板级文档为核心系统讲解该开发板在 Zephyr RTOS 中的硬件资源映射、LED/按键引脚定义、应用构建与烧录调试流程、UART1 引脚重映射方法以及使用 nRF52840 DK 模拟开发 nRF52811 芯片的方案。读完本文你将掌握 nRF52840 DK 在 Zephyr 中的完整开发套路从 board 目录结构、设备树DTS引脚配置、pinctrl 复用到用 overlay 文件自定义外设引脚并能独立完成 blinky/button 等示例的验证与 UART 引脚的按需调整。板卡总览PCA10056 与 nRF52840 SoCnRF52840 Development Kit硬件型号 PCA10056是 Nordic Semiconductor 官方推出的开发板板载一颗 nRF52840 处理器其内核为 ARM Cortex-M4F带浮点单元。在 Zephyr 中该板对应的 board 标识为nrf52840dk/nrf52840完整的板级定义位于 boards/nordic/nrf52840dk 目录。从 board.yml 可以看到该 board 实际声明了两颗 SoC 变体nrf52840板卡上真实焊接的 nRF52840PCA10056 原装nrf52811通过软件约束模拟 nRF52811 的变体详见下文nRF52811 模拟章节。资源规格boards/nordic/nrf52840dk/nrf52840dk_nrf52840.yaml 中声明了该变体的基础资源与 Zephyr 支持的外设能力架构armRAM256 KBFlash1024 KB1 MB工具链zephyr与gnuarmemb支持的外设adc、gpio、i2c、i2s、pwm、spi、usb_device/usbd、watchdog、counter、arduino_gpio/arduino_i2c/arduino_serial/arduino_spi以及netif:openthread网络接口。时钟nRF52840 DK 板载两颗外部晶振慢速时钟低频32.768 kHz通常用于 RTC、低功耗唤醒等场景主时钟高频32 MHz作为系统主时钟源。板级目录结构与关键文件在动手写应用前先了解boards/nordic/nrf52840dk目录下的文件分工这对理解后续配置非常关键文件作用nrf52840dk_nrf52840.dtsnRF52840 变体的主设备树定义 LED、按键、串口、I2C/SPI/PWM/QSPI/USB、Arduino 接口等全部外设节点nrf52840dk_nrf52840-pinctrl.dtsinRF52840 变体的引脚复用pinctrl映射定义各外设的 default/sleep 两组引脚状态nrf52840dk_nrf52811.dtsnRF52811 模拟变体的设备树额外定义了 mcuboot 分区布局nrf52840dk_nrf52811-pinctrl.dtsinRF52811 模拟变体的引脚映射nrf52840dk_nrf52840_defconfig/nrf52840dk_nrf52811_defconfig板级默认 Kconfig 配置MPU、GPIO、UART、ConsoleKconfig.defconfig/Kconfig.nrf52840dk板级 Kconfig 逻辑与 SoC 选择board.cmake定义烧录/调试 runnerjlink、pyocd、nrfutil、nrfjprog、openocd 等board.ymlboard 元数据名称、厂商、SoC 列表硬件连接与 IO 映射LED发光二极管板载 4 颗绿色 LED均位于 P0 端口且为低电平有效GPIO 输出低时点亮LED引脚LED1绿色P0.13LED2绿色P0.14LED3绿色P0.15LED4绿色P0.16对应到设备树 nrf52840dk_nrf52840.dts 中的leds节点每个 LED 被定义为gpio-leds兼容的节点例如led0: led_0 { gpios gpio0 13 GPIO_ACTIVE_LOW; label Green LED 0; };并在aliases中导出led0~led3别名同时导出pwm-led0指向 PWM 通道这是示例代码通过LED0等宏直接控制板载 LED 的基础。按键Push buttons板载 4 个用户按键加 1 个 BOOT 按键均为低电平有效并启用内部上拉按键丝印引脚BUTTON1SW1P0.11BUTTON2SW2P0.12BUTTON3SW3P0.24BUTTON4SW4P0.25BOOTSW5boot/reset复位/进入 bootloader设备树中按键被声明为gpio-keys节点并带zephyr,code输入事件码INPUT_KEY_0~INPUT_KEY_3例如button0: button_0 { gpios gpio0 11 (GPIO_PULL_UP | GPIO_ACTIVE_LOW); label Push button switch 0; zephyr,code INPUT_KEY_0; };同时在aliases中提供sw0~sw3、mcuboot-button0等别名。注意gpio0节点中还通过gpio-reserved-ranges声明了被占用/保留的引脚区间例如 P0.17~P0.23 被 QSPI 外接 Flash 占用见 nrf52840dk_nrf52840.dts 的gpio-line-names注释。其它板载外设来自设备树的细节除 LED 与按键外主设备树还展示了板卡的完整外设接线UART0调试串口作为zephyr,console、zephyr,shell-uart、zephyr,uart-mcumgr、zephyr,bt-mon-uart等多个 chosen 默认入口波特率 115200UART1Arduino 串口即arduino_serialTXP1.02、RXP1.01I2C0Arduino I2CSDAP0.26、SCLP0.27即 Arduino D14/D15SPI3Arduino SPISCKP1.15、MISOP1.14、MOSIP1.13片选 D10P1.12QSPI外接 64 Mbit8 MBMX25R64 NOR Flash引脚 P0.17~P0.23USBnordic,nrf-usbd控制器默认开启IEEE 802.15.4 射频zephyr,ieee802154已启用支持 OpenThread 等协议栈ADCArduino A0~A5 分别映射到 AIN1/2/4/5/6/7电源reg1设置为 DCDC 模式NRF5X_REG_MODE_DCDCreg0使能。上述映射同时解释了 yaml 中arduino_gpio/arduino_i2c/arduino_serial/arduino_spi支持项的来源。构建、烧录与调试构建与烧录前的准备nRF52840 DK 使用板载 SEGGER J-Link 调试器进行烧录与调试。请先按照仓库中 Nordic 的 SEGGER 说明页安装并配置相关软件J-Link 驱动与工具链再按 Zephyr 标准的构建与运行流程操作。该板支持的烧录后端在 board.cmake 中声明主要包括jlink--devicenRF52840_xxAA --speed4000pyocd--targetnrf52840 --frequency4000000nrfutil/nrfjprogNordic 官方工具nrfutil 额外携带 QSPI 外部 Flash 配置openocd-nrf5。监听串口输出烧录前先用终端程序打开调试串口Linux 下典型设备节点为/dev/ttyACM0具体以系统识别为准$ minicom -D /dev/ttyACM0 -b 115200波特率固定为 115200与设备树中uart0的current-speed 115200一致。构建并烧录 hello_world以 Zephyr 自带的 hello_world 示例为例在 Zephyr 环境初始化后执行$ west build -b nrf52840dk/nrf52840 samples/hello_world $ west flashwest build -b nrf52840dk/nrf52840指定 board 变体并编译west flash使用默认 runner通常是 jlink完成烧录。烧录完成后程序启动输出即可在 minicom 终端中看到Hello World!字样。调试如需调试参照 Nordic 板卡与 SEGGER 调试器相关的文档进行配置使用west debug即可启动调试会话$ west debug用 blinky 与 button 验证板卡工作状态官方提供了两个示例用于验证板卡上的 LED 与按键是否在 Zephyr 下正常工作samples/basic/blinky samples/basic/buttonblinky周期性翻转 LED通过LED0别名对应板载 LED1button检测按键通过sw0别名对应 BUTTON1按键按下时切换 LED 状态。分别执行west build -b nrf52840dk/nrf52840 samples/basic/blinky、west build -b nrf52840dk/nrf52840 samples/basic/button并west flash即可直观确认 Zephyr 在板上的运行情况。LED 与按键的完整定义可以在设备树文件 nrf52840dk_nrf52840.dts 中查阅。更换 UART1 引脚overlay 与 pinctrl 实战默认情况下 UART1 使用 P1.01RX与 P1.02TX见 nrf52840dk_nrf52840-pinctrl.dtsi。当应用需要把 UART1 换到其它引脚时官方推荐的做法是在应用根目录添加 devicetree overlay 文件通过west build -d build -b nrf52840dk/nrf52840 app -- -DDTC_OVERLAY_FILExxx.overlay或放入app/boards/目录自动加载来覆盖引脚配置。完整 overlay 示例以下示例将 UART1 的 TX 设为 P0.14、RX 设为 P0.16pinctrl { uart1_default_alt: uart1_default_alt { group1 { psels NRF_PSEL(UART_TX, 0, 14), NRF_PSEL(UART_RX, 0, 16); }; }; /* required if CONFIG_PM_DEVICEy */ uart1_sleep_alt: uart1_sleep_alt { group1 { psels NRF_PSEL(UART_TX, 0, 14), NRF_PSEL(UART_RX, 0, 16); low-power-enable; }; }; }; uart1 { pinctrl-0 uart1_default_alt; /* if sleep state is not used, use /delete-property/ pinctrl-1; and * skip the sleep entry. */ pinctrl-1 uart1_sleep_alt; pinctrl-names default, sleep; };关键点解读NRF_PSEL(peripheral, port, pin)是 Nordic 引脚选择宏参数依次为外设功能如UART_TX/UART_RX、端口号0 或 1、引脚号。上例中 P0.16 用于 RXP0.14 用于 TX每个外设需要提供default与sleep两套引脚状态通过pinctrl-names default, sleep关联。sleep 状态用于低功耗模式CONFIG_PM_DEVICEy时必须提供其中的low-power-enable允许引脚在休眠时释放/低功耗处理若应用不使用 sleep 状态可删除pinctrl-1属性/delete-property/ pinctrl-1;并移除 sleep 条目引脚分组group1/group2可按需拆分同组内可放置多个psels并可为每组单独设置bias-pull-up、low-power-enable等属性——参考板级 pinctrl 文件中uart0_default将 TX/RTS 与 RX/CTS 分组、并给 RX 组加bias-pull-up的写法。更详细的 overlay 使用说明参见 Zephyr 文档中关于 devicetree overlays 的章节。选脚原则避开低频专用引脚更换引脚时必须查阅 nRF52840 产品规格书第 7 章 Hardware and Layout 的表 7.1.1 aQFN73 ball assignments从中挑选标记为 General purpose I/O 的引脚。特别注意标记为low frequency I/O only仅限低频 IO的引脚只能在 10 kHz 以下的低频应用中使用不适合 UART 115200 的波特率选脚时务必避开这类引脚。用 nRF52840 DK 模拟开发 nRF52811Nordic 并未为 nRF52811 芯片推出独立开发套件因此 Zephyr 提供了nrf52840dk/nrf52811这个 board 变体它是对 nRF52840 DK 的修改版本通过设备树与配置强制施加 nRF52811 芯片的资源限制让你可以借用手中的 PCA10056 开发板直接为 nRF52811 开发固件。从 nrf52840dk_nrf52811.yaml 可以看到该变体被约束为RAM24 KBFlash192 KB支持外设counter、pwm、gpio、netif:openthread相比 nRF52840 变体大幅缩减与 nRF52811 实际硬件能力对应。其设备树 nrf52840dk_nrf52811.dts 额外定义了适合 192 KB Flash 的 mcuboot 分区布局boot 分区、slot0/slot1、storage 分区并沿用 nRF52811 的 SoC 头文件nordic/nrf52811_qfaa.dtsi。使用方式与 nRF52840 变体完全一致$ west build -b nrf52840dk/nrf52811 samples/hello_world $ west flash需要注意板级默认配置 nrf52840dk_nrf52811_defconfig 中默认未启用 Bluetooth注释说明这是为避免默认内核测试集在有限 RAM 下超限如需蓝牙支持请在应用的prj.conf中自行开启nRF52811 本身支持 BLE。板级默认配置速查nrf52840dk_nrf52840_defconfig 提供了 nRF52840 变体的最小默认配置可作为理解板级裁剪的入口# Enable MPU CONFIG_ARM_MPUy # enable GPIO CONFIG_GPIOy # enable uart driver CONFIG_SERIALy # enable console CONFIG_CONSOLEy CONFIG_UART_CONSOLEyCONFIG_ARM_MPUy启用 ARM MPU 内存保护CONFIG_GPIOyCONFIG_SERIALyGPIO 与 UART 驱动CONFIG_CONSOLEyCONFIG_UART_CONSOLEyUART 控制台输出保证 printf/printk 输出到调试串口。另外 Kconfig.defconfig 中还包含两项关键细节当ARCH_HAS_STACK_PROTECTION时默认开启硬件栈保护HW_STACK_PROTECTION使用 mcuboot 引导时QSPI NOR Flash 布局页大小默认为 4096NORDIC_QSPI_NOR_FLASH_LAYOUT_PAGE_SIZE与板载 MX25R64 外置 Flash 配合。总结本文围绕 boards/nordic/nrf52840dk/doc/index.rst 展开完整覆盖了 nRF52840 DK 在 Zephyr 中的板级资源LED/按键/时钟/Arduino 接口、构建烧录调试工作流jlink/pyocd/nrfutil 多后端、UART1 引脚重映射的 overlay 实战、选脚注意事项以及 nRF52811 模拟开发这一特色能力并补充了设备树与 pinctrl 源码层面的实现细节。无论你是首次在 PCA10056 上点亮 Zephyr还是需要为特定应用定制引脚与分区本文列出的文件路径与命令均可作为直接可用的起点。参考资料板级文档boards/nordic/nrf52840dk/doc/index.rstnRF52840 设备树nrf52840dk_nrf52840.dtsnRF52840 引脚映射nrf52840dk_nrf52840-pinctrl.dtsinRF52811 模拟设备树nrf52840dk_nrf52811.dtsboard 元数据board.yml 与 nrf52840dk_nrf52840.yaml烧录/调试配置board.cmake板级默认配置nrf52840dk_nrf52840_defconfig 与 nrf52840dk_nrf52811_defconfig验证示例blinky 与 button【免费下载链接】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),仅供参考