From 5a957a13b6e2ab3755fbd995398e7318308b04ca Mon Sep 17 00:00:00 2001 From: H_sw <2355861377@qq.com> Date: Sat, 10 Oct 2026 17:49:46 +0800 Subject: [PATCH 1/2] feat: add ESP32-S3 LR1121 OLED XF board profile --- README.md | 17 +++ README_ZH.md | 16 +++ .../board_devices.yaml | 125 ++++++++++++++++++ .../board_info.yaml | 5 + .../board_peripherals.yaml | 124 +++++++++++++++++ docs/BOARDS.md | 30 +++++ docs/BOARDS_ZH.md | 21 +++ docs/CI.md | 4 +- docs/CI_ZH.md | 2 +- 9 files changed, 341 insertions(+), 3 deletions(-) create mode 100644 boards/esp32_s3_lr1121_oled_1_54_xf/board_devices.yaml create mode 100644 boards/esp32_s3_lr1121_oled_1_54_xf/board_info.yaml create mode 100644 boards/esp32_s3_lr1121_oled_1_54_xf/board_peripherals.yaml diff --git a/README.md b/README.md index e1c7113..7a27db8 100644 --- a/README.md +++ b/README.md @@ -69,6 +69,19 @@ bilingual documentation, and generation/build checks. Board definition · Product documentation + + + + ESP32-S3-LR1121-OLED-1.54-XF development board + + + +

ESP32-S3-LR1121-OLED-1.54-XF

