资讯动态

RIOT OS 中的 ESP32-S3-DevKit 开发板支持:BOARD_VERSION 多版本配置、外设布局与烧录实战

发布时间:2026/9/18 6:56:08 来源:尧图企业网站定制
RIOT OS 中的 ESP32-S3-DevKit 开发板支持BOARD_VERSION 多版本配置、外设布局与烧录实战【免费下载链接】RIOTRIOT - The friendly OS for IoT项目地址: https://gitcode.com/GitHub_Trending/riot/RIOTESP32-S3-DevKit 是乐鑫官方的一套通用开发板RIOT 通过esp32s3-devkit这一板级定义为它提供完整支持。本文以 boards/esp32s3-devkit/doc.md 为骨架结合 Makefile.features、Kconfig、periph_conf.h、board.h 等源码系统讲解如何用BOARD_VERSION变量在单一板级定义下适配 DevKitC-1/DevKitM-1 的多种 Flash 与 SPI RAM 组合、理解默认 GPIO 复用布局、按需裁剪外设配置以及通过 Micro-USB 编程口一键烧录。ESP32-S3-DevKit 板级概览Espressif ESP32-S3-DevKit 是一系列开发板它们共用同一份 RIOT 板级定义但板载模块不同导致 Flash 容量、集成 SPI PSRAM 与 SPI 电压存在差异。涉及的模块包括ESP32-S3-MINI-1x模块对应 ESP32-S3-DevKitM-1 开发板ESP32-S3-WROOM-1x模块对应 ESP32-S3-DevKitC-1 开发板ESP32-S3-WROOM-2模块对应 ESP32-S3-DevKitC-1 开发板RIOT 的做法是用单个板级定义esp32s3-devkit覆盖所有这些版本编译时通过变量BOARD_VERSION指定实际板子版本BOARDesp32s3-devkit BOARD_VERSIONesp32s3-devkitc-1-n8 make ...从构建系统源码看这一机制在两个层面落地Make 层面Makefile.features 在BOARD_VERSION未定义时默认赋值为esp32s3-devkitc-1-n8然后通过ifeq链将每个版本映射到对应的CPU_MODEL如esp32s3_wroom_1x_n8、esp32s3_mini_1x_n8未知版本直接报错BOARD_VERSION is unknown。Kconfig 层面Kconfig 提供了等价的BOARD_VERSION字符串选项与choice单选菜单供使用 Kconfig 配置系统时选择并据此select对应 CPU 型号。支持的板级版本一览下表完整列出可用版本、Flash 与 SPI RAM 容量及模式以及对应的BOARD_VERSION取值Board VersionFlash (Mode)SPI RAM (Mode)BOARD_VERSION**ESP32-S3-DevKitC-1-N88 MB (Quad)-esp32s3-devkitc-1-n8默认**ESP32-S3-DevKitC-1-N8R28 MB (Quad)2 MB (Quad)esp32s3-devkitc-1-n8r2ESP32-S3-DevKitC-1-N8R88 MB (Quad)8 MB (Octal)esp32s3-devkitc-1-n8r8ESP32-S3-DevKitC-1-N16R8V16 MB (Octal)8 MB (Octal)esp32s3-devkitc-1-n16r8vESP32-S3-DevKitC-1-N32R8V32 MB (Octal)8 MB (Octal)esp32s3-devkitc-1-n32r8vESP32-S3-DevKitC-1U-N88 MB (Quad)-esp32s3-devkitc-1u-n8ESP32-S3-DevKitC-1U-N8R28 MB (Quad)2 MB (Quad)esp32s3-devkitc-1u-n8r2ESP32-S3-DevKitC-1U-N8R88 MB (Quad)8 MB (Octal)esp32s3-devkitc-1u-n8r8ESP32-S3-DevKitM-1-N88 MB (Quad)-esp32s3-devkitm-1-n8ESP32-S3-DevKitM-1U-N88 MB (Quad)-esp32s3-devkitm-1u-n8注命名中的U表示模块带外置天线连接器external antenna connector这一信息也体现在 board.h 的文件头注释中。关于 SPI RAM 与 GPIO 占用的三个要点未指定版本时默认按ESP32-S3-DevKitC-1-N88 MB Flash处理BOARD_VERSION自动取esp32s3-devkitc-1-n8。使用带集成 SPI RAM 的版本BOARD_VERSION为任意esp32s3-devkitx-1x-*r*取值时会启用esp_spi_ram特性随后可通过启用esp_spi_ram伪模块pseudomodule把 SPI RAM 用作堆内存。不同版本对应不同的 SPI RAM 模式GPIO 占用情况不同Quad SPI 模式BOARD_VERSION为esp32s3_devkitx-1x-*r2GPIO26 ... GPIO32被占用不可挪作他用Octal SPI 模式BOARD_VERSION为esp32s3_devkitx-1x-*r8x会额外启用esp_spi_oct特性且一旦通过伪模块esp_spi_ram激活 SPI RAMGPIO33 ... GPIO37被占用此时使用这些 GPIO 可能产生冲突。硬件与板级资源配置MCU开发板的大部分功能都由 ESP32-S3 SoC 提供。RIOT 的esp32s3-devkit板级定义归属于boards_esp32s3与boards_common_esp32s3分组公共定义如CPU_FAM esp32s3见 boards/common/esp32s3/Makefile.features并继续向上继承 boards/common/esp32x/Makefile.featuresCPU esp32所有板至少提供一个 UART。板级配置几乎全 GPIO 引出ESP32-S3-DevKit 板上除了一颗单引脚 RGB-LED 外没有特殊硬件所有 GPIO 基本全部引出因此板级配置是 RIOT 中最为灵活的一种提供最多 20 路 ADC 通道2 个 SPI1 个 I2C2 个 UART1 颗 RGB-LED以下 GPIO 未引出ESP32-S3-DevKitC-1xGPIO26..GPIO34ESP32-S3-DevKitM-1xGPIO27..GPIO32GPIO 的按需复用机制由于 GPIO 几乎全部引出同一引脚可以在不同应用里服务于不同外设但同一时刻只能用于一种外设。例如 GPIO9 既出现在 ADC 通道定义中又出现在 I2C_DEV(0) 的 SCL 信号定义里。这种复用之所以可行是因为 GPIO 只有在以下两种时机之一才被实际占用为特定外设信号对应的外设模块被使用例如启用了periph_i2c对应的初始化函数被调用例如adc_init。也就是说引脚用途取决于先被使用的模块或函数。例如只要不启用periph_i2c模块I2C 配置里列出的 GPIO 就可以用于其他用途——GPIO9 此时可作 ADC 通道使用。在源码层面这一约定在 periph_conf.h 的注释中反复强调I2C 引脚仅在启用periph_i2c时被初始化SPI 引脚仅在首次调用spi_init_cs或spi_acquire时被初始化PWM 引脚仅在对应设备调用pwm_init后占用ADC 引脚仅在调用adc_init后占用。默认板级配置表下表是默认的 GPIO 功能分配按功能排列可通过应用级配置application-specific configurations进行覆盖FunctionGPIOsRemarksConfigurationBUTTON0GPIO0ADC_LINE(n)GPIO1, GPIO2, GPIO4, GPIO5, GPIO6, GPIO7, GPIO8, GPIO9ADC ChannelsPWM_DEV(0)GPIO14, GPIO17, GPIO18, GPIO21-PWM ChannelsPWM_DEV(1)GPIO15, GPIO16若未使用模块esp_rtc_timer_32kPWM ChannelsI2C_DEV(0) SCLGPIO9I2C InterfacesI2C_DEV(0) SDAGPIO8I2C InterfacesRGB-LEDGPIO48由驱动模块ws281x支持SPI_DEV(0) CLKGPIO12使用 SPI2_HOST (FSPI)SPI InterfacesSPI_DEV(0) MISOGPIO13使用 SPI2_HOST (FSPI)SPI InterfacesSPI_DEV(0) MOSIGPIO11使用 SPI2_HOST (FSPI)SPI InterfacesSPI_DEV(0) CS0GPIO10使用 SPI2_HOST (FSPI)SPI InterfacesUART_DEV(0) TxDGPIO43Console配置固定UART interfacesUART_DEV(0) RxDGPIO44Console配置固定UART interfaces注意ESP32-S3-DevKitC-1 revision 1.1 板上的 RGB-LED 连接在GPIO38而非 GPIO48。源码级外设配置解析ADC 与 I2CGPIO9 的双重身份periph_conf.h 将 ADC1 上几乎全部引出的引脚声明为 ADC 通道GPIO3 因是 strapping pin 被排除ADC_GPIOS默认为{ GPIO1, GPIO2, GPIO4, GPIO5, GPIO6, GPIO7, GPIO8, GPIO9 }。I2C 则只定义了一个接口I2C_DEV(0)I2C0_SCL GPIO9、I2C0_SDA GPIO8、I2C0_SPEED I2C_SPEED_FAST。全部定义均以#ifndef包裹允许应用级配置覆盖。PWM两组设备与 32 kHz 晶振的取舍PWM_DEV(0)使用{ GPIO14, GPIO17, GPIO18, GPIO21 }PWM_DEV(1)使用{ GPIO15, GPIO16 }但仅当模块esp_rtc_timer_32k未启用时才生效periph_conf.h——因为 GPIO15/GPIO16 正是外部 32 kHz 晶振的接入引脚。SPIFSPISPI2_HOSTSPI_DEV(0)配置为SPI0_CTRL FSPISCK/MISO/MOSI/CS0 分别落在 GPIO12/13/11/10对应 FSPICLK/FSPIQ/FSPID/FSPICS0。UART固定不可改的 ConsoleUART_DEV(0)的 TxD/RxD 固定为 GPIO43/GPIO44periph_conf.h作为 RIOT Console不可更改。ESP32-S3 最多提供 3 个 UART 接口此处UART_DEV(1)未使用。按钮、RGB-LED 与 SAUL 注册board.h 定义了板级元件BUTTON0BOOT 按钮接 GPIO0因上拉而信号反相按下为低电平模式为GPIO_IN_PU默认下降沿触发中断BTN0_INT_FLANK GPIO_FALLINGRGB-LED板载 SK68XXMINI-HS 智能 RGB LEDWS281X_PARAM_PIN默认 GPIO48、WS281X_PARAM_NUMOF 1可用 ws281x 驱动控制DevKitC-1 rev 1.1 为 GPIO38。gpio_params.h 把 BOOT 按钮注册为 SAUL GPIO 设备名BOOTSAUL_GPIO_INVERTED标志因此使用saul_default模块时按钮可自动出现在 SAUL 设备列表中对应 Makefile.dep 中saul_default拉入saul_gpio的逻辑。Arduino 兼容映射arduino_iomap.h 提供了完整的 Arduino 引脚映射D0/D1 对应 UART_DEV(0)GPIO44/43D10-D13 对应 SPI_DEV(0)CS0/MOSI/MISO/SCKA0-A5 为 GPIO1/2/4/5/8/9即 ADC_LINE(7)/(8)/(2)/(6)/(14)/(15)引脚 3/5/6/9 映射到PWM_DEV(0)的通道 0-3。板级特性arduino_analog/arduino_i2c/arduino_pins/arduino_pwm/arduino_spi/arduino_uart在 Makefile.features 中统一提供。构建系统与特性清单Makefile.features 汇总了该板提供的全部特性基础外设periph_adc、periph_i2c、periph_pwm、periph_spiUART 由公共定义继承调试esp_jtagArduino 兼容arduino_analog、arduino_i2c、arduino_pins、arduino_pwm、arduino_spi、arduino_uartUSBperiph_usbdev、tinyusb_deviceMakefile.include 为每种板级版本声明了对应伪模块如esp32s3_devkitc_1_n8、esp32s3_devkitc_1_n8r2等用于编译期版本标识同时设置了 TTY 自动选择过滤器仅在MOST_RECENT_PORT1时匹配 Silicon Labs CP2102N USB to UART Bridge Controller 设备避免多串口环境下选错烧录口。烧录 RIOT 固件烧录非常简单。开发板自带 Micro-USB 连接器内置 reset/boot/flash 逻辑只需把板子接到宿主机然后在编程口programming port上执行BOARDesp32s3-devkit make flash ...实际烧录时请根据手中板子的具体型号补充BOARD_VERSION例如# DevKitC-1-N8默认版本可省略 BOARD_VERSION BOARDesp32s3-devkit make flash # 带 8 MB Octal SPI PSRAM 的 DevKitC-1-N8R8 BOARDesp32s3-devkit BOARD_VERSIONesp32s3-devkitc-1-n8r8 make flash # DevKitM-1-N8 BOARDesp32s3-devkit BOARD_VERSIONesp32s3-devkitm-1-n8 make flash更完整的 ESP32-S3 配置、编译与烧录说明可参考仓库内 ESP32 SoC 相关的 RIOT 文档esp32_riot章节以及 boards/common/esp32s3/doc.md 中关于公共配置的说明。小结RIOT 的esp32s3-devkit板级定义通过BOARD_VERSION变量在单一定义下优雅地覆盖了 ESP32-S3-DevKitC-1含 WROOM-1x/WROOM-2 模块与 DevKitM-1含 MINI-1x 模块的全部常见版本自动适配 Flash 容量、SPI PSRAM 容量与 Quad/Octal 模式下的 GPIO 占用。得益于几乎全部 GPIO 引出的设计该板提供了 ADC、SPI、I2C、UART、PWM、RGB-LED、USBtinyusb与 Arduino 兼容在内的全套外设能力且所有外设配置均支持按需复用与应用级覆盖。理解 periph_conf.h 中的#ifndef覆盖机制与“先使用先占用”的 GPIO 复用规则是高效使用这块开发板的关键。【免费下载链接】RIOTRIOT - The friendly OS for IoT项目地址: https://gitcode.com/GitHub_Trending/riot/RIOT创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价