Zephyr 开发 ESP32-C61-DevKitC-1:从板卡特性到构建、烧录与调试全指南
【免费下载链接】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
ESP32-C61-DevKitC-1 是乐鑫(Espressif)推出的入门级开发板,基于集成 2.4 GHz Wi-Fi 6 与蓝牙 LE 的 ESP32-C61-WROOM-1 模组,在 Zephyr RTOS 中拥有完整的一等公民支持。本文以 Zephyr 官方板卡文档(boards/espressif/esp32c61_devkitc/doc/index.rst)为骨架,结合仓库内的设备树、Kconfig 与构建脚本,系统讲解该板卡的硬件特性、Zephyr 支持情况、Simple Boot 与 MCUboot 两种启动方式、sysbuild/手动构建流程、基于 snippet 的板卡变体,以及 OpenOCD 调试方法,帮助你在这块板上快速完成从"点亮串口"到"跑通 Wi-Fi 6 应用"的完整开发闭环。
ESP32-C61-DevKitC-1 板卡概览
ESP32-C61-DevKitC-1 是一块入门级开发板,核心是 ESP32-C61-WROOM-1 通用模组,配备8 MB SPI Flash与2 MB PSRAM,并集成完整的2.4 GHz Wi-Fi 6与Bluetooth LE功能。板卡官方型号信息定义在 board.yml(full_name: ESP32-C61-DevKitC,SoC 为esp32c61)。
在硬件布局上,板卡两侧排针几乎引出了所有 I/O 引脚,开发者既可以用杜邦线连接外设,也可以直接把板卡插到面包板上进行原型验证。
注:本文所有开发板官方信息与命令均以当前 Zephyr 仓库实际内容为准;Espressif 官方板卡用户指南等外部资料不在本文引用范围内。
ESP32-C61 SoC 特性一览
ESP32-C61 是一颗低成本 SoC,集成了 2.4 GHz Wi-Fi 6 与 Bluetooth 5(LE),并带有可靠的安全特性。其核心特性(来源:soc-esp32c61-features.rst)包括:
- CPU:32 位 RISC-V 内核,最高主频 160 MHz
- 存储:256 KB ROM、320 KB 内部 SRAM,配合外部 Flash 工作
- 无线:Wi-Fi 802.11ax 2.4 GHz(向下兼容 IEEE 802.11b/g/n)、蓝牙 LE(Bluetooth 5 认证),Wi-Fi 与蓝牙通过内部共存机制共享同一天线
数字接口:
| 接口 | 数量/规格 |
|---|---|
| GPIO | 30 路 |
| UART | 3 路 |
| 通用 SPI | 1 路 |
| I2C | 1 路 |
| I2S | 1 路 |
| USB Serial/JTAG 控制器 | 1 个 |
| SDIO 2.0 从机控制器 | 1 个 |
| LED PWM 控制器 | 最多 6 通道 |
| 通用 DMA(GDMA) | 2 发 2 收 |
| 事件任务矩阵(ETM) | 1 套 |
模拟接口:1 路 12 位 SAR ADC(最多 4 通道)、1 路温度传感器。
定时器:1 个 52 位系统定时器、2 个 54 位通用定时器、3 个看门狗定时器。
低功耗:面向典型场景提供四种功耗模式——Active、Modem-sleep、Light-sleep、Deep-sleep。
安全:Secure boot、Flash 加密、硬件密码学加速(ECC、ECDSA、SHA)、随机数发生器(RNG)。
Zephyr 中的板卡定义与支持特性
在 Zephyr 中,该板卡的标识符为esp32c61_devkitc,架构为riscv,工具链使用 Zephyr 官方工具链。完整的支持矩阵定义在 esp32c61_devkitc.yaml:
identifier: esp32c61_devkitc name: ESP32-C61-DevKitC vendor: espressif type: mcu arch: riscv toolchain: - zephyr supported: - adc - counter - gpio - watchdog - uart - spi - i2c - dma - entropy - pwm - netif:wifi也就是说,该板卡在 Zephyr 下当前可用的驱动包括 ADC、计数器、GPIO、看门狗、UART、SPI、I2C、DMA、熵源、PWM 以及 Wi-Fi 网络接口。
板级默认配置(defconfig)
板卡默认配置见 esp32c61_devkitc_defconfig:
CONFIG_CONSOLE=y CONFIG_SERIAL=y CONFIG_UART_CONSOLE=y CONFIG_GPIO=y它默认开启串口控制台(console 默认挂在uart0)与 GPIO 支持。此外 Kconfig 中为板卡追加了 4096 字节堆内存池:
config HEAP_MEM_POOL_ADD_SIZE_BOARD int default 4096 if BOARD_ESP32C61_DEVKITCKconfig 选择关系见 Kconfig.esp32c61_devkitc,即BOARD_ESP32C61_DEVKITC选中SOC_ESP32C61与SOC_ESP32C61_REV_1_0。
设备树要点
从 esp32c61_devkitc.dts 可以看到板级设备树的几个关键决策:
- chosen 节点:
zephyr,console与zephyr,shell-uart均指向uart0,zephyr,code-partition指向slot0_partition(分区布局来自espressif/partitions_0x0_default.dtsi); - Flash/PSRAM:
flash0配置为 8 MB,psram0配置为 2 MB,与 WROOM-1 模组规格一致; - UART0:默认启用,波特率 115200;
- I2C0:启用,时钟频率为 FAST(400 kHz),SDA/SCL 分别使用 GPIO22/GPIO23(开漏),并绑定默认引脚控制(pinctrl);
- SPI2:作为通用 SPI 启用;
- 外设:
trng0(真随机数)、gpio0、wdt0、wifi、esp32_bt_hci均默认启用; - 用户按键:
user_button1作为 gpio-keys 注册(GPIO9,上拉 + 低电平有效,触发INPUT_KEY_0),别名sw0。
GPIO 的引脚复用由 esp32c61_devkitc-pinctrl.dtsi 提供(uart0_default、i2c0_default、spim2_default等 pin control 状态)。
系统要求:获取 ESP32 二进制固件
Espressif HAL 需要 RF 二进制 blob 才能正常工作。在完成west update之后,运行以下命令获取这些文件:
west blobs fetch hal_espressif官方文档(system-requirements.rst)建议在每次west update之后都执行该命令,以保证 RF blob 与当前 HAL 版本匹配。
构建与烧录
该板卡支持两种镜像加载方式,区别在于是否使用二级引导程序。
Simple Boot(简单启动)
Simple Boot 将应用直接烧录为单一二进制镜像,不经过二级引导程序。在未做额外配置的情况下,这是构建应用的默认选项。
⚠️ 注意:Simple Boot 不提供任何安全特性,也不支持 OTA 更新。
MCUboot Bootloader
如果希望使用 MCUboot 引导程序,至少需要构建并烧录一次 bootloader。用户可以通过在板卡默认配置文件(defconfig)中加入以下配置来切换:
CONFIG_BOOTLOADER_MCUBOOT=y对于该板卡,Kconfig.sysbuild 中已将 bootloader 选择默认设为BOOTLOADER_MCUBOOT。选择 MCUboot 后,构建应用有两种方式:sysbuild与手动构建。
方式一:sysbuild
sysbuild 可以一次性构建并烧录启动 ESP32 SoC 所需的全部镜像(bootloader + 应用)。使用 sysbuild 构建示例应用:
west build -b esp32c61_devkitc samples/hello_world --sysbuild默认情况下,ESP32 sysbuild 会生成bootloader(MCUboot)与应用两种镜像,也可配置生成其他类型的镜像。
sysbuild 的构建目录结构与传统 Zephyr 构建不同,输出按 domain 子目录组织:
build/ ├── hello_world │ └── zephyr │ ├── zephyr.elf │ └── zephyr.bin ├── mcuboot │ └── zephyr │ ├── zephyr.elf │ └── zephyr.bin └── domains.yaml⚠️ 注意:使用
--sysbuild时,一旦执行 pristine(干净)构建,bootloader 会被重新构建并重新烧录。
方式二:手动构建
开发迭代期间追求"尽量快地构建与烧录",可以一次只构建一个镜像,使用传统构建方式。以下命令对手动构建与 sysbuild 都适用,两者唯一的区别是构建目录结构不同:
west build -b esp32c61_devkitc samples/hello_world⚠️ 记住:bootloader(MCUboot)至少需要烧录一次。
烧录同样使用常规的flash目标:
west flash下载模式遗留问题
在暴露了内置 USB Serial/JTAG 控制器的目标上,芯片在west flash之后可能停留在下载模式而不会启动新镜像,直到重新上电。如果遇到这种情况,可以带看门狗复位方式烧录,让芯片自行重启:
west flash --reset-type watchdog-reset更快地烧录与更干净的日志
为了缩短开发循环,--esp-skip-flashed会在设备上通过MD5 校验确认 flash 中已存在与目标一致的二进制时跳过写入:
west flash --esp-skip-flashed如果追求更快的重新烧录,--esp-diff只写入与上次镜像不同的区域。它对比的是本地缓存的副本而不是读取设备,因此只有在自上次west flash以来 flash 未被其他工具、板卡或手动写入修改时才应使用:
west flash --esp-diff在 CI 等场景下可以抑制进度输出以获得更干净的日志:
west flash --esp-no-progress打开串口监视器
使用以下命令打开串口监视器:
west espressif monitor板卡自动复位并启动后,在监视器中应看到类似输出:
***** Booting Zephyr OS vx.x.x-xxx-gxxxxxxxxxxxx ***** Hello World! <board>其中<board>即esp32c61_devkitc。
板卡变体:用 snippet 切换 Flash/PSRAM
ESP32 板卡可以搭配不同的模组,涉及 SPI flash 大小、PSRAM 大小与 PSRAM 模式的多种组合。snippets/espressif目录下的 snippet 提供了一种模块化方式,在构建时应用这些变化而无需重复定义板卡。
支持的 snippet 变体如下:
| Snippet 名称 | 说明 |
|---|---|
| Flash 容量 | |
espressif-flash-4M | 4 MB Flash 的板卡 |
espressif-flash-8M | 8 MB Flash 的板卡 |
espressif-flash-16M | 16 MB Flash 的板卡 |
espressif-flash-32M | 32 MB Flash 的板卡 |
espressif-flash-64M | 64 MB Flash 的板卡 |
espressif-flash-128M | 128 MB Flash 的板卡 |
| PSRAM 容量 | |
espressif-psram-2M | 2 MB PSRAM 的板卡 |
espressif-psram-4M | 4 MB PSRAM 的板卡 |
espressif-psram-8M | 8 MB PSRAM 的板卡 |
| PSRAM 利用方式 | |
espressif-psram-reloc | 将 Flash(代码)重定位到 PSRAM |
espressif-psram-wifi | 将 Wi-Fi 缓冲区放入 PSRAM |
应用板卡变体时,在west build中使用-S标志,例如:
west build -b esp32c61_devkitc samples/hello_world -S espressif-flash-32M -S espressif-psram-4M注意事项:
- 这些 snippet 仅适用于所选 Flash/PSRAM 配置在硬件上得到支持的板卡;
- 若不使用 Flash snippet,则采用板卡默认 Flash 容量;
- 若不使用 PSRAM snippet,则采用板卡默认 PSRAM 容量。
ESP32-C61-DevKitC-1 的板载模组默认是 8 MB Flash + 2 MB PSRAM,因此使用espressif-flash-8M/espressif-psram-2M可显式声明与板载硬件一致的配置。
OpenOCD 调试
使用 ESP32 定制版 OpenOCD
Espressif 芯片需要带有 ESP32 特定补丁的定制 OpenOCD 构建。Zephyr SDK 自带 OpenOCD,但可能不支持 ESP32;构建时可通过 CMake 参数指定 Espressif OpenOCD 路径:
west build -b esp32c61_devkitc samples/hello_world -DOPENOCD=/path/to/openocd -DOPENOCD_DEFAULT_PATH=/path/to/openocd/scripts对于该板卡,board.cmake 会优先在ESPRESSIF_TOOLCHAIN_PATH/openocd-esp32/bin中查找openocd,并依次引入esp32.board.cmake与openocd.board.cmake;此外 support/openocd.cfg 提供了板级 OpenOCD 配置文件。
Zephyr 线程感知(Thread Awareness)
定制版 OpenOCD 支持 Zephyr RTOS 线程感知,使 GDB 能够:
- 通过
info threads列出所有线程; - 显示线程名称、优先级与状态;
- 在线程上下文之间切换;
- 展示任意线程的调用栈回溯(backtrace)。
要求:
- OpenOCD ESP32 v0.12.0-esp32-20251215 或更新版本;
- 以
CONFIG_DEBUG_THREAD_INFO=y构建。
示例命令(带线程调试信息与自定义 OpenOCD 路径):
west build -b esp32c61_devkitc samples/hello_world -DCONFIG_DEBUG_THREAD_INFO=y -DOPENOCD=<path/to/bin/openocd> -DOPENOCD_DEFAULT_PATH=<path/to/openocd/share/openocd/scripts> west debug从板卡定义到实际开发的关键路径小结
- 板卡文档:boards/espressif/esp32c61_devkitc/doc/index.rst
- 板卡元数据与支持矩阵:esp32c61_devkitc.yaml
- 设备树与引脚复用:esp32c61_devkitc.dts、esp32c61_devkitc-pinctrl.dtsi
- 构建/烧录/调试通用指南(被板卡文档 include 的公共片段):building-flashing.rst、board-variants.rst、openocd-debugging.rst
- SoC 特性与系统要求:soc-esp32c61-features.rst、system-requirements.rst
结语
ESP32-C61-DevKitC-1 在 Zephyr 中是一块"开箱可用"的 Wi-Fi 6 + BLE 开发板:通过 esp32c61_devkitc.yaml 声明的 ADC、GPIO、I2C、SPI、UART、PWM、DMA、看门狗与 Wi-Fi 接口矩阵,配合 snippet 化的 Flash/PSRAM 变体机制和--esp-diff/--esp-skip-flashed等提速烧录手段,开发者可以快速迭代从外设驱动到无线网络的全栈应用。无论是用默认 Simple Boot 快速验证,还是通过 sysbuild 一键构建 MCUboot 双镜像方案,Zephyr 仓库中的设备树与板卡脚本已经为你铺好了从构建、烧录到 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
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考