Zephyr 中 LilyGO 板卡家族完整支持指南:从 T-Deck 到 T-Watch S3 的构建、烧录与调试实战
【免费下载链接】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
LilyGO(LilyGO/TTGO)是嵌入式 IoT 开发板领域极具代表性的厂商,其产品覆盖 ESP32、ESP32-S3、ESP32-C3 等多个乐鑫平台。Zephyr 在 boards/lilygo 目录下为 LilyGO 的 9 款主流开发板提供了官方支持,涵盖手持终端、LoRa 远距离通信、智能手表、迷你 IoT 节点等多种形态。本文以 boards/lilygo/index.rst 及其下各板卡的官方文档为主体,结合仓库中的板级源码,系统讲解这些板卡的硬件规格、构建烧录流程、MCUboot 与 Simple Boot 两种引导方式、板卡变体选择以及 OpenOCD 调试方法,读完即可在对应硬件上从零跑通你的第一个 Zephyr 应用。
LilyGO 板卡家族全景
Zephyr 当前为 LilyGO 提供了 9 款板卡的官方定义,它们全部基于乐鑫(Espressif)SoC,分布在三个芯片平台之上:
| 板卡 | SoC/模组 | Flash | PSRAM | 核心特色 |
|---|---|---|---|---|
| T-Deck | ESP32-S3-WROOM-N16R8 | 16 MB | 8 MB | 2.8" TFT 屏、电容触摸、35 键键盘、轨迹球、LoRa(Plus 版含 GNSS) |
| T-Dongle S3 | ESP32-S3 | 16 MB | — | USB-A 直插、TF 卡槽、APA102 RGB LED、透明外壳 |
| TTGO LoRa32 | ESP32-PICO-D4 | — | — | SSD1306 屏幕、SX1276/1278 LoRa 前端 |
| TTGO T7 V1.5 | ESP32-WROVER-E | 4 MB(有 16 MB 型号) | — | 迷你核心板、Micro-USB、板载天线 |
| TTGO T8-C3 | ESP32-C3 | 4 MB | — | RISC-V 单核、USB-C、IPEX 天线 |
| TTGO T8-S3 | ESP32-S3 | 16 MB | — | SD 卡槽、UART 连接器、USB-C |
| TTGO TBeam | ESP32-PICO-D4 | — | — | LoRa + NEO-6M/M8N GNSS + AXP2101 PMIC + 18650 电池仓 |
| TTGO T-OI-PLUS | ESP32-C3 | 4 MB | — | Grove 连接器、USB-C 串口、可选 18340 电池仓 |
| T-Watch S3 | ESP32-S3-R8 | 16 MB QSPI | 8 MB | 智能手表形态:触摸屏、LoRa、麦克风、音频功放、马达震动 |
板卡标识遵循 Zephyr 的vendor/board命名规则,全部以lilygo为 vendor。从 board.yml 可以看出,每块板卡由board.yml声明name、full_name、vendor与关联的 SoC;以 ESP32/ESP32-S3 双核芯片为基座的板卡进一步细分为procpu与appcpu两个变体(如ttgo_lora32/esp32/procpu),而以 ESP32-C3 单核 RISC-V 芯片为基座的 TTGO T8-C3 与 TTGO T-OI-PLUS 则只有一个板卡目标。
双核板卡为何拆分 procpu/appcpu:ESP32 与 ESP32-S3 的 PRO CPU 与 APP CPU 在 Zephyr 中被建模为两个独立的 SoC 目标,对应
SOC_ESP32_PROCPU/SOC_ESP32_APPCPU等 Kconfig 选项(见 Kconfig.ttgo_lora32),因此板卡定义也随之拆分为两个可独立构建的目标。
各板卡硬件规格与源码级细节
T-Deck:ESP32-S3 手持终端
T-Deck 是 LilyGO 的旗舰级手持设备,搭载ESP32-S3-WROOM-N16R8模组:双核 Xtensa LX7 最高 240 MHz、16 MB Flash、8 MB PSRAM,支持 Wi-Fi 802.11 b/g/n 与 Bluetooth LE 5.0。板载外设包括:
- 2.8 英寸 320×240 SPI TFT 屏幕
- Goodix GT911 电容触摸控制器
- 外接 I2C 键盘控制器 + 35 键键盘
- 轨迹球(四方向输入 + 中间按压键)
- 通过 IO4 上的 100k/100k 电阻分压测量电池电压
- USB-C:供电、烧录、日志输出与基于内置 USB JTAG 的调试
- GNSS 模块(仅 T-Deck Plus 版本)
板级设备树 t_deck_procpu.dts 完整揭示了各外设的接线方式,可作为移植其他 ESP32-S3 板卡时的参考范例:
- 屏幕采用MIPI DBI SPI 4 线模式驱动 ST7789V(
sitronix,st7789v),数据引脚走spi2,DC 引脚为 GPIO11,最高 40 MHz,并通过gpio-hog将 GPIO1_10 设为背光输出高电平; - 触摸屏为 Goodix GT911(
goodix,gt911),挂在 I2C0 上(地址 0x5D,备用地址 0x14),并通过swapped-x-y、inverted-x属性完成屏幕坐标校正; - 轨迹球被建模为
gpio-keys输入设备,5 个按键(按压/上/下/左/右)分别映射到INPUT_KEY_ENTER、INPUT_KEY_UP等事件码,再通过 lvgl-trackball-keypad 节点转译为 LVGL 的LV_KEY_*导航键,可直接驱动 LVGL 图形界面; - LoRa 射频前端为 Semtech SX1262,使用
dio3-tcxo-voltage(1.8V TCXO)与dio2-tx-enable配置,SPI 速率 4 MHz; - TF 卡以
zephyr,sdhc-spi-slot+zephyr,sdmmc-disk方式挂接在 SPI2 上(20 MHz),卷名为 "SD"; - 电池电压通过
voltage-divider节点读取 ADC0 通道 3(100k 输出电阻 / 200k 总分压电阻,即 IO4 上的 100k/100k 分压); - 键盘、屏幕、LoRa 等外设统一受
peripheral_pwr(GPIO0_10 高电平使能)这一power-domain-gpio电源域控制,对应 t_deck_procpu_defconfig 中的CONFIG_POWER_DOMAIN=y与CONFIG_POWER_DOMAIN_GPIO=y。
从 t_deck_procpu.yaml 可以看到该板卡声明支持的外设能力:gpio、i2c、i2s、spi、counter、watchdog、entropy、dma、input、video、display、lora。
T-Dongle S3:USB 直插 IoT 节点
T-Dongle S3 是一款可直接插入 USB-A 口的迷你开发板,基于 ESP32-S3(240 MHz 双核、Bluetooth 5、Wi-Fi),集成:
- 板载天线与 IPEX 连接器(通过移动 0 欧姆电阻启用外置 U.FL 天线)
- 集成 TF 卡槽的 USB-A 连接器
- MX 1.25 mm 2 针电池连接器
- APA102 RGB LED
- JST SH 1.0 mm 4 针 UART 连接器
- 透明塑料外壳
板载 16 MB Flash,支持电池充电,USB-A 口同时承担编程与调试。
TTGO LoRa32 / TBeam:LoRa 长距离通信
TTGO LoRa32(文档)与TTGO TBeam(文档)是面向 LoRa 应用的双胞胎产品,均基于 ESP32-PICO-D4(240 MHz 双核、600 DMIPS、520 KB SRAM、Wi-Fi),差异在于:
- LoRa32 内置 SSD1306 128×64 0.96" 屏幕与 SX1278(433 MHz)或 SX1276(868/915/923 MHz)前端,带 JST GH 电池连接器与 TF 卡槽;
- TBeam 的屏幕与 SX127x 前端均为可选件(SMA 或 IPEX 连接器),额外集成NEO-6M 或 NEO-M8N GNSS 模块、X-Powers AXP2101 PMIC以及18650 锂离子电池夹。
TBeam 的板级定义(ttgo_tbeam_esp32_procpu.yaml)声明支持display、lora、nvs、gnss等能力,并在测试时忽略net与bluetooth相关标签(ignore_tags)。
官方开箱即用的示例应用:
- LoRa32:
lora-send、lora-receive、fs、character-frame-buffer - TBeam:
lora-send、lora-receive、gnss、wifi-shell、character-frame-buffer、blinky
注意:LoRa32 与 TBeam 因引脚限制,不支持 OpenOCD 调试(官方文档明确说明)。
TTGO T7 V1.5 / T8-C3 / T8-S3 / T-OI-PLUS:迷你 IoT 节点
这四款为不同价位与芯片平台的迷你开发板:
- TTGO T7 V1.5(文档):基于 ESP32-WROVER-E 模组,4 MB Flash(存在 16 MB 型号),Micro-USB 编程调试、板载天线、JST GH 电池座、LED。官方推荐示例为
samples/basic/blinky与samples/bluetooth/beacon。 - TTGO T8-C3(文档):基于 ESP32-C3(160 MHz 单核、400 KB SRAM),4 MB Flash,USB-C 编程调试、板载天线 + IPEX(0 欧姆电阻切换 U.FL)、JST GH 电池座、LED。
- TTGO T8-S3(文档):基于 ESP32-S3,16 MB Flash,USB-C 编程调试、SD 卡槽、MX 1.25 mm 电池座、JST SH UART 连接器。官方推荐示例为
wifi-shell与fs。 - TTGO T-OI-PLUS(文档):基于 ESP32-C3(RISC-V 160 MHz 单核、400 KB SRAM),4 MB Flash,板载 Grove 连接器(可直接接入 Seeed 生态传感器模块)、USB-C(板载串口)、可选 18340 电池仓、LED。官方推荐示例为
samples/basic/blinky与samples/bluetooth/beacon。
T-Watch S3:ESP32-S3 智能手表
T-Watch S3 是完整的智能手表形态参考设计,基于 ESP32-S3-R8(双核 Xtensa LX7 最高 240 MHz、8 MB 集成 PSRAM、BLE 5.0、Wi-Fi b/g/n),外设配置在 LilyGO 家族中最为丰富:
| 外设 | 器件 |
|---|---|
| 16 MB 外部 QSPI Flash | Winbond W25Q128JWPIQ |
| PMU | X-Powers AXP2101(DC-DC/LDO 稳压、电池充电、电量计) |
| 电池 | 470 mAh |
| RTC | NXP PCF8563 |
| 震动马达 | TI DRV2605 |
| 加速度计 | Bosch BMA423 |
| 240×240 LCD + 触摸 | ST7789V 控制器 + Focaltech FT5336 触摸 |
| 麦克风 | Knowles SPM1423HM4H-B |
| LoRa 射频 | Semtech SX1262 |
| 音频功放 | Maxim MAX98357A |
整板仅有一个 Micro-USB 口,凭借芯片内置 JTAG 同时实现串口烧录、调试与 console;板上没有可方便引出到外部的 GPIO,仅有的 1 颗物理按键接在 PMU 上,用于开关机。板级能力声明(twatch_s3_procpu.yaml)覆盖gpio、i2c、spi、counter、watchdog、entropy、pwm、dma、input、video、rtc、lora。
系统要求:获取 Espressif 射频二进制 Blob
所有 Espressif 平台板卡(包括上述全部 LilyGO 板卡)的 HAL 都需要射频(RF)二进制 Blob 才能正常工作。按 system-requirements.rst 的说明,先执行 west 更新,再获取 Blob:
west update west blobs fetch hal_espressif建议在每次west update之后都执行一次west blobs fetch hal_espressif,以确保 Blob 与最新的 HAL 版本匹配。
构建与烧录
LilyGO 板卡遵循 Espressif 公共构建流程,支持两种引导方式与两种构建方式。
引导方式一:Simple Boot(默认)
Simple Boot 是不携带二级引导程序(2nd stage bootloader)的单一镜像方案,也是不加额外配置构建应用时的默认选项。它直接加载应用镜像,流程最简单、启动最快。
Simple Boot 不提供任何安全特性,也不支持 OTA 升级。需要安全启动或 OTA 时,应改用 MCUboot。
引导方式二:MCUboot 引导程序
在应用侧,只需在板卡默认配置文件中加入一行即可切换到 MCUboot:
CONFIG_BOOTLOADER_MCUBOOT=y使用 MCUboot 时,引导程序本身至少需要构建并烧录一次。应用镜像有两种构建方式:
1. Sysbuild(推荐)——自动构建并烧录引导所需的所有镜像:
west build --sysbuild -b <board> samples/hello_world默认情况下,ESP32 的 sysbuild 会生成 bootloader(MCUboot)与应用两份镜像,其构建目录结构与传统 Zephyr 构建不同,按 domain 子目录组织:
build/ ├── hello_world │ └── zephyr │ ├── zephyr.elf │ └── zephyr.bin ├── mcuboot │ └── zephyr │ ├── zephyr.elf │ └── zephyr.bin └── domains.yaml2. 手动构建——开发迭代期希望"构建 + 烧录"最快时,可逐个镜像用传统方式构建(与 sysbuild 的差异仅在于构建目录结构):
west build -b <board> samples/hello_world west flash -b <board> samples/hello_world无论手动构建还是 sysbuild,只要使用 MCUboot,引导程序都至少要先烧录一次。
一个实用的坑:在暴露了内置 USB Serial/JTAG 控制器的目标(T-Deck、T-Dongle S3、T-Watch S3 等)上,west flash之后芯片可能停留在下载模式而不启动新镜像,直到断电重启。此时可用看门狗复位让芯片自动重启:
west flash --reset-type watchdog-reset加速烧录的利器
构建烧录文档 提供三个用于缩短开发循环的west flash选项:
| 选项 | 作用 |
|---|---|
--esp-skip-flashed | 当 Flash 中已有二进制与待烧录镜像一致(设备端 MD5 校验)时跳过写入 |
--esp-diff | 只写入与上次镜像不同的区域;它对比的是本地缓存副本而非读设备,因此仅当上次west flash之后 Flash 未被其他工具/板卡/手动写入修改时才可使用 |
--esp-no-progress | 抑制进度输出,适合 CI 中保持日志干净 |
west flash --esp-skip-flashed west flash --esp-diff west flash --esp-no-progress串口监视器与验证
打开串口监视器:
west espressif monitor板卡自动复位并启动后,监视器中应出现如下输出:
***** Booting Zephyr OS vx.x.x-xxx-gxxxxxxxxxxxx ***** Hello World! <board>T-Deck 进入下载模式的特殊操作
T-Deck 使用内置 USB JTAG 进行烧录与调试。若需强制进入 ROM 下载模式,按住轨迹球中央按键的同时复位或上电即可。
板卡变体:用 Snippet 灵活组合 Flash 与 PSRAM
同一块 ESP32 板卡可能搭载不同容量的 Flash 与 PSRAM。为避免为每种组合重复定义板卡,board-variants.rst 说明可通过snippets/espressif目录下的 snippet 在构建时模块化地应用变体:
Flash 容量
| Snippet | 说明 |
|---|---|
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 容量
| Snippet | 说明 |
|---|---|
espressif-psram-2M | 2 MB PSRAM |
espressif-psram-4M | 4 MB PSRAM |
espressif-psram-8M | 8 MB PSRAM |
PSRAM 利用方式
| Snippet | 说明 |
|---|---|
espressif-psram-reloc | 将 Flash(代码/数据)重定位到 PSRAM |
espressif-psram-wifi | 将 Wi-Fi 缓冲区放入 PSRAM |
使用-S参数(可多个,逗号分隔)应用变体:
west build -b <board> samples/hello_world -S espressif-flash-32M,espressif-psram-4M这些 snippet 仅适用于硬件上支持所选 Flash/PSRAM 配置的板卡。若不指定 Flash/PSRAM snippet,则使用板卡默认的 Flash/PSRAM 容量。
以 T-Deck 为例,其设备树中显式将 Flash 声明为 16 MB(reg = <0x0 DT_SIZE_M(16)>)、PSRAM 为 8 MB(size = <DT_SIZE_M(8)>),因此它天然匹配espressif-flash-16M与espressif-psram-8M变体。
调试:OpenOCD for ESP32 与线程感知
LilyGO 板卡的调试统一遵循 Espressif 公共 OpenOCD 调试流程,要点如下:
必须使用定制 OpenOCD:乐鑫芯片需要带 ESP32 专属补丁的 OpenOCD 构建(Espressif 官方发布的
openocd-esp32),Zephyr SDK 自带的 OpenOCD 可能不具备 ESP32 支持。Zephyr 线程感知(Thread Awareness):满足条件的 OpenOCD 可让 GDB 支持 Zephyr RTOS 线程感知,从而:
- 用
info threads列出所有线程; - 查看线程名称、优先级与状态;
- 在线程上下文间切换;
- 查看任意线程的调用栈回溯。
要求 OpenOCD ESP32 v0.12.0-esp32-20251215 或更新版本,并在构建时开启
CONFIG_DEBUG_THREAD_INFO=y:west build -b <board> samples/hello_world -DCONFIG_DEBUG_THREAD_INFO=y -DOPENOCD=<path/to/bin/openocd> -DOPENOCD_DEFAULT_PATH=<path/to/openocd/share/openocd/scripts> west debug -b <board>- 用
使用自定义 OpenOCD:如果不想每次重复指定,也可在构建时显式给出 OpenOCD 与脚本路径:
west build -b <board> samples/hello_world -DOPENOCD=/path/to/openocd -DOPENOCD_DEFAULT_PATH=/path/to/openocd/scripts
各板卡的 OpenOCD 配置文件位于各自的support/openocd.cfg(例如 t_deck/support/openocd.cfg)。如前所述,LoRa32 与 TBeam 因引脚限制不支持 OpenOCD 调试。
板卡源码结构速查
想深入了解或参考移植,可以在 boards/lilygo 目录下按以下文件类型快速定位:
board.yml:板卡名、厂商、SoC 声明(如 ttgo_lora32/board.yml);<board>_<soc>_procpu.yaml/<board>.yaml:板卡标识符、架构、工具链、支持的外设能力列表(如 t_deck_procpu.yaml);<board>_procpu.dts/<board>.dts:设备树,描述外设接线与配置(如 t_deck_procpu.dts);<board>-pinctrl.dtsi:引脚复用定义;<board>_defconfig:板级默认 Kconfig(如 t_deck_procpu_defconfig 开启 console、GPIO、电源域等);Kconfig.*:板卡 Kconfig 符号与 SoC 选择逻辑;support/openocd.cfg:OpenOCD 调试配置。
掌握这套目录结构后,你不仅能在这 9 款 LilyGO 板卡上快速搭建 Zephyr 开发环境,也能以此为模板理解并扩展乐鑫平台下的其他板卡支持。
结语
LilyGO 板卡家族在 Zephyr 中获得了完整且高质量的官方支持:从 T-Deck 这类外设丰富的 ESP32-S3 手持终端,到 TBeam/LoRa32 这类面向 LoRa 通信的远距离节点,再到 T-Watch S3 这类集成 PMU、RTC、音频与触摸屏的智能手表参考设计。结合west blobs fetch hal_espressif获取射频 Blob、Simple Boot 与 MCUboot 两种引导选择、sysbuild 与手动构建两种流程,以及 Flash/PSRAM snippet 变体机制和 ESP32 定制 OpenOCD 线程感知调试,开发者可以在统一的 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),仅供参考