ARTICLE DETAIL

资讯详情

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

Zephyr 上的 Adafruit Feather ESP32-S2:B/C 硬件版本差异、设备树实现与外设实测指南

Zephyr 上的 Adafruit Feather ESP32-S2:B/C 硬件版本差异、设备树实现与外设实测指南 Zephyr 上的 Adafruit Feather ESP32-S2B/C 硬件版本差异、设备树实现与外设实测指南【免费下载链接】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/zephyrZephyr 将 Adafruit Feather ESP32-S2 作为独立开发板board target集成并针对该板 Rev B 与 Rev C 两代硬件差异提供adafruit_feather_esp32s2B/C两种 board variant。读完本文你能掌握该板的 Zephyr 移植结构设备树、引脚复用、板级配置、两代硬件在 I2C 电源域与电池计量芯片上的区别以及如何逐一亮灯、点 NeoPixel、读电量、跑 Wi-Fi Shell 完成全外设验证。一、板级概述与硬件构成Adafruit Feather ESP32-S2 是 Feather 标准布局的 ESP32-S2 开发板与其他 Feather / FeatherWing 生态设备共享外设排布。板载一颗 ESP32-S2 mini 模组、LiPo 电池充电电路、电池电量计fuel gauge、一个 USB-C 口以及兼容 SparkFun Qwiic 的 STEMMA QTI2C连接器。官方板卡文档boards/adafruit/feather_esp32s2/doc/adafruit_feather_esp32s2.rst给出的硬件清单如下ESP32-S2 mini 模组搭载 240MHz Tensilica 处理器320KB SRAM、4MB flash 2MB PSRAMUSB-C 直连 ESP32-S2 提供 USBLiPo 接插件经 USB-C 供电时内置电池充电LC709203F 或 MAX17048 电量计用于电池电压与电量SoC上报内置 NeoPixel 指示灯RGB LED用于 I2C 设备的 STEMMA QT 连接器带可切换电源以支持低功耗模式。1.1 必须了解的三组硬件差异板卡文档用 note 明确了三个直接影响 Zephyr 配置的要点BME280 传感器版本Adafruit 售出的 ESP32-S2 Feather with BME280 与普通版是同一块板只是出厂预装了 BME280。Zephyr 不把它单列为独立 board而是通过 devicetree overlay 添加 BME280 节点所有板子都预留了该传感器的焊盘。电量计芯片换代自 2023-05-31 起Adafruit 将电池监控芯片从已停产的 LC709203F 更换为 MAX17048。查看板背丝印即可确认手上是哪一颗。Zephyr 中两颗芯片的驱动均已存在并受支持但都需要通过 devicetree overlay 显式添加。Rev B 与 Rev CAdafruit ESP32-S2 Feather 存在 B、C 两版硬件。Rev C 改进了 NeoPixel 与 I2C QT 口的供电电路——由晶体管改成了 LDO 稳压器。结果是在 Rev B 板上要打开 NeoPixel 和 I2C QT 口电源GPIO7节点名i2c_reg需置LOW在 Rev C 板上则需置HIGH。这正是 Zephyr 提供B/C两个 board variant 的根本原因。1.2 ESP32-S2 SoC 支持的能力面板卡文档通过include引入 Espressif 公共文档boards/espressif/common/soc-esp32-features.rst说明 SoC 特性双核 Xtensa 微处理器160/240MHz、520KB SRAM、802.11b/g/n Wi-Fi、BLE 与 BR/EDR、12-bit ADC至多 18 通道、SPI/I2C/UART 多组外设、CAN 2.0、IR 收发、加密硬件加速RNG/ECC/RSA/SHA-2/AES与 5µA 级深睡电流等。一个关键限制在文档中特别标注ESP32-S2 的 USB-OTG 目前不受支持因此看不到串口输出时必须用 FTDI-USB-RS232 之类的转换器接到 Feather 排针的 RX/TX 上对应 Zephyr 的uart1。二、Zephyr 设备树实现剖析Zephyr 侧板级定义集中在 boards/adafruit/feather_esp32s2 目录核心文件关系为adafruit_feather_esp32s2.dts板级顶层 DTScompatible espressif,esp32s2include 公共片段与 Feather 连接器片段adafruit_feather_esp32s2_common.dtsiB/C 共用的芯片与外设定义adafruit_feather_esp32s2-pinctrl.dtsi引脚复用表feather_connector.dtsiFeather 排针的 gpio-map 转接adafruit_feather_esp32s2_B.overlay / adafruit_feather_esp32s2_C.overlay两版硬件的 I2C 电源域差异。2.1 控制台、SRAM 与分区公共 dtsi 中的chosen节点明确了本板运行 Zephyr 的基础拓扑chosen { zephyr,sram sram1; /* * uart1 is used as the default uart for zephyr,console and zephyr,shell, * because USB-OTG is until now not supported and USB-CDC is not available * for ESP32-S2. ... */ zephyr,console uart1; zephyr,shell-uart uart1; zephyr,flash flash0; zephyr,code-partition slot0_partition; };注释直接解释了为何控制台选uart1而非 USB-CDC——即文档中强调的USB-OTG 尚不支持这一前提。zephyr,flash flash0对应板载 4MB flashzephyr,code-partition指向slot0_partitionsimple boot 的单槽布局。aliases节点给出了应用可直接引用的资源别名led0板载红灯、i2c-0STEMMA QT 总线、sw0BOOT 按键、led-stripNeoPixel与watchdog0。2.2 引脚复用从调试 UART 到 NeoPixelpinctrl 文件 定义了五组复用节点外设引脚映射uart0_default调试 UARTTX → GPIO43output-highuart1_default控制台/Shell UARTTX → GPIO39、RX → GPIO38bias-pull-upspim2_defaultSPI2Feather SPI 排针MISO → 37、SCLK → 36、CS → 7、MOSI → 35spim3_ws2812_ledNeoPixelWS2812MOSI → GPIO33i2c0_defaultSTEMMA QT I2CSDA → GPIO3、SCL → GPIO4开漏、上拉输出twai_defaultCANTX → GPIO5、RX → GPIO6NeoPixel 是本板设备树中最有教学价值的部分。它在spi3下声明为一个worldsemi,ws2812-spi从设备靠 SPI 控制器模拟 WS2812 的位时序spi3 { ... pinctrl-0 spim3_ws2812_led; line-idle-low; led_strip: ws28120 { compatible worldsemi,ws2812-spi; reg 0; spi-max-frequency 6400000; chain-length 1; spi-cpha; spi-one-frame WS2812C_ONE_FRAME; /* 11110000: 625ns high and 625ns low */ spi-zero-frame WS2812C_ZERO_FRAME; /* 11000000: 312.5ns high and 937.5ns low */ color-mapping LED_COLOR_ID_GREEN, LED_COLOR_ID_RED, LED_COLOR_ID_BLUE; }; };几个参数值得注意6.4MHz SPI 频率下spi-one-frame用 8 个1位编码 625ns 高电平625ns 低电平的1码型spi-zero-frame用10000000编码 312.5ns 高937.5ns 低的0码型chain-length 1对应板载单颗灯color-mapping声明该灯为 GRB 色序。此外公共 dtsi 中还有一个 gpio-hogneopixel_power_enable在 GPIO21 置高输出负责 NeoPixel 的供电使能。2.3 Feather 排针的 gpio-map 转接feather_connector.dtsi 把 Feather 标准引脚名映射到 ESP32-S2 的 GPIO这样 devicetree overlay 可以直接写feather_header而无需关心具体 GPIO 号feather_header: connector { compatible adafruit-feather-header; #gpio-cells 2; gpio-map 0 0 gpio0 18 0, /* A0 */ 1 0 gpio0 17 0, /* A1 */ 2 0 gpio0 16 0, /* A2 */ 3 0 gpio0 15 0, /* A3 */ 4 0 gpio0 14 0, /* A4 */ 5 0 gpio0 8 0, /* A5 */ 6 0 gpio1 4 0, /* SCK */ 7 0 gpio1 3 0, /* MOSI */ 8 0 gpio1 5 0, /* MISO */ 9 0 gpio1 6 0, /* RX */ 10 0 gpio1 7 0, /* TX */ 11 0 gpio1 11 0, /* DB */ 12 0 gpio0 3 0, /* SDA */ 13 0 gpio0 4 0, /* SCL */ ... };文件末尾还给出三个便捷别名feather_serial: uart1、feather_i2c: i2c0、feather_spi: spi2与 Espressif 其他 Feather 板保持命名一致。2.4 B/C 版本 overlay一个 GPIO 决定 I2C 电源域两版硬件差异全部收敛在i2c_reg这个电源域节点上。Rev B overlay 中该 GPIO 低有效Rev C overlay 中改为高有效/ { /* * On-board transistor powers I2C pull-ups and external devices connected * via the STEMMA QT connector. (Rev B 注释晶体管) * / On-board regulator powers ... (Rev C 注释LDO 稳压器) */ i2c_reg: i2c_reg { label I2C Power; compatible power-domain-gpio; #power-domain-cells 0; enable-gpios gpio0 7 GPIO_ACTIVE_LOW; /* Rev C 为 GPIO_ACTIVE_HIGH */ startup-delay-us 10; }; };power-domain-gpio的作用是把 GPIO7 封装成一个电源域任何声明了power-domains i2c_reg的外设如后面的电量计节点在启用时会自动拉起 I2C 排针的供电这正是文档中switchable power for low-power mode的软件落点。三、Board 定义、Kconfig 与默认配置3.1 板级元数据与 revision 机制board.yml 声明了本目录下三个 board 目标其中基础版带字母 revision- name: adafruit_feather_esp32s2 full_name: Adafruit Feather ESP32S2 vendor: adafruit socs: - name: esp32s2 revision: format: letter default: C revisions: - name: B - name: C从源码结构看default: C意味着不带后缀的adafruit_feather_esp32s2默认按 Rev C 硬件处理同一目录还登记了adafruit_feather_esp32s2_tft与adafruit_feather_esp32s2_tft_reverse两个 TFT 屏版本对应 adafruit_feather_esp32s2_tft.dts 等文件本文不展开。3.2 Kconfig 选择与 defconfigKconfig.adafruit_feather_esp32s2 只有一条关键选择config BOARD_ADAFRUIT_FEATHER_ESP32S2 select SOC_ESP32S2_R2即该板绑定 ESP32-S2 Rev 2 的 SoC 支持。板级默认配置 adafruit_feather_esp32s2_defconfig 保持极简只开启控制台与基础外设CONFIG_CONSOLEy CONFIG_SERIALy CONFIG_UART_CONSOLEy CONFIG_GPIOy CONFIG_CLOCK_CONTROLy其余能力I2C、SPI、led_strip、fuel gauge、Wi-Fi 等由各示例工程自己的prj.conf按需在构建期打开。四、编程与调试4.1 烧录方式与 Espressif 系列板通用板卡文档 include 了 boards/espressif/common/building-flashing.rst 的烧录章节要点如下Simple Boot默认不带二阶段 bootload 器的单镜像启动直接west buildwest flash即可。注意它不提供安全特性与 OTA 能力。MCUboot在配置中加CONFIG_BOOTLOADER_MCUBOOTy启用。可选 sysbuild 或手动构建两种方式sysbuild 一条命令构建并烧录全部所需镜像west build -b adafruit_feather_esp32s2B --sysbuild -- samples/hello_worldsysbuild 的构建目录按域组织build/hello_world/zephyr/zephyr.elf、build/mcuboot/zephyr/zephyr.bin等且 pristine 构建下 bootload 器会每次重建重烧。快速重烧west flash --esp-skip-flashed通过设备端 MD5 校验跳过相同镜像west flash --esp-diff只写差异区域前提是上次west flash后没有其他工具改过 flash--esp-no-progress关闭进度输出适合 CI。串口监视由于控制台走uart1用 FTDI 转换器接 RX/TX 排针后用west espressif monitor打开监视器复位后应看到***** Booting Zephyr OS ... *****。4.2 构建期 Snippet 变体同目录的 boards/espressif/common/board-variants.rst 说明 ESP32 系列板可用-S选项叠加 flash/PSRAM 变体 snippet如espressif-flash-8M、espressif-psram-4M、espressif-psram-reloc、espressif-psram-wifi等。对本板4MB flash 2MB PSRAM而言默认值已覆盖硬件能力snippet 仅当所选配置与板载硬件兼容时有效未使用 PSRAM snippet 时沿用板级默认。4.3 OpenOCD 调试文档 include 的调试章节对应本目录的 support/openocd.cfg。从源码结构看该文件为 ESP32-S2 的 OpenOCD 目标提供板级连接参数接口、复位线与 SWD 引脚配合 Zephyr 的openocdrunner 使用具体接线与工具版本要求以调试章节文档为准。五、外设实测从点灯到 Wi-Fi板卡文档按外设组织了四个验证示例B/C 版本各给一条命令。以下均假设 west 与工具链已就绪系统要求部分同样复用 Espressif 公共文档。5.1 板载红灯blinky 示例板载红色 LED 接 GPIO13低有效见 2.1 节led0节点。分别构建两个 revision# Rev B west build -b adafruit_feather_esp32s2B -- samples/basic/blinky west flash # Rev C west build -b adafruit_feather_esp32s2C -- samples/basic/blinky west flash5.2 NeoPixelled_strip 示例WS2812 节点已通过led-strip别名暴露samples/drivers/led/led_strip示例可直接点亮它west build -b adafruit_feather_esp32s2B -- samples/drivers/led/led_strip west flash # Rev C 同理board 换成 adafruit_feather_esp32s2C示例内部通过DEVICE_DT_GET(DT_ALIAS(led_strip))拿到设备再调用led_strip_*API 写灯值——这正是 2.2 节 SPI 时序参数能被应用层透明复用的原因。5.3 电量计fuel_gauge 示例samples/drivers/fuel_gauge演示 Zephyr fuel gauge API先枚举全部公共属性验证驱动支持面再周期性读取FUEL_GAUGE_RELATIVE_STATE_OF_CHARGE_PCT电量百分比与FUEL_GAUGE_VOLTAGE_UV电压。示例只读不写避免误配置 IC。示例文档见 samples/drivers/fuel_gauge/README.rst。仓库已为该板两个 revision 预置 overlayRev B → samples/drivers/fuel_gauge/boards/adafruit_feather_esp32s2_B.overlay定义 LC709203F 节点Rev C → samples/drivers/fuel_gauge/boards/adafruit_feather_esp32s2_C.overlay定义 MAX17048 节点reg 0x36同样挂在i2c_reg电源域。# Rev B自带 LC709203F overlay west build -b adafruit_feather_esp32s2B -- samples/drivers/fuel_gauge west flash # Rev C自带 MAX17048 overlay west build -b adafruit_feather_esp32s2C -- samples/drivers/fuel_gauge west flash如果你手中的 Rev C 板仍是旧 LC709203F 芯片则需自行补一个 overlay通过--extra-dtc-overlay传入/ { aliases { fuel-gauge0 lc709203f; }; }; i2c0 { lc709203f: lc709203f0b { compatible onnn,lc709203f; status okay; reg 0x0b; power-domains i2c_reg; apa 500mAh; battery-profile 0x01; }; };west build -b adafruit_feather_esp32s2C --extra-dtc-overlayboards/name_of_your.overlay \ -- samples/drivers/fuel_gauge west flash示例的典型输出摘自示例 READMELC709203F 场景[00:00:00.116,000] inf app: Found device lc709203f0b [00:00:00.122,000] inf app: Property FUEL_GAUGE_RELATIVE_STATE_OF_CHARGE_PCT is supported [00:00:00.122,000] inf app: Relative state of charge: 100 [00:00:00.123,000] inf app: Property FUEL_GAUGE_VOLTAGE_UV is supported [00:00:00.123,000] inf app: Voltage: 4190000 [00:00:00.128,000] inf app: Fuel gauge data: Charge: 100%, Voltage: 4190mV注意示例输出中Design capacity: 500与 overlay 里apa 500mAh的对应关系——apaaverage usable capacity参数即被驱动读回为设计容量。5.4 Wi-Finet/wifi/shell 示例samples/net/wifi/shell用于验证 Wi-Fi 功能。由于 ESP32-S2 的 USB-OTG 未支持、控制台走串口测试前需先满足文档 Prerequisites 一节的要求串口监视器就绪、配网参数等west build -b adafruit_feather_esp32s2B -- samples/net/wifi/shell west flash # Rev C 同理六、小结与参考文件本篇覆盖的板级要点可以收敛为四条工程结论adafruit_feather_esp32s2B/C两个 revision 的唯一设备树差异在i2c_reg电源域的 GPIO 极性B 低有效 / C 高有效构建时务必选对版本控制台与 shell 固定走uart1TX 39 / RX 38依赖 FTDI 类 USB 转串口输出电量计LC709203F 或 MAX17048与 BME280 均非板级默认节点需按实物丝印选择对应 overlayNeoPixel 以 WS2812 SPI 时序驱动参数完整声明在公共 dtsi 中led_strip别名对外可用。主要参考文件索引文件作用boards/adafruit/feather_esp32s2/doc/adafruit_feather_esp32s2.rst板卡官方文档本文主依据boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_common.dtsi公共设备树chosen/aliases/外设节点boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2-pinctrl.dtsi引脚复用定义boards/adafruit/feather_esp32s2/feather_connector.dtsiFeather 排针 gpio-mapboards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_B.overlay / adafruit_feather_esp32s2_C.overlayB/C 版 I2C 电源域差异boards/adafruit/feather_esp32s2/board.ymlboard 与 revision 元数据boards/espressif/common/building-flashing.rst烧录方式simple boot/MCUboot/sysbuild/快速重烧samples/drivers/fuel_gauge电量计示例及本板预置 overlay【免费下载链接】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),仅供参考
返回列表