Nordic Thingy:52 开发板在 Zephyr RTOS 中的板级支持与实战指南
Nordic Thingy:52 开发板在 Zephyr RTOS 中的板级支持与实战指南【免费下载链接】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 仓库中的 Thingy:52PCA20020板卡文档为主线系统讲解该板在thingy52/nrf52832目标下的硬件资源布局、引脚映射、内部/外部 I2C 总线、电源轨管理、传感器接入以及使用外部 J-Link 进行构建、烧录与调试的完整流程。读完本文你将能够基于 Zephyr 为 Thingy:52 编写驱动、裁剪配置并快速验证blinky、hts221等官方示例。板卡概览Thingy:52 是 Nordic Semiconductor 推出的一款面向物联网原型开发的电池供电开发板Zephyr 使用thingy52/nrf52832PCA20020板级配置为其构建固件。该板的核心是一颗nRF52832SoC搭载ARM Cortex-M4F处理器并集成了一组环境传感器、一个按键以及两颗 RGB LED。需要特别注意的是Nordic Semiconductor 已不再为该板卡提供官方支持因此不推荐在新原型设计中继续使用它见 index.rst 开头的警告。不过对于已有 Thingy:52 硬件、需要在 Zephyr 上进行学习和复用的开发者该板级支持仍然完整可用。板卡在 Zephyr 中的标识信息记录于 thingy52_nrf52832.yamlidentifierthingy52/nrf52832archarmCortex-M4FRAM64 KBFlash512 KB工具链zephyr、gnuarmemb声明支持的设备类型gpio、i2c、hts221硬件特性Thingy:52 板载了以下硬件资源两颗 RGB LEDLightwell 灯环CO2 与 TVOC 气体传感器CCS811湿度与温度传感器HTS221气压与温度传感器LPS22HB颜色传感器I2C GPIO 扩展器SX1509B预留引脚头P4以及 I2C 与串行连接器P5/P6/P7蓝牙低功耗BLE射频支持的接口板级支持包通过 Zephyr 的设备树与驱动体系对外提供以下接口能力与 thingy52_nrf52832.yaml 中supported字段对应GPIO通过 nRF52832 GPIO 控制器与 SX1509B 扩展器共同提供I2C两路 TWIM 实例内部i2c0、外部i2c1默认运行在I2C_BITRATE_FAST400 kHz下HTS221 温湿度传感器作为板级默认传感器被直接引用串口UARTnordic,nrf-uarte默认波特率 115200同时承担 console 与 shell 输出连接与 IOLightwell RGB LEDThingy:52 的 Lightwell RGB LED 由SX1509B GPIO 扩展器设备名GPIO_P0驱动扩展器引脚与 LED 通道的对应关系如下GPIO Expander PinLED Channel5Green6Blue7Red从 thingy52_nrf52832.dts 的leds节点可以看到 LED 在设备树中的定义方式三个 LED 均挂在sx1509b控制器下且全部使用GPIO_ACTIVE_LOW电平即低电平点亮并通过aliases导出led0红、led1绿、led2蓝供示例程序直接使用leds { compatible gpio-leds; led0: led_0 { gpios sx1509b 7 GPIO_ACTIVE_LOW; label Red LED; }; led1: led_1 { gpios sx1509b 5 GPIO_ACTIVE_LOW; label Green LED; }; led2: led_2 { gpios sx1509b 6 GPIO_ACTIVE_LOW; label Blue LED; }; };同时SX1509B 节点还通过init-out-high 0xe0e0与init-out-low 0x1f1f指定了上电初始状态控制 LED 的引脚bit 5/6/7 所在的高字节区域初始化输出为高电平LED 熄灭其余引脚初始化为低电平。按键Thingy:52 的按键连接到 SoC 的P0.11引脚。设备树中定义为gpio-keys节点配置为内部上拉 低电平有效并映射为sw0别名与INPUT_KEY_0事件码button0: button_0 { gpios gpio0 11 (GPIO_PULL_UP | GPIO_ACTIVE_LOW); label Button; zephyr,code INPUT_KEY_0; };串口系统 UART 默认的引脚配置如下表所示引脚位于P4与P6连接器上系统 UART 控制台默认使用这对引脚SOC PinSignalP0.02TXP0.03RX设备树中uart0以nordic,nrf-uarte兼容性启用current-speed 115200并配置了default/sleep两套 pinctrl 状态。需要说明的是当前仓库的 thingy52_nrf52832-pinctrl.dtsi 中uart0_default节点将 TX 分配在 P0.03、RX 分配在 P0.02与上表 TX/RX 标注相反使用前建议以板卡原理图为准核对实际走线uart0_default: uart0_default { group1 { psels NRF_PSEL(UART_TX, 0, 3), NRF_PSEL(UART_RX, 0, 2); }; };uart0_sleep状态则为 RX 配置low-power-enable、为 TX 配置low-power-enable与bias-pull-up用于在低功耗场景下节省漏电。内部 I2C 总线内部 I2C 总线i2c0没有引出到任何外部连接器板载的多数器件都通过它访问。该总线占用的引脚如下SOC PinSignalP0.07SDAP0.08SCL挂接在该总线上的器件及 I2C 地址DeviceAddressSX1509B0x3eLPS22HB0x5cHTS2210x5fCCS8110x5a设备树中i2c0使用nordic,nrf-twim兼容性clock-frequency I2C_BITRATE_FAST并逐一声明了上述四个从设备节点sx1509b3e、lps22hb_press5c、hts2215f、ccs8115a同时为每个传感器通过vin-supply属性绑定到对应的电源调节器详见下文电源轨章节。外部 I2C 总线外部 I2C 总线i2c1位于P4引脚头以及P5、P7连接器上SOC PinSignalP0.14SDA_EXTP0.15SCL_EXT与i2c0相同i2c1也以nordic,nrf-twim启用并运行在快速模式400 kHz。值得注意的是设备树中LIS2DH12 加速度计挂在i2c1总线上地址 0x19并通过aliases中的accel0别名暴露给应用层——也就是说加速度计并不在内部 I2C 总线上。P4 引脚头P4 是 20-pin 引脚头部分 SoC GPIO 引脚与 I2C GPIO 扩展器引脚可通过它访问同时它还将四个板载 N 沟道 MOSFET 的漏极/源极引出便于驱动外部大负载。完整引脚定义如下PinDeviceSignal / Device Pin1SOCSCL_EXT / P0.152SOCSDA_EXT / P0.143SOCANA/DIG0 / P0.024SOCANA/DIG1 / P0.035SOCANA/DIG2 / P0.046GND7GPIO ExpanderPin 08GPIO ExpanderPin 19GPIO ExpanderPin 210GPIO ExpanderPin 311MOSFET 1Drain12MOSFET 1Source13MOSFET 2Drain14MOSFET 2Source15MOSFET 3Drain16MOSFET 3Source17MOSFET 4Drain18MOSFET 4Source19VDD20GNDMOSFET四个 N 沟道 MOSFET 的栅极连接到以下 SoC GPIO 引脚可用于开关外部设备电源或驱动负载DeviceGate PinMOSFET 1P0.18MOSFET 2P0.19MOSFET 3P0.20MOSFET 4P0.21电源轨管理Thingy:52 包含多条电源轨当前受支持器件所需的关键电源轨如下NameDerived fromControlled byVREGThe batteryAlways onVDD_nRFVREGAlways onVDDVREGSOC pin P0.30VDD_CCSVDDGPIO expander pin 10由于电源轨之间存在依赖关系某个器件上电前往往需要先给多条电源轨供电且必须按照依赖链从上到下的顺序依次上电。例如要给 CCS811 气体传感器供电必须先打开 VDD再打开 VDD_CCS。各器件与电源轨的对应关系DeviceRailnRF52832VDD_nRFSX1509BVDDLPS22HBVDDHTS221VDDCCS811VDD_CCS在设备树中这些电源轨被建模为regulator-fixed节点见 thingy52_nrf52832.dtsvdd_pwr: vdd-pwr-ctrl { compatible regulator-fixed; regulator-name vdd-pwr-ctrl; enable-gpios gpio0 30 GPIO_ACTIVE_HIGH; regulator-boot-on; startup-delay-us 1000; }; ccs_pwr: ccs-pwr-ctrl { compatible regulator-fixed; regulator-name ccs-pwr-ctrl; enable-gpios sx1509b 10 GPIO_ACTIVE_HIGH; status disabled; };其中vdd_pwr由 SoC 引脚 P0.30 控制且regulator-boot-on开机即上电带 1 ms 启动延时ccs_pwr由扩展器 Pin 10 控制默认disabled由 board.c 中的pwr_ctrl_init()在系统初始化阶段显式拉高static int pwr_ctrl_init(void) { int ret; if (!gpio_is_ready_dt(ccs_gpio)) { return -ENODEV; } ret gpio_pin_configure_dt(ccs_gpio, GPIO_OUTPUT_HIGH); if (ret 0) { return ret; } k_sleep(K_MSEC(1)); /* Wait for the rail to come up and stabilize */ return 0; }该初始化通过SYS_INIT(pwr_ctrl_init, POST_KERNEL, CONFIG_BOARD_CCS_VDD_PWR_CTRL_INIT_PRIORITY)注册其优先级由 Kconfig.thingy52 中的BOARD_CCS_VDD_PWR_CTRL_INIT_PRIORITY控制默认85且必须满足“大于 VDD 控制优先级、小于SENSOR_INIT_PRIORITY”的约束——board.c 中通过编译期检查强制了这一顺序确保传感器驱动初始化前 VDD_CCS 电源轨已经稳定。配套的 thingy52_nrf52832_defconfig 中对应启用了电源管理相关配置CONFIG_REGULATORy CONFIG_REGULATOR_FIXED_INIT_PRIORITY45REGULATOR_FIXED_INIT_PRIORITY45的注释明确说明调整固定调节器初始化优先级是为了让它们先于 I2C GPIO 扩展器完成初始化。板载传感器DeviceFunctionBusI2C AddressPower RailLPS22HBPressure and Temperature sensorI2C_00x5cVDDHTS221Humidity and Temperature sensorI2C_00x5fVDDCCS811Gas sensorI2C_00x5aVDD_CCS除上述三种环境传感器外设备树中还声明了LIS2DH12 加速度计地址 0x19挂接在i2c1外部总线并通过aliases暴露为accel0。传感器在设备树中的中断引脚配置见下文。杂项设备引脚SX1509BDevice SignalSOC PinSX_OSCIOP0.05SX_RESETP0.16LPS22HBSensor SignalSOC PinLPS_INTP0.23HTS221Sensor SignalSOC PinHTS_INTP0.24设备树中对应为hts221节点配置了drdy-gpios gpio0 24 GPIO_ACTIVE_HIGH用于数据就绪中断。CCS811Sensor SignalGPIO Expander PinCCS_RESET11CCS_WAKE12设备树中 CCS811 的中断与复位/唤醒引脚配置如下中断直接连到 SoC 的 P0.22ccs811: ccs8115a { compatible ams,ccs811; reg 0x5a; vin-supply ccs_pwr; irq-gpios gpio0 22 GPIO_ACTIVE_LOW; reset-gpios sx1509b 11 GPIO_ACTIVE_LOW; wake-gpios sx1509b 12 GPIO_ACTIVE_LOW; };Flash 分区布局thingy52_nrf52832.dts 为 512 KB Flash 定义了标准的分区布局可直接配合 MCUboot 引导与文件系统/NVS 使用分区起始地址大小用途bootmcuboot0x000000xc000MCUboot 引导程序slot00x0c0000x32000固件镜像槽 0image-0slot10x3e0000x32000固件镜像槽 1image-1scratch0x700000xa000镜像交换暂存区storage0x7a0000x6000FCB / LittleFS / NVS 存储其中从 0x7a000 到 0x7ffff 的扇区122–127预留给应用使用storage分区会在启用 FCB/LittleFS/NVS 时被这些子系统占用。编程与调试烧录FlashingThingy:52没有板载调试/烧录器向板卡烧录 Zephyr 固件需要外接 J-Link 编程器编程器通过P9 编程头与板卡相连。Zephyr 的 board.cmake 声明了可用的 runner 及其参数board_runner_args(nrfjprog --softreset) board_runner_args(jlink --devicenRF52832_xxAA --speed4000) include(${ZEPHYR_BASE}/boards/common/nrfutil.board.cmake) include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) include(${ZEPHYR_BASE}/boards/common/openocd-nrf5.board.cmake)即该板卡支持nrfutil、nrfjprog、jlink、openocd-nrf5四种烧录方式其中nrfjprog使用--softreset参数jlink指定目标器件为nRF52832_xxAA并以 4000 kHz 的 SWD 速度连接。调试Debugging与多数 nRF5 开发板不同Thingy:52 没有板载 J-Link 调试芯片。不过 nordic_segger 页面中的调试说明同样适用于本板只需额外完成连接外部调试器这一步可以使用一块带 Debug out 连接器的开发板例如nrf52dk作为 Thingy:52 的外部调试器。此外板级 defconfig 中还启用了 SEGGER RTTCONFIG_USE_SEGGER_RTTy便于通过 RTT 进行日志输出与调试。硬件栈保护Kconfig.defconfig 中默认启用了硬件栈保护HW_STACK_PROTECTION跟随ARCH_HAS_STACK_PROTECTION并在 defconfig 中开启CONFIG_ARM_MPUy为系统提供内存保护能力。构建与验证示例验证 Lightwell 绿灯blinky绿色 Lightwell LED 可通过blinky示例验证构建并烧录到 Thingy:52west build -b thingy52/nrf52832 samples/basic/blinky west flash示例程序会通过led1绿色 LEDSX1509B Pin 5进行闪烁。由于 LED 为GPIO_ACTIVE_LOW闪烁逻辑会自动取反电平。验证温湿度传感器hts221板载 HTS221 温湿度传感器可通过对应的传感器示例验证示例源码位于 samples/sensor/hts221west build -b thingy52/nrf52832 samples/sensor/hts221 west flash运行后串口控制台会周期性输出 HTS221 采集到的温度与相对湿度值。该示例在 Thingy:52 上直接使用设备树中已启用的hts221节点i2c0总线上地址 0x5f无需额外修改即可工作。使用注意事项官方支持状态Nordic 已停止对该板卡的官方支持新项目不建议选用本指南适用于已有硬件的学习与维护场景。电源轨上电顺序CCS811 依赖 VDD_CCS而 VDD_CCS 又依赖 VDD务必保证按 VDD → VDD_CCS 的顺序供电Zephyr 通过BOARD_CCS_VDD_PWR_CTRL_INIT_PRIORITY默认 85保证该顺序在传感器初始化之前完成。UART 引脚标注官方文档表格中 TX/RX 分别对应 P0.02/P0.03而当前仓库 thingy52_nrf52832-pinctrl.dtsi 中uart0_default将 TX 配置在 P0.03、RX 配置在 P0.02两者端口号相同仅角色标注相反实际接线请以板卡原理图为准。外部调试器板卡无板载调试器调试前需通过 P9 编程头连接外部 J-Link 或使用带 Debug out 的 nRF5 开发板。【免费下载链接】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),仅供参考