ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Zephyr RTOS 中的 BBC micro:bit V2 板卡支持指南:硬件特性、设备树配置与构建烧录实践

Zephyr RTOS 中的 BBC micro:bit V2 板卡支持指南:硬件特性、设备树配置与构建烧录实践 Zephyr RTOS 中的 BBC micro:bit V2 板卡支持指南硬件特性、设备树配置与构建烧录实践【免费下载链接】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/zephyrmicro:bit V2 是由 BBC 设计、面向计算机教育场景的 ARM 嵌入式开发板而 Zephyr 项目为其提供了完整的一等公民支持。本文基于当前 Zephyr 仓库中 boards/bbc/microbit_v2/doc/index.rst 官方板卡文档展开结合板卡源码、设备树与 CMake 构建配置系统讲解 micro:bit V2 的硬件特性、Zephyr 下的受支持功能、设备树资源映射以及从构建到烧录的完整开发流程。读完本文你将能够基于bbc_microbit_v2目标在自己的 micro:bit V2 上构建并烧录 Zephyr 应用并能读懂该板卡的 DTS 与 pinctrl 配置、按需添加外设支持。图micro:bit V2 主要组件标注图片来源boards/bbc/microbit_v2/doc/img/bbc_microbit2.jpg包括 USB 接口、5×5 LED 点阵、按钮、麦克风、处理器、指南针与加速度计、扬声器及边缘连接器等。板卡概览面向教育场景的 ARM 嵌入式平台micro:bit亦写作 BBC Micro Bit或简称为 micro:bit是 BBC 为英国计算机教育设计的一款 ARM 架构嵌入式系统。它采用 4 cm × 5 cm 的紧凑板型板载资源非常丰富一颗 ARM Cortex-M4F 处理器具体为 Nordic nRF52833加速度计与磁力计运动传感器蓝牙与 USB 连接能力由 25 颗 LED 组成的显示点阵麦克风两个可编程按键可由 USB 或外部电池组供电输入/输出通过 23 引脚边缘连接器中的 5 个环形连接器引出。在 Zephyr 仓库中该板卡的正式目标名为bbc_microbit_v2模型标识为BBC Micro:bit V2兼容字符串为bbc,microbit-v2SoC 为 Nordic nRF52833具体型号 QIAA见 bbc_microbit_v2.dts 与 board.yml。板卡类型为mcu架构为arm具备 128 KB RAM见 bbc_microbit_v2.yaml。硬件特性一览micro:bit V2 的物理特性可归纳为以下八类这也是在 Zephyr 中进行外设开发时的主要资源来源特性类别说明5×5 LED 点阵25 颗可独立编程的 LED由 nRF LED 矩阵驱动2 个可编程按键按键 AGPIO P0.14与按键 BGPIO P0.23低电平有效麦克风板载麦克风及麦克风指示灯物理连接引脚边缘连接器引出的 P0–P20 等 GPIO 引脚光敏与温度传感器通过 nRF52833 内部 ADC 等途径提供运动传感器LSM303AGR 加速度计与磁力计指南针无线通信2.4 GHz 私有 Radio 与 Bluetooth 5USB 接口用于编程、调试与串口控制台值得注意的是v1 与 v2 之间一个关键差异就是 v2 增加了扬声器与麦克风这一点在板卡拆解图上也有明确标注。受支持功能与默认驱动配置在 Zephyr 中板卡的“支持哪些外设”由设备树、Kconfig 与板卡 yaml 共同决定。bbc_microbit_v2在 bbc_microbit_v2.yaml 中显式声明的受支持子系统包括bluetoothBLE 5 全栈支持i2c用于连接板载传感器与外部 I2C 设备gpio按键、LED 矩阵、边缘连接器引脚的基础支撑。除此之外从 bbc_microbit_v2.dts 可以看到实际启用并配置好的驱动还包括 UART 串口、PWM蜂鸣器与舵机、nRF LED 矩阵显示、看门狗watchdog0、USB 设备控制器zephyr_udc0以及低频时钟LFCLK。板卡默认的 Kconfig 配置集中在 bbc_microbit_v2_defconfig其要点为# enable GPIO CONFIG_GPIOy # clock control CONFIG_CLOCK_CONTROL_NRF_K32SRC_RCy CONFIG_CLOCK_CONTROL_NRF_K32SRC_250PPMy # enable uart driver CONFIG_SERIALy # enable console CONFIG_CONSOLEy CONFIG_UART_CONSOLEy这里有两个值得留意的细节低频时钟源CONFIG_CLOCK_CONTROL_NRF_K32SRC_RCy将 32.768 kHz 低频时钟配置为使用 nRF 内部 RC 振荡器对应设备树中lfclk { k32src rc; k32src-accuracy-ppm 250; }精度为 250 ppm。使用内部 RC 而非外部晶振意味着无需外接 32.768 kHz 晶振即可运行 BLE 协议栈这是 micro:bit V2 硬件设计决定的板上没有该低频晶振。串口控制台CONFIG_SERIAL、CONFIG_CONSOLE与CONFIG_UART_CONSOLE三者配合使 UART0默认 115200 baud承担 Zephyr 控制台输出与 shell 输入的角色。设备树分析外设如何映射到 nRF52833micro:bit V2 的设备树源文件是 bbc_microbit_v2.dts基于nordic/nrf52833_qiaa.dtsi并引入了 bbc_microbit_v2-pinctrl.dtsi 中的引脚复用pinctrl配置。aliases 与 chosen为示例与应用提供兼容层aliases { sw0 buttonA; sw1 buttonB; magn0 lsm303agr_magn; accel0 lsm303agr_accel; buzzer0 buzzer; watchdog0 wdt0; };这些别名让通用示例如按键驱动的sw0/sw1无需修改即可运行。chosen节点则将 UART0 指定为控制台、shell 与蓝牙 monitor 串口并将 SRAM、Flash、代码分区与显示设备指定为系统默认资源chosen { zephyr,console uart0; zephyr,shell-uart uart0; zephyr,bt-mon-uart uart0; zephyr,bt-c2h-uart uart0; zephyr,sram sram0; zephyr,flash flash0; zephyr,code-partition slot0_partition; zephyr,display led_matrix; };按键gpio-keys 输入设备两个按键被建模为gpio-keys设备并映射为输入子系统事件码INPUT_KEY_A/INPUT_KEY_BbuttonA: button_0 { label BTN_A; gpios gpio0 14 GPIO_ACTIVE_LOW; zephyr,code INPUT_KEY_A; }; buttonB: button_1 { label BTN_B; gpios gpio0 23 GPIO_ACTIVE_LOW; zephyr,code INPUT_KEY_B; };按键采用低电平有效GPIO_ACTIVE_LOW即按下时引脚被拉低。这也是 micro:bit 电路上按键接 GND 的典型接法。5×5 LED 矩阵nordic,nrf-led-matrix显示子系统由 5×5 点阵构成驱动为nordic,nrf-led-matrix对应驱动实现位于 drivers/display 目录下的 nRF LED 矩阵驱动。其设备树节点完整定义了 25 个像素的映射顺序、行/列 GPIO 以及刷新参数led_matrix: led_matrix { compatible nordic,nrf-led-matrix; width 5; height 5; pixel-mapping [00 01 02 03 04 10 11 12 13 14 20 21 22 23 24 30 31 32 33 34 40 41 42 43 44]; row-gpios gpio0 21 GPIO_ACTIVE_HIGH, ...; col-gpios gpio0 28 GPIO_ACTIVE_LOW, ...; refresh-frequency 50; timer timer4; pwm pwm0; pixel-group-size 4; };要点解读pixel-mapping采用二维数组00–44描述 5 行 5 列中每个像素的物理位置配合pixel-group-size 4表达每 4 个像素为一组进行驱动扫描行 GPIO 高电平有效、列 GPIO 低电平有效构成点阵的扫描电流通路refresh-frequency 50为 50 Hz 刷新率由 Timer4 与 PWM0 协同提供刷新时序zephyr,display led_matrix使该点阵成为 Zephyr 显示子系统Display API的默认设备因此任何使用displayAPI 的示例都能直接驱动这块点阵。蜂鸣器与扬声器pwm-buzzerv2 板载扬声器通过 PWM 蜂鸣器驱动发声buzzer: buzzer { compatible pwm-buzzer; pwms pwm1 0 PWM_HZ(2700) PWM_POLARITY_NORMAL; };PWM_HZ(2700)将 PWM 频率设置为 2.7 kHzPWM1 的输出引脚由 pinctrl 配置为 P0.00见 bbc_microbit_v2-pinctrl.dtsi。仓库中的示例如 samples/boards/bbc/microbit/sound利用该 PWM 通道播放音调。边缘连接器microbit,edge-connectormicro:bit 的 23 引脚边缘连接器被建模为microbit,edge-connector节点通过gpio-map将逻辑引脚号P0、P1、P2…映射到实际的 nRF GPIO 端口与引脚上。其部分映射如下gpio-map 0 0 gpio0 2 0, /* P0 */ 1 0 gpio0 3 0, /* P1 */ 2 0 gpio0 4 0, /* P2 */ ... 19 0 gpio0 26 0, /* P19 */ 20 0 gpio1 0 0; /* P20 */从源码结构看P3/P4P0.31、P0.28、P6/P7P1.5、P0.11等引脚与 LED 矩阵的行列 GPIO 存在复用关系这与 micro:bit 硬件上边缘引脚与点阵共用 GPIO 的设计一致开发者外接设备时需要注意避免冲突。I2C 与板载传感器I2C0兼容nordic,nrf-twim以 400 kHz 快速模式运行I2C_BITRATE_FAST总线上挂载了两颗 LSM303AGR 传感器磁力计指南针st,lis2mdl/st,lsm303agr-magnI2C 地址0x1e加速度计st,lis2dh/st,lsm303agr-accelI2C 地址0x19。两者共用 GPIO P0.25标注为 A3作为中断引脚见 bbc_microbit_v2.dts。对应的 Zephyr 传感器驱动为 ST 的 lis2dh/lis2mdl 系列驱动位于 drivers/sensor 目录。Flash 分区为 MCUboot 升级预留布局Flash 被划分为 5 个分区明显面向MCUboot 双槽位 A/B 升级的布局见 bbc_microbit_v2.dts分区标签起始地址大小boot_partitionmcuboot0x000000000xc00048 KBslot0_partitionimage-00x0000c0000x32000200 KBslot1_partitionimage-10x0003e0000x32000200 KBscratch_partitionimage-scratch0x000700000xa00040 KBstorage_partitionstorage0x0007a0000x600024 KBzephyr,code-partition slot0_partition表明应用默认烧写到 slot0。从该分区布局可以推断micro:bit V2 的板级设计预留了完整的 MCUboot 引导升级能力。USB 设备控制器USB 设备控制器在设备树中以别名zephyr_udc0指向usbd兼容nordic,nrf-usbd并处于启用状态。这意味着 micro:bit V2 支持 Zephyr 的 USB 设备栈如 USB CDC-ACM 串口、HID 等可参考 samples/subsys/usb 下的相关示例。引脚复用pinctrl配置bbc_microbit_v2-pinctrl.dtsi 定义了外设的默认default与休眠sleep两套引脚状态UART0TX 在 P0.06RX 在 P1.08I2C0TWIMSDA 在 P0.16SCL 在 P0.08PWM1输出在 P0.00且启用了nordic,invert反相输出适配扬声器驱动电路。所有 sleep 状态均启用了low-power-enable在系统进入低功耗模式时自动将引脚切换到低功耗配置这是 Zephyr pinctrl 子系统“按状态切换引脚复用”的标准用法。构建与烧录从 hello_world 开始micro:bit V2 支持 Zephyr 标准的构建与烧录流程详见官方文档中的 构建应用 与 运行应用 章节。以下以hello_world为例完整演示。第一步打开串口监听首先运行你常用的终端程序监听串口输出$ minicom -D tty_device -b 115200将tty_device替换为 micro:bit 板卡对应的端口。在 Linux 下通常是/dev/ttyACM0micro:bit 板载 DAPLink 提供 CMSIS-DAP 虚拟串口。在 Windows/macOS 下则为对应的 COM 端口或/dev/cu.usbmodem*。第二步构建并烧录应用使用 Zephyr 标准的 west 命令构建并烧录hello_world示例$ west build -b bbc_microbit_v2 samples/hello_world $ west flashwest build -b bbc_microbit_v2 samples/hello_world完成交叉编译west flash将固件写入板卡。烧录完成后串口终端中即可看到Hello World! bbc_microbit_v2的输出。支持的烧录后端runners从 board.cmake 可以看出该板卡为多种调试器后端预置了参数west flash会自动选用合适的 runnerpyOCD--targetnrf52833nrfjprog / nrfutil--nrf-familyNRF52J-Link--devicenRF52833_xxAA --speed4000OpenOCDOpenOCD 的 NRF5 子系列为nrf52默认接口为CMSIS-DAPOPENOCD_NRF5_INTERFACE cmsis-dap这是因为 micro:bit V2 板载的 DAPLink 调试器提供 CMSIS-DAP 协议。若按 Segger 官方教程将板载 DAPLink 升级为 J-Link OB则移除该行即可回退到 J-Link 接口。此外 pre_dt_board.cmake 会向设备树编译器传递-Wno-unique_unit_address_if_enabled用于抑制 nRF52 系列 SoC 中多个外设共用地址段如power40000000与clock40000000导致的告警这是 nRF52 板卡的常见处理。进阶实践基于板卡资源的示例参考当前仓库的 samples/boards/bbc/microbit 目录下存放了针对 micro:bit 的专门示例其中bbc_microbit_v2.overlay覆盖文件给出了最直接的二次开发参考pongsamples/boards/bbc/microbit/pong利用 5×5 LED 点阵与按键实现乒乓游戏其 bbc_microbit_v2.overlay 中通过pwms pwm1 0 PWM_USEC(1500) PWM_POLARITY_NORMAL将 PWM1 通道 0 配置为周期 1.5 ms 的舵机控制信号与 micro:bit 官方舵机驱动约定一致soundsamples/boards/bbc/microbit/sound驱动板载扬声器发声同样基于 PWM1蓝牙 HCI 串口samples/bluetooth/hci_uart_3wire其 bbc_microbit_v2.overlay 将 UART0 波特率提升至 1 Mbps 并保持nordic,nrf-uart兼容用于连接 Host 侧蓝牙控制器说明 UART 速率可通过 overlay 灵活覆盖。这些 overlay 文件展示了“不修改板卡默认配置、只在应用层覆盖”的 Zephyr 惯用做法是学习如何在 micro:bit V2 上接入自定义外设的绝佳起点。小结BBC micro:bit V2 在 Zephyr 生态中拥有完整且开箱即用的板级支持nRF52833 SoC 提供了蓝牙 5、Radio、USB 与丰富的外设接口板卡设备树 bbc_microbit_v2.dts 清晰映射了 5×5 LED 点阵、双按键、LSM303AGR 传感器、PWM 蜂鸣器与边缘连接器默认 Kconfig 配置了 GPIO、串口控制台与低频时钟。开发者只需执行west build -b bbc_microbit_v2 app与west flash即可完成开发闭环并可通过多种调试后端pyOCD / nrfjprog / J-Link / OpenOCD进行调试与烧录。无论是入门教育场景还是 BLE 与传感器应用的原型开发micro:bit V2 都是 Zephyr 上手与实践的理想平台。【免费下载链接】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),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进