十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

Zephyr 上板实战:M5Stack STAMP-C3 板卡支持、构建烧录与 OpenOCD 调试

Zephyr 上板实战:M5Stack STAMP-C3 板卡支持、构建烧录与 OpenOCD 调试 Zephyr 上板实战M5Stack STAMP-C3 板卡支持、构建烧录与 OpenOCD 调试【免费下载链接】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/m5stack/stamp_c3/doc/index.rst 为主体完整讲解 M5Stack STAMP-C3 这块基于乐鑫 ESP32-C3RISC-VWi-Fi MCU 的评估板它支持哪些硬件外设、系统环境要求什么、如何用 Simple Boot 与 MCUbootSysbuild/手动构建两条路径构建并烧录应用、如何用 Snippet 机制切换 Flash/PSRAM 变体以及如何通过 OpenOCD 完成 JTAG 调试。读完后你能够独立完成 STAMP-C3 上从拉取依赖、编译、烧录到串口监控和线程级调试的完整开发闭环。一、板卡概述与硬件规格STAMP-C3 是一款搭载乐鑫 ESP32-C3 RISC-V MCU、具备 Wi-Fi 连接的板卡面向家电、工业自动化等 IoT 边缘设备场景官方文档参见 boards/m5stack/stamp_c3/doc/index.rst 中的 Overview 章节。板卡元信息定义在 boards/m5stack/stamp_c3/board.yml 中board: name: stamp_c3 full_name: STAMP-C3 vendor: m5stack socs: - name: esp32c3ESP32-C3 芯片特性文档 Hardware 章节文档通过 RST include 机制:start-after: espressif-soc-esp32c3-features将芯片特性片段内联进板卡页面实际内容来自 boards/espressif/common/soc-esp32c3-features.rst。完整规格如下ESP32-C3 是单核 Wi-Fi 蓝牙 5LESoC基于开源 RISC-V 架构在功耗、I/O 能力与安全性之间取得平衡是连接型设备的性价比方案Wi-Fi 与 BLE 双连接既简化了设备配网也支撑了双连接用例。32 位 RISC-V 内核最高主频160 MHz802.11 b/g/n Wi-Fi支持蓝牙 5 与 Bluetooth Mesh 特性的 BLE 子系统384 KB ROM、400 KB SRAM其中 16 KB 用作 cache、RTC 域8 KB SRAM22 路可编程 GPIO外设全速 USB Serial/JTAG 控制器兼容 CAN 2.0 的 TWAI 控制器通用 DMA 控制器GDMA2 个 12 位 SAR ADC最多 6 通道3 个 SPI、2 个 UART、1 个 I2S、1 个 I2C2 个 54 位通用定时器、3 个看门狗定时器、1 个 52 位系统定时器红外遥控外设RMT、最多 6 通道的 LED PWM 控制器LEDC、温度传感器硬件加密加速RNG、ECC、RSA、SHA-2、AES。开发板上实际启用了什么从设备树看文档页面本身不展开设备树但 boards/m5stack/stamp_c3/stamp_c3.dts 明确了这块板子在 Zephyr 中的实际硬件配置是理解文档特性 → 板上现实映射的关键model M5Stack STAMP-C3compatible m5stack,stamp_c3chosen 节点控制台与 Shell UART 均使用uart0Flash 为flash0代码分区slot0_partition蓝牙 HCI 走esp32_bt_hci板载按键gpio_keys下定义了button0label BTN接gpio0的 GPIO 3上拉、低电平有效输入事件码为INPUT_KEY_0并通过aliases { sw0 button0; }暴露为默认按键别名4 MB Flashflash0 { reg 0x0 DT_SIZE_M(4); ... };——这也是 board-variant Snippet 的默认基准值UART0status okaycurrent-speed 115200配合 pinctrl 默认引脚复用定义于 stamp_c3-pinctrl.dtsiUSB Serial/JTAGusb_serial { status okay; }——这是该板烧录和串口监控的主要物理通道I2C0开启标准位速率I2C_BITRATE_STANDARD100 kHzTRNGtrng0开启为 Zephyr 熵源服务SPI2SPIM2开启对应板载 LCD/外设通道TWAICAN默认status disabled源码注释说明需要外接 CAN 收发器或在 RX/TX 间跳线做回环测试后才能启用看门狗wdt0、WiFi、esp32_bt_hci均开启timer0/timer1被关闭ESP32-C3 平台另有系统级定时器承载内核 tick。二、支持的外设特性Supported Features文档页面的 Supported Features 一节由zephyr:board-supported-hw指令自动从板卡 YAML 生成数据源是 boards/m5stack/stamp_c3/stamp_c3.yamlidentifier: stamp_c3 name: M5Stack STAMP-C3 type: mcu arch: riscv toolchain: - zephyr supported: - gpio - i2c - spi - uart - watchdog vendor: m5stack即官方声明的受支持特性为GPIO、I2C、SPI、UART、Watchdog五类架构为 RISC-V工具链为 Zephyr 工具链。注意该列表是文档承诺的基线从设备树看板卡实际还启用了 TWAI需外设配合、蓝牙 HCI、Wi-Fi、USB Serial/JTAG、TRNG 等可在开发中按需使用。Kconfig 侧boards/m5stack/stamp_c3/Kconfig.stamp_c3 中的BOARD_STAMP_C3选项select SOC_ESP32C3保证选中该板时自动匹配 ESP32-C3 的 SoC 配置。三、系统要求先拉取二进制 Blob文档 System Requirements 章节 include 的内容来自 boards/espressif/common/system-requirements.rst核心要求只有一条但必须执行——Espressif HAL 依赖射频二进制 BlobRF binary blobs才能工作构建前需执行west blobs fetch hal_espressif文档特别提醒建议在west update之后再执行上述命令。此外由于 STAMP-C3 自带 USB Serial/JTAG烧录与串口调试不需要额外的下载器而 JTAG 调试则需要下文说明的 Espressif 定制版 OpenOCD。四、编程与烧录Programming and Debugging 章节由zephyr:board-supported-runners指令列出了该板支持的 runner基于 boards/m5stack/stamp_c3/board.cmake 及 common 逻辑实际内容与 boards/espressif/common/building-flashing.rst 中的构建/烧录流程一致。下面完整继承文档的四条主线。1. Simple Boot默认的单镜像启动默认构建不加任何额外配置走 Simple Boot用单一二进制镜像加载不使用二级 bootloader。文档明确提示Simple Boot 不提供任何安全特性也不支持 OTA 升级。适合开发验证阶段。west build -b stamp_c3 west flash2. MCUboot Bootloader启用安全启动与 OTA如需 MCUboot可先在板卡默认配置文件中加入CONFIG_BOOTLOADER_MCUBOOTybootloader 至少要被构建并烧录一次。之后应用构建有两条路径Sysbuild与Manual build。Sysbuild 方式一次构建所有域镜像west build -b stamp_c3 --sysbuild以samples/hello_world为例即文档中zephyr-app-commands展开后的命令形态west build --sysbuild -b stamp_c3 samples/hello_world默认情况下 ESP32 sysbuild 会构建 bootloaderMCUboot 应用两个域镜像构建目录按域分子目录组织build/ ├── hello_world │ └── zephyr │ ├── zephyr.elf │ └── zephyr.bin ├── mcuboot │ └── zephyr │ ├── zephyr.elf │ └── zephyr.bin └── domains.yaml注意使用 pristine全新构建目录时--sysbuild每次都会重新构建并重新烧录 bootloader。Manual Build 方式开发期追求快bootloader 烧过一次之后后续只需像普通 Zephyr 构建一样单独构建和烧录应用west build -b stamp_c3 samples/hello_world west flash两种方式的烧录流程相同区别仅在构建目录结构。USB Serial/JTAG 的复位注意事项文档 Note在暴露内置 USB Serial/JTAG 控制器的目标上west flash后芯片可能停留在下载模式不重新上电就不会启动新镜像。遇到这种情况用看门狗复位让芯片自行重启west flash --reset-type watchdog-reset3. 更快的烧录Faster Flashing为缩短开发循环文档给出了三个 Espressif 烧录器专属选项west flash --esp-skip-flashed在设备侧做 MD5 校验若 Flash 中已有镜像与本次要写的一致则跳过写入west flash --esp-diff只写入与上次烧录镜像不同的区域对比的是本地缓存副本而非读设备因此仅在上次west flash之后 Flash 未被其他工具/板卡/手工写入过时使用west flash --esp-no-progress抑制进度输出日志更干净适合 CI。4. 串口监控烧录完成后打开串口监控west espressif monitor板卡自动复位启动后监控窗口应看到***** Booting Zephyr OS vx.x.x-xxx-gxxxxxxxxxxxx ***** Hello World! board5. 构建体系的板级钩子源码补充boards/m5stack/stamp_c3/board.cmake 只有一段核心逻辑解释了为什么本板调试只能用特定 OpenOCDif(NOT ${OPENOCD} MATCHES ^${ESPRESSIF_TOOLCHAIN_PATH}/.*) set(OPENOCD OPENOCD-NOTFOUND) endif() find_program(OPENOCD openocd PATHS ${ESPRESSIF_TOOLCHAIN_PATH}/openocd-esp32/bin NO_DEFAULT_PATH) include(${ZEPHYR_BASE}/boards/common/esp32.board.cmake) include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake)即只有当用户显式指定的 OPENOCD 位于 Espressif 工具链路径之下时才接受否则强制置为OPENOCD-NOTFOUND并在 Espressif 工具链的openocd-esp32/bin下查找——这保证了烧录/调试链路与 ESP32 定制工具的一致性。五、Board Variants用 Snippet 组合 Flash/PSRAM 变体文档还 include 了 boards/espressif/common/board-variants.rstESP32 系列板卡可按不同 SPI Flash 容量、PSRAM 容量与 PSRAM 使用模式组合出货snippets/espressif下的 Snippet 提供构建期模块化切换能力无需复制板级定义。支持的 snippet 全表如下Snippet 名称说明espressif-flash-4M4 MB Flash 板卡espressif-flash-8M8 MB Flash 板卡espressif-flash-16M16 MB Flash 板卡espressif-flash-32M32 MB Flash 板卡espressif-flash-64M64 MB Flash 板卡espressif-flash-128M128 MB Flash 板卡espressif-psram-2M2 MB PSRAM 板卡espressif-psram-4M4 MB PSRAM 板卡espressif-psram-8M8 MB PSRAM 板卡espressif-psram-reloc将 Flash 重定位到 PSRAMespressif-psram-wifiWi-Fi 缓冲区放入 PSRAM用west build的-S参数应用文档给出的示例命令展开为west build -b stamp_c3 -S espressif-flash-32M,espressif-psram-4M samples/hello_world文档同时给出两条边界说明务必遵守这些 snippet 仅适用于硬件上确实支持所选 Flash/PSRAM 配置的板卡STAMP-C3 出厂为 4 MB Flash、无 PSRAM对应设备树中flash0的DT_SIZE_M(4)默认值对不匹配的硬件套用 snippet 会产生不可构建的配置未使用 FLASH snippet 时沿用板卡默认 Flash 大小未使用 PSRAM snippet 时沿用板卡默认 PSRAM 大小。六、OpenOCD 调试文档 Debugging 章节 include 的内容来自 boards/espressif/common/openocd-debugging.rst要点如下。前提必须使用 Espressif 定制版 OpenOCDESP32 芯片需要带 ESP32 专属补丁的定制 OpenOCD 构建espressif/openocd-esp32从该项目的发布页下载最新版即可。JTAG 硬件连接细节可参照 Espressif 的 JTAG debugging for ESP32 指南文档中给出外部链接此处不重复。板卡自带的调试配置脚本是 boards/m5stack/stamp_c3/support/openocd.cfg内容展示了 STAMP-C3 的调试拓扑——通过USB JTAG 接口interface/esp_usb_jtag.cfg接入 ESP32-C3 目标target/esp32c3.cfg并声明 RTOS 类型为 Zephyr# Copyright (c) 2022 TOKITA Hiroshi tokita.hiroshifujitsu.com # # SPDX-License-Identifier: Apache-2.0 set ESP_RTOS Zephyr source [find interface/esp_usb_jtag.cfg] source [find target/esp32c3.cfg] adapter speed 5000Zephyr 线程感知Thread Awareness定制版 OpenOCD 支持 Zephyr RTOS 线程感知GDB 中可以用info threads列出所有线程查看线程名、优先级与状态在线程上下文之间切换对任意线程查看回溯backtrace。要求OpenOCD ESP32v0.12.0-esp32-20251215或更高版本应用构建时开启CONFIG_DEBUG_THREAD_INFOy。文档给出的示例命令展开为west build -b stamp_c3 samples/hello_world \ -- -DCONFIG_DEBUG_THREAD_INFOy \ -DOPENOCDpath/to/bin/openocd \ -DOPENOCD_DEFAULT_PATHpath/to/openocd/share/openocd/scripts west debug -b stamp_c3 samples/hello_world使用自定义 OpenOCD 路径Zephyr SDK 自带 OpenOCD但它可能不含 ESP32 支持。要使用 Espressif 版 OpenOCD在构建时显式指定路径west build -b stamp_c3 samples/hello_world \ -- -DOPENOCD/path/to/openocd \ -DOPENOCD_DEFAULT_PATH/path/to/openocd/scripts结合前面 board.cmake 的校验逻辑指定路径必须落在 Espressif 工具链目录结构内否则会回落到OPENOCD-NOTFOUND处理。七、参考资料板卡文档boards/m5stack/stamp_c3/doc/index.rst含指向 M5Stack 官方 STAMP-C3 页面的外部链接文章按规范不外链芯片特性片段boards/espressif/common/soc-esp32c3-features.rst其中附 ESP32-C3 Datasheet 与 Technical Reference Manual 官方链接系统要求/构建烧录/变体/调试共享文档boards/espressif/common/system-requirements.rst、boards/espressif/common/building-flashing.rst、boards/espressif/common/board-variants.rst、boards/espressif/common/openocd-debugging.rst板级文件stamp_c3.dts、stamp_c3.yaml、board.cmake、support/openocd.cfg小结STAMP-C3 在 Zephyr 中是一块 RISC-V 架构板stamp_c3vendorm5stackSOCesp32c3官方支持特性为 GPIO/I2C/SPI/UART/Watchdog设备树中另启用了 Wi-Fi、BLE HCI、USB Serial/JTAG、TRNG、I2C0、SPI2 与 4 MB Flash。开发前置条件唯一而关键west update后执行west blobs fetch hal_espressif拉取 RF 二进制 Blob。构建烧录有两条路线默认 Simple Boot无安全特性、无 OTA与 MCUboot 路线Sysbuild 一次构建多域镜像或手动构建 bootloader 首烧配合--esp-skip-flashed、--esp-diff、--esp-no-progress可显著加快开发循环USB JTAG 目标烧录后卡下载模式时用--reset-type watchdog-reset复位。Flash/PSRAM 硬件变体通过snippets/espressif的-S参数按表组合注意硬件匹配性约束。调试必须使用 Espressif 定制 OpenOCDv0.12.0-esp32-20251215板级openocd.cfg走esp_usb_jtag接口开启CONFIG_DEBUG_THREAD_INFOy后 GDB 可做到 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),仅供参考
返回列表