+ Board definition · Product documentation + +
@@ -80,6 +93,7 @@ such as `spi_sd` describe a bus; they do not imply a complete storage applicatio | Board | Chip | Device definitions | Peripheral definitions | | --- | --- | --- | --- | +| [`esp32_s3_lr1121_oled_1_54_xf`](boards/esp32_s3_lr1121_oled_1_54_xf/) | ESP32-S3 | `button_boot`, `button_power`, `button_menu`, `button_ptt`, `button_rtc_irq`, `radio`, `oled`, `rtc`, `battery`, `audio`, `sdcard` | `i2c_main`, `spi_radio`, `gpio_boot`, `gpio_power`, `gpio_menu`, `gpio_ptt`, `gpio_rtc_irq`, `gpio_amplifier`, `gpio_radio_cs`, `gpio_radio_irq`, `gpio_radio_reset`, `gpio_radio_busy`, `i2s_speaker`, `i2s_microphone` | | [`esp32_s3_touch_amoled_1_75c`](boards/esp32_s3_touch_amoled_1_75c/) | ESP32-S3 | `axp2101_power_manager`, `audio_dac`, `audio_adc`, `display_lcd`, `lcd_touch` | `i2c_master`, `i2s_audio_out`, `i2s_audio_in`, `gpio_pa_control`, `spi_display` | | [`esp32_s3_touch_amoled_1_8`](boards/esp32_s3_touch_amoled_1_8/) | ESP32-S3 | `gpio_expander`, `axp2101_power_manager`, `audio_dac`, `audio_adc`, `display_lcd`, `lcd_touch`, `fs_sdcard` | `i2c_master`, `i2s_audio_out`, `i2s_audio_in`, `gpio_pa_control`, `spi_display` | | [`esp32_s3_touch_amoled_2_16`](boards/esp32_s3_touch_amoled_2_16/) | ESP32-S3 | `axp2101_power_manager`, `audio_dac`, `audio_adc`, `display_lcd`, `lcd_touch`, `fs_sdcard` | `i2c_master`, `i2s_audio_out`, `i2s_audio_in`, `gpio_pa_control`, `spi_display` | @@ -92,6 +106,9 @@ Definitions live under `boards//`. The three AMOLED profiles come from Espressif Brookesia; see [board revisions and migration notes](docs/BOARDS.md). CI validates generation and compilation; physical operation requires board testing. +The LR1121 OLED XF profile provides hardware definitions and requires application-side +custom device adapters; see [its support scope](docs/BOARDS.md#lr1121-oled-154-xf-definition-scope). + ## 🚀 Quick start diff --git a/README_ZH.md b/README_ZH.md index 4cf10a9..2e96c29 100644 --- a/README_ZH.md +++ b/README_ZH.md @@ -68,6 +68,18 @@ 板卡定义 · 产品文档 + + + + ESP32-S3-LR1121-OLED-1.54-XF 开发板产品图 + + + +

ESP32-S3-LR1121-OLED-1.54-XF

+ 板卡定义 · 产品文档 + +
@@ -79,6 +91,7 @@ | 开发板 | 芯片 | 设备定义 | 外设定义 | | --- | --- | --- | --- | +| [`esp32_s3_lr1121_oled_1_54_xf`](boards/esp32_s3_lr1121_oled_1_54_xf/) | ESP32-S3 | `button_boot`, `button_power`, `button_menu`, `button_ptt`, `button_rtc_irq`, `radio`, `oled`, `rtc`, `battery`, `audio`, `sdcard` | `i2c_main`, `spi_radio`, `gpio_boot`, `gpio_power`, `gpio_menu`, `gpio_ptt`, `gpio_rtc_irq`, `gpio_amplifier`, `gpio_radio_cs`, `gpio_radio_irq`, `gpio_radio_reset`, `gpio_radio_busy`, `i2s_speaker`, `i2s_microphone` | | [`esp32_s3_touch_amoled_1_75c`](boards/esp32_s3_touch_amoled_1_75c/) | ESP32-S3 | `axp2101_power_manager`, `audio_dac`, `audio_adc`, `display_lcd`, `lcd_touch` | `i2c_master`, `i2s_audio_out`, `i2s_audio_in`, `gpio_pa_control`, `spi_display` | | [`esp32_s3_touch_amoled_1_8`](boards/esp32_s3_touch_amoled_1_8/) | ESP32-S3 | `gpio_expander`, `axp2101_power_manager`, `audio_dac`, `audio_adc`, `display_lcd`, `lcd_touch`, `fs_sdcard` | `i2c_master`, `i2s_audio_out`, `i2s_audio_in`, `gpio_pa_control`, `spi_display` | | [`esp32_s3_touch_amoled_2_16`](boards/esp32_s3_touch_amoled_2_16/) | ESP32-S3 | `axp2101_power_manager`, `audio_dac`, `audio_adc`, `display_lcd`, `lcd_touch`, `fs_sdcard` | `i2c_master`, `i2s_audio_out`, `i2s_audio_in`, `gpio_pa_control`, `spi_display` | @@ -90,6 +103,9 @@ 板卡定义统一放在 `boards/<完整型号>/`。新增的三个 AMOLED 型号来自 Espressif Brookesia, 详见[硬件版本与迁移说明](docs/BOARDS_ZH.md)。CI 校验生成与编译,实机运行效果需要单独测试。 +LR1121 OLED XF 配置提供硬件定义,自定义设备需要应用侧适配代码,详见 +[支持范围](docs/BOARDS_ZH.md#lr1121-oled-154-xf-定义范围)。 + ## 🚀 快速开始 diff --git a/boards/esp32_s3_lr1121_oled_1_54_xf/board_devices.yaml b/boards/esp32_s3_lr1121_oled_1_54_xf/board_devices.yaml new file mode 100644 index 0000000..2e3cf22 --- /dev/null +++ b/boards/esp32_s3_lr1121_oled_1_54_xf/board_devices.yaml @@ -0,0 +1,125 @@ +devices: +- name: button_boot + type: button + sub_type: gpio + init_skip: true + config: + active_level: 0 + peripherals: + - gpio_name: gpio_boot +- name: button_power + type: button + sub_type: gpio + init_skip: true + config: + active_level: 0 + disable_pull: true + peripherals: + - gpio_name: gpio_power +- name: button_menu + type: button + sub_type: gpio + init_skip: true + config: + active_level: 0 + peripherals: + - gpio_name: gpio_menu +- name: button_ptt + type: button + sub_type: gpio + init_skip: true + config: + active_level: 0 + peripherals: + - gpio_name: gpio_ptt +- name: button_rtc_irq + type: button + sub_type: gpio + init_skip: true + config: + active_level: 0 + peripherals: + - gpio_name: gpio_rtc_irq +- name: radio + type: custom + chip: lr1121 + init_skip: true + config: + clock_hz: 8000000 + mode: 0 + queue_size: 1 + peripherals: + - name: spi_radio + - name: gpio_radio_cs + - name: gpio_radio_irq + - name: gpio_radio_reset +- name: oled + type: custom + chip: ssd1309 + init_skip: true + config: + address: 60 + clock_hz: 400000 + width: 128 + height: 64 + bits_per_pixel: 1 + reset_gpio: -1 + rotation: 0 + num_fbs: 1 + invert_color: false + control_phase_bytes: 1 + dc_bit_offset: 6 + cmd_bits: 8 + param_bits: 8 + peripherals: + - name: i2c_main +- name: rtc + type: custom + chip: pcf85063a + init_skip: true + config: + address: 81 + peripherals: + - name: i2c_main +- name: battery + type: custom + chip: bq27220 + init_skip: true + config: + address: 85 + clock_hz: 100000 + charge_threshold_ma: 20 + peripherals: + - name: i2c_main +- name: audio + type: custom + chip: es8311_es7210 + init_skip: true + config: + speaker_address: 24 + microphone_address: 64 + sample_rate: 16000 + peripherals: + - name: i2c_main + - name: i2s_speaker + - name: i2s_microphone + - name: gpio_amplifier +- name: sdcard + type: fs_fat + sub_type: sdmmc + init_skip: true + config: + mount_point: /sdcard + vfs_config: + format_if_mount_failed: false + max_files: 5 + allocation_unit_size: 16384 + sub_config: + slot: SDMMC_HOST_SLOT_1 + frequency: SDMMC_FREQ_DEFAULT + bus_width: 1 + slot_flags: SDMMC_SLOT_FLAG_INTERNAL_PULLUP + pins: + clk: 12 + cmd: 10 + d0: 11 diff --git a/boards/esp32_s3_lr1121_oled_1_54_xf/board_info.yaml b/boards/esp32_s3_lr1121_oled_1_54_xf/board_info.yaml new file mode 100644 index 0000000..c8d8aa2 --- /dev/null +++ b/boards/esp32_s3_lr1121_oled_1_54_xf/board_info.yaml @@ -0,0 +1,5 @@ +board: esp32_s3_lr1121_oled_1_54_xf +chip: esp32s3 +version: 1.0.0 +description: Waveshare ESP32-S3-LR1121-OLED-1.54-XF common digital board +manufacturer: Waveshare diff --git a/boards/esp32_s3_lr1121_oled_1_54_xf/board_peripherals.yaml b/boards/esp32_s3_lr1121_oled_1_54_xf/board_peripherals.yaml new file mode 100644 index 0000000..c1981c3 --- /dev/null +++ b/boards/esp32_s3_lr1121_oled_1_54_xf/board_peripherals.yaml @@ -0,0 +1,124 @@ +peripherals: +- name: i2c_main + type: i2c + config: + port: 0 + pins: + sda: 13 + scl: 14 + enable_internal_pullup: true + glitch_count: 7 +- name: spi_radio + type: spi + config: + spi_bus_config: + spi_port: SPI3_HOST + mosi_io_num: 45 + miso_io_num: 46 + sclk_io_num: 40 + max_transfer_sz: 4092 +- name: gpio_boot + type: gpio + config: + pin: 0 + mode: GPIO_MODE_INPUT + pull_up: true + default_level: 0 +- name: gpio_power + type: gpio + config: + pin: 4 + mode: GPIO_MODE_INPUT + pull_up: false + default_level: 0 +- name: gpio_menu + type: gpio + config: + pin: 5 + mode: GPIO_MODE_INPUT + pull_up: true + default_level: 0 +- name: gpio_ptt + type: gpio + config: + pin: 6 + mode: GPIO_MODE_INPUT + pull_up: true + default_level: 0 +- name: gpio_rtc_irq + type: gpio + config: + pin: 7 + mode: GPIO_MODE_INPUT + pull_up: true + default_level: 0 +- name: gpio_amplifier + type: gpio + config: + pin: 8 + mode: GPIO_MODE_OUTPUT + pull_up: false + default_level: 0 +- name: gpio_radio_cs + type: gpio + config: + pin: 42 + mode: GPIO_MODE_OUTPUT + pull_up: false + default_level: 1 +- name: gpio_radio_irq + type: gpio + config: + pin: 38 + mode: GPIO_MODE_INPUT + pull_up: false + default_level: 0 +- name: gpio_radio_reset + type: gpio + config: + pin: 39 + mode: GPIO_MODE_OUTPUT + pull_up: false + default_level: 1 +- name: gpio_radio_busy + type: gpio + config: + pin: 41 + mode: GPIO_MODE_INPUT + pull_up: false + default_level: 0 +- name: i2s_speaker + type: i2s + role: master + format: std-out + config: + port: 0 + sample_rate_hz: 16000 + data_bit_width: 16 + slot_mode: I2S_SLOT_MODE_MONO + slot_mask: I2S_STD_SLOT_LEFT + pins: + mclk: 17 + bclk: 18 + ws: 21 + dout: 16 + din: -1 +- name: i2s_microphone + type: i2s + role: master + format: tdm-in + config: + port: 0 + sample_rate_hz: 16000 + data_bit_width: 16 + slot_mode: I2S_SLOT_MODE_STEREO + slot_mask: I2S_TDM_SLOT0 | I2S_TDM_SLOT1 | I2S_TDM_SLOT2 | I2S_TDM_SLOT3 + pins: + mclk: 17 + bclk: 18 + ws: 21 + dout: -1 + din: 15 + total_slot: 4 + ws_width: 0 + left_align: false diff --git a/docs/BOARDS.md b/docs/BOARDS.md index fd04ddc..538aac7 100644 --- a/docs/BOARDS.md +++ b/docs/BOARDS.md @@ -9,6 +9,7 @@ is `waveshare/waveshare_boards`. Keep all definitions in: ```text boards/ + esp32_s3_lr1121_oled_1_54_xf/ esp32_s3_touch_lcd_7/ esp32_s3_touch_amoled_1_75c/ esp32_s3_touch_amoled_1_8/ @@ -30,6 +31,35 @@ passes this version's override-dependency name filter. No upstream patch or customer-path argument is needed. See the pinned [discovery implementation](https://github.com/espressif/esp-board-manager/blob/2beb9b22b0892b343bd555a1ebc9929a7edce8fc/generators/config_generator.py). +## LR1121 OLED 1.54 XF definition scope + +`esp32_s3_lr1121_oled_1_54_xf` imports the three YAML files from the +[product's factory-source profile](https://github.com/waveshareteam/esp32-s3-lr1121-oled-1.54/tree/a0bf73932ef06d047810b17888cc7e33f064680e/firmware/12_factory_demo/components/esp32_s3_lr1121_oled_1_54_support/boards/esp32_s3_lr1121_oled_1_54_xf) without changing its hardware values. +The hardware reference is the product repository's [schematic](https://github.com/waveshareteam/esp32-s3-lr1121-oled-1.54/blob/a0bf73932ef06d047810b17888cc7e33f064680e/hardware/schematics/esp32-s3-lr1121-oled-1_54_schematics.pdf). +The profile describes ESP32-S3 GPIOs, shared I2C, LR1121 SPI, speaker/microphone +I2S, buttons and one-bit SDMMC. + +This is a hardware-definition profile. All devices retain `init_skip: true` for +application-controlled initialization. `radio`, `oled`, `rtc`, `battery` and +`audio` are custom devices; this pack does not include their initialization +callbacks, product adapters or managed driver dependencies. Applications must +supply and register those adapters before initializing the devices by name. +Calling `esp_board_manager_init()` alone does not make these devices usable. +Buttons and SD use built-in Board Manager device types and also require explicit +initialization. SD mount failure does not automatically format the card. + +The radio adapter must also initialize the separately declared `gpio_radio_busy`; +it is not in the custom radio's four-entry peripheral list. The audio defaults +are 16 kHz with STD speaker output and four-slot TDM microphone input. Application +profiles such as the walkie-talkie's 8 kHz capture need their own configuration. +When adopting this published profile, remove duplicate application-local board +YAML definitions while retaining the required product adapters. + +Generation and compilation checks do not validate device initialization, shared +I2S operation, RF settings, power behavior or physical wiring. Hardware testing +has not been performed for this import; verify the exact PCB revision and those +functions separately before claiming complete product support. + ## Imported source and adaptations The three AMOLED definitions originate from diff --git a/docs/BOARDS_ZH.md b/docs/BOARDS_ZH.md index eecbbd5..b1ca2b2 100644 --- a/docs/BOARDS_ZH.md +++ b/docs/BOARDS_ZH.md @@ -9,6 +9,7 @@ ```text boards/ + esp32_s3_lr1121_oled_1_54_xf/ esp32_s3_touch_lcd_7/ esp32_s3_touch_amoled_1_75c/ esp32_s3_touch_amoled_1_8/ @@ -27,6 +28,26 @@ boards/ `_boards` 后缀能够通过该版本对覆盖依赖名称的筛选,无需修改上级组件或传入 customer-path 参数。 依据见固定版本的[扫描实现](https://github.com/espressif/esp-board-manager/blob/2beb9b22b0892b343bd555a1ebc9929a7edce8fc/generators/config_generator.py)。 +## LR1121 OLED 1.54 XF 定义范围 + +`esp32_s3_lr1121_oled_1_54_xf` 的三份 YAML 来自 +[产品出厂示例源码中的板卡配置](https://github.com/waveshareteam/esp32-s3-lr1121-oled-1.54/tree/a0bf73932ef06d047810b17888cc7e33f064680e/firmware/12_factory_demo/components/esp32_s3_lr1121_oled_1_54_support/boards/esp32_s3_lr1121_oled_1_54_xf),保留原有硬件参数。 +对应硬件资料为产品仓库中的[原理图](https://github.com/waveshareteam/esp32-s3-lr1121-oled-1.54/blob/a0bf73932ef06d047810b17888cc7e33f064680e/hardware/schematics/esp32-s3-lr1121-oled-1_54_schematics.pdf)。 +配置描述 ESP32-S3 GPIO、共用 I2C、LR1121 SPI、扬声器与麦克风 I2S、按键和单线 SDMMC。 + +本次提供硬件定义,所有设备保留 `init_skip: true`,由应用按需初始化。 +`radio`、`oled`、`rtc`、`battery` 和 `audio` 为自定义设备;本组件包未包含这些设备的 +初始化回调、产品适配代码或托管驱动依赖。应用必须提供并注册适配代码,再按名称初始化设备。 +仅调用 `esp_board_manager_init()` 不会使这些设备可用。 +按键和 SD 使用 Board Manager 内置设备类型,同样需要显式初始化;SD 挂载失败不会自动格式化。 + +无线适配代码还需初始化单独声明的 `gpio_radio_busy`,它不在自定义 radio 的四项外设列表中。 +音频默认使用 16 kHz、STD 扬声器输出与四时隙 TDM 麦克风输入;对讲机的 8 kHz 采集等应用配置 +需另行设置。产品工程采用发布后的板卡定义时,应移除应用中重复的板卡 YAML,同时保留所需适配代码。 + +生成与编译检查不验证设备初始化、共用 I2S 工作情况、射频设置、电源行为或实际接线。 +本次导入尚未进行实机测试;声明完整产品支持前,需核对具体 PCB 版本并分别验证这些功能。 + ## 导入来源与适配 三个 AMOLED 定义来自 diff --git a/docs/CI.md b/docs/CI.md index 3a30bef..2772a80 100644 --- a/docs/CI.md +++ b/docs/CI.md @@ -15,8 +15,8 @@ published versions satisfying the range are tested, with duplicates removed. Registry lookup failures fail the job. Each matrix entry records an exact version. The initial Board Manager floor is **0.7.2**, matching the reference board-pack -template. The current floor and latest resolve to the same version, giving eight -board builds across the two IDF lines. Keep the floor until a deliberate +template. Five board profiles are discovered. Each resolved Board Manager version +adds ten builds across the two IDF lines. Keep the floor until a deliberate compatibility change is tested. Unsupported catalog profiles or generation failures fail CI; they are not counted as successful builds. diff --git a/docs/CI_ZH.md b/docs/CI_ZH.md index d4bfd13..b7b51d2 100644 --- a/docs/CI_ZH.md +++ b/docs/CI_ZH.md @@ -13,7 +13,7 @@ 相同版本合并。组件库查询失败会使任务失败,每个矩阵项均记录明确版本。 Board Manager 初始最低版本为 **0.7.2**,与参考板卡包模板一致。 -当前最低版与最新版相同,四块板卡在两个 IDF 版本线上共八项编译。 +当前发现五块板卡,每个解析出的 Board Manager 版本在两个 IDF 版本线上共十项编译。 调整最低版本前需要明确兼容性变更并测试。 不支持的芯片能力配置或生成失败会使 CI 失败,不会被计为编译成功。 From ca3868e31f8ce3008725bde75cfcbdcb8dbfd805 Mon Sep 17 00:00:00 2001 From: H_sw <2355861377@qq.com> Date: Mon, 12 Oct 2026 09:38:37 +0800 Subject: [PATCH 2/2] chore: bump board pack version to 0.1.2 --- idf_component.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/idf_component.yml b/idf_component.yml index 51ab5a6..647620c 100644 --- a/idf_component.yml +++ b/idf_component.yml @@ -1,4 +1,4 @@ -version: "0.1.1" +version: "0.1.2" description: Waveshare board definitions for ESP Board Manager license: Apache-2.0 url: https://github.com/waveshareteam/waveshare_boards