From 3405496259afe30fef5ff6262399aa014a6ce170 Mon Sep 17 00:00:00 2001
From: H_sw <2355861377@qq.com>
Date: Tue, 27 Oct 2026 14:35:00 +0800
Subject: [PATCH] feat: add LR1121 ePaper 2.9 board and bump version to 0.1.3
---
README.md | 16 ++++
README_ZH.md | 15 ++++
.../board_devices.yaml | 82 +++++++++++++++++++
.../board_info.yaml | 5 ++
.../board_peripherals.yaml | 43 ++++++++++
docs/BOARDS.md | 45 ++++++++++
docs/BOARDS_ZH.md | 38 +++++++++
docs/CI.md | 4 +-
docs/CI_ZH.md | 2 +-
idf_component.yml | 2 +-
10 files changed, 248 insertions(+), 4 deletions(-)
create mode 100644 boards/esp32_s3_lr1121_epaper_2_9/board_devices.yaml
create mode 100644 boards/esp32_s3_lr1121_epaper_2_9/board_info.yaml
create mode 100644 boards/esp32_s3_lr1121_epaper_2_9/board_peripherals.yaml
diff --git a/README.md b/README.md
index 7a27db8..378cb62 100644
--- a/README.md
+++ b/README.md
@@ -82,6 +82,17 @@ bilingual documentation, and generation/build checks.
Board definition · Product documentation
+
+
+
+
+
+ |
+
+ ESP32-S3-LR1121-ePaper-2.9
+ Board definition · Product documentation
+ |
+
@@ -93,6 +104,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_epaper_2_9`](boards/esp32_s3_lr1121_epaper_2_9/) | ESP32-S3 | `status_led`, `epaper_power_ctrl`, `epaper_ssd16xx`, `rtc_pcf85063a`, `bat_axp2602`, `radio_lr1121` | `i2c_master`, `spi_shared`, `gpio_boot`, `gpio_epaper_power` |
| [`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` |
@@ -109,6 +121,10 @@ CI validates generation and compilation; physical operation requires board testi
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).
+The LR1121 ePaper 2.9 profile defines the display, radio, RTC, battery gauge and
+status LED. Custom devices require application-side adapters; see
+[its support scope](docs/BOARDS.md#lr1121-epaper-29-definition-scope).
+
## 🚀 Quick start
diff --git a/README_ZH.md b/README_ZH.md
index 2e96c29..9c81c76 100644
--- a/README_ZH.md
+++ b/README_ZH.md
@@ -80,6 +80,17 @@
板卡定义 · 产品文档
+
+
+
+
+
+ |
+
+ ESP32-S3-LR1121-ePaper-2.9
+ 板卡定义 · 产品文档
+ |
+
@@ -91,6 +102,7 @@
| 开发板 | 芯片 | 设备定义 | 外设定义 |
| --- | --- | --- | --- |
+| [`esp32_s3_lr1121_epaper_2_9`](boards/esp32_s3_lr1121_epaper_2_9/) | ESP32-S3 | `status_led`, `epaper_power_ctrl`, `epaper_ssd16xx`, `rtc_pcf85063a`, `bat_axp2602`, `radio_lr1121` | `i2c_master`, `spi_shared`, `gpio_boot`, `gpio_epaper_power` |
| [`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` |
@@ -106,6 +118,9 @@
LR1121 OLED XF 配置提供硬件定义,自定义设备需要应用侧适配代码,详见
[支持范围](docs/BOARDS_ZH.md#lr1121-oled-154-xf-定义范围)。
+LR1121 ePaper 2.9 配置包含电子纸、无线、RTC、电量计和状态灯定义,
+自定义设备需要应用侧适配代码,详见[支持范围](docs/BOARDS_ZH.md#lr1121-epaper-29-定义范围)。
+
## 🚀 快速开始
diff --git a/boards/esp32_s3_lr1121_epaper_2_9/board_devices.yaml b/boards/esp32_s3_lr1121_epaper_2_9/board_devices.yaml
new file mode 100644
index 0000000..c632e47
--- /dev/null
+++ b/boards/esp32_s3_lr1121_epaper_2_9/board_devices.yaml
@@ -0,0 +1,82 @@
+devices:
+ - name: status_led
+ chip: ws2812
+ type: led_strip
+ sub_type: rmt
+ version: 1.0.0
+ init_skip: true
+ config:
+ strip_gpio_num: 21
+ max_leds: 1
+ led_model: LED_MODEL_WS2812
+ color_component_format: LED_STRIP_COLOR_COMPONENT_FMT_GRB
+ invert_out: false
+ rmt:
+ clk_src: RMT_CLK_SRC_DEFAULT
+ resolution_hz: 10000000
+ mem_block_symbols: 0
+ with_dma: false
+
+ - name: epaper_power_ctrl
+ type: power_ctrl
+ sub_type: gpio
+ version: 1.0.0
+ peripherals:
+ - name: gpio_epaper_power
+ active_level: 1
+
+ - name: epaper_ssd16xx
+ chip: ssd16xx_290
+ type: custom
+ version: 1.0.0
+ init_skip: true
+ power_ctrl_device: epaper_power_ctrl
+ config:
+ busy_gpio: 8
+ reset_gpio: 9
+ dc_gpio: 17
+ cs_gpio: 18
+ spi_speed_hz: 10000000
+ peripherals:
+ - name: spi_shared
+
+ - name: rtc_pcf85063a
+ chip: pcf85063a
+ type: custom
+ version: 1.0.0
+ init_skip: true
+ config:
+ address: 0x51
+ frequency: 400000
+ int_gpio: 7
+ peripherals:
+ - name: i2c_master
+
+ - name: bat_axp2602
+ chip: axp2602
+ type: custom
+ version: 1.0.0
+ init_skip: true
+ config:
+ address: 0x62
+ frequency: 400000
+ sense_resistor_mohm: 10
+ idle_current_threshold_ma: 1
+ peripherals:
+ - name: i2c_master
+
+ - name: radio_lr1121
+ chip: lr1121
+ type: custom
+ version: 1.0.0
+ init_skip: true
+ config:
+ dio1_gpio: 6
+ nss_gpio: 42
+ reset_gpio: 39
+ busy_gpio: 41
+ dio7_gpio: -1
+ dio8_gpio: -1
+ spi_speed_hz: 8000000
+ peripherals:
+ - name: spi_shared
diff --git a/boards/esp32_s3_lr1121_epaper_2_9/board_info.yaml b/boards/esp32_s3_lr1121_epaper_2_9/board_info.yaml
new file mode 100644
index 0000000..39a0181
--- /dev/null
+++ b/boards/esp32_s3_lr1121_epaper_2_9/board_info.yaml
@@ -0,0 +1,5 @@
+board: esp32_s3_lr1121_epaper_2_9
+chip: esp32s3
+version: 1.0.0
+description: "Waveshare ESP32-S3-LR1121-ePaper-2.9"
+manufacturer: "Waveshare"
diff --git a/boards/esp32_s3_lr1121_epaper_2_9/board_peripherals.yaml b/boards/esp32_s3_lr1121_epaper_2_9/board_peripherals.yaml
new file mode 100644
index 0000000..962d0bd
--- /dev/null
+++ b/boards/esp32_s3_lr1121_epaper_2_9/board_peripherals.yaml
@@ -0,0 +1,43 @@
+# Pin map migrated from the existing examples and board support implementation.
+peripherals:
+ - name: i2c_master
+ type: i2c
+ role: master
+ config:
+ port: 0
+ pins:
+ sda: 13
+ scl: 14
+ enable_internal_pullup: true
+ glitch_count: 7
+
+ - name: spi_shared
+ type: spi
+ role: master
+ config:
+ spi_bus_config:
+ spi_port: SPI2_HOST
+ mosi_io_num: 45
+ miso_io_num: 46
+ sclk_io_num: 40
+ quadwp_io_num: -1
+ quadhd_io_num: -1
+ max_transfer_sz: 4096
+
+ - name: gpio_boot
+ type: gpio
+ role: io
+ config:
+ pin: 0
+ mode: GPIO_MODE_INPUT
+ pull_up: true
+ pull_down: false
+ default_level: 1
+
+ - name: gpio_epaper_power
+ type: gpio
+ role: io
+ config:
+ pin: 38
+ mode: GPIO_MODE_OUTPUT
+ default_level: 1
diff --git a/docs/BOARDS.md b/docs/BOARDS.md
index 538aac7..ab2d463 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_epaper_2_9/
esp32_s3_lr1121_oled_1_54_xf/
esp32_s3_touch_lcd_7/
esp32_s3_touch_amoled_1_75c/
@@ -31,6 +32,50 @@ 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 ePaper 2.9 definition scope
+
+`esp32_s3_lr1121_epaper_2_9` imports the three YAML files from the product's
+original example board profile. The published [product examples](https://github.com/waveshareteam/ESP32-S3-LR1121-ePaper-2.9/blob/4aa6c326ca3a23317b180c86bbaea15d3327386f/examples/esp-idf/README.md#board-manager-integration)
+consume this profile through `waveshare/waveshare_boards`. The profile describes
+an ESP32-S3, an SSD16xx-compatible 2.9-inch e-paper device, LR1121 radio,
+PCF85063A RTC, AXP2602 battery gauge, one WS2812 status LED and display power control.
+
+The following values are configuration references, not verified schematic results:
+
+| Interface | Configured GPIOs / parameters |
+| --- | --- |
+| I2C | SDA 13, SCL 14; RTC address `0x51`, battery gauge address `0x62` |
+| Shared SPI2 | SCLK 40, MOSI 45, MISO 46; display 10 MHz, radio 8 MHz |
+| E-paper | BUSY 8, reset 9, DC 17, CS 18; power GPIO 38, active high |
+| LR1121 | DIO1 6, NSS 42, reset 39, BUSY 41 |
+| Other | RTC interrupt 7; WS2812 GPIO 21, one GRB LED; BOOT input GPIO 0 |
+
+`status_led` uses Board Manager's native RMT `led_strip` device.
+It and the four custom devices (`epaper_ssd16xx`, `rtc_pcf85063a`,
+`bat_axp2602`, `radio_lr1121`) retain `init_skip: true` and require explicit
+initialization. Applications must provide and register initialization/deinitialization
+adapters and their driver dependencies for the custom devices. These adapters are
+not included in this pack; the YAML alone does not implement display refresh or
+radio communication. Both devices share `spi_shared` and use separate chip selects.
+
+`epaper_power_ctrl` uses the native GPIO power-control device and does **not** skip
+initialization; its GPIO 38 default is high. The display references it through
+`power_ctrl_device`. Applications must account for this power behavior during
+startup and sleep. BOOT is only a GPIO declaration; no button device or SD card
+device is defined. The AXP2602 sense-resistor value of 10 mΩ is a configuration
+default that still needs checking against the installed hardware.
+
+The published [hardware reference](https://github.com/waveshareteam/ESP32-S3-LR1121-ePaper-2.9/blob/4aa6c326ca3a23317b180c86bbaea15d3327386f/docs/hardware-facts.zh-CN.md)
+and [Rev1.1 schematic](https://github.com/waveshareteam/ESP32-S3-LR1121-ePaper-2.9/blob/4aa6c326ca3a23317b180c86bbaea15d3327386f/hardware/schematics/ESP32-S3-LR1121-ePaper-2.9-XF-Schematics.pdf)
+are available in the product repository. The GPIO assignments above agree with
+that hardware reference; this import has not undergone a full schematic audit
+or physical-board validation. Verify the exact PCB revision, display/power timing,
+radio configuration and battery measurement separately. GPIO 38 controls a shared
+power domain for the display, radio, WS2812 and microSD, despite the device name
+`epaper_power_ctrl`.
+The README uses the published [product image](https://raw.githubusercontent.com/waveshareteam/ESP32-S3-LR1121-ePaper-2.9/4aa6c326ca3a23317b180c86bbaea15d3327386f/docs/images/ESP32-S3-LR1121-ePaper-2.9-details-5-2.webp),
+pinned to product-repository commit `4aa6c326ca3a23317b180c86bbaea15d3327386f`.
+
## LR1121 OLED 1.54 XF definition scope
`esp32_s3_lr1121_oled_1_54_xf` imports the three YAML files from the
diff --git a/docs/BOARDS_ZH.md b/docs/BOARDS_ZH.md
index b1ca2b2..7bf2462 100644
--- a/docs/BOARDS_ZH.md
+++ b/docs/BOARDS_ZH.md
@@ -9,6 +9,7 @@
```text
boards/
+ esp32_s3_lr1121_epaper_2_9/
esp32_s3_lr1121_oled_1_54_xf/
esp32_s3_touch_lcd_7/
esp32_s3_touch_amoled_1_75c/
@@ -28,6 +29,43 @@ boards/
`_boards` 后缀能够通过该版本对覆盖依赖名称的筛选,无需修改上级组件或传入 customer-path 参数。
依据见固定版本的[扫描实现](https://github.com/espressif/esp-board-manager/blob/2beb9b22b0892b343bd555a1ebc9929a7edce8fc/generators/config_generator.py)。
+## LR1121 ePaper 2.9 定义范围
+
+`esp32_s3_lr1121_epaper_2_9` 导入产品原有示例板卡配置中的三份 YAML。
+已公开的[产品示例](https://github.com/waveshareteam/ESP32-S3-LR1121-ePaper-2.9/blob/4aa6c326ca3a23317b180c86bbaea15d3327386f/examples/esp-idf/README.md#board-manager-integration)
+通过 `waveshare/waveshare_boards` 使用此配置。配置描述 ESP32-S3、兼容 SSD16xx 的
+2.9 英寸电子纸、LR1121 无线、PCF85063A RTC、AXP2602 电量计、一颗 WS2812 状态灯和显示电源控制。
+
+下列数值是配置参考,不代表已经完成原理图核对:
+
+| 接口 | 配置的 GPIO / 参数 |
+| --- | --- |
+| I2C | SDA 13、SCL 14;RTC 地址 `0x51`,电量计地址 `0x62` |
+| 共用 SPI2 | SCLK 40、MOSI 45、MISO 46;显示 10 MHz,无线 8 MHz |
+| 电子纸 | BUSY 8、复位 9、DC 17、CS 18;电源 GPIO38,高电平有效 |
+| LR1121 | DIO1 6、NSS 42、复位 39、BUSY 41 |
+| 其他 | RTC 中断 7;WS2812 GPIO21,一颗 GRB 灯;BOOT 输入 GPIO0 |
+
+`status_led` 使用 Board Manager 原生 RMT `led_strip` 设备。
+它与四个自定义设备(`epaper_ssd16xx`、`rtc_pcf85063a`、`bat_axp2602`、
+`radio_lr1121`)均保留 `init_skip: true`,需要显式初始化。
+自定义设备还需要应用提供并注册初始化/反初始化适配代码及驱动依赖,
+本组件包未包含这些代码;仅有 YAML 不会实现显示刷新或无线通信。
+电子纸与无线共用 `spi_shared`,分别使用独立片选。
+
+`epaper_power_ctrl` 使用原生 GPIO 电源控制设备,**没有**跳过初始化,
+其 GPIO38 默认输出高电平;显示设备通过 `power_ctrl_device` 引用它。
+应用启动和休眠时需考虑这一电源行为。BOOT 仅声明为 GPIO,未定义按键设备或 SD 卡设备。
+AXP2602 的 10 mΩ 采样电阻值是配置默认值,仍需核对实装硬件。
+
+产品仓库已公开[硬件说明](https://github.com/waveshareteam/ESP32-S3-LR1121-ePaper-2.9/blob/4aa6c326ca3a23317b180c86bbaea15d3327386f/docs/hardware-facts.zh-CN.md)
+和 [Rev1.1 原理图](https://github.com/waveshareteam/ESP32-S3-LR1121-ePaper-2.9/blob/4aa6c326ca3a23317b180c86bbaea15d3327386f/hardware/schematics/ESP32-S3-LR1121-ePaper-2.9-XF-Schematics.pdf)。
+上述 GPIO 分配与硬件说明一致;本次导入未完成完整原理图审计或实机验证,
+具体 PCB 版本、显示/供电时序、无线配置及电量测量仍需分别验证。
+虽然设备名为 `epaper_power_ctrl`,GPIO38 实际控制电子纸、无线、WS2812 和 microSD 的共用电源域。
+README 使用已发布的[产品图片](https://raw.githubusercontent.com/waveshareteam/ESP32-S3-LR1121-ePaper-2.9/4aa6c326ca3a23317b180c86bbaea15d3327386f/docs/images/ESP32-S3-LR1121-ePaper-2.9-details-5-2.webp),
+固定到产品仓库提交 `4aa6c326ca3a23317b180c86bbaea15d3327386f`。
+
## LR1121 OLED 1.54 XF 定义范围
`esp32_s3_lr1121_oled_1_54_xf` 的三份 YAML 来自
diff --git a/docs/CI.md b/docs/CI.md
index 2772a80..3f12b56 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. Five board profiles are discovered. Each resolved Board Manager version
-adds ten builds across the two IDF lines. Keep the floor until a deliberate
+template. Six board profiles are discovered. Each resolved Board Manager version
+adds twelve 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 b7b51d2..001b3c2 100644
--- a/docs/CI_ZH.md
+++ b/docs/CI_ZH.md
@@ -13,7 +13,7 @@
相同版本合并。组件库查询失败会使任务失败,每个矩阵项均记录明确版本。
Board Manager 初始最低版本为 **0.7.2**,与参考板卡包模板一致。
-当前发现五块板卡,每个解析出的 Board Manager 版本在两个 IDF 版本线上共十项编译。
+当前发现六块板卡,每个解析出的 Board Manager 版本在两个 IDF 版本线上共十二项编译。
调整最低版本前需要明确兼容性变更并测试。
不支持的芯片能力配置或生成失败会使 CI 失败,不会被计为编译成功。
diff --git a/idf_component.yml b/idf_component.yml
index 647620c..ff9f6e6 100644
--- a/idf_component.yml
+++ b/idf_component.yml
@@ -1,4 +1,4 @@
-version: "0.1.2"
+version: "0.1.3"
description: Waveshare board definitions for ESP Board Manager
license: Apache-2.0
url: https://github.com/waveshareteam/waveshare_boards