diff --git a/README.md b/README.md
index 0fbcd8302..b1ceb0dbb 100644
--- a/README.md
+++ b/README.md
@@ -52,12 +52,12 @@ Espressif Systems has released a number of boards for ESP-ADF to develop audio a
It is recommended to use the ESP-ADF master branch, as it has the latest bugfixes and the new features.
-| | [ESP32-LyraT](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-lyrat.html) | [ESP32-LyraTD-MSC](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-lyratd-msc.html) | [ESP32-LyraT-Mini](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-lyrat-mini.html) | [ESP32-Korvo-DU1906](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-korvo-du1906.html) | [ESP32-S2-Kaluga-1 Kit](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/hw-reference/esp32s2/user-guide-esp32-s2-kaluga-1-kit.html)|[ESP32-S3-Korvo-2](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/user-guide-esp32-s3-korvo-2.html)|[ESP32-C3-Lyra](https://docs.espressif.com/projects/esp-adf/en/latest/design-guide/dev-boards/user-guide-esp32-c3-lyra.html)| [ESP32-S3-Box Serials](https://github.com/espressif/esp-box/tree/master)|
-|:----------- |:---------------------: | :---------------------:| :---------------------:|:---------------------: | :---------------------:| :---------------------:| :---------------------:| :---------------------:|
-| | [](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-lyrat.html) **2** | [](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-lyratd-msc.html) **2** | [](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-lyrat-mini.html) | [](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-korvo-du1906.html) **2** | [](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/hw-reference/esp32s2/user-guide-esp32-s2-kaluga-1-kit.html) **2** | [](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/user-guide-esp32-s3-korvo-2.html) | [](https://docs.espressif.com/projects/esp-adf/en/latest/design-guide/dev-boards/user-guide-esp32-c3-lyra.html) | [](https://github.com/espressif/esp-box/tree/master) |
-| ESP-ADF Master | ![alt text](docs/_static/no-icon.png) | ![alt text](docs/_static/no-icon.png) | ![alt text](docs/_static/yes-checkm.png) | ![alt text](docs/_static/no-icon.png) | ![alt text](docs/_static/no-icon.png) | ![alt text](docs/_static/yes-checkm.png) | ![alt text](docs/_static/yes-checkm.png) | ![alt text](docs/_static/yes-checkm.png) **1** |
-| ESP-ADF Release/v2.7 | ![alt text](docs/_static/no-icon.png) | ![alt text](docs/_static/no-icon.png) | ![alt text](docs/_static/yes-checkm.png) | ![alt text](docs/_static/no-icon.png) | ![alt text](docs/_static/no-icon.png) | ![alt text](docs/_static/yes-checkm.png) | ![alt text](docs/_static/yes-checkm.png) | ![alt text](docs/_static/yes-checkm.png) **1** |
-| ESP-ADF Release/v2.6 | ![alt text](docs/_static/yes-checkm.png) | ![alt text](docs/_static/yes-checkm.png) | ![alt text](docs/_static/yes-checkm.png) | ![alt text](docs/_static/yes-checkm.png) | ![alt text](docs/_static/yes-checkm.png) | ![alt text](docs/_static/yes-checkm.png) | ![alt text](docs/_static/yes-checkm.png) | ![alt text](docs/_static/yes-checkm.png) **1** |
+| | [ESP32-LyraT](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-lyrat.html) | [ESP32-LyraTD-MSC](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-lyratd-msc.html) | [ESP32-LyraT-Mini](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-lyrat-mini.html) | [ESP32-Korvo-DU1906](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-korvo-du1906.html) | [ESP32-S2-Kaluga-1 Kit](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/hw-reference/esp32s2/user-guide-esp32-s2-kaluga-1-kit.html)|[ESP32-S3-Korvo-2](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/user-guide-esp32-s3-korvo-2.html)|[ESP32-C3-Lyra](https://docs.espressif.com/projects/esp-adf/en/latest/design-guide/dev-boards/user-guide-esp32-c3-lyra.html)| [ESP32-S3-Box Serials](https://github.com/espressif/esp-box/tree/master)| [ESP32-P4-function-ev-Board](https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32p4/esp32-p4-function-ev-board/index.html)|
+|:----------- |:---------------------: | :---------------------:| :---------------------:|:---------------------: | :---------------------:| :---------------------:| :---------------------:| :---------------------:| :---------------------:|
+| | [](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-lyrat.html) **2** | [](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-lyratd-msc.html) **2** | [](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-lyrat-mini.html) | [](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-korvo-du1906.html) **2** | [](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/hw-reference/esp32s2/user-guide-esp32-s2-kaluga-1-kit.html) **2** | [](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/user-guide-esp32-s3-korvo-2.html) | [](https://docs.espressif.com/projects/esp-adf/en/latest/design-guide/dev-boards/user-guide-esp32-c3-lyra.html) | [](https://github.com/espressif/esp-box/tree/master) | [](https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32p4/esp32-p4-function-ev-board/index.html) |
+| ESP-ADF Master | ![alt text](docs/_static/no-icon.png) | ![alt text](docs/_static/no-icon.png) | ![alt text](docs/_static/yes-checkm.png) | ![alt text](docs/_static/no-icon.png) | ![alt text](docs/_static/no-icon.png) | ![alt text](docs/_static/yes-checkm.png) | ![alt text](docs/_static/yes-checkm.png) | ![alt text](docs/_static/yes-checkm.png) **1** | ![alt text](docs/_static/yes-checkm.png) |
+| ESP-ADF Release/v2.7 | ![alt text](docs/_static/no-icon.png) | ![alt text](docs/_static/no-icon.png) | ![alt text](docs/_static/yes-checkm.png) | ![alt text](docs/_static/no-icon.png) | ![alt text](docs/_static/no-icon.png) | ![alt text](docs/_static/yes-checkm.png) | ![alt text](docs/_static/yes-checkm.png) | ![alt text](docs/_static/yes-checkm.png) **1** | ![alt text](docs/_static/yes-checkm.png) |
+| ESP-ADF Release/v2.6 | ![alt text](docs/_static/yes-checkm.png) | ![alt text](docs/_static/yes-checkm.png) | ![alt text](docs/_static/yes-checkm.png) | ![alt text](docs/_static/yes-checkm.png) | ![alt text](docs/_static/yes-checkm.png) | ![alt text](docs/_static/yes-checkm.png) | ![alt text](docs/_static/yes-checkm.png) | ![alt text](docs/_static/yes-checkm.png) **1** | ![alt text](docs/_static/no-icon.png) |
**Note 1:** For the development board of [esp-box series](https://github.com/espressif/esp-box), only [esp32-s3-box](https://github.com/espressif/esp-box/blob/master/docs/hardware_overview/esp32_s3_box/hardware_overview_for_box.md) and [esp32-s3-box-lite](https://github.com/espressif/esp-box/blob/master/docs/hardware_overview/esp32_s3_box_lite/hardware_overview_for_lite.md) are supported in *ESP-ADF*.
diff --git a/components/audio_board/CMakeLists.txt b/components/audio_board/CMakeLists.txt
index 2dfb3c64e..7106c3fcf 100644
--- a/components/audio_board/CMakeLists.txt
+++ b/components/audio_board/CMakeLists.txt
@@ -134,4 +134,13 @@ set(COMPONENT_SRCS
)
endif()
+if (CONFIG_ESP32_P4_FUNCTION_EV_BOARD)
+message(STATUS "Current board name is " CONFIG_ESP32_P4_FUNCTION_EV_BOARD)
+list(APPEND COMPONENT_ADD_INCLUDEDIRS ./esp32_p4_function_ev_board)
+set(COMPONENT_SRCS
+./esp32_p4_function_ev_board/board.c
+./esp32_p4_function_ev_board/board_pins_config.c
+)
+endif()
+
register_component()
diff --git a/components/audio_board/Kconfig.projbuild b/components/audio_board/Kconfig.projbuild
index 54e984197..16b2b26b5 100644
--- a/components/audio_board/Kconfig.projbuild
+++ b/components/audio_board/Kconfig.projbuild
@@ -35,6 +35,8 @@ config ESP32_C3_LYRA_V2_BOARD
bool "ESP32-C3-Lyra-v2.0"
config ESP32_C6_DEVKIT_BOARD
bool "ESP32-C6-DEVKIT"
+config ESP32_P4_FUNCTION_EV_BOARD
+ bool "ESP32-P4-FUNCTION-EV-BOARD"
endchoice
diff --git a/components/audio_board/esp32_p4_function_ev_board/board.c b/components/audio_board/esp32_p4_function_ev_board/board.c
new file mode 100644
index 000000000..73c678f63
--- /dev/null
+++ b/components/audio_board/esp32_p4_function_ev_board/board.c
@@ -0,0 +1,99 @@
+/*
+ * ESPRESSIF MIT License
+ *
+ * Copyright (c) 2024
+ *
+ * Permission is hereby granted for use on all ESPRESSIF SYSTEMS products, in which case,
+ * it is free of charge, to any person obtaining a copy of this software and associated
+ * documentation files (the "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the Software is furnished
+ * to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#include "esp_log.h"
+#include "board.h"
+#include "audio_mem.h"
+#include "periph_sdcard.h"
+#include "periph_adc_button.h"
+
+static const char *TAG = "AUDIO_BOARD";
+
+static audio_board_handle_t board_handle = 0;
+
+audio_board_handle_t audio_board_init(void)
+{
+ if (board_handle) {
+ ESP_LOGW(TAG, "The board has already been initialized!");
+ return board_handle;
+ }
+ board_handle = (audio_board_handle_t)audio_calloc(1, sizeof(struct audio_board_handle));
+ AUDIO_MEM_CHECK(TAG, board_handle, return NULL);
+ board_handle->audio_hal = audio_board_codec_init();
+ return board_handle;
+}
+
+audio_hal_handle_t audio_board_codec_init(void)
+{
+ audio_hal_codec_config_t audio_codec_cfg = AUDIO_CODEC_DEFAULT_CONFIG();
+ audio_hal_handle_t codec_hal = audio_hal_init(&audio_codec_cfg, &AUDIO_CODEC_ES8311_DEFAULT_HANDLE);
+ AUDIO_NULL_CHECK(TAG, codec_hal, return NULL);
+ return codec_hal;
+}
+
+esp_err_t audio_board_sdcard_init(esp_periph_set_handle_t set, periph_sdcard_mode_t mode)
+{
+ periph_sdcard_cfg_t sdcard_cfg = {
+ .root = "/sdcard",
+ .card_detect_pin = get_sdcard_intr_gpio(),
+ .mode = mode
+ };
+ esp_periph_handle_t sdcard_handle = periph_sdcard_init(&sdcard_cfg);
+ esp_err_t ret = esp_periph_start(set, sdcard_handle);
+ int retry_time = 5;
+ bool mount_flag = false;
+ while (retry_time--) {
+ if (periph_sdcard_is_mounted(sdcard_handle)) {
+ mount_flag = true;
+ break;
+ } else {
+ vTaskDelay(500 / portTICK_PERIOD_MS);
+ }
+ }
+ if (mount_flag == false) {
+ ESP_LOGE(TAG, "Sdcard mount failed");
+ return ESP_FAIL;
+ }
+ return ret;
+}
+
+esp_err_t audio_board_key_init(esp_periph_set_handle_t set)
+{
+ ESP_LOGE(TAG, "esp32_p4_function_ev_board not support key");
+ return ESP_FAIL;
+}
+
+audio_board_handle_t audio_board_get_handle(void)
+{
+ return board_handle;
+}
+
+esp_err_t audio_board_deinit(audio_board_handle_t audio_board)
+{
+ esp_err_t ret = ESP_OK;
+ ret |= audio_hal_deinit(audio_board->audio_hal);
+ audio_free(audio_board);
+ board_handle = NULL;
+ return ret;
+}
diff --git a/components/audio_board/esp32_p4_function_ev_board/board.h b/components/audio_board/esp32_p4_function_ev_board/board.h
new file mode 100644
index 000000000..c72b840bb
--- /dev/null
+++ b/components/audio_board/esp32_p4_function_ev_board/board.h
@@ -0,0 +1,114 @@
+/*
+ * ESPRESSIF MIT License
+ *
+ * Copyright (c) 2024
+ *
+ * Permission is hereby granted for use on all ESPRESSIF SYSTEMS products, in which case,
+ * it is free of charge, to any person obtaining a copy of this software and associated
+ * documentation files (the "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the Software is furnished
+ * to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#ifndef _AUDIO_BOARD_H_
+#define _AUDIO_BOARD_H_
+
+#include "audio_hal.h"
+#include "board_def.h"
+#include "board_pins_config.h"
+#include "esp_peripherals.h"
+#include "display_service.h"
+#include "periph_sdcard.h"
+#include "periph_lcd.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @brief Audio board handle
+ */
+struct audio_board_handle {
+ audio_hal_handle_t audio_hal; /*!< audio hardware abstract layer handle */
+};
+
+typedef struct audio_board_handle *audio_board_handle_t;
+
+/**
+ * @brief Initialize audio board
+ *
+ * @return
+ * - NULL If initialization failed
+ * - Others The audio board handle
+ */
+audio_board_handle_t audio_board_init(void);
+
+/**
+ * @brief Initialize codec chip
+ *
+ * @return
+ * - NULL If initialization failed
+ * - Others The audio hal handle
+ */
+audio_hal_handle_t audio_board_codec_init(void);
+
+/**
+ * @brief Initialize sdcard peripheral
+ *
+ * @param[in] set The handle of esp_periph_set_handle_t
+ * @param[in] mode SDCard mode
+ *
+ * @return
+ * - ESP_OK On success
+ * - Others On failure
+ */
+esp_err_t audio_board_sdcard_init(esp_periph_set_handle_t set, periph_sdcard_mode_t mode);
+
+/**
+ * @brief Initialize key peripheral
+ *
+ * @param[in] set The handle of esp_periph_set_handle_t
+ *
+ * @return
+ * - ESP_OK On success
+ * - Others On failure
+ */
+esp_err_t audio_board_key_init(esp_periph_set_handle_t set);
+
+/**
+ * @brief Query audio_board_handle
+ *
+ * @return
+ * - NULL If board not initialized
+ * - Others The audio board handle
+ */
+audio_board_handle_t audio_board_get_handle(void);
+
+/**
+ * @brief Uninitialize the audio board
+ *
+ * @param[in] audio_board The handle of audio board
+ *
+ * @return
+ * - ESP_OK On success
+ * - Others On failure
+ */
+esp_err_t audio_board_deinit(audio_board_handle_t audio_board);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _AUDIO_BOARD_H_ */
diff --git a/components/audio_board/esp32_p4_function_ev_board/board_def.h b/components/audio_board/esp32_p4_function_ev_board/board_def.h
new file mode 100644
index 000000000..4370f2c6c
--- /dev/null
+++ b/components/audio_board/esp32_p4_function_ev_board/board_def.h
@@ -0,0 +1,107 @@
+/*
+ * ESPRESSIF MIT License
+ *
+ * Copyright (c) 2024
+ *
+ * Permission is hereby granted for use on all ESPRESSIF SYSTEMS products, in which case,
+ * it is free of charge, to any person obtaining a copy of this software and associated
+ * documentation files (the "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the Software is furnished
+ * to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#ifndef _AUDIO_BOARD_DEFINITION_H_
+#define _AUDIO_BOARD_DEFINITION_H_
+
+/**
+ * @brief SDCARD Function Definition
+ */
+
+#define SD_PWR_CTRL_LDO_INTERNAL_IO (4)
+
+#define FUNC_SDCARD_EN (1)
+#define SDCARD_OPEN_FILE_NUM_MAX (5)
+#define SDCARD_INTR_GPIO (-1)
+#define SDCARD_PWR_CTRL (-1)
+
+// In order to coexist with ESP host, slot0 is required and matrix will not be used,
+// so all default configurations are set to 0
+#define ESP_SD_PIN_CLK (0)
+#define ESP_SD_PIN_CMD (0)
+#define ESP_SD_PIN_D0 (0)
+#define ESP_SD_PIN_D1 (0)
+#define ESP_SD_PIN_D2 (0)
+#define ESP_SD_PIN_D3 (0)
+#define ESP_SD_PIN_D4 (0)
+#define ESP_SD_PIN_D5 (0)
+#define ESP_SD_PIN_D6 (0)
+#define ESP_SD_PIN_D7 (0)
+#define ESP_SD_PIN_CD (-1)
+#define ESP_SD_PIN_WP (-1)
+
+/**
+ * @brief Audio Codec Chip Function Definition
+ */
+#define FUNC_AUDIO_CODEC_EN (1)
+#define ES8311_MCLK_SOURCE (1) /* 0 From MCLK of esp32 1 From BCLK */
+#define HEADPHONE_DETECT (-1)
+#define PA_ENABLE_GPIO GPIO_NUM_53
+#define CODEC_ADC_I2S_PORT (0)
+#define CODEC_ADC_BITS_PER_SAMPLE (16) /* 16bit */
+#define CODEC_ADC_SAMPLE_RATE (48000)
+#define RECORD_HARDWARE_AEC (true)
+#define BOARD_PA_GAIN (6) /* Power amplifier gain defined by board (dB) */
+
+extern audio_hal_func_t AUDIO_CODEC_ES8311_DEFAULT_HANDLE;
+
+#define AUDIO_CODEC_DEFAULT_CONFIG(){ \
+ .adc_input = AUDIO_HAL_ADC_INPUT_LINE1, \
+ .dac_output = AUDIO_HAL_DAC_OUTPUT_ALL, \
+ .codec_mode = AUDIO_HAL_CODEC_MODE_BOTH, \
+ .i2s_iface = { \
+ .mode = AUDIO_HAL_MODE_SLAVE, \
+ .fmt = AUDIO_HAL_I2S_NORMAL, \
+ .samples = AUDIO_HAL_48K_SAMPLES, \
+ .bits = AUDIO_HAL_BIT_LENGTH_16BITS, \
+ }, \
+};
+
+/**
+ * @brief Button Function Definition
+ */
+#define FUNC_BUTTON_EN (0)
+#define INPUT_KEY_NUM (0)
+#define BUTTON_VOLUP_ID (-1)
+#define BUTTON_VOLDOWN_ID (-1)
+#define BUTTON_SET_ID (-1)
+#define BUTTON_PLAY_ID (0)
+#define BUTTON_MODE_ID (-1)
+#define BUTTON_REC_ID (1)
+
+#define INPUT_KEY_DEFAULT_INFO() { \
+ { \
+ .type = PERIPH_ID_BUTTON, \
+ .user_id = INPUT_KEY_USER_ID_REC, \
+ .act_id = BUTTON_REC_ID, \
+ }, \
+ { \
+ .type = PERIPH_ID_BUTTON, \
+ .user_id = INPUT_KEY_USER_ID_PLAY, \
+ .act_id = BUTTON_PLAY_ID, \
+ } \
+}
+
+#endif /* _AUDIO_BOARD_DEFINITION_H_ */
+
diff --git a/components/audio_board/esp32_p4_function_ev_board/board_pins_config.c b/components/audio_board/esp32_p4_function_ev_board/board_pins_config.c
new file mode 100644
index 000000000..7cc71ecdb
--- /dev/null
+++ b/components/audio_board/esp32_p4_function_ev_board/board_pins_config.c
@@ -0,0 +1,166 @@
+/*
+ * ESPRESSIF MIT License
+ *
+ * Copyright (c) 2024
+ *
+ * Permission is hereby granted for use on all ESPRESSIF SYSTEMS products, in which case,
+ * it is free of charge, to any person obtaining a copy of this software and associated
+ * documentation files (the "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the Software is furnished
+ * to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#include
+#include "esp_log.h"
+#include "driver/gpio.h"
+#include "board.h"
+#include "audio_error.h"
+#include "audio_mem.h"
+#include "soc/soc_caps.h"
+
+static const char *TAG = "ESP32_P4_FUNCTION_EV_BOARD";
+
+esp_err_t get_i2c_pins(i2c_port_t port, i2c_config_t *i2c_config)
+{
+ AUDIO_NULL_CHECK(TAG, i2c_config, return ESP_FAIL);
+ if (port == I2C_NUM_0 || port == I2C_NUM_1) {
+ i2c_config->sda_io_num = GPIO_NUM_7;
+ i2c_config->scl_io_num = GPIO_NUM_8;
+ } else {
+ i2c_config->sda_io_num = -1;
+ i2c_config->scl_io_num = -1;
+ ESP_LOGE(TAG, "i2c port %d is not supported", port);
+ return ESP_FAIL;
+ }
+ return ESP_OK;
+}
+
+esp_err_t get_i2s_pins(int port, board_i2s_pin_t *i2s_config)
+{
+ AUDIO_NULL_CHECK(TAG, i2s_config, return ESP_FAIL);
+ if (port == 0) {
+ i2s_config->bck_io_num = GPIO_NUM_12;
+ i2s_config->ws_io_num = GPIO_NUM_10;
+ i2s_config->data_out_num = GPIO_NUM_9;
+ i2s_config->data_in_num = GPIO_NUM_11;
+ i2s_config->mck_io_num = GPIO_NUM_13;
+ } else if (port == 1) {
+ i2s_config->bck_io_num = -1;
+ i2s_config->ws_io_num = -1;
+ i2s_config->data_out_num = -1;
+ i2s_config->data_in_num = -1;
+ i2s_config->mck_io_num = -1;
+ } else {
+ memset(i2s_config, -1, sizeof(board_i2s_pin_t));
+ ESP_LOGE(TAG, "i2s port %d is not supported", port);
+ return ESP_FAIL;
+ }
+ return ESP_OK;
+}
+
+esp_err_t get_spi_pins(spi_bus_config_t *spi_config, spi_device_interface_config_t *spi_device_interface_config)
+{
+ AUDIO_NULL_CHECK(TAG, spi_config, return ESP_FAIL);
+ AUDIO_NULL_CHECK(TAG, spi_device_interface_config, return ESP_FAIL);
+
+ spi_config->mosi_io_num = -1;
+ spi_config->miso_io_num = -1;
+ spi_config->sclk_io_num = -1;
+ spi_config->quadwp_io_num = -1;
+ spi_config->quadhd_io_num = -1;
+
+ spi_device_interface_config->spics_io_num = -1;
+
+ ESP_LOGW(TAG, "SPI interface is not supported");
+ return ESP_OK;
+}
+
+// sdcard
+
+int8_t get_sdcard_intr_gpio(void)
+{
+ return SDCARD_INTR_GPIO;
+}
+
+int8_t get_sdcard_open_file_num_max(void)
+{
+ return SDCARD_OPEN_FILE_NUM_MAX;
+}
+
+int8_t get_sdcard_power_ctrl_gpio(void)
+{
+ return SDCARD_PWR_CTRL;
+}
+
+// input-output pins
+
+int8_t get_headphone_detect_gpio(void)
+{
+ return HEADPHONE_DETECT;
+}
+
+int8_t get_pa_enable_gpio(void)
+{
+ return PA_ENABLE_GPIO;
+}
+
+// adc button id
+
+int8_t get_input_rec_id(void)
+{
+ return -1;
+}
+
+int8_t get_input_mode_id(void)
+{
+ return -1;
+}
+
+int8_t get_input_set_id(void)
+{
+ return -1;
+}
+
+int8_t get_input_play_id(void)
+{
+ return -1;
+}
+
+int8_t get_input_volup_id(void)
+{
+ return -1;
+}
+
+int8_t get_input_voldown_id(void)
+{
+ return -1;
+}
+
+// led pins
+
+int8_t get_green_led_gpio(void)
+{
+ return -1;
+}
+
+int8_t get_blue_led_gpio(void)
+{
+ return -1;
+}
+
+int8_t get_es8311_mclk_src(void)
+{
+ return -1;
+}
diff --git a/components/audio_hal/CMakeLists.txt b/components/audio_hal/CMakeLists.txt
index 6d47d3f75..cb9d365da 100644
--- a/components/audio_hal/CMakeLists.txt
+++ b/components/audio_hal/CMakeLists.txt
@@ -35,7 +35,7 @@ set(COMPONENT_SRCS ./audio_hal.c
./driver/tas5805m/tas5805m.c
)
-IF (NOT ((CONFIG_IDF_TARGET STREQUAL "esp32c3") OR (CONFIG_IDF_TARGET STREQUAL "esp32c6")))
+IF (NOT ((CONFIG_IDF_TARGET STREQUAL "esp32c3") OR (CONFIG_IDF_TARGET STREQUAL "esp32c6") OR (CONFIG_IDF_TARGET STREQUAL "esp32p4")))
list(APPEND COMPONENT_SRCS
./driver/zl38063/zl38063.c
./driver/zl38063/api_lib/vprocTwolf_access.c
@@ -49,7 +49,7 @@ endif()
register_component()
-IF (NOT ((CONFIG_IDF_TARGET STREQUAL "esp32c3") OR (CONFIG_IDF_TARGET STREQUAL "esp32c6")))
+IF (NOT ((CONFIG_IDF_TARGET STREQUAL "esp32c3") OR (CONFIG_IDF_TARGET STREQUAL "esp32c6") OR (CONFIG_IDF_TARGET STREQUAL "esp32p4")))
target_link_libraries(${COMPONENT_TARGET} INTERFACE "-L${CMAKE_CURRENT_LIST_DIR}/driver/zl38063/firmware")
target_link_libraries(${COMPONENT_TARGET} INTERFACE firmware)
ENDIF()
diff --git a/components/audio_recorder/CMakeLists.txt b/components/audio_recorder/CMakeLists.txt
index a655fcce1..9d2984744 100644
--- a/components/audio_recorder/CMakeLists.txt
+++ b/components/audio_recorder/CMakeLists.txt
@@ -6,7 +6,7 @@ set(COMPONENT_SRCS "recorder_encoder.c" "audio_recorder.c")
set(COMPONENT_REQUIRES audio_sal audio_pipeline)
-if((${IDF_TARGET} STREQUAL "esp32") OR (${IDF_TARGET} STREQUAL "esp32s3"))
+if((${IDF_TARGET} STREQUAL "esp32") OR (${IDF_TARGET} STREQUAL "esp32s3") OR (${IDF_TARGET} STREQUAL "esp32p4"))
list(APPEND COMPONENT_SRCS "recorder_sr.c")
list(APPEND COMPONENT_REQUIRES esp-sr)
endif()
diff --git a/components/audio_recorder/recorder_sr.c b/components/audio_recorder/recorder_sr.c
index 6878d1ccc..588f7cc37 100644
--- a/components/audio_recorder/recorder_sr.c
+++ b/components/audio_recorder/recorder_sr.c
@@ -176,7 +176,7 @@ static esp_err_t recorder_mn_detect(recorder_sr_t *recorder_sr, afe_fetch_result
detect_flag = 1;
recorder_sr_disable_wakenet_aec(recorder_sr);
}
-#elif CONFIG_IDF_TARGET_ESP32S3
+#else
if (afe_result->wakeup_state == WAKENET_CHANNEL_VERIFIED) {
detect_flag = 1;
}
diff --git a/components/audio_stream/CMakeLists.txt b/components/audio_stream/CMakeLists.txt
index 8ade5cb9d..a65eaa89b 100644
--- a/components/audio_stream/CMakeLists.txt
+++ b/components/audio_stream/CMakeLists.txt
@@ -26,7 +26,7 @@ list(APPEND COMPONENT_SRCS "lib/gzip/gzip_miniz.c")
set(COMPONENT_REQUIRES audio_pipeline driver audio_sal esp_http_client tcp_transport spiffs audio_board esp-adf-libs bootloader_support esp_dispatcher esp_actions tone_partition mbedtls)
-if((${IDF_TARGET} STREQUAL "esp32") OR (${IDF_TARGET} STREQUAL "esp32s3"))
+if((${IDF_TARGET} STREQUAL "esp32") OR (${IDF_TARGET} STREQUAL "esp32s3") OR (${IDF_TARGET} STREQUAL "esp32p4"))
list(APPEND COMPONENT_SRCS "algorithm_stream.c" "tts_stream.c")
list(APPEND COMPONENT_REQUIRES esp-sr)
endif()
diff --git a/components/audio_stream/pwm_stream.c b/components/audio_stream/pwm_stream.c
index 4390e88a6..c3326f948 100644
--- a/components/audio_stream/pwm_stream.c
+++ b/components/audio_stream/pwm_stream.c
@@ -395,10 +395,15 @@ static esp_err_t audio_pwm_init(const audio_pwm_config_t *cfg)
res = ledc_timer_config(&handle->ledc_timer);
AUDIO_CHECK(TAG, ESP_OK == res, goto init_error, "AUDIO PWM TIMER ERROR");
+#if defined(CONFIG_IDF_TARGET_ESP32P4)
+ g_ledc_left_duty_val = &LEDC.channel_group[handle->ledc_timer.speed_mode].channel[handle->ledc_channel[CHANNEL_LEFT_INDEX].channel].duty_r.val;
+ g_ledc_right_duty_val = &LEDC.channel_group[handle->ledc_timer.speed_mode].channel[handle->ledc_channel[CHANNEL_RIGHT_INDEX].channel].duty_r.val;
+#else
g_ledc_left_duty_val = &LEDC.channel_group[handle->ledc_timer.speed_mode].channel[handle->ledc_channel[CHANNEL_LEFT_INDEX].channel].duty.val;
+ g_ledc_right_duty_val = &LEDC.channel_group[handle->ledc_timer.speed_mode].channel[handle->ledc_channel[CHANNEL_RIGHT_INDEX].channel].duty.val;
+#endif // CONFIG_IDF_TARGET_ESP32P4
g_ledc_left_conf0_val = &LEDC.channel_group[handle->ledc_timer.speed_mode].channel[handle->ledc_channel[CHANNEL_LEFT_INDEX].channel].conf0.val;
g_ledc_left_conf1_val = &LEDC.channel_group[handle->ledc_timer.speed_mode].channel[handle->ledc_channel[CHANNEL_LEFT_INDEX].channel].conf1.val;
- g_ledc_right_duty_val = &LEDC.channel_group[handle->ledc_timer.speed_mode].channel[handle->ledc_channel[CHANNEL_RIGHT_INDEX].channel].duty.val;
g_ledc_right_conf0_val = &LEDC.channel_group[handle->ledc_timer.speed_mode].channel[handle->ledc_channel[CHANNEL_RIGHT_INDEX].channel].conf0.val;
g_ledc_right_conf1_val = &LEDC.channel_group[handle->ledc_timer.speed_mode].channel[handle->ledc_channel[CHANNEL_RIGHT_INDEX].channel].conf1.val;
diff --git a/components/clouds/dueros/lightduer/esp32p4/libduer-device-v5x.a b/components/clouds/dueros/lightduer/esp32p4/libduer-device-v5x.a
index f56457320..347aa33a5 100644
Binary files a/components/clouds/dueros/lightduer/esp32p4/libduer-device-v5x.a and b/components/clouds/dueros/lightduer/esp32p4/libduer-device-v5x.a differ
diff --git a/components/esp_codec_dev/CMakeLists.txt b/components/esp_codec_dev/CMakeLists.txt
index 032a52a24..89deacadf 100644
--- a/components/esp_codec_dev/CMakeLists.txt
+++ b/components/esp_codec_dev/CMakeLists.txt
@@ -73,7 +73,7 @@ idf_component_register(SRCS "${COMPONENT_SRCS}"
PRIV_REQUIRES freertos)
# Library only support xtensa
if (CONFIG_CODEC_ZL38063_SUPPORT)
- if (NOT ((CONFIG_IDF_TARGET STREQUAL "esp32c6") OR (CONFIG_IDF_TARGET STREQUAL "esp32c3")))
+ if (NOT ((CONFIG_IDF_TARGET STREQUAL "esp32c6") OR (CONFIG_IDF_TARGET STREQUAL "esp32c3") OR (CONFIG_IDF_TARGET STREQUAL "esp32p4")))
target_link_libraries(${COMPONENT_TARGET} INTERFACE "-L${CMAKE_CURRENT_LIST_DIR}/device/zl38063/firmware")
target_link_libraries(${COMPONENT_TARGET} INTERFACE firmware)
endif()
diff --git a/components/esp_peripherals/CMakeLists.txt b/components/esp_peripherals/CMakeLists.txt
index f192e6ff3..ab27f35dd 100644
--- a/components/esp_peripherals/CMakeLists.txt
+++ b/components/esp_peripherals/CMakeLists.txt
@@ -55,6 +55,10 @@ list(APPEND COMPONENT_SRCS ./lib/sdcard/sdcard.c ./periph_sdcard.c ./periph_touc
ELSEIF (CONFIG_IDF_TARGET STREQUAL "esp32s2")
list(APPEND COMPONENT_ADD_INCLUDEDIRS ./lib/sdcard ./lib/touch)
list(APPEND COMPONENT_SRCS ./lib/sdcard/sdcard.c ./periph_sdcard.c ./periph_touch.c ./lib/touch/touch.c)
+
+ELSEIF (CONFIG_IDF_TARGET STREQUAL "esp32p4")
+list(APPEND COMPONENT_ADD_INCLUDEDIRS ./lib/sdcard)
+list(APPEND COMPONENT_SRCS ./lib/sdcard/sdcard.c ./periph_sdcard.c)
ENDIF ()
set(COMPONENT_REQUIRES driver audio_hal audio_sal fatfs console audio_pipeline audio_board spiffs display_service esp_dispatcher bt mbedtls wpa_supplicant nvs_flash)
diff --git a/components/esp_peripherals/driver/i2c_bus/i2c_bus_v2.c b/components/esp_peripherals/driver/i2c_bus/i2c_bus_v2.c
index c35378c62..504cddac4 100644
--- a/components/esp_peripherals/driver/i2c_bus/i2c_bus_v2.c
+++ b/components/esp_peripherals/driver/i2c_bus/i2c_bus_v2.c
@@ -162,7 +162,7 @@ esp_err_t i2c_bus_write_bytes(i2c_bus_handle_t bus, int addr, uint8_t *reg, int
memcpy(write_buffer, reg, regLen);
memcpy(write_buffer + regLen, data, datalen);
mutex_lock(master[bus_info->port].bus_lock);
- int ret = i2c_master_transmit(dev_handle, write_buffer, write_len, pdMS_TO_TICKS(DEFAULT_I2C_TRANS_TIMEOUT));
+ int ret = i2c_master_transmit(dev_handle, write_buffer, write_len, DEFAULT_I2C_TRANS_TIMEOUT);
mutex_unlock(master[bus_info->port].bus_lock);
AUDIO_RET_ON_FALSE(TAG, ret, {audio_free(write_buffer); return ESP_FAIL;}, "I2C bus write bytes failed");
audio_free(write_buffer);
@@ -190,7 +190,7 @@ esp_err_t i2c_bus_write_data(i2c_bus_handle_t bus, int addr, uint8_t *data, int
I2C_BUS_CHECK(dev_handle != NULL, "I2C device handle is NULL", ESP_FAIL);
mutex_lock(master[bus_info->port].bus_lock);
- esp_err_t ret = i2c_master_transmit(dev_handle, data, datalen, pdMS_TO_TICKS(DEFAULT_I2C_TRANS_TIMEOUT));
+ esp_err_t ret = i2c_master_transmit(dev_handle, data, datalen, DEFAULT_I2C_TRANS_TIMEOUT);
mutex_unlock(master[bus_info->port].bus_lock);
AUDIO_RET_ON_FALSE(TAG, ret, {return ESP_FAIL;}, "I2C bus write bytes failed");
return ESP_OK;
@@ -203,7 +203,7 @@ esp_err_t i2c_bus_read_bytes(i2c_bus_handle_t bus, int addr, uint8_t *reg, int r
I2C_BUS_CHECK(dev_handle != NULL, "I2C device handle is NULL", ESP_FAIL);
mutex_lock(master[bus_info->port].bus_lock);
- esp_err_t ret = i2c_master_transmit_receive(dev_handle, reg, reglen, outdata, datalen, pdMS_TO_TICKS(DEFAULT_I2C_TRANS_TIMEOUT));
+ esp_err_t ret = i2c_master_transmit_receive(dev_handle, reg, reglen, outdata, datalen, DEFAULT_I2C_TRANS_TIMEOUT);
mutex_unlock(master[bus_info->port].bus_lock);
AUDIO_RET_ON_FALSE(TAG, ret, {return ESP_FAIL;}, "I2C bus read bytes failed");
return ESP_OK;
@@ -216,7 +216,7 @@ esp_err_t i2c_bus_read_bytes_directly(i2c_bus_handle_t bus, int addr, uint8_t *o
I2C_BUS_CHECK(dev_handle != NULL, "I2C device handle is NULL", ESP_FAIL);
mutex_lock(master[bus_info->port].bus_lock);
- esp_err_t ret = i2c_master_receive(dev_handle, outdata, datalen, pdMS_TO_TICKS(DEFAULT_I2C_TRANS_TIMEOUT));
+ esp_err_t ret = i2c_master_receive(dev_handle, outdata, datalen, DEFAULT_I2C_TRANS_TIMEOUT);
mutex_unlock(master[bus_info->port].bus_lock);
AUDIO_RET_ON_FALSE(TAG, ret, {return ESP_FAIL;}, "I2C bus read bytes failed");
return ESP_OK;
@@ -225,13 +225,12 @@ esp_err_t i2c_bus_read_bytes_directly(i2c_bus_handle_t bus, int addr, uint8_t *o
esp_err_t i2c_bus_delete(i2c_bus_handle_t bus)
{
i2c_bus_info_t *bus_info = (i2c_bus_info_t *)bus;
- audio_free(bus_info);
__sync_fetch_and_sub(&master[bus_info->port].ref_count, 1);
if (master[bus_info->port].ref_count == 0) {
mutex_destroy(master[bus_info->port].bus_lock);
master[bus_info->port].bus_lock = NULL;
- audio_free(bus);
}
+ audio_free(bus);
return ESP_OK;
}
@@ -240,7 +239,7 @@ esp_err_t i2c_bus_probe_addr(i2c_bus_handle_t bus, uint8_t addr)
i2c_bus_info_t *bus_info = (i2c_bus_info_t *)bus;
esp_err_t ret = ESP_OK;
mutex_lock(master[bus_info->port].bus_lock);
- ret = i2c_master_probe(master[bus_info->port].master_handle, addr, pdMS_TO_TICKS(DEFAULT_I2C_TRANS_TIMEOUT));
+ ret = i2c_master_probe(master[bus_info->port].master_handle, addr, DEFAULT_I2C_TRANS_TIMEOUT);
mutex_unlock(master[bus_info->port].bus_lock);
return ret;
}
diff --git a/components/esp_peripherals/lib/sdcard/sdcard.c b/components/esp_peripherals/lib/sdcard/sdcard.c
index d80d59010..83b63a3e3 100644
--- a/components/esp_peripherals/lib/sdcard/sdcard.c
+++ b/components/esp_peripherals/lib/sdcard/sdcard.c
@@ -38,6 +38,10 @@
#include "driver/sdmmc_defs.h"
#include "driver/gpio.h"
+#if SOC_SDMMC_IO_POWER_EXTERNAL
+#include "sd_pwr_ctrl_by_on_chip_ldo.h"
+#endif
+
#include "sdcard.h"
#include "board.h"
#include "esp_idf_version.h"
@@ -71,13 +75,33 @@ esp_err_t sdcard_mount(const char *base_path, periph_sdcard_mode_t mode)
.max_files = get_sdcard_open_file_num_max(),
.allocation_unit_size = 64 * 1024,
};
+
+#if defined SD_PWR_CTRL_LDO_INTERNAL_IO
+ sd_pwr_ctrl_ldo_config_t ldo_config = {
+ .ldo_chan_id = SD_PWR_CTRL_LDO_INTERNAL_IO,
+ };
+ sd_pwr_ctrl_handle_t pwr_ctrl_handle = NULL;
+
+ ret = sd_pwr_ctrl_new_on_chip_ldo(&ldo_config, &pwr_ctrl_handle);
+ if (ret != ESP_OK) {
+ ESP_LOGE(TAG, "Failed to create a new on-chip LDO power control driver");
+ return ESP_FAIL;
+ }
+#endif // SD_PWR_CTRL_LDO_INTERNAL_IO
+
if (mode != SD_MODE_SPI) {
#if SOC_SDMMC_HOST_SUPPORTED
ESP_LOGI(TAG, "Using %d-line SD mode, base path=%s", mode, base_path);
sdmmc_host_t host = SDMMC_HOST_DEFAULT();
// host.max_freq_khz = SDMMC_FREQ_HIGHSPEED;
-
+ /* Note: default sdmmc use slot0, hosted use slot1 */
+#if defined CONFIG_IDF_TARGET_ESP32P4
+ host.slot = SDMMC_HOST_SLOT_0;
+#endif // CONFIG_IDF_TARGET_ESP32P4
+#if defined SD_PWR_CTRL_LDO_INTERNAL_IO
+ host.pwr_ctrl_handle = pwr_ctrl_handle;
+#endif
sdmmc_slot_config_t slot_config = SDMMC_SLOT_CONFIG_DEFAULT();
// slot_config.gpio_cd = g_gpio;
slot_config.width = mode;
@@ -104,8 +128,10 @@ esp_err_t sdcard_mount(const char *base_path, periph_sdcard_mode_t mode)
#endif
} else {
ESP_LOGI(TAG, "Using SPI mode, base path=%s", base_path);
-#if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(4, 2, 0))
sdmmc_host_t host = SDSPI_HOST_DEFAULT();
+#if defined SD_PWR_CTRL_LDO_INTERNAL_IO
+ host.pwr_ctrl_handle = pwr_ctrl_handle;
+#endif
spi_bus_config_t bus_cfg = {
.mosi_io_num = ESP_SD_PIN_CMD,
.miso_io_num = ESP_SD_PIN_D0,
@@ -114,11 +140,7 @@ esp_err_t sdcard_mount(const char *base_path, periph_sdcard_mode_t mode)
.quadhd_io_num = -1,
.max_transfer_sz = 4000,
};
-#if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(4, 3, 0))
ret = spi_bus_initialize(host.slot, &bus_cfg, SPI_DMA_CH_AUTO);
-#else
- ret = spi_bus_initialize(host.slot, &bus_cfg, host.slot);
-#endif
if (ret != ESP_OK) {
ESP_LOGE(TAG, "Failed to initialize bus.");
return ret;
@@ -127,16 +149,6 @@ esp_err_t sdcard_mount(const char *base_path, periph_sdcard_mode_t mode)
slot_config.gpio_cs = ESP_SD_PIN_D3;
slot_config.host_id = host.slot;
ret = esp_vfs_fat_sdspi_mount(base_path, &host, &slot_config, &mount_config, &card);
-#else
- sdmmc_host_t host = SDSPI_HOST_DEFAULT();
- sdspi_slot_config_t slot_config = SDSPI_SLOT_CONFIG_DEFAULT();
- slot_config.gpio_miso = ESP_SD_PIN_D0;
- slot_config.gpio_mosi = ESP_SD_PIN_CMD;
- slot_config.gpio_sck = ESP_SD_PIN_CLK;
- slot_config.gpio_cs = ESP_SD_PIN_D3;
-
- ret = esp_vfs_fat_sdmmc_mount(base_path, &host, &slot_config, &mount_config, &card);
-#endif
}
switch (ret) {
diff --git a/components/esp_peripherals/periph_wifi.c b/components/esp_peripherals/periph_wifi.c
index 809de60d9..c11cfd98c 100644
--- a/components/esp_peripherals/periph_wifi.c
+++ b/components/esp_peripherals/periph_wifi.c
@@ -427,6 +427,7 @@ static esp_err_t _wifi_init(esp_periph_handle_t self)
ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &periph_wifi->wifi_config));
ESP_ERROR_CHECK(esp_wifi_set_ps(WIFI_PS_MIN_MODEM));
+#ifdef CONFIG_ESP_WIFI_ENABLED
if (periph_wifi->wpa2_e_cfg->diasble_wpa2_e) {
unsigned int ca_pem_bytes = periph_wifi->wpa2_e_cfg->ca_pem_end - periph_wifi->wpa2_e_cfg->ca_pem_start;
unsigned int client_crt_bytes = periph_wifi->wpa2_e_cfg->wpa2_e_cert_end - periph_wifi->wpa2_e_cfg->wpa2_e_cert_start;
@@ -447,8 +448,8 @@ static esp_err_t _wifi_init(esp_periph_handle_t self)
esp_wpa2_config_t wpa2_config = WPA2_CONFIG_INIT_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_sta_wpa2_ent_enable(&wpa2_config));
#endif
-
}
+#endif
ESP_ERROR_CHECK(esp_wifi_start());
periph_wifi->is_open = true;
diff --git a/components/esp_peripherals/periph_ws2812.c b/components/esp_peripherals/periph_ws2812.c
index db0374739..2008c5039 100755
--- a/components/esp_peripherals/periph_ws2812.c
+++ b/components/esp_peripherals/periph_ws2812.c
@@ -33,7 +33,7 @@
#include "periph_ws2812.h"
#include "esp_peripherals.h"
#include "soc/dport_access.h"
-#if !defined CONFIG_IDF_TARGET_ESP32C3 && !defined CONFIG_IDF_TARGET_ESP32C6
+#if !defined CONFIG_IDF_TARGET_ESP32C3 && !defined CONFIG_IDF_TARGET_ESP32C6 && !defined CONFIG_IDF_TARGET_ESP32P4
#include "soc/dport_reg.h"
#endif
#include "driver/rmt.h"
diff --git a/components/wifi_service/CMakeLists.txt b/components/wifi_service/CMakeLists.txt
index 0180862b5..1e6ba1268 100644
--- a/components/wifi_service/CMakeLists.txt
+++ b/components/wifi_service/CMakeLists.txt
@@ -18,7 +18,7 @@ list(APPEND COMPONENT_SRCS src/esp_wifi_setting.c
blufi_config/blufi_config.c
blufi_config/blufi_security.c)
-IF (CONFIG_IDF_TARGET STREQUAL "esp32c3" OR CONFIG_IDF_TARGET STREQUAL "esp32c6")
+IF (CONFIG_IDF_TARGET STREQUAL "esp32c3" OR CONFIG_IDF_TARGET STREQUAL "esp32c6" OR CONFIG_IDF_TARGET STREQUAL "esp32p4")
register_component()
ELSE()
list(APPEND COMPONENT_SRCS airkiss_config/airkiss_config.c)
diff --git a/docs/_static/ESP32-P4.svg b/docs/_static/ESP32-P4.svg
new file mode 100644
index 000000000..58e235371
--- /dev/null
+++ b/docs/_static/ESP32-P4.svg
@@ -0,0 +1,540 @@
+
+
+
+
\ No newline at end of file
diff --git a/docs/_static/esp32-p4-function-ev-board-small.jpg b/docs/_static/esp32-p4-function-ev-board-small.jpg
new file mode 100644
index 000000000..20cdf2826
Binary files /dev/null and b/docs/_static/esp32-p4-function-ev-board-small.jpg differ
diff --git a/docs/_static/esp32-p4-function-ev-board.jpg b/docs/_static/esp32-p4-function-ev-board.jpg
new file mode 100644
index 000000000..ddfd06f33
Binary files /dev/null and b/docs/_static/esp32-p4-function-ev-board.jpg differ
diff --git a/docs/requirements.txt b/docs/requirements.txt
index 0240b4dc7..a800e69f7 100644
--- a/docs/requirements.txt
+++ b/docs/requirements.txt
@@ -13,4 +13,5 @@ sphinxcontrib-nwdiag==2.0.0
sphinxcontrib-wavedrom==2.0.0
nwdiag==2.0.0
recommonmark==0.7.0
-future==0.16.0 # for ../tools/gen_esp_err_to_name.py
\ No newline at end of file
+# for ../tools/gen_esp_err_to_name.py
+future==0.16.0
\ No newline at end of file
diff --git a/esp-idf b/esp-idf
index 3c8bc2213..c8fc5f643 160000
--- a/esp-idf
+++ b/esp-idf
@@ -1 +1 @@
-Subproject commit 3c8bc2213cd5719d0c61ae9465a188eac83dfd70
+Subproject commit c8fc5f643b7a7b0d3b182d3df610844e3dc9bd74
diff --git a/examples/README.md b/examples/README.md
index 4e82ca1f3..254fba920 100644
--- a/examples/README.md
+++ b/examples/README.md
@@ -12,94 +12,97 @@ Compatibility of examples with Espressif audio boards is presented in tables bel
## ESP32 Usage
- Start [CMake](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/build-system.html) build
-- Choose IDF branch at least [release/v3.3](https://github.com/espressif/esp-idf/tree/release/v3.3) for CMake
+- Choose IDF branch at least [release/v5.0](https://github.com/espressif/esp-idf/tree/release/v5.0)
## ESP32-S2 Usage
- Start [CMake](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/api-guides/build-system.html) build
-- Choose IDF branch at least [release/v4.2](https://github.com/espressif/esp-idf/tree/release/v4.2)
+- Choose IDF branch at least [release/v5.0](https://github.com/espressif/esp-idf/tree/release/v5.0)
## ESP32-S3 Usage
- Start [CMake](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-guides/build-system.html) build
-- Choose IDF branch at least [release/v4.4](https://github.com/espressif/esp-idf/tree/release/v4.4)
+- Choose IDF branch at least [release/v5.0](https://github.com/espressif/esp-idf/tree/release/v5.0)
## ESP32-C3 Usage
- Start [CMake](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32c3/api-guides/build-system.html) build
-- Choose IDF branch [release/v4.4](https://github.com/espressif/esp-idf/tree/release/v4.4) to build led_pixels
+- Choose IDF branch [release/v5.0](https://github.com/espressif/esp-idf/tree/release/v5.0) to build led_pixels
- Choose IDF branch at least [release/v5.1](https://github.com/espressif/esp-idf/tree/release/v5.1) to build other examples
-## Compatibility of Examples with Espressif Audio Boards
+## ESP32-P4 Usage
+
+- Start [CMake](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32p4/api-guides/build-system.html) build
+- Choose IDF branch at least [release/v5.3](https://github.com/espressif/esp-idf/tree/release/v5.3)
-| No. | Example Name / Board Name --> | ESP32-LyraT | ESP32-LyraTD-MSC | ESP32-LyraT-Mini | ESP32-Korvo-DU1906 **1** | ESP32-S2-Kaluga-1 Kit | ESP32-S3-Korvo-2 | ESP32-C3-Lyra |
-|-----|------------------------------------------------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:---------------------------------------------------------------:|:----------------------------------------------------------------------:|:----------------------------------------------------------------------:|:----------------------------------------------------------------------:|
-| . | Link to the Board Getting Started Guide --> | [![alt text](../docs/_static/esp32-lyrat-v4.3-side-small.jpg "ESP32-LyraT")](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-lyrat.html) | [![alt text](../docs/_static/esp32-lyratd-msc-v2.2-small.jpg "ESP32-LyraTD-MSC")](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-lyratd-msc.html) | [![alt text](../docs/_static/esp32-lyrat-mini-v1.2-small.jpg "ESP32-LyraT-Mini")](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-lyrat-mini.html) | [![alt text](../docs/_static/esp32-korvo-du1906-v1.1-small.jpg "ESP32-Korvo-DU1906")](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-korvo-du1906.html) | [![alt text](../docs/_static/esp32-s2-kaluga-1-kit-small.png "ESP32-S2-Kaluga-1 Kit")](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/hw-reference/esp32s2/user-guide-esp32-s2-kaluga-1-kit.html) | [![alt text](../docs/_static/esp32-s3-korvo-2-v3.0-small.png "ESP32-S3-Korvo-2")](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/user-guide-esp32-s3-korvo-2.html) | [![alt text](../docs/_static/esp32-c3-lyra-v2.0-small.png "ESP32-C3-Lyra")](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/user-guide-esp32-c3-lyra.html) |
-| . | Espressif Chip installed on the Board --> | | | | | | |
-| 1 | [advanced_examples/algorithm](advanced_examples/algorithm) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 2 | [advanced_examples/audio_mixer_tone](advanced_examples/audio_mixer_tone) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 3 | [advanced_examples/dlna](advanced_examples/dlna) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 4 | [advanced_examples/downmix_pipeline](advanced_examples/downmix_pipeline) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 5 | [advanced_examples/flexible_pipeline](advanced_examples/flexible_pipeline) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 6 | [advanced_examples/http_play_and_save_to_file](advanced_examples/http_play_and_save_to_file) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 7 | [advanced_examples/multi-room](advanced_examples/multi-room) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 8 | [advanced_examples/nvs_dispatcher](advanced_examples/nvs_dispatcher) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 9 | [protocols/voip](protocols/voip) | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 10 | [advanced_examples/wifi_bt_ble_coex](advanced_examples/wifi_bt_ble_coex) **2** | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 11 | [audio_processing/pipeline_alc](audio_processing/pipeline_alc) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 12 | [audio_processing/pipeline_audio_forge](audio_processing/pipeline_audio_forge) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 13 | [audio_processing/pipeline_equalizer](audio_processing/pipeline_equalizer) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 14 | [audio_processing/pipeline_passthru](audio_processing/pipeline_passthru) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Not Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 15 | [audio_processing/pipeline_resample](audio_processing/pipeline_resample) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 16 | [audio_processing/pipeline_sonic](audio_processing/pipeline_sonic) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 17 | [audio_processing/pipeline_spiffs_amr_resample](audio_processing/pipeline_spiffs_amr_resample) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 18 | [checks/check_board_buttons](checks/check_board_buttons) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
-| 19 | [checks/check_display_led](checks/check_display_led) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
-| 20 | [cli](cli) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 21 | [cloud_services/google_translate_device](cloud_services/google_translate_device) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 22 | [cloud_services/pipeline_aws_polly_mp3](cloud_services/pipeline_aws_polly_mp3) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 23 | [cloud_services/pipeline_baidu_speech_mp3](cloud_services/pipeline_baidu_speech_mp3) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 24 | [dueros](dueros) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 25 | [get-started/pipeline_a2dp_sink_and_hfp](get-started/pipeline_a2dp_sink_and_hfp) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 26 | [get-started/play_mp3_control](get-started/play_mp3_control) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 27 | [get-started/pipeline_tcp_client](get-started/pipeline_tcp_client) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 28 | [ota](ota) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 29 | [korvo_du1906](korvo_du1906) **2** | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 30 | [player/pipeline_a2dp_sink_stream](player/pipeline_a2dp_sink_stream) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 31 | [player/pipeline_a2dp_source_stream](player/pipeline_a2dp_source_stream) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 32 | [player/pipeline_bt_sink](player/pipeline_bt_sink) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 33 | [player/pipeline_bt_source](player/pipeline_bt_source) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 34 | [player/pipeline_embed_flash_tone](player/pipeline_embed_flash_tone) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 35 | [player/pipeline_flash_tone](player/pipeline_flash_tone) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
-| 36 | [player/pipeline_hfp_stream](player/pipeline_hfp_stream) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 37 | [player/pipeline_http_mp3](player/pipeline_http_mp3) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
-| 38 | [player/pipeline_http_select_decoder](player/pipeline_http_select_decoder) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 39 | [player/pipeline_living_stream](player/pipeline_living_stream) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
-| 40 | [player/pipeline_loop_playback_without_gap](player/pipeline_loop_playback_without_gap) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
-| 41 | [player/pipeline_play_sdcard_music](player/pipeline_play_sdcard_music) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 42 | [player/pipeline_sdcard_mp3_control](player/pipeline_sdcard_mp3_control) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 43 | [player/pipeline_tts_stream](player/pipeline_tts_stream) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 44 | [player/pipeline_spiffs_mp3](player/pipeline_spiffs_mp3) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
-| 45 | [player/pipeline_play_mp3_with_dac_or_pwm](player/pipeline_play_mp3_with_dac_or_pwm) | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 46 | [recorder/element_cb_sdcard_amr](recorder/element_cb_sdcard_amr) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 47 | [recorder/element_wav_amr_sdcard](recorder/element_wav_amr_sdcard) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 48 | [recorder/pipeline_raw_http](recorder/pipeline_raw_http) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 49 | [recorder/pipeline_wav_amr_sdcard](recorder/pipeline_wav_amr_sdcard) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 50 | [recorder/pipeline_recording_to_sdcard](recorder/pipeline_recording_to_sdcard) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 51 | [speech_recognition/wwe](speech_recognition/wwe) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 52 | [speech_recognition/vad](speech_recognition/vad) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 53 | [system/battery](system/battery) | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 54 | [system/coredump](system/coredump) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 55 | [system/power_save](system/power_save) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "InCompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
-| 56 | [system/wpa2_enterprise](system/wpa2_enterprise) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 57 | [display/lcd_jpeg](display/lcd_jpeg) | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 58 | [display/music_player](display/music_player) | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 59 | [display/lcd_camera](display/lcd_camera) | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 60 | [display/led_pixels](display/led_pixels) | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
-| 61 | [recorder/av_muxer_sdcard](recorder/av_muxer_sdcard) | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 62 | [protocols/rtmp](protocols/rtmp) | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 63 | [protocols/esp-rtc](protocols/esp-rtc) | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
-| 64 | [protocols/esp-rtsp](protocols/esp-rtsp) | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+## Compatibility of Examples with Espressif Audio Boards
+| No. | Example Name / Board Name --> | ESP32-LyraT | ESP32-LyraTD-MSC | ESP32-LyraT-Mini | ESP32-Korvo-DU1906 **1** | ESP32-S2-Kaluga-1 Kit | ESP32-S3-Korvo-2 | ESP32-C3-Lyra | ESP32-P4-function-ev-board |
+|-----|------------------------------------------------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:---------------------------------------------------------------:|:----------------------------------------------------------------------:|:----------------------------------------------------------------------:|:----------------------------------------------------------------------:|:----------------------------------------------------------------------:|
+| . | Link to the Board Getting Started Guide --> | [![alt text](../docs/_static/esp32-lyrat-v4.3-side-small.jpg "ESP32-LyraT")](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-lyrat.html) | [![alt text](../docs/_static/esp32-lyratd-msc-v2.2-small.jpg "ESP32-LyraTD-MSC")](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-lyratd-msc.html) | [![alt text](../docs/_static/esp32-lyrat-mini-v1.2-small.jpg "ESP32-LyraT-Mini")](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-lyrat-mini.html) | [![alt text](../docs/_static/esp32-korvo-du1906-v1.1-small.jpg "ESP32-Korvo-DU1906")](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-korvo-du1906.html) | [![alt text](../docs/_static/esp32-s2-kaluga-1-kit-small.png "ESP32-S2-Kaluga-1 Kit")](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/hw-reference/esp32s2/user-guide-esp32-s2-kaluga-1-kit.html) | [![alt text](../docs/_static/esp32-s3-korvo-2-v3.0-small.png "ESP32-S3-Korvo-2")](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/user-guide-esp32-s3-korvo-2.html) | [![alt text](../docs/_static/esp32-c3-lyra-v2.0-small.png "ESP32-C3-Lyra")](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/user-guide-esp32-c3-lyra.html) | [![alt text](../docs/_static/esp32-p4-function-ev-board-small.jpg "ESP32-LyraT")](https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32p4/esp32-p4-function-ev-board/index.html) |
+| . | Espressif Chip installed on the Board --> | | | | | | | |
+| 1 | [advanced_examples/algorithm](advanced_examples/algorithm) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
+| 2 | [advanced_examples/audio_mixer_tone](advanced_examples/audio_mixer_tone) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 3 | [advanced_examples/dlna](advanced_examples/dlna) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 4 | [advanced_examples/downmix_pipeline](advanced_examples/downmix_pipeline) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
+| 5 | [advanced_examples/flexible_pipeline](advanced_examples/flexible_pipeline) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 6 | [advanced_examples/http_play_and_save_to_file](advanced_examples/http_play_and_save_to_file) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 7 | [advanced_examples/multi-room](advanced_examples/multi-room) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 8 | [advanced_examples/nvs_dispatcher](advanced_examples/nvs_dispatcher) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
+| 9 | [protocols/voip](protocols/voip) | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 10 | [advanced_examples/wifi_bt_ble_coex](advanced_examples/wifi_bt_ble_coex) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 11 | [audio_processing/pipeline_alc](audio_processing/pipeline_alc) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
+| 12 | [audio_processing/pipeline_audio_forge](audio_processing/pipeline_audio_forge) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 13 | [audio_processing/pipeline_equalizer](audio_processing/pipeline_equalizer) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
+| 14 | [audio_processing/pipeline_passthru](audio_processing/pipeline_passthru) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Not Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
+| 15 | [audio_processing/pipeline_resample](audio_processing/pipeline_resample) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 16 | [audio_processing/pipeline_sonic](audio_processing/pipeline_sonic) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 17 | [audio_processing/pipeline_spiffs_amr_resample](audio_processing/pipeline_spiffs_amr_resample) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 18 | [checks/check_board_buttons](checks/check_board_buttons) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 19 | [checks/check_display_led](checks/check_display_led) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 20 | [cli](cli) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
+| 21 | [cloud_services/google_translate_device](cloud_services/google_translate_device) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
+| 22 | [cloud_services/pipeline_aws_polly_mp3](cloud_services/pipeline_aws_polly_mp3) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
+| 23 | [cloud_services/pipeline_baidu_speech_mp3](cloud_services/pipeline_baidu_speech_mp3) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
+| 24 | [dueros](dueros) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
+| 25 | [get-started/pipeline_a2dp_sink_and_hfp](get-started/pipeline_a2dp_sink_and_hfp) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 26 | [get-started/play_mp3_control](get-started/play_mp3_control) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
+| 27 | [get-started/pipeline_tcp_client](get-started/pipeline_tcp_client) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
+| 28 | [ota](ota) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
+| 29 | [korvo_du1906](korvo_du1906) **2** | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 30 | [player/pipeline_a2dp_sink_stream](player/pipeline_a2dp_sink_stream) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 31 | [player/pipeline_a2dp_source_stream](player/pipeline_a2dp_source_stream) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 32 | [player/pipeline_bt_sink](player/pipeline_bt_sink) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 33 | [player/pipeline_bt_source](player/pipeline_bt_source) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 34 | [player/pipeline_embed_flash_tone](player/pipeline_embed_flash_tone) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
+| 35 | [player/pipeline_flash_tone](player/pipeline_flash_tone) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
+| 36 | [player/pipeline_hfp_stream](player/pipeline_hfp_stream) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 37 | [player/pipeline_http_mp3](player/pipeline_http_mp3) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
+| 38 | [player/pipeline_http_select_decoder](player/pipeline_http_select_decoder) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible")
+| 39 | [player/pipeline_living_stream](player/pipeline_living_stream) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
+| 40 | [player/pipeline_loop_playback_without_gap](player/pipeline_loop_playback_without_gap) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
+| 41 | [player/pipeline_play_sdcard_music](player/pipeline_play_sdcard_music) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
+| 42 | [player/pipeline_sdcard_mp3_control](player/pipeline_sdcard_mp3_control) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 43 | [player/pipeline_tts_stream](player/pipeline_tts_stream) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
+| 44 | [player/pipeline_spiffs_mp3](player/pipeline_spiffs_mp3) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
+| 45 | [player/pipeline_play_mp3_with_dac_or_pwm](player/pipeline_play_mp3_with_dac_or_pwm) | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 46 | [recorder/element_cb_sdcard_amr](recorder/element_cb_sdcard_amr) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
+| 47 | [recorder/element_wav_amr_sdcard](recorder/element_wav_amr_sdcard) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
+| 48 | [recorder/pipeline_raw_http](recorder/pipeline_raw_http) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 49 | [recorder/pipeline_wav_amr_sdcard](recorder/pipeline_wav_amr_sdcard) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
+| 50 | [recorder/pipeline_recording_to_sdcard](recorder/pipeline_recording_to_sdcard) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
+| 51 | [speech_recognition/wwe](speech_recognition/wwe) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
+| 52 | [speech_recognition/vad](speech_recognition/vad) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 53 | [system/battery](system/battery) | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 54 | [system/coredump](system/coredump) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") |
+| 55 | [system/power_save](system/power_save) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 56 | [system/wpa2_enterprise](system/wpa2_enterprise) | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 57 | [display/lcd_jpeg](display/lcd_jpeg) | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 58 | [display/music_player](display/music_player) | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 59 | [display/lcd_camera](display/lcd_camera) | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 60 | [display/led_pixels](display/led_pixels) | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 61 | [recoder/av_muxer_sdcard](recorder/av_muxer_sdcard) | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 62 | [protocols/rtmp](protocols/rtmp) | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 63 | [protocols/esp-rtc](protocols/esp-rtc) | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") |
+| 64 | [protocols/esp-rtsp](protocols/esp-rtsp) | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/yes-icon.png "Compatible") | ![alt text](../docs/_static/no-icon.png "Incompatible") | ![alt text](../docs/_static/no-icon.png "Incompatible")
**Note 1:** The key layout of [ESP32-Korvo-DU1906](https://docs.espressif.com/projects/esp-adf/en/latest/design-guide/dev-boards/get-started-esp32-korvo-du1906.html) is slightly different from other official audio development boards. The `REC`, `MODE`, and `PLAY` keys are not defined, so the examples requiring operation on these keys may not work properly.
-**Note 2:** This example involves the coexistence of Wi-Fi, A2DP, HFP, and Bluetooth LE, so the optimized coexistence IDF branch [audio/stack_on_psram_v3.3](https://github.com/espressif/esp-idf/tree/audio/stack_on_psram_v3.3) is used in this example.
diff --git a/examples/README_CN.md b/examples/README_CN.md
index cd8720e4f..5b032e9d7 100644
--- a/examples/README_CN.md
+++ b/examples/README_CN.md
@@ -10,23 +10,27 @@
## ESP32 用法
- 开始 [CMake](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-guides/build-system.html) 编译
-- 请选择 [release/v3.3](https://github.com/espressif/esp-idf/tree/release/v3.3) 及以后的 IDF 分支进行 CMake 编译
+- 请选择 [release/v5.0](https://github.com/espressif/esp-idf/tree/release/v5.0) 及以后的 IDF 分支进行 CMake 编译
## ESP32-S2 用法
- 开始 [CMake](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32s2/api-guides/build-system.html) 编译
-- 请选择 [release/v4.2](https://github.com/espressif/esp-idf/tree/release/v4.2) 及以后的 IDF 分支
+- 请选择 [release/v5.0](https://github.com/espressif/esp-idf/tree/release/v5.0) 及以后的 IDF 分支
## ESP32-S3 用法
- 开始 [CMake](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32s3/api-guides/build-system.html) 编译
-- 请选择 [release/v4.4](https://github.com/espressif/esp-idf/tree/release/v4.4) 及以后的 IDF 分支
+- 请选择 [release/v5.0](https://github.com/espressif/esp-idf/tree/release/v5.0) 及以后的 IDF 分支
## ESP32-C3 用法
- 开始 [CMake](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32c3/api-guides/build-system.html) 编译
-- 请选择 [release/v4.4](https://github.com/espressif/esp-idf/tree/release/v4.4) IDF 分支编译 led_pixels 例程
-- 请选择 [release/v5.1](https://github.com/espressif/esp-idf/tree/release/v5.1) 及以后的 IDF 分支编译其他例程
+- 请选择 [release/v5.0](https://github.com/espressif/esp-idf/tree/release/v5.0) 及以后的 IDF 分支
+
+## ESP32-P4 用法
+
+- 开始 [CMake](https://docs.espressif.com/projects/esp-idf/en/latest/esp32p4/get-started/index.html) 编译
+- 请选择 [release/v5.3](https://github.com/espressif/esp-idf/tree/release/v5.3) 及以后的 IDF 分支
## 例程与乐鑫音频开发板的兼容性
@@ -35,74 +39,73 @@
[comment]: <> (Markdown table editing tool)
[comment]: <> (https://www.tablesgenerator.com/markdown_tables)
-| 编号 | 例程名称 / 开发板名称 --> | ESP32-LyraT | ESP32-LyraTD-MSC | ESP32-LyraT-Mini | ESP32-Korvo-DU1906 **1** | ESP32-S2-Kaluga-1 Kit | ESP32-S3-Korvo-2 | ESP32-C3-Lyra |
-|-----|------------------------------------------------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:---------------------------------------------------------------:|:----------------------------------------------------------------------:|:----------------------------------------------------------------------:|:----------------------------------------------------------------------:|
-| . | 链接至开发板入门指南 --> | [![alt text](../docs/_static/esp32-lyrat-v4.3-side-small.jpg "ESP32-LyraT")](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-lyrat.html) | [![alt text](../docs/_static/esp32-lyratd-msc-v2.2-small.jpg "ESP32-LyraTD-MSC")](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-lyratd-msc.html) | [![alt text](../docs/_static/esp32-lyrat-mini-v1.2-small.jpg "ESP32-LyraT-Mini")](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-lyrat-mini.html) | [![alt text](../docs/_static/esp32-korvo-du1906-v1.1-small.jpg "ESP32-Korvo-DU1906")](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-korvo-du1906.html) | [![alt text](../docs/_static/esp32-s2-kaluga-1-kit-small.png "ESP32-S2-Kaluga-1 Kit")](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/hw-reference/esp32s2/user-guide-esp32-s2-kaluga-1-kit.html) | [![alt text](../docs/_static/esp32-s3-korvo-2-v3.0-small.png "ESP32-S3-Korvo-2")](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/user-guide-esp32-s3-korvo-2.html) | [![alt text](../docs/_static/esp32-c3-lyra-v2.0-small.png "ESP32-C3-Lyra")](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/user-guide-esp32-c3-lyra.html) |
-| . | 板载乐鑫芯片 --> | | | | | | |
-| 1 | [advanced_examples/algorithm](advanced_examples/algorithm) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 2 | [advanced_examples/audio_mixer_tone](advanced_examples/audio_mixer_tone) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 3 | [advanced_examples/dlna](advanced_examples/dlna) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 4 | [advanced_examples/downmix_pipeline](advanced_examples/downmix_pipeline) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 5 | [advanced_examples/flexible_pipeline](advanced_examples/flexible_pipeline) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 6 | [advanced_examples/http_play_and_save_to_file](advanced_examples/http_play_and_save_to_file) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 7 | [advanced_examples/multi-room](advanced_examples/multi-room) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 8 | [advanced_examples/nvs_dispatcher](advanced_examples/nvs_dispatcher) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 9 | [protocols/voip](protocols/voip) | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 10 | [advanced_examples/wifi_bt_ble_coex](advanced_examples/wifi_bt_ble_coex) **2** | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 11 | [audio_processing/pipeline_alc](audio_processing/pipeline_alc) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 12 | [audio_processing/pipeline_audio_forge](audio_processing/pipeline_audio_forge) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 13 | [audio_processing/pipeline_equalizer](audio_processing/pipeline_equalizer) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 14 | [audio_processing/pipeline_passthru](audio_processing/pipeline_passthru) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "Not 兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 15 | [audio_processing/pipeline_resample](audio_processing/pipeline_resample) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 16 | [audio_processing/pipeline_sonic](audio_processing/pipeline_sonic) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 17 | [audio_processing/pipeline_spiffs_amr_resample](audio_processing/pipeline_spiffs_amr_resample) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 18 | [checks/check_board_buttons](checks/check_board_buttons) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
-| 19 | [checks/check_display_led](checks/check_display_led) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
-| 20 | [cli](cli) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 21 | [cloud_services/google_translate_device](cloud_services/google_translate_device) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 22 | [cloud_services/pipeline_aws_polly_mp3](cloud_services/pipeline_aws_polly_mp3) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 23 | [cloud_services/pipeline_baidu_speech_mp3](cloud_services/pipeline_baidu_speech_mp3) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 24 | [dueros](dueros) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 25 | [get-started/pipeline_a2dp_sink_and_hfp](get-started/pipeline_a2dp_sink_and_hfp) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 26 | [get-started/play_mp3_control](get-started/play_mp3_control) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 27 | [get-started/pipeline_tcp_client](get-started/pipeline_tcp_client) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 28 | [ota](ota) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 29 | [korvo_du1906](korvo_du1906) **2** | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 30 | [player/pipeline_a2dp_sink_stream](player/pipeline_a2dp_sink_stream) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 31 | [player/pipeline_a2dp_source_stream](player/pipeline_a2dp_source_stream) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 32 | [player/pipeline_bt_sink](player/pipeline_bt_sink) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 33 | [player/pipeline_bt_source](player/pipeline_bt_source) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 34 | [player/pipeline_embed_flash_tone](player/pipeline_embed_flash_tone) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 35 | [player/pipeline_flash_tone](player/pipeline_flash_tone) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
-| 36 | [player/pipeline_hfp_stream](player/pipeline_hfp_stream) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 37 | [player/pipeline_http_mp3](player/pipeline_http_mp3) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
-| 38 | [player/pipeline_http_select_decoder](player/pipeline_http_select_decoder) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 39 | [player/pipeline_living_stream](player/pipeline_living_stream) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
-| 40 | [player/pipeline_loop_playback_without_gap](player/pipeline_loop_playback_without_gap) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
-| 41 | [player/pipeline_play_sdcard_music](player/pipeline_play_sdcard_music) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 42 | [player/pipeline_sdcard_mp3_control](player/pipeline_sdcard_mp3_control) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 43 | [player/pipeline_tts_stream](player/pipeline_tts_stream) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 44 | [player/pipeline_spiffs_mp3](player/pipeline_spiffs_mp3) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
-| 45 | [player/pipeline_play_mp3_with_dac_or_pwm](player/pipeline_play_mp3_with_dac_or_pwm) | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 46 | [recorder/element_cb_sdcard_amr](recorder/element_cb_sdcard_amr) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 47 | [recorder/element_wav_amr_sdcard](recorder/element_wav_amr_sdcard) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 48 | [recorder/pipeline_raw_http](recorder/pipeline_raw_http) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 49 | [recorder/pipeline_wav_amr_sdcard](recorder/pipeline_wav_amr_sdcard) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 50 | [recorder/pipeline_recording_to_sdcard](recorder/pipeline_recording_to_sdcard) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 51 | [speech_recognition/wwe](speech_recognition/wwe) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 52 | [speech_recognition/vad](speech_recognition/vad) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 53 | [system/battery](system/battery) | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 54 | [system/coredump](system/coredump) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 55 | [system/power_save](system/power_save) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
-| 56 | [system/wpa2_enterprise](system/wpa2_enterprise) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 57 | [display/lcd_jpeg](display/lcd_jpeg) | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 58 | [display/music_player](display/music_player) | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 59 | [display/lcd_camera](display/lcd_camera) | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 60 | [display/led_pixels](display/led_pixels) | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
-| 61 | [recoder/av_muxer_sdcard](recorder/av_muxer_sdcard) | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 62 | [protocols/rtmp](protocols/rtmp) | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 63 | [protocols/esp-rtc](protocols/esp-rtc) | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-| 64 | [protocols/esp-rtsp](protocols/esp-rtsp) | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
-
-**Note 1:** [ESP32-Korvo-DU1906](https://docs.espressif.com/projects/esp-adf/en/latest/design-guide/dev-boards/get-started-esp32-korvo-du1906.html) 开发板的按键布局与其他官方语音开发板略有不同,没有定义 `REC`、`MODE` 和 `PLAY` 键,所以需要这些键操作的例程可能无法正常运行。
-**Note 2:** 本例程涉及 Wi-Fi、A2DP、HFP、Bluetooth LE 共存,推荐使用优化共存的 IDF 分支:[audio/stack_on_psram_v3.3](https://github.com/espressif/esp-idf/tree/audio/stack_on_psram_v3.3)。
+| 编号 | 例程名称 / 开发板名称 --> | ESP32-LyraT | ESP32-LyraTD-MSC | ESP32-LyraT-Mini | ESP32-Korvo-DU1906 **1** | ESP32-S2-Kaluga-1 Kit | ESP32-S3-Korvo-2 | ESP32-C3-Lyra | ESP32-P4-function-ev-board |
+|-----|------------------------------------------------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:---------------------------------------------------------------:|:----------------------------------------------------------------------:|:----------------------------------------------------------------------:|:----------------------------------------------------------------------:|:----------------------------------------------------------------------:|
+| . | 链接至开发板入门指南 --> | [![alt text](../docs/_static/esp32-lyrat-v4.3-side-small.jpg "ESP32-LyraT")](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-lyrat.html) | [![alt text](../docs/_static/esp32-lyratd-msc-v2.2-small.jpg "ESP32-LyraTD-MSC")](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-lyratd-msc.html) | [![alt text](../docs/_static/esp32-lyrat-mini-v1.2-small.jpg "ESP32-LyraT-Mini")](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-lyrat-mini.html) | [![alt text](../docs/_static/esp32-korvo-du1906-v1.1-small.jpg "ESP32-Korvo-DU1906")](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-korvo-du1906.html) | [![alt text](../docs/_static/esp32-s2-kaluga-1-kit-small.png "ESP32-S2-Kaluga-1 Kit")](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/hw-reference/esp32s2/user-guide-esp32-s2-kaluga-1-kit.html) | [![alt text](../docs/_static/esp32-s3-korvo-2-v3.0-small.png "ESP32-S3-Korvo-2")](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/user-guide-esp32-s3-korvo-2.html) | [![alt text](../docs/_static/esp32-c3-lyra-v2.0-small.png "ESP32-C3-Lyra")](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/user-guide-esp32-c3-lyra.html) | [![alt text](../docs/_static/esp32-p4-function-ev-board-small.jpg "ESP32-LyraT")](https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32p4/esp32-p4-function-ev-board/index.html) |
+| . | 板载乐鑫芯片 --> | | | | | | | |
+| 1 | [advanced_examples/algorithm](advanced_examples/algorithm) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
+| 2 | [advanced_examples/audio_mixer_tone](advanced_examples/audio_mixer_tone) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 3 | [advanced_examples/dlna](advanced_examples/dlna) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 4 | [advanced_examples/downmix_pipeline](advanced_examples/downmix_pipeline) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
+| 5 | [advanced_examples/flexible_pipeline](advanced_examples/flexible_pipeline) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 6 | [advanced_examples/http_play_and_save_to_file](advanced_examples/http_play_and_save_to_file) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 7 | [advanced_examples/multi-room](advanced_examples/multi-room) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 8 | [advanced_examples/nvs_dispatcher](advanced_examples/nvs_dispatcher) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
+| 9 | [protocols/voip](protocols/voip) | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 10 | [advanced_examples/wifi_bt_ble_coex](advanced_examples/wifi_bt_ble_coex) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 11 | [audio_processing/pipeline_alc](audio_processing/pipeline_alc) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
+| 12 | [audio_processing/pipeline_audio_forge](audio_processing/pipeline_audio_forge) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 13 | [audio_processing/pipeline_equalizer](audio_processing/pipeline_equalizer) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
+| 14 | [audio_processing/pipeline_passthru](audio_processing/pipeline_passthru) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "Not 兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
+| 15 | [audio_processing/pipeline_resample](audio_processing/pipeline_resample) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 16 | [audio_processing/pipeline_sonic](audio_processing/pipeline_sonic) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 17 | [audio_processing/pipeline_spiffs_amr_resample](audio_processing/pipeline_spiffs_amr_resample) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 18 | [checks/check_board_buttons](checks/check_board_buttons) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 19 | [checks/check_display_led](checks/check_display_led) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 20 | [cli](cli) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
+| 21 | [cloud_services/google_translate_device](cloud_services/google_translate_device) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
+| 22 | [cloud_services/pipeline_aws_polly_mp3](cloud_services/pipeline_aws_polly_mp3) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
+| 23 | [cloud_services/pipeline_baidu_speech_mp3](cloud_services/pipeline_baidu_speech_mp3) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
+| 24 | [dueros](dueros) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
+| 25 | [get-started/pipeline_a2dp_sink_and_hfp](get-started/pipeline_a2dp_sink_and_hfp) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 26 | [get-started/play_mp3_control](get-started/play_mp3_control) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
+| 27 | [get-started/pipeline_tcp_client](get-started/pipeline_tcp_client) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
+| 28 | [ota](ota) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
+| 29 | [korvo_du1906](korvo_du1906) **2** | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 30 | [player/pipeline_a2dp_sink_stream](player/pipeline_a2dp_sink_stream) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 31 | [player/pipeline_a2dp_source_stream](player/pipeline_a2dp_source_stream) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 32 | [player/pipeline_bt_sink](player/pipeline_bt_sink) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 33 | [player/pipeline_bt_source](player/pipeline_bt_source) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 34 | [player/pipeline_embed_flash_tone](player/pipeline_embed_flash_tone) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
+| 35 | [player/pipeline_flash_tone](player/pipeline_flash_tone) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
+| 36 | [player/pipeline_hfp_stream](player/pipeline_hfp_stream) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 37 | [player/pipeline_http_mp3](player/pipeline_http_mp3) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
+| 38 | [player/pipeline_http_select_decoder](player/pipeline_http_select_decoder) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容")
+| 39 | [player/pipeline_living_stream](player/pipeline_living_stream) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
+| 40 | [player/pipeline_loop_playback_without_gap](player/pipeline_loop_playback_without_gap) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
+| 41 | [player/pipeline_play_sdcard_music](player/pipeline_play_sdcard_music) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
+| 42 | [player/pipeline_sdcard_mp3_control](player/pipeline_sdcard_mp3_control) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 43 | [player/pipeline_tts_stream](player/pipeline_tts_stream) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
+| 44 | [player/pipeline_spiffs_mp3](player/pipeline_spiffs_mp3) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
+| 45 | [player/pipeline_play_mp3_with_dac_or_pwm](player/pipeline_play_mp3_with_dac_or_pwm) | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 46 | [recorder/element_cb_sdcard_amr](recorder/element_cb_sdcard_amr) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
+| 47 | [recorder/element_wav_amr_sdcard](recorder/element_wav_amr_sdcard) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
+| 48 | [recorder/pipeline_raw_http](recorder/pipeline_raw_http) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 49 | [recorder/pipeline_wav_amr_sdcard](recorder/pipeline_wav_amr_sdcard) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
+| 50 | [recorder/pipeline_recording_to_sdcard](recorder/pipeline_recording_to_sdcard) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
+| 51 | [speech_recognition/wwe](speech_recognition/wwe) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
+| 52 | [speech_recognition/vad](speech_recognition/vad) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 53 | [system/battery](system/battery) | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 54 | [system/coredump](system/coredump) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") |
+| 55 | [system/power_save](system/power_save) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 56 | [system/wpa2_enterprise](system/wpa2_enterprise) | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 57 | [display/lcd_jpeg](display/lcd_jpeg) | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 58 | [display/music_player](display/music_player) | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 59 | [display/lcd_camera](display/lcd_camera) | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 60 | [display/led_pixels](display/led_pixels) | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 61 | [recoder/av_muxer_sdcard](recorder/av_muxer_sdcard) | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 62 | [protocols/rtmp](protocols/rtmp) | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 63 | [protocols/esp-rtc](protocols/esp-rtc) | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+| 64 | [protocols/esp-rtsp](protocols/esp-rtsp) | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/yes-icon.png "兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") | ![alt text](../docs/_static/no-icon.png "不兼容") |
+
+**Note 1:** [ESP32-Korvo-DU1906](https://docs.espressif.com/projects/esp-adf/en/latest/design-guide/dev-boards/get-started-esp32-korvo-du1906.html) 开发板的按键布局与其他官方语音开发板略有不同,没有定义 REC、MODE 和 PLAY 键,所以需要这些键操作的例程可能无法正常运行。
diff --git a/examples/advanced_examples/algorithm/README.md b/examples/advanced_examples/algorithm/README.md
index 45735aa7d..6430c4af3 100644
--- a/examples/advanced_examples/algorithm/README.md
+++ b/examples/advanced_examples/algorithm/README.md
@@ -33,7 +33,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -57,7 +57,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See the Getting Started Guide for full steps to configure and use [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) to build projects.
+See the Getting Started Guide for full steps to configure and use [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) to build projects.
## How to use the Example
diff --git a/examples/advanced_examples/algorithm/README_CN.md b/examples/advanced_examples/algorithm/README_CN.md
index 614d8125a..6ccba30b1 100644
--- a/examples/advanced_examples/algorithm/README_CN.md
+++ b/examples/advanced_examples/algorithm/README_CN.md
@@ -32,7 +32,7 @@
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -57,7 +57,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/advanced_examples/algorithm/main/idf_component.yml b/examples/advanced_examples/algorithm/main/idf_component.yml
new file mode 100644
index 000000000..387bd9814
--- /dev/null
+++ b/examples/advanced_examples/algorithm/main/idf_component.yml
@@ -0,0 +1,9 @@
+dependencies:
+ espressif/esp_hosted:
+ version: "~0.0.9"
+ rules:
+ - if: "target in [esp32p4]"
+ espressif/esp_wifi_remote:
+ version: "~0.3.0"
+ rules:
+ - if: "target in [esp32p4]"
\ No newline at end of file
diff --git a/examples/advanced_examples/algorithm/sdkconfig.defaults.esp32p4 b/examples/advanced_examples/algorithm/sdkconfig.defaults.esp32p4
new file mode 100644
index 000000000..49c215f79
--- /dev/null
+++ b/examples/advanced_examples/algorithm/sdkconfig.defaults.esp32p4
@@ -0,0 +1,38 @@
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32p4"
+CONFIG_IDF_TARGET_ESP32P4=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_360=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=360
+CONFIG_IDF_EXPERIMENTAL_FEATURES=y
+
+#
+# SPI RAM config
+#
+CONFIG_SPIRAM=y
+CONFIG_SPIRAM_SPEED_200M=y
+CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
+
+#
+# Audio HAL
+#
+CONFIG_ESP32_P4_FUNCTION_EV_BOARD=y
+
+
+
+#
+# DSP Library
+#
+CONFIG_DSP_ANSI=y
+CONFIG_DSP_OPTIMIZATION=0
+# CONFIG_DSP_MAX_FFT_SIZE_512 is not set
+# CONFIG_DSP_MAX_FFT_SIZE_1024 is not set
+# CONFIG_DSP_MAX_FFT_SIZE_2048 is not set
+CONFIG_DSP_MAX_FFT_SIZE_4096=y
+# CONFIG_DSP_MAX_FFT_SIZE_8192 is not set
+# CONFIG_DSP_MAX_FFT_SIZE_16384 is not set
+# CONFIG_DSP_MAX_FFT_SIZE_32768 is not set
+CONFIG_DSP_MAX_FFT_SIZE=4096
+# end of DSP Library
+# end of Component config
diff --git a/examples/advanced_examples/audio_mixer_tone/README.md b/examples/advanced_examples/audio_mixer_tone/README.md
index 3783191ac..f36fd9983 100644
--- a/examples/advanced_examples/audio_mixer_tone/README.md
+++ b/examples/advanced_examples/audio_mixer_tone/README.md
@@ -43,7 +43,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -72,7 +72,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/advanced_examples/audio_mixer_tone/README_CN.md b/examples/advanced_examples/audio_mixer_tone/README_CN.md
index bfab5f269..2d5d1204a 100644
--- a/examples/advanced_examples/audio_mixer_tone/README_CN.md
+++ b/examples/advanced_examples/audio_mixer_tone/README_CN.md
@@ -44,7 +44,7 @@
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -73,7 +73,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/advanced_examples/audio_mixer_tone/main/idf_component.yml b/examples/advanced_examples/audio_mixer_tone/main/idf_component.yml
new file mode 100644
index 000000000..387bd9814
--- /dev/null
+++ b/examples/advanced_examples/audio_mixer_tone/main/idf_component.yml
@@ -0,0 +1,9 @@
+dependencies:
+ espressif/esp_hosted:
+ version: "~0.0.9"
+ rules:
+ - if: "target in [esp32p4]"
+ espressif/esp_wifi_remote:
+ version: "~0.3.0"
+ rules:
+ - if: "target in [esp32p4]"
\ No newline at end of file
diff --git a/examples/advanced_examples/audio_mixer_tone/sdkconfig.defaults.esp32p4 b/examples/advanced_examples/audio_mixer_tone/sdkconfig.defaults.esp32p4
new file mode 100644
index 000000000..17c9bf436
--- /dev/null
+++ b/examples/advanced_examples/audio_mixer_tone/sdkconfig.defaults.esp32p4
@@ -0,0 +1,20 @@
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32p4"
+CONFIG_IDF_TARGET_ESP32P4=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_360=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=360
+CONFIG_IDF_EXPERIMENTAL_FEATURES=y
+
+#
+# SPI RAM config
+#
+CONFIG_SPIRAM=y
+CONFIG_SPIRAM_SPEED_200M=y
+CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
+
+#
+# Audio HAL
+#
+CONFIG_ESP32_P4_FUNCTION_EV_BOARD=y
diff --git a/examples/advanced_examples/audio_mixer_tone/sdkconfig.defaults.esp32s3 b/examples/advanced_examples/audio_mixer_tone/sdkconfig.defaults.esp32s3
index f29b60562..97074dcc3 100644
--- a/examples/advanced_examples/audio_mixer_tone/sdkconfig.defaults.esp32s3
+++ b/examples/advanced_examples/audio_mixer_tone/sdkconfig.defaults.esp32s3
@@ -44,7 +44,6 @@ CONFIG_SPIRAM_MEMTEST=y
CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=16384
# CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP is not set
CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=32768
-# CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY is not set
# CONFIG_SPIRAM_ECC_ENABLE is not set
# end of SPI RAM config
# end of ESP PSRAM
diff --git a/examples/advanced_examples/dlna/README.md b/examples/advanced_examples/dlna/README.md
index b5cd9d5c0..e33646367 100755
--- a/examples/advanced_examples/dlna/README.md
+++ b/examples/advanced_examples/dlna/README.md
@@ -21,7 +21,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
## Build and Flash
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -48,7 +48,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/advanced_examples/dlna/README_CN.md b/examples/advanced_examples/dlna/README_CN.md
index 5b31e0101..b434a0168 100644
--- a/examples/advanced_examples/dlna/README_CN.md
+++ b/examples/advanced_examples/dlna/README_CN.md
@@ -22,7 +22,7 @@
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -49,7 +49,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/advanced_examples/downmix_pipeline/README.md b/examples/advanced_examples/downmix_pipeline/README.md
index 542510758..8e7d38390 100644
--- a/examples/advanced_examples/downmix_pipeline/README.md
+++ b/examples/advanced_examples/downmix_pipeline/README.md
@@ -55,7 +55,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
## Example Set Up
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -84,7 +84,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See the Getting Started Guide for full steps to configure and use [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) to build projects.
+See the Getting Started Guide for full steps to configure and use [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) to build projects.
## How to use the Example
diff --git a/examples/advanced_examples/downmix_pipeline/README_CN.md b/examples/advanced_examples/downmix_pipeline/README_CN.md
index 6debb5415..70df5c847 100644
--- a/examples/advanced_examples/downmix_pipeline/README_CN.md
+++ b/examples/advanced_examples/downmix_pipeline/README_CN.md
@@ -57,7 +57,7 @@ mp3 new come input stream ---> resample ---
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -86,7 +86,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/advanced_examples/downmix_pipeline/main/idf_component.yml b/examples/advanced_examples/downmix_pipeline/main/idf_component.yml
new file mode 100644
index 000000000..387bd9814
--- /dev/null
+++ b/examples/advanced_examples/downmix_pipeline/main/idf_component.yml
@@ -0,0 +1,9 @@
+dependencies:
+ espressif/esp_hosted:
+ version: "~0.0.9"
+ rules:
+ - if: "target in [esp32p4]"
+ espressif/esp_wifi_remote:
+ version: "~0.3.0"
+ rules:
+ - if: "target in [esp32p4]"
\ No newline at end of file
diff --git a/examples/advanced_examples/downmix_pipeline/sdkconfig.defaults b/examples/advanced_examples/downmix_pipeline/sdkconfig.defaults
index 51b16e251..933af1bbc 100644
--- a/examples/advanced_examples/downmix_pipeline/sdkconfig.defaults
+++ b/examples/advanced_examples/downmix_pipeline/sdkconfig.defaults
@@ -13,13 +13,11 @@ CONFIG_SPIRAM_MEMTEST=y
CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=16384
CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP=y
CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=32768
-CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY=y
CONFIG_FREERTOS_HZ=1000
CONFIG_FREERTOS_ENABLE_BACKWARD_COMPATIBILITY=y
CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP=y
-
# Increase default app partition size to accommodate downmix pipeline example
# by providing new partition table in "partitions_downmix_example.csv"
CONFIG_PARTITION_TABLE_CUSTOM=y
diff --git a/examples/advanced_examples/downmix_pipeline/sdkconfig.defaults.esp32 b/examples/advanced_examples/downmix_pipeline/sdkconfig.defaults.esp32
index 2baeecec1..6dcb77873 100644
--- a/examples/advanced_examples/downmix_pipeline/sdkconfig.defaults.esp32
+++ b/examples/advanced_examples/downmix_pipeline/sdkconfig.defaults.esp32
@@ -5,6 +5,11 @@ CONFIG_IDF_TARGET_ESP32=y
CONFIG_IDF_FIRMWARE_CHIP_ID=0x0000
CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y
+#
+# SPI RAM config
+#
+CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY=y
+
#
# Audio HAL
#
diff --git a/examples/advanced_examples/downmix_pipeline/sdkconfig.defaults.esp32p4 b/examples/advanced_examples/downmix_pipeline/sdkconfig.defaults.esp32p4
new file mode 100644
index 000000000..17c9bf436
--- /dev/null
+++ b/examples/advanced_examples/downmix_pipeline/sdkconfig.defaults.esp32p4
@@ -0,0 +1,20 @@
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32p4"
+CONFIG_IDF_TARGET_ESP32P4=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_360=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=360
+CONFIG_IDF_EXPERIMENTAL_FEATURES=y
+
+#
+# SPI RAM config
+#
+CONFIG_SPIRAM=y
+CONFIG_SPIRAM_SPEED_200M=y
+CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
+
+#
+# Audio HAL
+#
+CONFIG_ESP32_P4_FUNCTION_EV_BOARD=y
diff --git a/examples/advanced_examples/flexible_pipeline/README.md b/examples/advanced_examples/flexible_pipeline/README.md
index 8e5e5e096..b2c92af71 100755
--- a/examples/advanced_examples/flexible_pipeline/README.md
+++ b/examples/advanced_examples/flexible_pipeline/README.md
@@ -32,7 +32,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -54,7 +54,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/advanced_examples/flexible_pipeline/README_CN.md b/examples/advanced_examples/flexible_pipeline/README_CN.md
index 8c24dbbc9..5ed36a5d8 100644
--- a/examples/advanced_examples/flexible_pipeline/README_CN.md
+++ b/examples/advanced_examples/flexible_pipeline/README_CN.md
@@ -31,7 +31,7 @@
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -53,7 +53,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/advanced_examples/http_play_and_save_to_file/README.md b/examples/advanced_examples/http_play_and_save_to_file/README.md
index e8cd01648..e9f118a2f 100644
--- a/examples/advanced_examples/http_play_and_save_to_file/README.md
+++ b/examples/advanced_examples/http_play_and_save_to_file/README.md
@@ -30,7 +30,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
## Example Set Up
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -61,7 +61,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See the Getting Started Guide for full steps to configure and use [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) to build projects.
+See the Getting Started Guide for full steps to configure and use [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) to build projects.
## How to use the Example
diff --git a/examples/advanced_examples/http_play_and_save_to_file/README_CN.md b/examples/advanced_examples/http_play_and_save_to_file/README_CN.md
index d5c7654d0..04f289d12 100644
--- a/examples/advanced_examples/http_play_and_save_to_file/README_CN.md
+++ b/examples/advanced_examples/http_play_and_save_to_file/README_CN.md
@@ -34,7 +34,7 @@ http_stream_reader ---> mp3_decoder ---> i2s_stream ---> codec chip
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -69,7 +69,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/advanced_examples/multi-room/README.md b/examples/advanced_examples/multi-room/README.md
index d4ddca2b0..d21757756 100644
--- a/examples/advanced_examples/multi-room/README.md
+++ b/examples/advanced_examples/multi-room/README.md
@@ -25,12 +25,12 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Use Special IDF Branch
-- This example needs to select a branch above IDF `release/v4.2` to compile:
+- This example needs to select a branch above IDF `relase/v5.0` to compile:
```c
cd $IDF_PATH
git checkout master
git pull
-git checkout release/v4.2
+git checkout release/v5.0
git submodule update --init --recursive
```
@@ -51,7 +51,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/advanced_examples/multi-room/README_CN.md b/examples/advanced_examples/multi-room/README_CN.md
index fb2a4a98c..827781eda 100644
--- a/examples/advanced_examples/multi-room/README_CN.md
+++ b/examples/advanced_examples/multi-room/README_CN.md
@@ -25,13 +25,13 @@ ESP Multi-Room Music 是一种基于 Wi-Fi 的多扬声器互联共享音乐通
### 使用 IDF 其他分支
-本例程支持 IDF release/v4.2 及以后的分支,例程默认使用 IDF release/v4.4 分支。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 IDF v5.3 分支。
```c
cd $IDF_PATH
git checkout master
git pull
-git checkout release/v4.2
+git checkout release/v5.0
git submodule update --init --recursive
```
@@ -52,7 +52,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/advanced_examples/nvs_dispatcher/README.md b/examples/advanced_examples/nvs_dispatcher/README.md
index bb98a095a..b873f60af 100755
--- a/examples/advanced_examples/nvs_dispatcher/README.md
+++ b/examples/advanced_examples/nvs_dispatcher/README.md
@@ -23,7 +23,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -44,7 +44,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/advanced_examples/nvs_dispatcher/README_CN.md b/examples/advanced_examples/nvs_dispatcher/README_CN.md
index d0eecca62..5efb71c06 100644
--- a/examples/advanced_examples/nvs_dispatcher/README_CN.md
+++ b/examples/advanced_examples/nvs_dispatcher/README_CN.md
@@ -22,7 +22,7 @@ ADF 在外部 PSRAM 中创建和使用了较多堆栈任务,任务运行时候
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -43,7 +43,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/advanced_examples/nvs_dispatcher/main/idf_component.yml b/examples/advanced_examples/nvs_dispatcher/main/idf_component.yml
new file mode 100644
index 000000000..387bd9814
--- /dev/null
+++ b/examples/advanced_examples/nvs_dispatcher/main/idf_component.yml
@@ -0,0 +1,9 @@
+dependencies:
+ espressif/esp_hosted:
+ version: "~0.0.9"
+ rules:
+ - if: "target in [esp32p4]"
+ espressif/esp_wifi_remote:
+ version: "~0.3.0"
+ rules:
+ - if: "target in [esp32p4]"
\ No newline at end of file
diff --git a/examples/advanced_examples/nvs_dispatcher/sdkconfig.defaults.esp32p4 b/examples/advanced_examples/nvs_dispatcher/sdkconfig.defaults.esp32p4
new file mode 100644
index 000000000..17c9bf436
--- /dev/null
+++ b/examples/advanced_examples/nvs_dispatcher/sdkconfig.defaults.esp32p4
@@ -0,0 +1,20 @@
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32p4"
+CONFIG_IDF_TARGET_ESP32P4=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_360=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=360
+CONFIG_IDF_EXPERIMENTAL_FEATURES=y
+
+#
+# SPI RAM config
+#
+CONFIG_SPIRAM=y
+CONFIG_SPIRAM_SPEED_200M=y
+CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
+
+#
+# Audio HAL
+#
+CONFIG_ESP32_P4_FUNCTION_EV_BOARD=y
diff --git a/examples/advanced_examples/wifi_bt_ble_coex/README.md b/examples/advanced_examples/wifi_bt_ble_coex/README.md
index 3d359b0e9..eb63cf40f 100755
--- a/examples/advanced_examples/wifi_bt_ble_coex/README.md
+++ b/examples/advanced_examples/wifi_bt_ble_coex/README.md
@@ -20,11 +20,6 @@ This example runs on the boards that are marked with a green checkbox in the [ta
## Build and Flash
-### Default IDF Branch
-
-This example involves the coexistence of Wi-Fi, A2DP, HFP, and Bluetooth LE, so the IDF branch that optimizes coexistence is used - [audio/stack_on_psram_v3.3](https://github.com/espressif/esp-idf/tree/audio/stack_on_psram_v3.3).
-
-
### Configuration
The default board for this example is `ESP32-Lyrat V4.3`, if you need to run this example on other development boards, select the board in menuconfig, such as `ESP32-Lyrat-Mini V1.1`.
@@ -44,7 +39,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/advanced_examples/wifi_bt_ble_coex/README_CN.md b/examples/advanced_examples/wifi_bt_ble_coex/README_CN.md
index 8449d7768..be0459b07 100644
--- a/examples/advanced_examples/wifi_bt_ble_coex/README_CN.md
+++ b/examples/advanced_examples/wifi_bt_ble_coex/README_CN.md
@@ -20,11 +20,6 @@
## 编译和下载
-### IDF 默认分支
-
-本例程涉及 Wi-Fi、A2DP、HFP、Bluetooth LE 共存,所以使用的是优化共存的 IDF 分支:[audio/stack_on_psram_v3.3](https://github.com/espressif/esp-idf/tree/audio/stack_on_psram_v3.3)。
-
-
### 配置
本例程默认选择的开发板是 `ESP32-Lyrat V4.3`,如果需要在其他的开发板上运行此例程,则需要在 menuconfig 中选择开发板的配置,例如选择 `ESP32-Lyrat-Mini V1.1`。
@@ -44,7 +39,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/audio_processing/pipeline_alc/README.md b/examples/audio_processing/pipeline_alc/README.md
index 5a02f2a8d..b8c26fccb 100755
--- a/examples/audio_processing/pipeline_alc/README.md
+++ b/examples/audio_processing/pipeline_alc/README.md
@@ -35,7 +35,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -64,7 +64,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/audio_processing/pipeline_alc/README_CN.md b/examples/audio_processing/pipeline_alc/README_CN.md
index 71fad6fb2..57d43a55c 100644
--- a/examples/audio_processing/pipeline_alc/README_CN.md
+++ b/examples/audio_processing/pipeline_alc/README_CN.md
@@ -34,7 +34,7 @@ ADF 当前提供了以下两种方法实现 ALC 设置音量。
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -63,7 +63,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/audio_processing/pipeline_alc/main/idf_component.yml b/examples/audio_processing/pipeline_alc/main/idf_component.yml
new file mode 100644
index 000000000..387bd9814
--- /dev/null
+++ b/examples/audio_processing/pipeline_alc/main/idf_component.yml
@@ -0,0 +1,9 @@
+dependencies:
+ espressif/esp_hosted:
+ version: "~0.0.9"
+ rules:
+ - if: "target in [esp32p4]"
+ espressif/esp_wifi_remote:
+ version: "~0.3.0"
+ rules:
+ - if: "target in [esp32p4]"
\ No newline at end of file
diff --git a/examples/audio_processing/pipeline_alc/sdkconfig.defaults.esp32p4 b/examples/audio_processing/pipeline_alc/sdkconfig.defaults.esp32p4
new file mode 100644
index 000000000..17c9bf436
--- /dev/null
+++ b/examples/audio_processing/pipeline_alc/sdkconfig.defaults.esp32p4
@@ -0,0 +1,20 @@
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32p4"
+CONFIG_IDF_TARGET_ESP32P4=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_360=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=360
+CONFIG_IDF_EXPERIMENTAL_FEATURES=y
+
+#
+# SPI RAM config
+#
+CONFIG_SPIRAM=y
+CONFIG_SPIRAM_SPEED_200M=y
+CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
+
+#
+# Audio HAL
+#
+CONFIG_ESP32_P4_FUNCTION_EV_BOARD=y
diff --git a/examples/audio_processing/pipeline_audio_forge/README.md b/examples/audio_processing/pipeline_audio_forge/README.md
index 1daf85f8c..84c8a8a7e 100755
--- a/examples/audio_processing/pipeline_audio_forge/README.md
+++ b/examples/audio_processing/pipeline_audio_forge/README.md
@@ -42,7 +42,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -69,7 +69,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/audio_processing/pipeline_audio_forge/README_CN.md b/examples/audio_processing/pipeline_audio_forge/README_CN.md
index 54af05d73..aac761e12 100644
--- a/examples/audio_processing/pipeline_audio_forge/README_CN.md
+++ b/examples/audio_processing/pipeline_audio_forge/README_CN.md
@@ -42,7 +42,7 @@
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -69,7 +69,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/audio_processing/pipeline_equalizer/README.md b/examples/audio_processing/pipeline_equalizer/README.md
index 207448a5c..9c74f7663 100755
--- a/examples/audio_processing/pipeline_equalizer/README.md
+++ b/examples/audio_processing/pipeline_equalizer/README.md
@@ -28,7 +28,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -58,7 +58,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/audio_processing/pipeline_equalizer/README_CN.md b/examples/audio_processing/pipeline_equalizer/README_CN.md
index 34e037952..df5fab5d2 100644
--- a/examples/audio_processing/pipeline_equalizer/README_CN.md
+++ b/examples/audio_processing/pipeline_equalizer/README_CN.md
@@ -28,7 +28,7 @@ sdcard ---> fatfs_stream ---> wav_decoder ---> equalizer ---> i2s_stream ---> co
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -58,7 +58,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/audio_processing/pipeline_equalizer/main/idf_component.yml b/examples/audio_processing/pipeline_equalizer/main/idf_component.yml
new file mode 100644
index 000000000..387bd9814
--- /dev/null
+++ b/examples/audio_processing/pipeline_equalizer/main/idf_component.yml
@@ -0,0 +1,9 @@
+dependencies:
+ espressif/esp_hosted:
+ version: "~0.0.9"
+ rules:
+ - if: "target in [esp32p4]"
+ espressif/esp_wifi_remote:
+ version: "~0.3.0"
+ rules:
+ - if: "target in [esp32p4]"
\ No newline at end of file
diff --git a/examples/audio_processing/pipeline_equalizer/sdkconfig.defaults.esp32p4 b/examples/audio_processing/pipeline_equalizer/sdkconfig.defaults.esp32p4
new file mode 100644
index 000000000..17c9bf436
--- /dev/null
+++ b/examples/audio_processing/pipeline_equalizer/sdkconfig.defaults.esp32p4
@@ -0,0 +1,20 @@
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32p4"
+CONFIG_IDF_TARGET_ESP32P4=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_360=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=360
+CONFIG_IDF_EXPERIMENTAL_FEATURES=y
+
+#
+# SPI RAM config
+#
+CONFIG_SPIRAM=y
+CONFIG_SPIRAM_SPEED_200M=y
+CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
+
+#
+# Audio HAL
+#
+CONFIG_ESP32_P4_FUNCTION_EV_BOARD=y
diff --git a/examples/audio_processing/pipeline_passthru/README.md b/examples/audio_processing/pipeline_passthru/README.md
index ca1a580a4..0568b6e87 100755
--- a/examples/audio_processing/pipeline_passthru/README.md
+++ b/examples/audio_processing/pipeline_passthru/README.md
@@ -34,7 +34,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -52,7 +52,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/audio_processing/pipeline_passthru/README_CN.md b/examples/audio_processing/pipeline_passthru/README_CN.md
index f06a72312..cfc534c2e 100644
--- a/examples/audio_processing/pipeline_passthru/README_CN.md
+++ b/examples/audio_processing/pipeline_passthru/README_CN.md
@@ -34,7 +34,7 @@
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -52,7 +52,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/audio_processing/pipeline_passthru/main/idf_component.yml b/examples/audio_processing/pipeline_passthru/main/idf_component.yml
new file mode 100644
index 000000000..387bd9814
--- /dev/null
+++ b/examples/audio_processing/pipeline_passthru/main/idf_component.yml
@@ -0,0 +1,9 @@
+dependencies:
+ espressif/esp_hosted:
+ version: "~0.0.9"
+ rules:
+ - if: "target in [esp32p4]"
+ espressif/esp_wifi_remote:
+ version: "~0.3.0"
+ rules:
+ - if: "target in [esp32p4]"
\ No newline at end of file
diff --git a/examples/audio_processing/pipeline_passthru/main/passthru.c b/examples/audio_processing/pipeline_passthru/main/passthru.c
index c4d69224e..6815c74f2 100755
--- a/examples/audio_processing/pipeline_passthru/main/passthru.c
+++ b/examples/audio_processing/pipeline_passthru/main/passthru.c
@@ -28,12 +28,7 @@ void app_main(void)
ESP_LOGI(TAG, "[ 1 ] Start codec chip");
audio_board_handle_t board_handle = audio_board_init();
-#ifdef CONFIG_ESP32_S2_KALUGA_1_V1_2_BOARD
audio_hal_ctrl_codec(board_handle->audio_hal, AUDIO_HAL_CODEC_MODE_BOTH, AUDIO_HAL_CTRL_START);
-#else
- audio_hal_ctrl_codec(board_handle->audio_hal, AUDIO_HAL_CODEC_MODE_LINE_IN, AUDIO_HAL_CTRL_START);
-#endif
-
ESP_LOGI(TAG, "[ 2 ] Create audio pipeline for playback");
audio_pipeline_cfg_t pipeline_cfg = DEFAULT_AUDIO_PIPELINE_CONFIG();
diff --git a/examples/audio_processing/pipeline_passthru/sdkconfig.defaults.esp32p4 b/examples/audio_processing/pipeline_passthru/sdkconfig.defaults.esp32p4
new file mode 100644
index 000000000..17c9bf436
--- /dev/null
+++ b/examples/audio_processing/pipeline_passthru/sdkconfig.defaults.esp32p4
@@ -0,0 +1,20 @@
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32p4"
+CONFIG_IDF_TARGET_ESP32P4=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_360=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=360
+CONFIG_IDF_EXPERIMENTAL_FEATURES=y
+
+#
+# SPI RAM config
+#
+CONFIG_SPIRAM=y
+CONFIG_SPIRAM_SPEED_200M=y
+CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
+
+#
+# Audio HAL
+#
+CONFIG_ESP32_P4_FUNCTION_EV_BOARD=y
diff --git a/examples/audio_processing/pipeline_resample/README.md b/examples/audio_processing/pipeline_resample/README.md
index c059fd1e0..d8aa929a4 100755
--- a/examples/audio_processing/pipeline_resample/README.md
+++ b/examples/audio_processing/pipeline_resample/README.md
@@ -49,7 +49,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -78,7 +78,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/audio_processing/pipeline_resample/README_CN.md b/examples/audio_processing/pipeline_resample/README_CN.md
index 024d69376..7c97d1aed 100644
--- a/examples/audio_processing/pipeline_resample/README_CN.md
+++ b/examples/audio_processing/pipeline_resample/README_CN.md
@@ -50,7 +50,7 @@
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -79,7 +79,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/audio_processing/pipeline_sonic/README.md b/examples/audio_processing/pipeline_sonic/README.md
index d4bfd3cd8..f05104fe6 100755
--- a/examples/audio_processing/pipeline_sonic/README.md
+++ b/examples/audio_processing/pipeline_sonic/README.md
@@ -38,7 +38,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
## Build and Flash
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -66,7 +66,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/audio_processing/pipeline_sonic/README_CN.md b/examples/audio_processing/pipeline_sonic/README_CN.md
index e9f22e090..b84bc4de0 100644
--- a/examples/audio_processing/pipeline_sonic/README_CN.md
+++ b/examples/audio_processing/pipeline_sonic/README_CN.md
@@ -39,7 +39,7 @@
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -67,7 +67,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/audio_processing/pipeline_spiffs_amr_resample/README.md b/examples/audio_processing/pipeline_spiffs_amr_resample/README.md
index c1484a5ef..070d5a4c8 100755
--- a/examples/audio_processing/pipeline_spiffs_amr_resample/README.md
+++ b/examples/audio_processing/pipeline_spiffs_amr_resample/README.md
@@ -45,7 +45,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -64,7 +64,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/audio_processing/pipeline_spiffs_amr_resample/README_CN.md b/examples/audio_processing/pipeline_spiffs_amr_resample/README_CN.md
index 61fc995d9..37bb403f0 100644
--- a/examples/audio_processing/pipeline_spiffs_amr_resample/README_CN.md
+++ b/examples/audio_processing/pipeline_spiffs_amr_resample/README_CN.md
@@ -46,7 +46,7 @@
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -65,7 +65,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/checks/check_board_buttons/README.md b/examples/checks/check_board_buttons/README.md
index f7d93031a..183d2e788 100644
--- a/examples/checks/check_board_buttons/README.md
+++ b/examples/checks/check_board_buttons/README.md
@@ -24,7 +24,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -46,7 +46,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/checks/check_board_buttons/README_CN.md b/examples/checks/check_board_buttons/README_CN.md
index 4ea276744..10f4064d1 100644
--- a/examples/checks/check_board_buttons/README_CN.md
+++ b/examples/checks/check_board_buttons/README_CN.md
@@ -24,7 +24,7 @@ ADF 定义了音频开发板常用的 [6 种功能按键](https://github.com/esp
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -46,7 +46,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/checks/check_display_led/README.md b/examples/checks/check_display_led/README.md
index 563eab25c..435ea2cb7 100644
--- a/examples/checks/check_display_led/README.md
+++ b/examples/checks/check_display_led/README.md
@@ -23,7 +23,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -44,7 +44,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/checks/check_display_led/README_CN.md b/examples/checks/check_display_led/README_CN.md
index 2ea4cdf17..f1d4d2599 100644
--- a/examples/checks/check_display_led/README_CN.md
+++ b/examples/checks/check_display_led/README_CN.md
@@ -21,7 +21,7 @@ ADF 从功能角度为定义了一系列常见的 [显示模式](https://github.
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -41,7 +41,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/cli/README.md b/examples/cli/README.md
index 61f93d435..3d843a6b4 100755
--- a/examples/cli/README.md
+++ b/examples/cli/README.md
@@ -54,7 +54,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -83,7 +83,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/cli/README_CN.md b/examples/cli/README_CN.md
index 4f536898b..1fbac127f 100644
--- a/examples/cli/README_CN.md
+++ b/examples/cli/README_CN.md
@@ -54,7 +54,7 @@
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -83,7 +83,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/cli/main/idf_component.yml b/examples/cli/main/idf_component.yml
new file mode 100644
index 000000000..387bd9814
--- /dev/null
+++ b/examples/cli/main/idf_component.yml
@@ -0,0 +1,9 @@
+dependencies:
+ espressif/esp_hosted:
+ version: "~0.0.9"
+ rules:
+ - if: "target in [esp32p4]"
+ espressif/esp_wifi_remote:
+ version: "~0.3.0"
+ rules:
+ - if: "target in [esp32p4]"
\ No newline at end of file
diff --git a/examples/cli/sdkconfig.defaults.esp32p4 b/examples/cli/sdkconfig.defaults.esp32p4
new file mode 100644
index 000000000..17c9bf436
--- /dev/null
+++ b/examples/cli/sdkconfig.defaults.esp32p4
@@ -0,0 +1,20 @@
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32p4"
+CONFIG_IDF_TARGET_ESP32P4=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_360=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=360
+CONFIG_IDF_EXPERIMENTAL_FEATURES=y
+
+#
+# SPI RAM config
+#
+CONFIG_SPIRAM=y
+CONFIG_SPIRAM_SPEED_200M=y
+CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
+
+#
+# Audio HAL
+#
+CONFIG_ESP32_P4_FUNCTION_EV_BOARD=y
diff --git a/examples/cloud_services/google_translate_device/main/idf_component.yml b/examples/cloud_services/google_translate_device/main/idf_component.yml
new file mode 100644
index 000000000..387bd9814
--- /dev/null
+++ b/examples/cloud_services/google_translate_device/main/idf_component.yml
@@ -0,0 +1,9 @@
+dependencies:
+ espressif/esp_hosted:
+ version: "~0.0.9"
+ rules:
+ - if: "target in [esp32p4]"
+ espressif/esp_wifi_remote:
+ version: "~0.3.0"
+ rules:
+ - if: "target in [esp32p4]"
\ No newline at end of file
diff --git a/examples/cloud_services/google_translate_device/sdkconfig.defaults.esp32p4 b/examples/cloud_services/google_translate_device/sdkconfig.defaults.esp32p4
new file mode 100644
index 000000000..17c9bf436
--- /dev/null
+++ b/examples/cloud_services/google_translate_device/sdkconfig.defaults.esp32p4
@@ -0,0 +1,20 @@
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32p4"
+CONFIG_IDF_TARGET_ESP32P4=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_360=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=360
+CONFIG_IDF_EXPERIMENTAL_FEATURES=y
+
+#
+# SPI RAM config
+#
+CONFIG_SPIRAM=y
+CONFIG_SPIRAM_SPEED_200M=y
+CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
+
+#
+# Audio HAL
+#
+CONFIG_ESP32_P4_FUNCTION_EV_BOARD=y
diff --git a/examples/cloud_services/pipeline_aws_polly_mp3/README.md b/examples/cloud_services/pipeline_aws_polly_mp3/README.md
index c0cef96d6..1e4af233b 100755
--- a/examples/cloud_services/pipeline_aws_polly_mp3/README.md
+++ b/examples/cloud_services/pipeline_aws_polly_mp3/README.md
@@ -26,7 +26,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -59,7 +59,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/cloud_services/pipeline_aws_polly_mp3/README_CN.md b/examples/cloud_services/pipeline_aws_polly_mp3/README_CN.md
index 11526f274..34398545a 100644
--- a/examples/cloud_services/pipeline_aws_polly_mp3/README_CN.md
+++ b/examples/cloud_services/pipeline_aws_polly_mp3/README_CN.md
@@ -26,7 +26,7 @@
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -59,7 +59,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/cloud_services/pipeline_aws_polly_mp3/main/idf_component.yml b/examples/cloud_services/pipeline_aws_polly_mp3/main/idf_component.yml
new file mode 100644
index 000000000..387bd9814
--- /dev/null
+++ b/examples/cloud_services/pipeline_aws_polly_mp3/main/idf_component.yml
@@ -0,0 +1,9 @@
+dependencies:
+ espressif/esp_hosted:
+ version: "~0.0.9"
+ rules:
+ - if: "target in [esp32p4]"
+ espressif/esp_wifi_remote:
+ version: "~0.3.0"
+ rules:
+ - if: "target in [esp32p4]"
\ No newline at end of file
diff --git a/examples/cloud_services/pipeline_aws_polly_mp3/sdkconfig.defaults.esp32p4 b/examples/cloud_services/pipeline_aws_polly_mp3/sdkconfig.defaults.esp32p4
new file mode 100644
index 000000000..17c9bf436
--- /dev/null
+++ b/examples/cloud_services/pipeline_aws_polly_mp3/sdkconfig.defaults.esp32p4
@@ -0,0 +1,20 @@
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32p4"
+CONFIG_IDF_TARGET_ESP32P4=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_360=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=360
+CONFIG_IDF_EXPERIMENTAL_FEATURES=y
+
+#
+# SPI RAM config
+#
+CONFIG_SPIRAM=y
+CONFIG_SPIRAM_SPEED_200M=y
+CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
+
+#
+# Audio HAL
+#
+CONFIG_ESP32_P4_FUNCTION_EV_BOARD=y
diff --git a/examples/cloud_services/pipeline_baidu_speech_mp3/README.md b/examples/cloud_services/pipeline_baidu_speech_mp3/README.md
index c0d07ad5e..ed379c9ab 100755
--- a/examples/cloud_services/pipeline_baidu_speech_mp3/README.md
+++ b/examples/cloud_services/pipeline_baidu_speech_mp3/README.md
@@ -26,7 +26,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -61,7 +61,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/cloud_services/pipeline_baidu_speech_mp3/README_CN.md b/examples/cloud_services/pipeline_baidu_speech_mp3/README_CN.md
index 8915871ee..9a663c05a 100644
--- a/examples/cloud_services/pipeline_baidu_speech_mp3/README_CN.md
+++ b/examples/cloud_services/pipeline_baidu_speech_mp3/README_CN.md
@@ -26,7 +26,7 @@
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -61,7 +61,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/cloud_services/pipeline_baidu_speech_mp3/main/idf_component.yml b/examples/cloud_services/pipeline_baidu_speech_mp3/main/idf_component.yml
new file mode 100644
index 000000000..387bd9814
--- /dev/null
+++ b/examples/cloud_services/pipeline_baidu_speech_mp3/main/idf_component.yml
@@ -0,0 +1,9 @@
+dependencies:
+ espressif/esp_hosted:
+ version: "~0.0.9"
+ rules:
+ - if: "target in [esp32p4]"
+ espressif/esp_wifi_remote:
+ version: "~0.3.0"
+ rules:
+ - if: "target in [esp32p4]"
\ No newline at end of file
diff --git a/examples/cloud_services/pipeline_baidu_speech_mp3/sdkconfig.defaults.esp32p4 b/examples/cloud_services/pipeline_baidu_speech_mp3/sdkconfig.defaults.esp32p4
new file mode 100644
index 000000000..17c9bf436
--- /dev/null
+++ b/examples/cloud_services/pipeline_baidu_speech_mp3/sdkconfig.defaults.esp32p4
@@ -0,0 +1,20 @@
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32p4"
+CONFIG_IDF_TARGET_ESP32P4=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_360=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=360
+CONFIG_IDF_EXPERIMENTAL_FEATURES=y
+
+#
+# SPI RAM config
+#
+CONFIG_SPIRAM=y
+CONFIG_SPIRAM_SPEED_200M=y
+CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
+
+#
+# Audio HAL
+#
+CONFIG_ESP32_P4_FUNCTION_EV_BOARD=y
diff --git a/examples/dueros/README.md b/examples/dueros/README.md
index 3eeb71b3b..0c3f8b0c8 100755
--- a/examples/dueros/README.md
+++ b/examples/dueros/README.md
@@ -88,7 +88,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/dueros/README_CN.md b/examples/dueros/README_CN.md
index 298ed1743..41fd9bfef 100644
--- a/examples/dueros/README_CN.md
+++ b/examples/dueros/README_CN.md
@@ -89,7 +89,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/dueros/main/CMakeLists.txt b/examples/dueros/main/CMakeLists.txt
index 801516ab2..0858441a8 100644
--- a/examples/dueros/main/CMakeLists.txt
+++ b/examples/dueros/main/CMakeLists.txt
@@ -1,4 +1,6 @@
set(COMPONENT_SRCS "duer_audio_wrapper.c" "dueros_app.c" "app_main.c")
set(COMPONENT_ADD_INCLUDEDIRS .)
-register_component()
\ No newline at end of file
+register_component()
+
+spiffs_create_partition_image(spiffs_data ../spiffs FLASH_IN_PROJECT)
\ No newline at end of file
diff --git a/examples/dueros/main/duer_audio_wrapper.c b/examples/dueros/main/duer_audio_wrapper.c
index a0588afe5..ac26f943e 100755
--- a/examples/dueros/main/duer_audio_wrapper.c
+++ b/examples/dueros/main/duer_audio_wrapper.c
@@ -47,6 +47,7 @@
#include "fatfs_stream.h"
#include "raw_stream.h"
#include "i2s_stream.h"
+#include "spiffs_stream.h"
#include "wav_decoder.h"
#include "wav_encoder.h"
#include "mp3_decoder.h"
@@ -155,8 +156,12 @@ void *duer_audio_setup_player(void)
// Create readers and add to esp_audio
fatfs_stream_cfg_t fs_reader = FATFS_STREAM_CFG_DEFAULT();
fs_reader.type = AUDIO_STREAM_READER;
-
esp_audio_input_stream_add(player, fatfs_stream_init(&fs_reader));
+
+ spiffs_stream_cfg_t spiffs_cfg = SPIFFS_STREAM_CFG_DEFAULT();
+ spiffs_cfg.type = AUDIO_STREAM_READER;
+ esp_audio_input_stream_add(player, spiffs_stream_init(&spiffs_cfg));
+
http_stream_cfg_t http_cfg = HTTP_STREAM_CFG_DEFAULT();
http_cfg.event_handle = _http_stream_event_handle;
http_cfg.type = AUDIO_STREAM_READER;
@@ -234,7 +239,7 @@ void *duer_audio_start_recorder(rec_event_cb_t cb)
rsp_cfg.src_rate = 48000;
rsp_cfg.dest_rate = 16000;
rsp_cfg.task_core = 1;
-#ifdef CONFIG_ESP32_S3_KORVO2_V3_BOARD
+#if defined CONFIG_ESP32_S3_KORVO2_V3_BOARD || defined CONFIG_ESP32_S3_BOX_3_BOARD
rsp_cfg.mode = RESAMPLE_UNCROSS_MODE;
rsp_cfg.src_ch = 4;
rsp_cfg.dest_ch = 4;
@@ -255,6 +260,14 @@ void *duer_audio_start_recorder(rec_event_cb_t cb)
recorder_sr_cfg.multinet_init = false;
recorder_sr_cfg.afe_cfg.memory_alloc_mode = AFE_MEMORY_ALLOC_MORE_PSRAM;
recorder_sr_cfg.afe_cfg.agc_mode = AFE_MN_PEAK_NO_AGC;
+#ifdef CONFIG_ESP32_P4_FUNCTION_EV_BOARD
+ recorder_sr_cfg.afe_cfg.pcm_config.mic_num = 1;
+ recorder_sr_cfg.afe_cfg.pcm_config.ref_num = 1;
+ recorder_sr_cfg.afe_cfg.pcm_config.total_ch_num = 2;
+ recorder_sr_cfg.afe_cfg.wakenet_mode = DET_MODE_90;
+ recorder_sr_cfg.input_order[0] = DAT_CH_0;
+ recorder_sr_cfg.input_order[1] = DAT_CH_1;
+#endif // CONFIG_ESP32_P4_FUNCTION_EV_BOARD
audio_rec_cfg_t cfg = AUDIO_RECORDER_DEFAULT_CFG();
cfg.read = (recorder_data_read_t)&input_cb_for_afe;
diff --git a/examples/dueros/main/dueros_app.c b/examples/dueros/main/dueros_app.c
index a3f1422d6..78b29bc74 100644
--- a/examples/dueros/main/dueros_app.c
+++ b/examples/dueros/main/dueros_app.c
@@ -60,6 +60,7 @@
#include "airkiss_config.h"
#include "smart_config.h"
#include "periph_adc_button.h"
+#include "periph_spiffs.h"
#include "algorithm_stream.h"
#include "duer_wifi_cfg.h"
#include "duer_profile.h"
@@ -90,6 +91,7 @@ static display_service_handle_t disp_serv = NULL;
static periph_service_handle_t wifi_serv = NULL;
static bool wifi_setting_flag = false;
static EventGroupHandle_t duer_evt = NULL;
+static esp_dispatcher_handle_t esp_dispatcher = NULL;
#ifdef CONFIG_DUER_WIFI_CONFIG
static esp_err_t wifi_cfg_start();
@@ -98,6 +100,12 @@ static void wifi_cfg_stop();
extern int duer_dcs_audio_sync_play_tone(const char *uri);
+static esp_err_t dispatcher_audio_play(void *instance, action_arg_t *arg, action_result_t *result)
+{
+ duer_dcs_audio_sync_play_tone((char *)arg->data);
+ return ESP_OK;
+};
+
static void voice_read_task(void *args)
{
const int buf_len = 2 * 1024;
@@ -134,7 +142,11 @@ static esp_err_t rec_engine_cb(audio_rec_evt_t *event, void *user_data)
}
display_service_set_pattern(disp_serv, DISPLAY_PATTERN_TURN_ON, 0);
ESP_LOGI(TAG, "rec_engine_cb - Play tone");
- duer_dcs_audio_sync_play_tone("file://sdcard/dingding.wav");
+ action_arg_t action_arg = {0};
+ action_arg.data = (void *)"spiffs://spiffs/dingding.wav";
+
+ action_result_t result = { 0 };
+ esp_dispatcher_execute_with_func(esp_dispatcher, dispatcher_audio_play, NULL, &action_arg, &result);
} else if (AUDIO_REC_VAD_START == event->type) {
ESP_LOGI(TAG, "rec_engine_cb - AUDIO_REC_VAD_START");
audio_service_start(duer_serv_handle);
@@ -350,6 +362,7 @@ static esp_err_t duer_callback(audio_service_handle_t handle, service_event_t *e
esp_err_t periph_callback(audio_event_iface_msg_t *event, void *context)
{
+#if FUNC_BUTTON_EN
ESP_LOGD(TAG, "Periph Event received: src_type:%x, source:%p cmd:%d, data:%p, data_len:%d",
event->source_type, event->source, event->cmd, event->data, event->data_len);
switch (event->source_type) {
@@ -470,6 +483,7 @@ esp_err_t periph_callback(audio_event_iface_msg_t *event, void *context)
default:
break;
}
+#endif // FUNC_BUTTON_EN
return ESP_OK;
}
@@ -493,14 +507,26 @@ void start_sys_monitor(void)
esp_err_t duer_init_hal(void *instance, action_arg_t *arg, action_result_t *result)
{
esp_periph_config_t periph_cfg = DEFAULT_ESP_PERIPH_SET_CONFIG();
- periph_cfg.extern_stack = true;
esp_periph_set_handle_t set = esp_periph_set_init(&periph_cfg);
if (set != NULL) {
esp_periph_set_register_callback(set, periph_callback, NULL);
}
audio_board_init();
audio_board_key_init(set);
- audio_board_sdcard_init(set, SD_MODE_1_LINE);
+ // Initialize Spiffs peripheral
+ periph_spiffs_cfg_t spiffs_cfg = {
+ .root = "/spiffs",
+ .partition_label = "spiffs_data",
+ .max_files = 5,
+ .format_if_mount_failed = true
+ };
+ esp_periph_handle_t spiffs_handle = periph_spiffs_init(&spiffs_cfg);
+ esp_periph_start(set, spiffs_handle);
+
+ // Wait until spiffs is mounted
+ while (!periph_spiffs_is_mounted(spiffs_handle)) {
+ vTaskDelay(500 / portTICK_PERIOD_MS);
+ }
#ifdef FUNC_SYS_LEN_EN
disp_serv = audio_board_led_init();
#endif
@@ -520,9 +546,9 @@ void duer_app_init(void)
ret = nvs_flash_init();
}
ESP_ERROR_CHECK( ret );
- esp_dispatcher_handle_t dispatcher = esp_dispatcher_get_delegate_handle();
+ esp_dispatcher = esp_dispatcher_get_delegate_handle();
action_result_t result = { 0 };
- esp_dispatcher_execute_with_func(dispatcher, duer_init_hal, NULL, NULL, &result);
+ esp_dispatcher_execute_with_func(esp_dispatcher, duer_init_hal, NULL, NULL, &result);
xTimerHandle retry_login_timer = xTimerCreate("tm_duer_login", 1000 / portTICK_PERIOD_MS,
pdFALSE, NULL, retry_login_timer_cb);
diff --git a/examples/dueros/main/idf_component.yml b/examples/dueros/main/idf_component.yml
new file mode 100644
index 000000000..387bd9814
--- /dev/null
+++ b/examples/dueros/main/idf_component.yml
@@ -0,0 +1,9 @@
+dependencies:
+ espressif/esp_hosted:
+ version: "~0.0.9"
+ rules:
+ - if: "target in [esp32p4]"
+ espressif/esp_wifi_remote:
+ version: "~0.3.0"
+ rules:
+ - if: "target in [esp32p4]"
\ No newline at end of file
diff --git a/examples/dueros/partitions_dueros_example_esp32s3.csv b/examples/dueros/partitions.csv
similarity index 78%
rename from examples/dueros/partitions_dueros_example_esp32s3.csv
rename to examples/dueros/partitions.csv
index fa65ca0b8..e15583792 100644
--- a/examples/dueros/partitions_dueros_example_esp32s3.csv
+++ b/examples/dueros/partitions.csv
@@ -3,4 +3,5 @@
nvs, data, nvs, 0x9000, 0x6000,
phy_init, data, phy, 0xf000, 0x1000,
factory, app, factory, 0x10000, 0x310000,
-model, data, spiffs, , 4152K,
\ No newline at end of file
+model, data, spiffs, , 4152K,
+spiffs_data, data, spiffs, , 64k,
\ No newline at end of file
diff --git a/examples/dueros/partitions_dueros_example.csv b/examples/dueros/partitions_dueros_example.csv
index 4d783dabf..a5b2848e9 100644
--- a/examples/dueros/partitions_dueros_example.csv
+++ b/examples/dueros/partitions_dueros_example.csv
@@ -2,4 +2,5 @@
# Note: if you change the phy_init or app partition offset, make sure to change the offset in Kconfig.projbuild
nvs, data, nvs, 0x9000, 0x6000,
phy_init, data, phy, 0xf000, 0x1000,
-factory, app, factory, 0x10000, 0x310000,
\ No newline at end of file
+factory, app, factory, 0x10000, 0x310000,
+spiffs_data, data, spiffs, , 64k,
\ No newline at end of file
diff --git a/examples/dueros/sdkconfig.defaults.esp32p4 b/examples/dueros/sdkconfig.defaults.esp32p4
index 74867d761..992739379 100644
--- a/examples/dueros/sdkconfig.defaults.esp32p4
+++ b/examples/dueros/sdkconfig.defaults.esp32p4
@@ -1,3 +1,100 @@
+
+#
+# Partition Table
+#
+# CONFIG_PARTITION_TABLE_SINGLE_APP is not set
+# CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE is not set
+# CONFIG_PARTITION_TABLE_TWO_OTA is not set
+CONFIG_PARTITION_TABLE_CUSTOM=y
+CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv"
+CONFIG_PARTITION_TABLE_FILENAME="partitions.csv"
+CONFIG_PARTITION_TABLE_MD5=y
+# end of Partition Table
+
+
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32p4"
+CONFIG_IDF_TARGET_ESP32P4=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_360=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=360
+CONFIG_IDF_EXPERIMENTAL_FEATURES=y
+
+#
+# SPI RAM config
+#
+CONFIG_SPIRAM=y
+CONFIG_SPIRAM_SPEED_200M=y
+CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
+
+
+#
+# Serial flasher config
+#
+CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y
+CONFIG_ESPTOOLPY_FLASHSIZE="8MB"
+# end of Serial flasher config
+
+#
+# Audio HAL
+#
+CONFIG_ESP32_P4_FUNCTION_EV_BOARD=y
+
+#
+# mbedTLS
+#
+CONFIG_MBEDTLS_EXTERNAL_MEM_ALLOC=y
CONFIG_MBEDTLS_ECP_RESTARTABLE=y
-CONFIG_FREERTOS_ENABLE_BACKWARD_COMPATIBILITY=y
\ No newline at end of file
+#
+# ESP-TLS
+#
+CONFIG_ESP_TLS_USING_MBEDTLS=y
+CONFIG_ESP_TLS_INSECURE=y
+CONFIG_ESP_TLS_SKIP_SERVER_CERT_VERIFY=y
+
+#
+# DSP Library
+#
+CONFIG_DSP_ANSI=y
+CONFIG_DSP_OPTIMIZATION=0
+# CONFIG_DSP_MAX_FFT_SIZE_512 is not set
+# CONFIG_DSP_MAX_FFT_SIZE_1024 is not set
+# CONFIG_DSP_MAX_FFT_SIZE_2048 is not set
+CONFIG_DSP_MAX_FFT_SIZE_4096=y
+# CONFIG_DSP_MAX_FFT_SIZE_8192 is not set
+# CONFIG_DSP_MAX_FFT_SIZE_16384 is not set
+# CONFIG_DSP_MAX_FFT_SIZE_32768 is not set
+CONFIG_DSP_MAX_FFT_SIZE=4096
+# end of DSP Library
+# end of Component config
+
+#
+# ESP Speech Recognition
+#
+CONFIG_MODEL_IN_FLASH=y
+# CONFIG_MODEL_IN_SDCARD is not set
+CONFIG_USE_AFE=y
+CONFIG_AFE_INTERFACE_V1=y
+CONFIG_USE_WAKENET=y
+# CONFIG_SR_WN_WN8_ALEXA is not set
+CONFIG_SR_WN_WN9_HILEXIN=y
+# CONFIG_SR_WN_WN9_XIAOAITONGXUE is not set
+# CONFIG_SR_WN_WN9_ALEXA is not set
+# CONFIG_SR_WN_WN9_HIESP is not set
+# CONFIG_SR_WN_WN9_NIHAOXIAOZHI is not set
+# CONFIG_SR_WN_WN9_CUSTOMWORD is not set
+# CONFIG_SR_WN_LOAD_MULIT_WORD is not set
+# CONFIG_SR_MN_CN_NONE is not set
+# CONFIG_SR_MN_CN_MULTINET5_RECOGNITION_QUANT8 is not set
+# CONFIG_SR_MN_CN_MULTINET6_QUANT
+CONFIG_SR_MN_CN_MULTINET7_QUANT=y
+# CONFIG_SR_MN_CN_MULTINET6_AC_QUANT is not set
+CONFIG_SR_MN_EN_NONE=y
+# CONFIG_SR_MN_EN_MULTINET5_SINGLE_RECOGNITION_QUANT8 is not set
+# CONFIG_SR_MN_EN_MULTINET6_QUANT is not set
+# CONFIG_SR_MN_EN_MULTINET7_QUANT is not set
+# end of ESP Speech Recognition
+
+CONFIG_MBEDTLS_ECP_RESTARTABLE=y
\ No newline at end of file
diff --git a/examples/dueros/sdkconfig.defaults.esp32s3 b/examples/dueros/sdkconfig.defaults.esp32s3
index 5cb345dae..f874ea2dd 100644
--- a/examples/dueros/sdkconfig.defaults.esp32s3
+++ b/examples/dueros/sdkconfig.defaults.esp32s3
@@ -22,8 +22,8 @@ CONFIG_ESPTOOLPY_FLASHSIZE="8MB"
# CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE is not set
# CONFIG_PARTITION_TABLE_TWO_OTA is not set
CONFIG_PARTITION_TABLE_CUSTOM=y
-CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions_dueros_example_esp32s3.csv"
-CONFIG_PARTITION_TABLE_FILENAME="partitions_dueros_example_esp32s3.csv"
+CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv"
+CONFIG_PARTITION_TABLE_FILENAME="partitions.csv"
CONFIG_PARTITION_TABLE_MD5=y
# end of Partition Table
diff --git a/examples/dueros/tone/dingding.wav b/examples/dueros/spiffs/dingding.wav
similarity index 100%
rename from examples/dueros/tone/dingding.wav
rename to examples/dueros/spiffs/dingding.wav
diff --git a/examples/get-started/pipeline_a2dp_sink_and_hfp/README.md b/examples/get-started/pipeline_a2dp_sink_and_hfp/README.md
index 3d15afbfd..0bf07fa29 100755
--- a/examples/get-started/pipeline_a2dp_sink_and_hfp/README.md
+++ b/examples/get-started/pipeline_a2dp_sink_and_hfp/README.md
@@ -26,7 +26,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -46,7 +46,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/get-started/pipeline_a2dp_sink_and_hfp/README_CN.md b/examples/get-started/pipeline_a2dp_sink_and_hfp/README_CN.md
index 0f60a507a..219ad398a 100644
--- a/examples/get-started/pipeline_a2dp_sink_and_hfp/README_CN.md
+++ b/examples/get-started/pipeline_a2dp_sink_and_hfp/README_CN.md
@@ -25,7 +25,7 @@
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -45,7 +45,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/get-started/pipeline_tcp_client/README.md b/examples/get-started/pipeline_tcp_client/README.md
index b61848b31..d7229fe8a 100755
--- a/examples/get-started/pipeline_tcp_client/README.md
+++ b/examples/get-started/pipeline_tcp_client/README.md
@@ -24,7 +24,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -56,17 +56,17 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
### Example Functionality
-- First of all, run the Python script with python 2.7. Make sure the development board and TCP server are connected to the same Wi-Fi network. Prepare an MP3 audio file, name it `esp32.mp3`, and copy it to the same directory where the Python script is. Below is the log of running the script.
+- First of all, run the Python script with python 3.x. Make sure the development board and TCP server are connected to the same Wi-Fi network. Prepare an MP3 audio file, name it `esp32.mp3`, and copy it to the same directory where the Python script is. Below is the log of running the script.
```c
-python2 tcp_server.py
+python tcp_server.py
Get the esp32.mp3 size is 1453677
starting listen on ip 192.168.5.72, port 8080
waiting for client to connect
diff --git a/examples/get-started/pipeline_tcp_client/README_CN.md b/examples/get-started/pipeline_tcp_client/README_CN.md
index c1d937fd8..15b52943a 100644
--- a/examples/get-started/pipeline_tcp_client/README_CN.md
+++ b/examples/get-started/pipeline_tcp_client/README_CN.md
@@ -25,7 +25,7 @@
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -58,17 +58,17 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
### 功能和用法
-- 例程需要先运行 TCP 服务器的 Python 脚本,需要 python 2.7,并且开发板和 TCP 服务器连接在同一个 Wi-Fi 网络中,还需要准备一首 MP3 音乐命名为 `esp32.mp3` 拷贝到 TCP 服务器脚本同一文件夹下面,Python 脚本运行日志如下:
+- 例程需要先运行 TCP 服务器的 Python 脚本,需要 python 3.x,并且开发板和 TCP 服务器连接在同一个 Wi-Fi 网络中,还需要准备一首 MP3 音乐命名为 `esp32.mp3` 拷贝到 TCP 服务器脚本同一文件夹下面,Python 脚本运行日志如下:
```
-python2 tcp_server.py
+python tcp_server.py
Get the esp32.mp3 size is 1453677
starting listen on ip 192.168.5.72, port 8080
waiting for client to connect
diff --git a/examples/get-started/pipeline_tcp_client/main/idf_component.yml b/examples/get-started/pipeline_tcp_client/main/idf_component.yml
new file mode 100644
index 000000000..387bd9814
--- /dev/null
+++ b/examples/get-started/pipeline_tcp_client/main/idf_component.yml
@@ -0,0 +1,9 @@
+dependencies:
+ espressif/esp_hosted:
+ version: "~0.0.9"
+ rules:
+ - if: "target in [esp32p4]"
+ espressif/esp_wifi_remote:
+ version: "~0.3.0"
+ rules:
+ - if: "target in [esp32p4]"
\ No newline at end of file
diff --git a/examples/get-started/pipeline_tcp_client/sdkconfig.defaults.esp32p4 b/examples/get-started/pipeline_tcp_client/sdkconfig.defaults.esp32p4
new file mode 100644
index 000000000..17c9bf436
--- /dev/null
+++ b/examples/get-started/pipeline_tcp_client/sdkconfig.defaults.esp32p4
@@ -0,0 +1,20 @@
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32p4"
+CONFIG_IDF_TARGET_ESP32P4=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_360=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=360
+CONFIG_IDF_EXPERIMENTAL_FEATURES=y
+
+#
+# SPI RAM config
+#
+CONFIG_SPIRAM=y
+CONFIG_SPIRAM_SPEED_200M=y
+CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
+
+#
+# Audio HAL
+#
+CONFIG_ESP32_P4_FUNCTION_EV_BOARD=y
diff --git a/examples/get-started/play_mp3_control/README.md b/examples/get-started/play_mp3_control/README.md
index cb2b4afdc..07c6ae7a7 100644
--- a/examples/get-started/play_mp3_control/README.md
+++ b/examples/get-started/play_mp3_control/README.md
@@ -27,7 +27,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
## Example Set Up
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
The default board for this example is `ESP32-Lyrat V4.3`, if you need to run this example on other development boards, you need to select the configuration of the development board in menuconfig, for example, select `ESP32-Lyrat-Mini V1.1`.
@@ -46,7 +46,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See the Getting Started Guide for full steps to configure and use [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) to build projects.
+See the Getting Started Guide for full steps to configure and use [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) to build projects.
## How to use the Example
diff --git a/examples/get-started/play_mp3_control/README_CN.md b/examples/get-started/play_mp3_control/README_CN.md
index 30e5d90eb..ef46eb1e5 100644
--- a/examples/get-started/play_mp3_control/README_CN.md
+++ b/examples/get-started/play_mp3_control/README_CN.md
@@ -24,7 +24,7 @@
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -43,7 +43,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/get-started/play_mp3_control/main/idf_component.yml b/examples/get-started/play_mp3_control/main/idf_component.yml
new file mode 100644
index 000000000..387bd9814
--- /dev/null
+++ b/examples/get-started/play_mp3_control/main/idf_component.yml
@@ -0,0 +1,9 @@
+dependencies:
+ espressif/esp_hosted:
+ version: "~0.0.9"
+ rules:
+ - if: "target in [esp32p4]"
+ espressif/esp_wifi_remote:
+ version: "~0.3.0"
+ rules:
+ - if: "target in [esp32p4]"
\ No newline at end of file
diff --git a/examples/get-started/play_mp3_control/sdkconfig.defaults.esp32p4 b/examples/get-started/play_mp3_control/sdkconfig.defaults.esp32p4
new file mode 100644
index 000000000..ec60c5283
--- /dev/null
+++ b/examples/get-started/play_mp3_control/sdkconfig.defaults.esp32p4
@@ -0,0 +1,31 @@
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32p4"
+CONFIG_IDF_TARGET_ESP32P4=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_360=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=360
+CONFIG_IDF_EXPERIMENTAL_FEATURES=y
+
+#
+# SPI RAM config
+#
+CONFIG_SPIRAM=y
+CONFIG_SPIRAM_SPEED_200M=y
+CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
+
+#
+# Serial flasher config
+#
+CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y
+CONFIG_ESPTOOLPY_FLASHSIZE="4MB"
+
+#
+# Partition Table
+#
+CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE=y
+
+#
+# Audio HAL
+#
+CONFIG_ESP32_P4_FUNCTION_EV_BOARD=y
diff --git a/examples/ota/README.md b/examples/ota/README.md
index 513380fb7..3aaddae3d 100755
--- a/examples/ota/README.md
+++ b/examples/ota/README.md
@@ -22,7 +22,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -74,7 +74,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/ota/README_CN.md b/examples/ota/README_CN.md
index 3872dbd3b..4c274de9f 100644
--- a/examples/ota/README_CN.md
+++ b/examples/ota/README_CN.md
@@ -22,7 +22,7 @@
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -74,7 +74,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/ota/main/idf_component.yml b/examples/ota/main/idf_component.yml
new file mode 100644
index 000000000..387bd9814
--- /dev/null
+++ b/examples/ota/main/idf_component.yml
@@ -0,0 +1,9 @@
+dependencies:
+ espressif/esp_hosted:
+ version: "~0.0.9"
+ rules:
+ - if: "target in [esp32p4]"
+ espressif/esp_wifi_remote:
+ version: "~0.3.0"
+ rules:
+ - if: "target in [esp32p4]"
\ No newline at end of file
diff --git a/examples/ota/sdkconfig.defaults.esp32p4 b/examples/ota/sdkconfig.defaults.esp32p4
new file mode 100644
index 000000000..17c9bf436
--- /dev/null
+++ b/examples/ota/sdkconfig.defaults.esp32p4
@@ -0,0 +1,20 @@
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32p4"
+CONFIG_IDF_TARGET_ESP32P4=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_360=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=360
+CONFIG_IDF_EXPERIMENTAL_FEATURES=y
+
+#
+# SPI RAM config
+#
+CONFIG_SPIRAM=y
+CONFIG_SPIRAM_SPEED_200M=y
+CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
+
+#
+# Audio HAL
+#
+CONFIG_ESP32_P4_FUNCTION_EV_BOARD=y
diff --git a/examples/player/pipeline_a2dp_sink_stream/README.md b/examples/player/pipeline_a2dp_sink_stream/README.md
index adf9324e9..7d3b64987 100755
--- a/examples/player/pipeline_a2dp_sink_stream/README.md
+++ b/examples/player/pipeline_a2dp_sink_stream/README.md
@@ -30,7 +30,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -52,7 +52,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/player/pipeline_a2dp_sink_stream/README_CN.md b/examples/player/pipeline_a2dp_sink_stream/README_CN.md
index 8d597378f..384b27a7d 100644
--- a/examples/player/pipeline_a2dp_sink_stream/README_CN.md
+++ b/examples/player/pipeline_a2dp_sink_stream/README_CN.md
@@ -30,7 +30,7 @@ aadp_source ---> aadp_sink_stream ---> i2s_stream_writer ---> codec_chip ---> sp
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -52,7 +52,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/player/pipeline_a2dp_source_stream/README.md b/examples/player/pipeline_a2dp_source_stream/README.md
index 4ec46ef79..3fbd3e5ce 100755
--- a/examples/player/pipeline_a2dp_source_stream/README.md
+++ b/examples/player/pipeline_a2dp_source_stream/README.md
@@ -29,7 +29,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -58,7 +58,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/player/pipeline_a2dp_source_stream/README_CN.md b/examples/player/pipeline_a2dp_source_stream/README_CN.md
index 16e856ca5..4dbd7d63c 100644
--- a/examples/player/pipeline_a2dp_source_stream/README_CN.md
+++ b/examples/player/pipeline_a2dp_source_stream/README_CN.md
@@ -29,7 +29,7 @@ sdcard ---> fatfs_stream ---> mp3_decoder ---> bt_stream ---> aadp_source
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -58,7 +58,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/player/pipeline_bt_sink/README.md b/examples/player/pipeline_bt_sink/README.md
index 26ff5b43a..7f4eee6c4 100644
--- a/examples/player/pipeline_bt_sink/README.md
+++ b/examples/player/pipeline_bt_sink/README.md
@@ -26,7 +26,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
## Build and Flash
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -46,7 +46,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/player/pipeline_bt_sink/README_CN.md b/examples/player/pipeline_bt_sink/README_CN.md
index bf2b7f631..5414b77c6 100644
--- a/examples/player/pipeline_bt_sink/README_CN.md
+++ b/examples/player/pipeline_bt_sink/README_CN.md
@@ -27,7 +27,7 @@
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -47,7 +47,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/player/pipeline_bt_source/README.md b/examples/player/pipeline_bt_source/README.md
index ffd7b093e..91edb3f03 100644
--- a/examples/player/pipeline_bt_source/README.md
+++ b/examples/player/pipeline_bt_source/README.md
@@ -25,7 +25,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
## Build and Flash
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -59,7 +59,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/player/pipeline_bt_source/README_CN.md b/examples/player/pipeline_bt_source/README_CN.md
index f230f6d86..b8597166f 100644
--- a/examples/player/pipeline_bt_source/README_CN.md
+++ b/examples/player/pipeline_bt_source/README_CN.md
@@ -26,7 +26,7 @@
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -60,7 +60,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/player/pipeline_embed_flash_tone/README.md b/examples/player/pipeline_embed_flash_tone/README.md
index 073faf1c2..637e14348 100644
--- a/examples/player/pipeline_embed_flash_tone/README.md
+++ b/examples/player/pipeline_embed_flash_tone/README.md
@@ -38,7 +38,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -58,7 +58,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/player/pipeline_embed_flash_tone/README_CN.md b/examples/player/pipeline_embed_flash_tone/README_CN.md
index 8f61cd97e..ac1fc8a24 100644
--- a/examples/player/pipeline_embed_flash_tone/README_CN.md
+++ b/examples/player/pipeline_embed_flash_tone/README_CN.md
@@ -38,7 +38,7 @@ python $ADF_PATH/tools/audio_tone/mk_embed_audio_tone.py -p $(ADF_PATH)/examples
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -58,7 +58,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/player/pipeline_embed_flash_tone/main/idf_component.yml b/examples/player/pipeline_embed_flash_tone/main/idf_component.yml
new file mode 100644
index 000000000..387bd9814
--- /dev/null
+++ b/examples/player/pipeline_embed_flash_tone/main/idf_component.yml
@@ -0,0 +1,9 @@
+dependencies:
+ espressif/esp_hosted:
+ version: "~0.0.9"
+ rules:
+ - if: "target in [esp32p4]"
+ espressif/esp_wifi_remote:
+ version: "~0.3.0"
+ rules:
+ - if: "target in [esp32p4]"
\ No newline at end of file
diff --git a/examples/player/pipeline_embed_flash_tone/sdkconfig.defaults.esp32p4 b/examples/player/pipeline_embed_flash_tone/sdkconfig.defaults.esp32p4
new file mode 100644
index 000000000..17c9bf436
--- /dev/null
+++ b/examples/player/pipeline_embed_flash_tone/sdkconfig.defaults.esp32p4
@@ -0,0 +1,20 @@
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32p4"
+CONFIG_IDF_TARGET_ESP32P4=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_360=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=360
+CONFIG_IDF_EXPERIMENTAL_FEATURES=y
+
+#
+# SPI RAM config
+#
+CONFIG_SPIRAM=y
+CONFIG_SPIRAM_SPEED_200M=y
+CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
+
+#
+# Audio HAL
+#
+CONFIG_ESP32_P4_FUNCTION_EV_BOARD=y
diff --git a/examples/player/pipeline_flash_tone/README.md b/examples/player/pipeline_flash_tone/README.md
index b7436bd39..e9b592928 100644
--- a/examples/player/pipeline_flash_tone/README.md
+++ b/examples/player/pipeline_flash_tone/README.md
@@ -68,7 +68,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -127,7 +127,7 @@ Hard resetting via RTS pin...
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/player/pipeline_flash_tone/README_CN.md b/examples/player/pipeline_flash_tone/README_CN.md
index 25b8ec73d..44a08670e 100644
--- a/examples/player/pipeline_flash_tone/README_CN.md
+++ b/examples/player/pipeline_flash_tone/README_CN.md
@@ -66,7 +66,7 @@ python3 $ADF_PATH/tools/audio_tone/mk_audio_tone.py -f ./ -r tone_mp3_folder
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -124,7 +124,7 @@ Hard resetting via RTS pin...
使用 ``Ctrl-]`` 退出调试界面。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/player/pipeline_flash_tone/main/idf_component.yml b/examples/player/pipeline_flash_tone/main/idf_component.yml
new file mode 100644
index 000000000..387bd9814
--- /dev/null
+++ b/examples/player/pipeline_flash_tone/main/idf_component.yml
@@ -0,0 +1,9 @@
+dependencies:
+ espressif/esp_hosted:
+ version: "~0.0.9"
+ rules:
+ - if: "target in [esp32p4]"
+ espressif/esp_wifi_remote:
+ version: "~0.3.0"
+ rules:
+ - if: "target in [esp32p4]"
\ No newline at end of file
diff --git a/examples/player/pipeline_flash_tone/sdkconfig.defaults.esp32p4 b/examples/player/pipeline_flash_tone/sdkconfig.defaults.esp32p4
new file mode 100644
index 000000000..17c9bf436
--- /dev/null
+++ b/examples/player/pipeline_flash_tone/sdkconfig.defaults.esp32p4
@@ -0,0 +1,20 @@
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32p4"
+CONFIG_IDF_TARGET_ESP32P4=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_360=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=360
+CONFIG_IDF_EXPERIMENTAL_FEATURES=y
+
+#
+# SPI RAM config
+#
+CONFIG_SPIRAM=y
+CONFIG_SPIRAM_SPEED_200M=y
+CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
+
+#
+# Audio HAL
+#
+CONFIG_ESP32_P4_FUNCTION_EV_BOARD=y
diff --git a/examples/player/pipeline_hfp_stream/README.md b/examples/player/pipeline_hfp_stream/README.md
index 52578558a..872d60caa 100644
--- a/examples/player/pipeline_hfp_stream/README.md
+++ b/examples/player/pipeline_hfp_stream/README.md
@@ -25,7 +25,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
## Build and Flash
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -44,7 +44,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/player/pipeline_hfp_stream/README_CN.md b/examples/player/pipeline_hfp_stream/README_CN.md
index 0bacf5395..373533c17 100644
--- a/examples/player/pipeline_hfp_stream/README_CN.md
+++ b/examples/player/pipeline_hfp_stream/README_CN.md
@@ -26,7 +26,7 @@
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -45,7 +45,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/player/pipeline_http_mp3/README.md b/examples/player/pipeline_http_mp3/README.md
index 7cb2baf1c..9306e16f2 100644
--- a/examples/player/pipeline_http_mp3/README.md
+++ b/examples/player/pipeline_http_mp3/README.md
@@ -27,7 +27,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -54,7 +54,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/player/pipeline_http_mp3/README_CN.md b/examples/player/pipeline_http_mp3/README_CN.md
index 5bb0c8a47..03c7e7000 100644
--- a/examples/player/pipeline_http_mp3/README_CN.md
+++ b/examples/player/pipeline_http_mp3/README_CN.md
@@ -28,7 +28,7 @@
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -54,7 +54,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/player/pipeline_http_mp3/main/idf_component.yml b/examples/player/pipeline_http_mp3/main/idf_component.yml
new file mode 100644
index 000000000..387bd9814
--- /dev/null
+++ b/examples/player/pipeline_http_mp3/main/idf_component.yml
@@ -0,0 +1,9 @@
+dependencies:
+ espressif/esp_hosted:
+ version: "~0.0.9"
+ rules:
+ - if: "target in [esp32p4]"
+ espressif/esp_wifi_remote:
+ version: "~0.3.0"
+ rules:
+ - if: "target in [esp32p4]"
\ No newline at end of file
diff --git a/examples/player/pipeline_http_mp3/sdkconfig.defaults.esp32p4 b/examples/player/pipeline_http_mp3/sdkconfig.defaults.esp32p4
new file mode 100644
index 000000000..17c9bf436
--- /dev/null
+++ b/examples/player/pipeline_http_mp3/sdkconfig.defaults.esp32p4
@@ -0,0 +1,20 @@
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32p4"
+CONFIG_IDF_TARGET_ESP32P4=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_360=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=360
+CONFIG_IDF_EXPERIMENTAL_FEATURES=y
+
+#
+# SPI RAM config
+#
+CONFIG_SPIRAM=y
+CONFIG_SPIRAM_SPEED_200M=y
+CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
+
+#
+# Audio HAL
+#
+CONFIG_ESP32_P4_FUNCTION_EV_BOARD=y
diff --git a/examples/player/pipeline_http_select_decoder/README.md b/examples/player/pipeline_http_select_decoder/README.md
index ec2f84ecb..a1afe729f 100755
--- a/examples/player/pipeline_http_select_decoder/README.md
+++ b/examples/player/pipeline_http_select_decoder/README.md
@@ -40,7 +40,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -79,7 +79,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/player/pipeline_http_select_decoder/README_CN.md b/examples/player/pipeline_http_select_decoder/README_CN.md
index bcd470124..f65b17bb8 100644
--- a/examples/player/pipeline_http_select_decoder/README_CN.md
+++ b/examples/player/pipeline_http_select_decoder/README_CN.md
@@ -40,7 +40,7 @@ http_stream 从网络上下载程序选定的音频文件,然后由选定的
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -79,7 +79,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/player/pipeline_http_select_decoder/main/idf_component.yml b/examples/player/pipeline_http_select_decoder/main/idf_component.yml
new file mode 100644
index 000000000..387bd9814
--- /dev/null
+++ b/examples/player/pipeline_http_select_decoder/main/idf_component.yml
@@ -0,0 +1,9 @@
+dependencies:
+ espressif/esp_hosted:
+ version: "~0.0.9"
+ rules:
+ - if: "target in [esp32p4]"
+ espressif/esp_wifi_remote:
+ version: "~0.3.0"
+ rules:
+ - if: "target in [esp32p4]"
\ No newline at end of file
diff --git a/examples/player/pipeline_http_select_decoder/sdkconfig.defaults.esp32p4 b/examples/player/pipeline_http_select_decoder/sdkconfig.defaults.esp32p4
new file mode 100644
index 000000000..17c9bf436
--- /dev/null
+++ b/examples/player/pipeline_http_select_decoder/sdkconfig.defaults.esp32p4
@@ -0,0 +1,20 @@
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32p4"
+CONFIG_IDF_TARGET_ESP32P4=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_360=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=360
+CONFIG_IDF_EXPERIMENTAL_FEATURES=y
+
+#
+# SPI RAM config
+#
+CONFIG_SPIRAM=y
+CONFIG_SPIRAM_SPEED_200M=y
+CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
+
+#
+# Audio HAL
+#
+CONFIG_ESP32_P4_FUNCTION_EV_BOARD=y
diff --git a/examples/player/pipeline_living_stream/README.md b/examples/player/pipeline_living_stream/README.md
index 4789a695d..fe7b99160 100644
--- a/examples/player/pipeline_living_stream/README.md
+++ b/examples/player/pipeline_living_stream/README.md
@@ -28,7 +28,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -55,7 +55,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/player/pipeline_living_stream/README_CN.md b/examples/player/pipeline_living_stream/README_CN.md
index d9ecb0135..f2c9f6b57 100644
--- a/examples/player/pipeline_living_stream/README_CN.md
+++ b/examples/player/pipeline_living_stream/README_CN.md
@@ -28,7 +28,7 @@
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -54,7 +54,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/player/pipeline_living_stream/main/idf_component.yml b/examples/player/pipeline_living_stream/main/idf_component.yml
new file mode 100644
index 000000000..387bd9814
--- /dev/null
+++ b/examples/player/pipeline_living_stream/main/idf_component.yml
@@ -0,0 +1,9 @@
+dependencies:
+ espressif/esp_hosted:
+ version: "~0.0.9"
+ rules:
+ - if: "target in [esp32p4]"
+ espressif/esp_wifi_remote:
+ version: "~0.3.0"
+ rules:
+ - if: "target in [esp32p4]"
\ No newline at end of file
diff --git a/examples/player/pipeline_living_stream/sdkconfig.defaults.esp32p4 b/examples/player/pipeline_living_stream/sdkconfig.defaults.esp32p4
new file mode 100644
index 000000000..17c9bf436
--- /dev/null
+++ b/examples/player/pipeline_living_stream/sdkconfig.defaults.esp32p4
@@ -0,0 +1,20 @@
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32p4"
+CONFIG_IDF_TARGET_ESP32P4=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_360=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=360
+CONFIG_IDF_EXPERIMENTAL_FEATURES=y
+
+#
+# SPI RAM config
+#
+CONFIG_SPIRAM=y
+CONFIG_SPIRAM_SPEED_200M=y
+CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
+
+#
+# Audio HAL
+#
+CONFIG_ESP32_P4_FUNCTION_EV_BOARD=y
diff --git a/examples/player/pipeline_loop_playback_without_gap/main/idf_component.yml b/examples/player/pipeline_loop_playback_without_gap/main/idf_component.yml
new file mode 100644
index 000000000..387bd9814
--- /dev/null
+++ b/examples/player/pipeline_loop_playback_without_gap/main/idf_component.yml
@@ -0,0 +1,9 @@
+dependencies:
+ espressif/esp_hosted:
+ version: "~0.0.9"
+ rules:
+ - if: "target in [esp32p4]"
+ espressif/esp_wifi_remote:
+ version: "~0.3.0"
+ rules:
+ - if: "target in [esp32p4]"
\ No newline at end of file
diff --git a/examples/player/pipeline_loop_playback_without_gap/sdkconfig.defaults.esp32p4 b/examples/player/pipeline_loop_playback_without_gap/sdkconfig.defaults.esp32p4
new file mode 100644
index 000000000..17c9bf436
--- /dev/null
+++ b/examples/player/pipeline_loop_playback_without_gap/sdkconfig.defaults.esp32p4
@@ -0,0 +1,20 @@
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32p4"
+CONFIG_IDF_TARGET_ESP32P4=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_360=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=360
+CONFIG_IDF_EXPERIMENTAL_FEATURES=y
+
+#
+# SPI RAM config
+#
+CONFIG_SPIRAM=y
+CONFIG_SPIRAM_SPEED_200M=y
+CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
+
+#
+# Audio HAL
+#
+CONFIG_ESP32_P4_FUNCTION_EV_BOARD=y
diff --git a/examples/player/pipeline_play_mp3_with_dac_or_pwm/README.md b/examples/player/pipeline_play_mp3_with_dac_or_pwm/README.md
index 80aceccad..dea1d4d31 100644
--- a/examples/player/pipeline_play_mp3_with_dac_or_pwm/README.md
+++ b/examples/player/pipeline_play_mp3_with_dac_or_pwm/README.md
@@ -19,7 +19,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
## Example Set Up
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -49,7 +49,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See the Getting Started Guide for full steps to configure and use [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) to build projects.
+See the Getting Started Guide for full steps to configure and use [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) to build projects.
## How to use the Example
diff --git a/examples/player/pipeline_play_mp3_with_dac_or_pwm/README_CN.md b/examples/player/pipeline_play_mp3_with_dac_or_pwm/README_CN.md
index 9578990d3..54fa82dbf 100644
--- a/examples/player/pipeline_play_mp3_with_dac_or_pwm/README_CN.md
+++ b/examples/player/pipeline_play_mp3_with_dac_or_pwm/README_CN.md
@@ -25,7 +25,7 @@
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -50,7 +50,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
### 功能和用法
diff --git a/examples/player/pipeline_play_sdcard_music/README.md b/examples/player/pipeline_play_sdcard_music/README.md
index 917e60f86..6ecafb03f 100644
--- a/examples/player/pipeline_play_sdcard_music/README.md
+++ b/examples/player/pipeline_play_sdcard_music/README.md
@@ -36,7 +36,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
## Example Set Up
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -65,7 +65,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See the Getting Started Guide for full steps to configure and use [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) to build projects.
+See the Getting Started Guide for full steps to configure and use [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) to build projects.
## How to use the Example
diff --git a/examples/player/pipeline_play_sdcard_music/README_CN.md b/examples/player/pipeline_play_sdcard_music/README_CN.md
index d569f58f4..0e2114bdc 100644
--- a/examples/player/pipeline_play_sdcard_music/README_CN.md
+++ b/examples/player/pipeline_play_sdcard_music/README_CN.md
@@ -38,7 +38,7 @@
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -70,7 +70,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/player/pipeline_play_sdcard_music/main/idf_component.yml b/examples/player/pipeline_play_sdcard_music/main/idf_component.yml
new file mode 100644
index 000000000..387bd9814
--- /dev/null
+++ b/examples/player/pipeline_play_sdcard_music/main/idf_component.yml
@@ -0,0 +1,9 @@
+dependencies:
+ espressif/esp_hosted:
+ version: "~0.0.9"
+ rules:
+ - if: "target in [esp32p4]"
+ espressif/esp_wifi_remote:
+ version: "~0.3.0"
+ rules:
+ - if: "target in [esp32p4]"
\ No newline at end of file
diff --git a/examples/player/pipeline_play_sdcard_music/sdkconfig.defaults.esp32p4 b/examples/player/pipeline_play_sdcard_music/sdkconfig.defaults.esp32p4
new file mode 100644
index 000000000..17c9bf436
--- /dev/null
+++ b/examples/player/pipeline_play_sdcard_music/sdkconfig.defaults.esp32p4
@@ -0,0 +1,20 @@
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32p4"
+CONFIG_IDF_TARGET_ESP32P4=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_360=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=360
+CONFIG_IDF_EXPERIMENTAL_FEATURES=y
+
+#
+# SPI RAM config
+#
+CONFIG_SPIRAM=y
+CONFIG_SPIRAM_SPEED_200M=y
+CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
+
+#
+# Audio HAL
+#
+CONFIG_ESP32_P4_FUNCTION_EV_BOARD=y
diff --git a/examples/player/pipeline_sdcard_mp3_control/README.md b/examples/player/pipeline_sdcard_mp3_control/README.md
index d8118afc4..bb988a6e1 100644
--- a/examples/player/pipeline_sdcard_mp3_control/README.md
+++ b/examples/player/pipeline_sdcard_mp3_control/README.md
@@ -28,7 +28,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -56,7 +56,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/player/pipeline_sdcard_mp3_control/README_CN.md b/examples/player/pipeline_sdcard_mp3_control/README_CN.md
index c622f8b93..9485a1802 100644
--- a/examples/player/pipeline_sdcard_mp3_control/README_CN.md
+++ b/examples/player/pipeline_sdcard_mp3_control/README_CN.md
@@ -28,7 +28,7 @@
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -56,7 +56,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/player/pipeline_spiffs_mp3/README.md b/examples/player/pipeline_spiffs_mp3/README.md
index d93af1b94..a6b7cb102 100644
--- a/examples/player/pipeline_spiffs_mp3/README.md
+++ b/examples/player/pipeline_spiffs_mp3/README.md
@@ -18,30 +18,6 @@ The pipeline is as follows:
### Prerequisites
-Create the SPIFFS file.
-
-- Clone SPIFFS repository from [Github/spiffs](https://github.com/igrr/mkspiffs.git).
-
-```
- git clone https://github.com/igrr/mkspiffs.git
-```
-
-- Build SPIFFS.
-
-```
- cd mkspiffs
- make clean
- make dist CPPFLAGS="-DSPIFFS_OBJ_META_LEN=4"
-```
-
-- Copy the user audio file to the `tools` folder under the example (the `adf_music.mp3` file is already prepared for this example).
-
-- Run the following command to zip the `adf_music.mp3` file into the `adf_music.bin` binary file, and then flash the file to the assigned partition in `partition`. The created file is already prepared under the `tools` folder for this example.
-
-```
- ./mkspiffs -c ./tools -b 4096 -p 256 -s 0x100000 ./tools/adf_music.bin
-```
-
- Create the partition table as follows:
```
@@ -51,8 +27,6 @@ Create the SPIFFS file.
storage, data, spiffs, 0x110000,1M,
```
-- Download the SPIFFS bin. Now the `./tools/adf_music.bin` includes `adf_music.mp3` only (all MP3 files will eventually generate a bin file).
-
For more `spiffs` descriptions, please refer to [SPIFFS Filesystem](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/storage/spiffs.html).
@@ -67,7 +41,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -97,7 +71,7 @@ python $ADF_PATH/esp-idf/components/esptool_py/esptool/esptool.py --chip esp32 -
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/player/pipeline_spiffs_mp3/README_CN.md b/examples/player/pipeline_spiffs_mp3/README_CN.md
index 88aaefc17..c0d22c409 100644
--- a/examples/player/pipeline_spiffs_mp3/README_CN.md
+++ b/examples/player/pipeline_spiffs_mp3/README_CN.md
@@ -18,30 +18,6 @@
### 预备知识
-制作 SPIFFS 文件
-
-- 从 [Github/spiffs](https://github.com/igrr/mkspiffs.git) 上克隆 SPIFFS 仓库
-
-```
- git clone https://github.com/igrr/mkspiffs.git
-```
-
-- 编译 SPIFFS
-
-```
- cd mkspiffs
- make clean
- make dist CPPFLAGS="-DSPIFFS_OBJ_META_LEN=4"
-```
-
-- 拷贝用户音频文件到例程下面的 `tools` 文件夹(本例程已经准备了 `adf_music.mp3` 文件)。
-
-- 运行下面命令,把 `adf_music.mp3` 文件压进 `adf_music.bin` 二进制文件中,然后烧录此文件到 `partition` 中指定分区即可,本例程已经把制作好的文件也放置在 `tools` 文件夹中。
-
-```
- ./mkspiffs -c ./tools -b 4096 -p 256 -s 0x100000 ./tools/adf_music.bin
-```
-
- 创建分区表,如下所示:
```
@@ -51,8 +27,6 @@
storage, data, spiffs, 0x110000,1M,
```
-- 下载 SPIFFS bin 文件。当前 `./tools/adf_music.bin` 中只包含 `adf_music.mp3` 文件(所有 MP3 文件最终都会生成一个 bin 文件)。
-
有关 `spiffs` 的更多信息,请参阅 [SPIFFS 文件系统](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/storage/spiffs.html)。
@@ -67,7 +41,7 @@
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -96,7 +70,7 @@ python $ADF_PATH/esp-idf/components/esptool_py/esptool/esptool.py --chip esp32 -
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/player/pipeline_spiffs_mp3/main/CMakeLists.txt b/examples/player/pipeline_spiffs_mp3/main/CMakeLists.txt
index fbb288fea..78c619c93 100644
--- a/examples/player/pipeline_spiffs_mp3/main/CMakeLists.txt
+++ b/examples/player/pipeline_spiffs_mp3/main/CMakeLists.txt
@@ -1,4 +1,6 @@
set(COMPONENT_SRCS "play_spiffs_mp3_example.c")
set(COMPONENT_ADD_INCLUDEDIRS .)
-register_component()
\ No newline at end of file
+register_component()
+
+spiffs_create_partition_image(storage ../spiffs FLASH_IN_PROJECT)
diff --git a/examples/player/pipeline_spiffs_mp3/main/idf_component.yml b/examples/player/pipeline_spiffs_mp3/main/idf_component.yml
new file mode 100644
index 000000000..387bd9814
--- /dev/null
+++ b/examples/player/pipeline_spiffs_mp3/main/idf_component.yml
@@ -0,0 +1,9 @@
+dependencies:
+ espressif/esp_hosted:
+ version: "~0.0.9"
+ rules:
+ - if: "target in [esp32p4]"
+ espressif/esp_wifi_remote:
+ version: "~0.3.0"
+ rules:
+ - if: "target in [esp32p4]"
\ No newline at end of file
diff --git a/examples/player/pipeline_spiffs_mp3/main/play_spiffs_mp3_example.c b/examples/player/pipeline_spiffs_mp3/main/play_spiffs_mp3_example.c
index 9a3d17ed7..6ec7aff47 100644
--- a/examples/player/pipeline_spiffs_mp3/main/play_spiffs_mp3_example.c
+++ b/examples/player/pipeline_spiffs_mp3/main/play_spiffs_mp3_example.c
@@ -94,7 +94,7 @@ void app_main(void)
audio_pipeline_link(pipeline, &link_tag[0], 3);
ESP_LOGI(TAG, "[3.6] Set up uri (file as spiffs, mp3 as mp3 decoder, and default output is i2s)");
- audio_element_set_uri(spiffs_stream_reader, "/spiffs/adf_music.mp3");
+ audio_element_set_uri(spiffs_stream_reader, "/spiffs/Apple.mp3");
ESP_LOGI(TAG, "[ 4 ] Set up event listener");
audio_event_iface_cfg_t evt_cfg = AUDIO_EVENT_IFACE_DEFAULT_CFG();
diff --git a/examples/player/pipeline_spiffs_mp3/sdkconfig.defaults.esp32p4 b/examples/player/pipeline_spiffs_mp3/sdkconfig.defaults.esp32p4
new file mode 100644
index 000000000..17c9bf436
--- /dev/null
+++ b/examples/player/pipeline_spiffs_mp3/sdkconfig.defaults.esp32p4
@@ -0,0 +1,20 @@
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32p4"
+CONFIG_IDF_TARGET_ESP32P4=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_360=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=360
+CONFIG_IDF_EXPERIMENTAL_FEATURES=y
+
+#
+# SPI RAM config
+#
+CONFIG_SPIRAM=y
+CONFIG_SPIRAM_SPEED_200M=y
+CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
+
+#
+# Audio HAL
+#
+CONFIG_ESP32_P4_FUNCTION_EV_BOARD=y
diff --git a/examples/player/pipeline_spiffs_mp3/spiffs/Apple.mp3 b/examples/player/pipeline_spiffs_mp3/spiffs/Apple.mp3
new file mode 100644
index 000000000..1151f3113
Binary files /dev/null and b/examples/player/pipeline_spiffs_mp3/spiffs/Apple.mp3 differ
diff --git a/examples/player/pipeline_tts_stream/README.md b/examples/player/pipeline_tts_stream/README.md
index 05cc748b9..6606e8b22 100644
--- a/examples/player/pipeline_tts_stream/README.md
+++ b/examples/player/pipeline_tts_stream/README.md
@@ -8,7 +8,6 @@
This example demonstrates how to convert Chinese text into Chinese speech. If the input text is a mixture of Chinese and English, the English words will be read letter by letter. If you need the English text-to-speech (TTS) service, you can send an email to our Business Support team for individual customization.
-
## Environment Setup
### Hardware Required
@@ -19,7 +18,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -66,12 +65,12 @@ Refer to the following table for the firmware flash address.
|0x1000 | build/bootloader/bootloader.bin|
|0x8000 | build/partitions.bin|
|0x10000 | build/play_tts_example.bin|
-|0x100000 | components/esp-sr/esp-tts/esp_tts_chinese/esp_tts_voice_data_xiaole.dat|
+|0x100000 | components/esp-sr/esp-tts/esp_tts_chinese/esp_tts_voice_data_xiaoxin_small.dat|
Select compatible audio board in ``menuconfig > Audio HAL``, build the project and flash it to the board, then run monitor tool to view serial output.
-- Flash `components/esp-tts/esp_tts_chinese/esp_tts_voice_data_xiaole.dat` to the partition table address.
+- Flash `components/esp-tts/esp_tts_chinese/esp_tts_voice_data_xiaoxin_small.dat` to the partition table address.
- Then flash the app bin, the board will start playing automatically.
To exit the serial monitor, type ``Ctrl-]``.
diff --git a/examples/player/pipeline_tts_stream/README_CN.md b/examples/player/pipeline_tts_stream/README_CN.md
index 8e16f78bf..697d06885 100644
--- a/examples/player/pipeline_tts_stream/README_CN.md
+++ b/examples/player/pipeline_tts_stream/README_CN.md
@@ -19,7 +19,7 @@
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -66,12 +66,12 @@ idf.py build
|0x1000 | build/bootloader/bootloader.bin|
|0x8000 | build/partitions.bin|
|0x10000 | build/play_tts_example.bin|
-|0x100000 | components/esp-sr/esp-tts/esp_tts_chinese/esp_tts_voice_data_xiaole.dat|
+|0x100000 | components/esp-sr/esp-tts/esp_tts_chinese/esp_tts_voice_data_xiaoxin_small.dat|
在 ``menuconfig > Audio HAL`` 中选择兼容的音频板,编译项目并将其烧录至开发板上。运行监控工具,查看串行输出。
-- 将 `components/esp-tts/esp_tts_chinese/esp_tts_voice_data_xiaole.dat` 烧录到分区表地址中。
+- 将 `components/esp-tts/esp_tts_chinese/esp_tts_voice_data_xiaoxin_small.dat` 烧录到分区表地址中。
- 接着,烧录应用程序 bin 文件,烧录完成后,开发板将会自动开始播放语音。
退出调试界面使用 ``Ctrl-]``。
diff --git a/examples/player/pipeline_tts_stream/main/idf_component.yml b/examples/player/pipeline_tts_stream/main/idf_component.yml
new file mode 100644
index 000000000..387bd9814
--- /dev/null
+++ b/examples/player/pipeline_tts_stream/main/idf_component.yml
@@ -0,0 +1,9 @@
+dependencies:
+ espressif/esp_hosted:
+ version: "~0.0.9"
+ rules:
+ - if: "target in [esp32p4]"
+ espressif/esp_wifi_remote:
+ version: "~0.3.0"
+ rules:
+ - if: "target in [esp32p4]"
\ No newline at end of file
diff --git a/examples/player/pipeline_tts_stream/sdkconfig.defaults.esp32p4 b/examples/player/pipeline_tts_stream/sdkconfig.defaults.esp32p4
new file mode 100644
index 000000000..17c9bf436
--- /dev/null
+++ b/examples/player/pipeline_tts_stream/sdkconfig.defaults.esp32p4
@@ -0,0 +1,20 @@
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32p4"
+CONFIG_IDF_TARGET_ESP32P4=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_360=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=360
+CONFIG_IDF_EXPERIMENTAL_FEATURES=y
+
+#
+# SPI RAM config
+#
+CONFIG_SPIRAM=y
+CONFIG_SPIRAM_SPEED_200M=y
+CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
+
+#
+# Audio HAL
+#
+CONFIG_ESP32_P4_FUNCTION_EV_BOARD=y
diff --git a/examples/recorder/element_cb_sdcard_amr/README.md b/examples/recorder/element_cb_sdcard_amr/README.md
index a08f5db55..c5c7d6141 100644
--- a/examples/recorder/element_cb_sdcard_amr/README.md
+++ b/examples/recorder/element_cb_sdcard_amr/README.md
@@ -32,7 +32,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -60,7 +60,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/recorder/element_cb_sdcard_amr/README_CN.md b/examples/recorder/element_cb_sdcard_amr/README_CN.md
index 5515c890e..01fd104f9 100644
--- a/examples/recorder/element_cb_sdcard_amr/README_CN.md
+++ b/examples/recorder/element_cb_sdcard_amr/README_CN.md
@@ -32,7 +32,7 @@ AMR 录音例程的管道如下所示:
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -60,7 +60,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/recorder/element_cb_sdcard_amr/main/idf_component.yml b/examples/recorder/element_cb_sdcard_amr/main/idf_component.yml
new file mode 100644
index 000000000..387bd9814
--- /dev/null
+++ b/examples/recorder/element_cb_sdcard_amr/main/idf_component.yml
@@ -0,0 +1,9 @@
+dependencies:
+ espressif/esp_hosted:
+ version: "~0.0.9"
+ rules:
+ - if: "target in [esp32p4]"
+ espressif/esp_wifi_remote:
+ version: "~0.3.0"
+ rules:
+ - if: "target in [esp32p4]"
\ No newline at end of file
diff --git a/examples/recorder/element_cb_sdcard_amr/sdkconfig.defaults.esp32p4 b/examples/recorder/element_cb_sdcard_amr/sdkconfig.defaults.esp32p4
new file mode 100644
index 000000000..17c9bf436
--- /dev/null
+++ b/examples/recorder/element_cb_sdcard_amr/sdkconfig.defaults.esp32p4
@@ -0,0 +1,20 @@
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32p4"
+CONFIG_IDF_TARGET_ESP32P4=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_360=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=360
+CONFIG_IDF_EXPERIMENTAL_FEATURES=y
+
+#
+# SPI RAM config
+#
+CONFIG_SPIRAM=y
+CONFIG_SPIRAM_SPEED_200M=y
+CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
+
+#
+# Audio HAL
+#
+CONFIG_ESP32_P4_FUNCTION_EV_BOARD=y
diff --git a/examples/recorder/element_wav_amr_sdcard/README.md b/examples/recorder/element_wav_amr_sdcard/README.md
index e8a4a93c4..c670ab04c 100644
--- a/examples/recorder/element_wav_amr_sdcard/README.md
+++ b/examples/recorder/element_wav_amr_sdcard/README.md
@@ -35,7 +35,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -63,7 +63,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/recorder/element_wav_amr_sdcard/README_CN.md b/examples/recorder/element_wav_amr_sdcard/README_CN.md
index 69d28757d..6ee93206c 100644
--- a/examples/recorder/element_wav_amr_sdcard/README_CN.md
+++ b/examples/recorder/element_wav_amr_sdcard/README_CN.md
@@ -36,7 +36,7 @@ AMR 支持 AMR-NB、AMR-WB 两种种音频编码器。默认选择 AMR-NB 编码
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -64,7 +64,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/recorder/element_wav_amr_sdcard/main/idf_component.yml b/examples/recorder/element_wav_amr_sdcard/main/idf_component.yml
new file mode 100644
index 000000000..387bd9814
--- /dev/null
+++ b/examples/recorder/element_wav_amr_sdcard/main/idf_component.yml
@@ -0,0 +1,9 @@
+dependencies:
+ espressif/esp_hosted:
+ version: "~0.0.9"
+ rules:
+ - if: "target in [esp32p4]"
+ espressif/esp_wifi_remote:
+ version: "~0.3.0"
+ rules:
+ - if: "target in [esp32p4]"
\ No newline at end of file
diff --git a/examples/recorder/element_wav_amr_sdcard/sdkconfig.defaults.esp32p4 b/examples/recorder/element_wav_amr_sdcard/sdkconfig.defaults.esp32p4
new file mode 100644
index 000000000..17c9bf436
--- /dev/null
+++ b/examples/recorder/element_wav_amr_sdcard/sdkconfig.defaults.esp32p4
@@ -0,0 +1,20 @@
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32p4"
+CONFIG_IDF_TARGET_ESP32P4=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_360=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=360
+CONFIG_IDF_EXPERIMENTAL_FEATURES=y
+
+#
+# SPI RAM config
+#
+CONFIG_SPIRAM=y
+CONFIG_SPIRAM_SPEED_200M=y
+CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
+
+#
+# Audio HAL
+#
+CONFIG_ESP32_P4_FUNCTION_EV_BOARD=y
diff --git a/examples/recorder/pipeline_raw_http/README.md b/examples/recorder/pipeline_raw_http/README.md
index 5ab78faa8..b1c5ee365 100755
--- a/examples/recorder/pipeline_raw_http/README.md
+++ b/examples/recorder/pipeline_raw_http/README.md
@@ -30,7 +30,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -64,7 +64,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/recorder/pipeline_raw_http/README_CN.md b/examples/recorder/pipeline_raw_http/README_CN.md
index 10a68e78c..51d6a1253 100644
--- a/examples/recorder/pipeline_raw_http/README_CN.md
+++ b/examples/recorder/pipeline_raw_http/README_CN.md
@@ -30,7 +30,7 @@ mic ---> codec_chip ---> i2s_stream ---> http_stream >>>> [Wi-Fi] >>>> http_serv
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -64,7 +64,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/recorder/pipeline_recording_to_sdcard/README.md b/examples/recorder/pipeline_recording_to_sdcard/README.md
index fd45cf3e1..d0f675098 100644
--- a/examples/recorder/pipeline_recording_to_sdcard/README.md
+++ b/examples/recorder/pipeline_recording_to_sdcard/README.md
@@ -22,7 +22,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
## Example Set Up
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
The default board for this example is `ESP32-Lyrat V4.3`, if you need to run this example on other development boards, you need to select the configuration of the development board in menuconfig, for example, select `ESP32-Lyrat-Mini V1.1`.
@@ -52,7 +52,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See the Getting Started Guide for full steps to configure and use [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) to build projects.
+See the Getting Started Guide for full steps to configure and use [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) to build projects.
## How to use the Example
diff --git a/examples/recorder/pipeline_recording_to_sdcard/README_CN.md b/examples/recorder/pipeline_recording_to_sdcard/README_CN.md
index eeb518b48..1aeaa2585 100644
--- a/examples/recorder/pipeline_recording_to_sdcard/README_CN.md
+++ b/examples/recorder/pipeline_recording_to_sdcard/README_CN.md
@@ -25,7 +25,7 @@
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -57,7 +57,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/recorder/pipeline_recording_to_sdcard/main/idf_component.yml b/examples/recorder/pipeline_recording_to_sdcard/main/idf_component.yml
new file mode 100644
index 000000000..387bd9814
--- /dev/null
+++ b/examples/recorder/pipeline_recording_to_sdcard/main/idf_component.yml
@@ -0,0 +1,9 @@
+dependencies:
+ espressif/esp_hosted:
+ version: "~0.0.9"
+ rules:
+ - if: "target in [esp32p4]"
+ espressif/esp_wifi_remote:
+ version: "~0.3.0"
+ rules:
+ - if: "target in [esp32p4]"
\ No newline at end of file
diff --git a/examples/recorder/pipeline_recording_to_sdcard/sdkconfig.defaults b/examples/recorder/pipeline_recording_to_sdcard/sdkconfig.defaults
index 4d1b2d688..8f1fab7be 100644
--- a/examples/recorder/pipeline_recording_to_sdcard/sdkconfig.defaults
+++ b/examples/recorder/pipeline_recording_to_sdcard/sdkconfig.defaults
@@ -29,4 +29,3 @@ CONFIG_SPIRAM_BOOT_INIT=y
CONFIG_SPIRAM_USE_MALLOC=y
CONFIG_SPIRAM_SPEED_80M=y
CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
-CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY=y
diff --git a/examples/recorder/pipeline_recording_to_sdcard/sdkconfig.defaults.esp32p4 b/examples/recorder/pipeline_recording_to_sdcard/sdkconfig.defaults.esp32p4
new file mode 100644
index 000000000..17c9bf436
--- /dev/null
+++ b/examples/recorder/pipeline_recording_to_sdcard/sdkconfig.defaults.esp32p4
@@ -0,0 +1,20 @@
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32p4"
+CONFIG_IDF_TARGET_ESP32P4=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_360=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=360
+CONFIG_IDF_EXPERIMENTAL_FEATURES=y
+
+#
+# SPI RAM config
+#
+CONFIG_SPIRAM=y
+CONFIG_SPIRAM_SPEED_200M=y
+CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
+
+#
+# Audio HAL
+#
+CONFIG_ESP32_P4_FUNCTION_EV_BOARD=y
diff --git a/examples/recorder/pipeline_wav_amr_sdcard/README.md b/examples/recorder/pipeline_wav_amr_sdcard/README.md
index f42cb4d95..67ff44e0e 100644
--- a/examples/recorder/pipeline_wav_amr_sdcard/README.md
+++ b/examples/recorder/pipeline_wav_amr_sdcard/README.md
@@ -34,7 +34,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
diff --git a/examples/recorder/pipeline_wav_amr_sdcard/README_CN.md b/examples/recorder/pipeline_wav_amr_sdcard/README_CN.md
index 9a30416e7..fc1dec11b 100644
--- a/examples/recorder/pipeline_wav_amr_sdcard/README_CN.md
+++ b/examples/recorder/pipeline_wav_amr_sdcard/README_CN.md
@@ -34,7 +34,7 @@
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
diff --git a/examples/recorder/pipeline_wav_amr_sdcard/main/idf_component.yml b/examples/recorder/pipeline_wav_amr_sdcard/main/idf_component.yml
new file mode 100644
index 000000000..387bd9814
--- /dev/null
+++ b/examples/recorder/pipeline_wav_amr_sdcard/main/idf_component.yml
@@ -0,0 +1,9 @@
+dependencies:
+ espressif/esp_hosted:
+ version: "~0.0.9"
+ rules:
+ - if: "target in [esp32p4]"
+ espressif/esp_wifi_remote:
+ version: "~0.3.0"
+ rules:
+ - if: "target in [esp32p4]"
\ No newline at end of file
diff --git a/examples/recorder/pipeline_wav_amr_sdcard/sdkconfig.defaults.esp32p4 b/examples/recorder/pipeline_wav_amr_sdcard/sdkconfig.defaults.esp32p4
new file mode 100644
index 000000000..17c9bf436
--- /dev/null
+++ b/examples/recorder/pipeline_wav_amr_sdcard/sdkconfig.defaults.esp32p4
@@ -0,0 +1,20 @@
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32p4"
+CONFIG_IDF_TARGET_ESP32P4=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_360=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=360
+CONFIG_IDF_EXPERIMENTAL_FEATURES=y
+
+#
+# SPI RAM config
+#
+CONFIG_SPIRAM=y
+CONFIG_SPIRAM_SPEED_200M=y
+CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
+
+#
+# Audio HAL
+#
+CONFIG_ESP32_P4_FUNCTION_EV_BOARD=y
diff --git a/examples/speech_recognition/vad/README.md b/examples/speech_recognition/vad/README.md
index 2a5430040..601d90469 100755
--- a/examples/speech_recognition/vad/README.md
+++ b/examples/speech_recognition/vad/README.md
@@ -28,7 +28,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -50,7 +50,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/speech_recognition/vad/README_CN.md b/examples/speech_recognition/vad/README_CN.md
index c839e9fa7..625c3af23 100644
--- a/examples/speech_recognition/vad/README_CN.md
+++ b/examples/speech_recognition/vad/README_CN.md
@@ -27,7 +27,7 @@ mic ---> codec_chip ---> i2s_stream ---> filter ---> raw ---> vad_process ---> o
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -49,7 +49,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/speech_recognition/wwe/README.md b/examples/speech_recognition/wwe/README.md
index ba0c3700a..09ccb50b2 100644
--- a/examples/speech_recognition/wwe/README.md
+++ b/examples/speech_recognition/wwe/README.md
@@ -39,17 +39,17 @@ If you choose to store the data in microSD card or choose ESP32 based developmen
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### IDF Branch
-- The command to switch to IDF release/v4.4 branch is as follows:
+- The command to switch to IDF release/v5.0 branch is as follows:
```
cd $IDF_PATH
git checkout master
git pull
-git checkout release/v4.4
+git checkout release/v5.0
git submodule update --init --recursive
```
diff --git a/examples/speech_recognition/wwe/README_CN.md b/examples/speech_recognition/wwe/README_CN.md
index 74692e36e..7a7080e9e 100644
--- a/examples/speech_recognition/wwe/README_CN.md
+++ b/examples/speech_recognition/wwe/README_CN.md
@@ -39,18 +39,18 @@ Recommended model partition size: 4152KB
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### IDF 分支
-- IDF release/v4.4 分支切换命令如下:
+- IDF release/v5.0 分支切换命令如下:
```
cd $IDF_PATH
git checkout master
git pull
-git checkout release/v4.4
+git checkout release/v5.0
git submodule update --init --recursive
```
diff --git a/examples/speech_recognition/wwe/main/idf_component.yml b/examples/speech_recognition/wwe/main/idf_component.yml
new file mode 100644
index 000000000..387bd9814
--- /dev/null
+++ b/examples/speech_recognition/wwe/main/idf_component.yml
@@ -0,0 +1,9 @@
+dependencies:
+ espressif/esp_hosted:
+ version: "~0.0.9"
+ rules:
+ - if: "target in [esp32p4]"
+ espressif/esp_wifi_remote:
+ version: "~0.3.0"
+ rules:
+ - if: "target in [esp32p4]"
\ No newline at end of file
diff --git a/examples/speech_recognition/wwe/main/main.c b/examples/speech_recognition/wwe/main/main.c
index 772459877..a84a31e93 100644
--- a/examples/speech_recognition/wwe/main/main.c
+++ b/examples/speech_recognition/wwe/main/main.c
@@ -346,15 +346,17 @@ static void start_recorder()
#endif
recorder_sr_cfg.afe_cfg.aec_init = RECORD_HARDWARE_AEC;
recorder_sr_cfg.afe_cfg.agc_mode = AFE_MN_PEAK_NO_AGC;
-#if (CONFIG_ESP32_S3_KORVO2_V3_BOARD == 1) && (CONFIG_AFE_MIC_NUM == 1)
+#if (CONFIG_ESP32_S3_KORVO2_V3_BOARD == 1 || CONFIG_ESP32_P4_FUNCTION_EV_BOARD == 1) && (CONFIG_AFE_MIC_NUM == 1)
recorder_sr_cfg.afe_cfg.pcm_config.mic_num = 1;
recorder_sr_cfg.afe_cfg.pcm_config.ref_num = 1;
recorder_sr_cfg.afe_cfg.pcm_config.total_ch_num = 2;
+ recorder_sr_cfg.afe_cfg.wakenet_mode = DET_MODE_90;
recorder_sr_cfg.input_order[0] = DAT_CH_0;
recorder_sr_cfg.input_order[1] = DAT_CH_1;
-
+#if defined(CONFIG_ESP32_S3_KORVO2_V3_BOARD)
es7210_mic_select(ES7210_INPUT_MIC1 | ES7210_INPUT_MIC3);
#endif
+#endif
#if RECORDER_ENC_ENABLE
recorder_encoder_cfg_t recorder_encoder_cfg = { 0 };
diff --git a/examples/speech_recognition/wwe/sdkconfig.defaults.esp32p4 b/examples/speech_recognition/wwe/sdkconfig.defaults.esp32p4
new file mode 100644
index 000000000..2a35601c3
--- /dev/null
+++ b/examples/speech_recognition/wwe/sdkconfig.defaults.esp32p4
@@ -0,0 +1,83 @@
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32p4"
+CONFIG_IDF_TARGET_ESP32P4=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_360=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=360
+CONFIG_IDF_EXPERIMENTAL_FEATURES=y
+
+#
+# SPI RAM config
+#
+CONFIG_SPIRAM=y
+CONFIG_SPIRAM_SPEED_200M=y
+CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
+
+#
+# Serial flasher config
+#
+CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y
+CONFIG_ESPTOOLPY_FLASHSIZE="8MB"
+# end of Serial flasher config
+
+#
+# Partition Table
+#
+# CONFIG_PARTITION_TABLE_SINGLE_APP is not set
+# CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE is not set
+# CONFIG_PARTITION_TABLE_TWO_OTA is not set
+CONFIG_PARTITION_TABLE_CUSTOM=y
+CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv"
+CONFIG_PARTITION_TABLE_FILENAME="partitions.csv"
+CONFIG_PARTITION_TABLE_MD5=y
+# end of Partition Table
+
+#
+# Audio HAL
+#
+CONFIG_ESP32_P4_FUNCTION_EV_BOARD=y
+
+#
+# DSP Library
+#
+CONFIG_DSP_ANSI=y
+CONFIG_DSP_OPTIMIZATION=0
+# CONFIG_DSP_MAX_FFT_SIZE_512 is not set
+# CONFIG_DSP_MAX_FFT_SIZE_1024 is not set
+# CONFIG_DSP_MAX_FFT_SIZE_2048 is not set
+CONFIG_DSP_MAX_FFT_SIZE_4096=y
+# CONFIG_DSP_MAX_FFT_SIZE_8192 is not set
+# CONFIG_DSP_MAX_FFT_SIZE_16384 is not set
+# CONFIG_DSP_MAX_FFT_SIZE_32768 is not set
+CONFIG_DSP_MAX_FFT_SIZE=4096
+# end of DSP Library
+# end of Component config
+
+#
+# ESP Speech Recognition
+#
+CONFIG_MODEL_IN_FLASH=y
+# CONFIG_MODEL_IN_SDCARD is not set
+CONFIG_USE_AFE=y
+CONFIG_AFE_INTERFACE_V1=y
+CONFIG_USE_WAKENET=y
+# CONFIG_SR_WN_WN8_ALEXA is not set
+CONFIG_SR_WN_WN9_HILEXIN=y
+# CONFIG_SR_WN_WN9_XIAOAITONGXUE is not set
+# CONFIG_SR_WN_WN9_ALEXA is not set
+# CONFIG_SR_WN_WN9_HIESP is not set
+# CONFIG_SR_WN_WN9_NIHAOXIAOZHI is not set
+# CONFIG_SR_WN_WN9_CUSTOMWORD is not set
+# CONFIG_SR_WN_LOAD_MULIT_WORD is not set
+CONFIG_USE_MULTINET=y
+# CONFIG_SR_MN_CN_NONE is not set
+# CONFIG_SR_MN_CN_MULTINET5_RECOGNITION_QUANT8 is not set
+# CONFIG_SR_MN_CN_MULTINET6_QUANT
+CONFIG_SR_MN_CN_MULTINET7_QUANT=y
+# CONFIG_SR_MN_CN_MULTINET6_AC_QUANT is not set
+CONFIG_SR_MN_EN_NONE=y
+# CONFIG_SR_MN_EN_MULTINET5_SINGLE_RECOGNITION_QUANT8 is not set
+# CONFIG_SR_MN_EN_MULTINET6_QUANT is not set
+# CONFIG_SR_MN_EN_MULTINET7_QUANT is not set
+# end of ESP Speech Recognition
\ No newline at end of file
diff --git a/examples/speech_recognition/wwe/sdkconfig.defaults.esp32s3 b/examples/speech_recognition/wwe/sdkconfig.defaults.esp32s3
index 3fa471fb5..95b4872e5 100644
--- a/examples/speech_recognition/wwe/sdkconfig.defaults.esp32s3
+++ b/examples/speech_recognition/wwe/sdkconfig.defaults.esp32s3
@@ -8,7 +8,6 @@ CONFIG_IDF_FIRMWARE_CHIP_ID=0x0009
# Serial flasher config
#
CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y
-
# end of Serial flasher config
#
diff --git a/examples/system/battery/README.md b/examples/system/battery/README.md
index acb2ca3e4..916f5278d 100644
--- a/examples/system/battery/README.md
+++ b/examples/system/battery/README.md
@@ -20,7 +20,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -58,7 +58,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/system/battery/README_CN.md b/examples/system/battery/README_CN.md
index 32d360acc..e5b5ce733 100644
--- a/examples/system/battery/README_CN.md
+++ b/examples/system/battery/README_CN.md
@@ -20,7 +20,7 @@
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -58,7 +58,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/system/coredump/README.md b/examples/system/coredump/README.md
index 14aca186c..1b98aaa23 100644
--- a/examples/system/coredump/README.md
+++ b/examples/system/coredump/README.md
@@ -19,7 +19,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -51,7 +51,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/system/coredump/README_CN.md b/examples/system/coredump/README_CN.md
index 4eddf11ab..1339c57c1 100644
--- a/examples/system/coredump/README_CN.md
+++ b/examples/system/coredump/README_CN.md
@@ -20,7 +20,7 @@
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -52,7 +52,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/examples/system/coredump/main/idf_component.yml b/examples/system/coredump/main/idf_component.yml
new file mode 100644
index 000000000..387bd9814
--- /dev/null
+++ b/examples/system/coredump/main/idf_component.yml
@@ -0,0 +1,9 @@
+dependencies:
+ espressif/esp_hosted:
+ version: "~0.0.9"
+ rules:
+ - if: "target in [esp32p4]"
+ espressif/esp_wifi_remote:
+ version: "~0.3.0"
+ rules:
+ - if: "target in [esp32p4]"
\ No newline at end of file
diff --git a/examples/system/coredump/sdkconfig.defaults.esp32p4 b/examples/system/coredump/sdkconfig.defaults.esp32p4
new file mode 100644
index 000000000..17c9bf436
--- /dev/null
+++ b/examples/system/coredump/sdkconfig.defaults.esp32p4
@@ -0,0 +1,20 @@
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32p4"
+CONFIG_IDF_TARGET_ESP32P4=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_360=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=360
+CONFIG_IDF_EXPERIMENTAL_FEATURES=y
+
+#
+# SPI RAM config
+#
+CONFIG_SPIRAM=y
+CONFIG_SPIRAM_SPEED_200M=y
+CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y
+
+#
+# Audio HAL
+#
+CONFIG_ESP32_P4_FUNCTION_EV_BOARD=y
diff --git a/examples/system/wpa2_enterprise/README.md b/examples/system/wpa2_enterprise/README.md
index 3a7f88c8c..e044d0f16 100644
--- a/examples/system/wpa2_enterprise/README.md
+++ b/examples/system/wpa2_enterprise/README.md
@@ -20,7 +20,7 @@ This example runs on the boards that are marked with a green checkbox in the [ta
### Default IDF Branch
-This example supports IDF release/v3.3 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
+This example supports IDF release/v5.0 and later branches. By default, it runs on ADF's built-in branch `$ADF_PATH/esp-idf`.
### Configuration
@@ -78,7 +78,7 @@ idf.py -p PORT flash monitor
To exit the serial monitor, type ``Ctrl-]``.
-See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v4.2/esp32/index.html) for full steps to configure and build an ESP-IDF project.
+See [ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/index.html) for full steps to configure and build an ESP-IDF project.
## How to Use the Example
diff --git a/examples/system/wpa2_enterprise/README_CN.md b/examples/system/wpa2_enterprise/README_CN.md
index 0bdb72e7a..d3ec28ac5 100644
--- a/examples/system/wpa2_enterprise/README_CN.md
+++ b/examples/system/wpa2_enterprise/README_CN.md
@@ -20,7 +20,7 @@
### IDF 默认分支
-本例程支持 IDF release/v3.3 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
+本例程支持 IDF release/v5.0 及以后的分支,例程默认使用 ADF 的內建分支 `$ADF_PATH/esp-idf`。
### 配置
@@ -78,7 +78,7 @@ idf.py -p PORT flash monitor
退出调试界面使用 ``Ctrl-]``。
-有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.2/esp32/index.html)。
+有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅 [《ESP-IDF 编程指南》](https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.3/esp32/index.html)。
## 如何使用例程
diff --git a/idf_patches/esp32p4_hosted_and_sdcard_coexistent.patch b/idf_patches/esp32p4_hosted_and_sdcard_coexistent.patch
new file mode 100644
index 000000000..05d1d906c
--- /dev/null
+++ b/idf_patches/esp32p4_hosted_and_sdcard_coexistent.patch
@@ -0,0 +1,554 @@
+From 965db05c3e0ec91c9db8a674724389649dea1209 Mon Sep 17 00:00:00 2001
+From: xutao
+Date: Tue, 20 Aug 2024 15:00:21 +0800
+Subject: [PATCH] sdmmc: support slot0 and slot coexist
+
+---
+ .../include/driver/sdmmc_default_configs.h | 7 +-
+ .../include/driver/sdmmc_host.h | 42 +++-
+ components/esp_driver_sdmmc/src/sdmmc_host.c | 224 ++++++++++++++++--
+ components/soc/include/soc/sdmmc_periph.h | 32 ++-
+ 4 files changed, 260 insertions(+), 45 deletions(-)
+
+diff --git a/components/esp_driver_sdmmc/include/driver/sdmmc_default_configs.h b/components/esp_driver_sdmmc/include/driver/sdmmc_default_configs.h
+index add6c4c859..7b72fdb201 100644
+--- a/components/esp_driver_sdmmc/include/driver/sdmmc_default_configs.h
++++ b/components/esp_driver_sdmmc/include/driver/sdmmc_default_configs.h
+@@ -1,5 +1,5 @@
+ /*
+- * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
++ * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+@@ -26,7 +26,8 @@ extern "C" {
+ .flags = SDMMC_HOST_FLAG_8BIT | \
+ SDMMC_HOST_FLAG_4BIT | \
+ SDMMC_HOST_FLAG_1BIT | \
+- SDMMC_HOST_FLAG_DDR, \
++ SDMMC_HOST_FLAG_DDR | \
++ SDMMC_HOST_FLAG_DEINIT_ARG, \
+ .slot = SDMMC_HOST_SLOT_1, \
+ .max_freq_khz = SDMMC_FREQ_DEFAULT, \
+ .io_voltage = 3.3f, \
+@@ -37,7 +38,7 @@ extern "C" {
+ .set_card_clk = &sdmmc_host_set_card_clk, \
+ .set_cclk_always_on = &sdmmc_host_set_cclk_always_on, \
+ .do_transaction = &sdmmc_host_do_transaction, \
+- .deinit = &sdmmc_host_deinit, \
++ .deinit_p = &sdmmc_host_deinit_slot, \
+ .io_int_enable = sdmmc_host_io_int_enable, \
+ .io_int_wait = sdmmc_host_io_int_wait, \
+ .command_timeout_ms = 0, \
+diff --git a/components/esp_driver_sdmmc/include/driver/sdmmc_host.h b/components/esp_driver_sdmmc/include/driver/sdmmc_host.h
+index e596835005..504494607f 100644
+--- a/components/esp_driver_sdmmc/include/driver/sdmmc_host.h
++++ b/components/esp_driver_sdmmc/include/driver/sdmmc_host.h
+@@ -58,14 +58,21 @@ typedef struct {
+ */
+ } sdmmc_slot_config_t;
+
++/**
++ * SD/MMC host state structure
++ */
++typedef struct {
++ bool host_initialized; ///< Whether the host is initialized
++ int num_of_init_slots; ///< Number of initialized slots
++} sdmmc_host_state_t;
++
+ /**
+ * @brief Initialize SDMMC host peripheral
+ *
+ * @note This function is not thread safe
+ *
+ * @return
+- * - ESP_OK on success
+- * - ESP_ERR_INVALID_STATE if sdmmc_host_init was already called
++ * - ESP_OK on success or if sdmmc_host_init was already initialized with this function
+ * - ESP_ERR_NO_MEM if memory can not be allocated
+ */
+ esp_err_t sdmmc_host_init(void);
+@@ -201,13 +208,29 @@ esp_err_t sdmmc_host_io_int_enable(int slot);
+ esp_err_t sdmmc_host_io_int_wait(int slot, TickType_t timeout_ticks);
+
+ /**
+- * @brief Disable SDMMC host and release allocated resources
++ * @brief Disable SDMMC host and release allocated resources gracefully
++ *
++ * @note If the are more than 1 active slots, this function will just decrease the reference count
++ * and won't actually disable the host until the last slot is disabled
++ *
++ * @note This function is not thread safe
++ *
++ * @param slot slot number (SDMMC_HOST_SLOT_0 or SDMMC_HOST_SLOT_1)
++ * @return
++ * - ESP_OK on success
++ * - ESP_ERR_INVALID_STATE if SDMMC host has not been initialized
++ * - ESP_ERR_INVALID_ARG if invalid slot number is used
++ */
++esp_err_t sdmmc_host_deinit_slot(int slot);
++
++/**
++ * @brief Disable SDMMC host and release allocated resources forcefully
+ *
+ * @note This function is not thread safe
+ *
+ * @return
+ * - ESP_OK on success
+- * - ESP_ERR_INVALID_STATE if sdmmc_host_init function has not been called
++ * - ESP_ERR_INVALID_STATE if SDMMC host has not been initialized
+ */
+ esp_err_t sdmmc_host_deinit(void);
+
+@@ -258,6 +281,17 @@ esp_err_t sdmmc_host_set_input_delay(int slot, sdmmc_delay_phase_t delay_phase);
+ */
+ esp_err_t sdmmc_host_get_dma_info(int slot, esp_dma_mem_info_t *dma_mem_info);
+
++/**
++ * @brief Get the state of SDMMC host
++ *
++ * @param[out] state output parameter for SDMMC host state structure
++ *
++ * @return
++ * - ESP_OK on success
++ * - ESP_ERR_INVALID_ARG on invalid argument
++ */
++esp_err_t sdmmc_host_get_state(sdmmc_host_state_t* state);
++
+ #ifdef __cplusplus
+ }
+ #endif
+diff --git a/components/esp_driver_sdmmc/src/sdmmc_host.c b/components/esp_driver_sdmmc/src/sdmmc_host.c
+index 2362e03028..c2ff4c3ec0 100644
+--- a/components/esp_driver_sdmmc/src/sdmmc_host.c
++++ b/components/esp_driver_sdmmc/src/sdmmc_host.c
+@@ -6,6 +6,7 @@
+
+ #include
+ #include
++#include
+ #include
+ #include "esp_log.h"
+ #include "esp_intr_alloc.h"
+@@ -45,6 +46,22 @@
+ #define SDMMC_CLK_SRC_ATOMIC()
+ #endif
+
++/* Default disabled interrupts (on init):
++ * SDMMC_INTMASK_RXDR,
++ * SDMMC_INTMASK_TXDR,
++ * SDMMC_INTMASK_BCI,
++ * SDMMC_INTMASK_ACD,
++ * SDMMC_INTMASK_IO_SLOT1,
++ * SDMMC_INTMASK_IO_SLOT0
++ */
++// Default enabled interrupts (sdio is enabled only when use):
++#define SDMMC_INTMASK_DEFAULT \
++ (SDMMC_INTMASK_CD | SDMMC_INTMASK_RESP_ERR | SDMMC_INTMASK_CMD_DONE | SDMMC_INTMASK_DATA_OVER | \
++ SDMMC_INTMASK_RCRC | SDMMC_INTMASK_DCRC | SDMMC_INTMASK_RTO | SDMMC_INTMASK_DTO | SDMMC_INTMASK_HTO | \
++ SDMMC_INTMASK_HLE | \
++ SDMMC_INTMASK_SBE | \
++ SDMMC_INTMASK_EBE)
++
+ static const char *TAG = "sdmmc_periph";
+
+ /**
+@@ -54,6 +71,11 @@ typedef struct slot_ctx_t {
+ size_t slot_width;
+ sdmmc_slot_io_info_t slot_gpio_num;
+ bool use_gpio_matrix;
++#if SOC_SDMMC_NUM_SLOTS >= 2
++ int slot_host_div;
++ uint32_t slot_freq_khz;
++ sdmmc_ll_delay_phase_t slot_ll_delay_phase;
++#endif
+ } slot_ctx_t;
+
+ /**
+@@ -65,13 +87,24 @@ typedef struct host_ctx_t {
+ SemaphoreHandle_t io_intr_event;
+ sdmmc_hal_context_t hal;
+ slot_ctx_t slot_ctx[SOC_SDMMC_NUM_SLOTS];
++#if SOC_SDMMC_NUM_SLOTS >= 2
++ uint8_t num_of_init_slots;
++ int8_t active_slot_num;
++#endif
+ } host_ctx_t;
+
+-static host_ctx_t s_host_ctx;
++#if SOC_SDMMC_NUM_SLOTS >= 2
++static host_ctx_t s_host_ctx = {.active_slot_num = -1};
++#else
++static host_ctx_t s_host_ctx = {0};
++#endif
+
+ static void sdmmc_isr(void *arg);
+ static void sdmmc_host_dma_init(void);
+ static esp_err_t sdmmc_host_pullup_en_internal(int slot, int width);
++#if SOC_SDMMC_NUM_SLOTS >= 2
++static void sdmmc_host_change_to_slot(int slot);
++#endif
+
+ esp_err_t sdmmc_host_reset(void)
+ {
+@@ -227,6 +260,13 @@ static int sdmmc_host_calc_freq(const int host_div, const int card_div)
+ return clk_src_freq_hz / host_div / ((card_div == 0) ? 1 : card_div * 2) / 1000;
+ }
+
++static void sdmmc_host_set_data_timeout(uint32_t freq_khz)
++{
++ const uint32_t data_timeout_ms = 100;
++ uint32_t data_timeout_cycles = data_timeout_ms * freq_khz;
++ sdmmc_ll_set_data_timeout(s_host_ctx.hal.dev, data_timeout_cycles);
++}
++
+ esp_err_t sdmmc_host_set_card_clk(int slot, uint32_t freq_khz)
+ {
+ if (!(slot == 0 || slot == 1)) {
+@@ -269,13 +309,15 @@ esp_err_t sdmmc_host_set_card_clk(int slot, uint32_t freq_khz)
+ return err;
+ }
+
+- // set data timeout
+- const uint32_t data_timeout_ms = 100;
+- uint32_t data_timeout_cycles = data_timeout_ms * freq_khz;
+- sdmmc_ll_set_data_timeout(s_host_ctx.hal.dev, data_timeout_cycles);
++ sdmmc_host_set_data_timeout(freq_khz);
+ // always set response timeout to highest value, it's small enough anyway
+ sdmmc_ll_set_response_timeout(s_host_ctx.hal.dev, 255);
+-
++#if SOC_SDMMC_NUM_SLOTS >= 2
++ // save the current frequency
++ s_host_ctx.slot_ctx[slot].slot_freq_khz = freq_khz;
++ // save host_div value
++ s_host_ctx.slot_ctx[slot].slot_host_div = host_div;
++#endif
+ return ESP_OK;
+ }
+
+@@ -338,6 +380,10 @@ esp_err_t sdmmc_host_set_input_delay(int slot, sdmmc_delay_phase_t delay_phase)
+ int phase_diff_ps = src_clk_period_ps * sdmmc_ll_get_clock_div(s_host_ctx.hal.dev) / SOC_SDMMC_DELAY_PHASE_NUM;
+ ESP_LOGD(TAG, "difference between input delay phases is %d ps", phase_diff_ps);
+ ESP_LOGI(TAG, "host sampling edge is delayed by %d ps", phase_diff_ps * delay_phase_num);
++#if SOC_SDMMC_NUM_SLOTS >= 2
++ // save the current phase delay setting
++ s_host_ctx.slot_ctx[slot].slot_ll_delay_phase = phase;
++#endif
+ #endif
+
+ return ESP_OK;
+@@ -348,6 +394,12 @@ esp_err_t sdmmc_host_start_command(int slot, sdmmc_hw_cmd_t cmd, uint32_t arg)
+ if (!(slot == 0 || slot == 1)) {
+ return ESP_ERR_INVALID_ARG;
+ }
++
++#if SOC_SDMMC_NUM_SLOTS >= 2
++ // change the host settings to the appropriate slot before starting the transaction
++ sdmmc_host_change_to_slot(slot);
++#endif
++
+ // if this isn't a clock update command, check the card detect status
+ if (!sdmmc_ll_is_card_detected(s_host_ctx.hal.dev, slot) && !cmd.update_clk_reg) {
+ return ESP_ERR_NOT_FOUND;
+@@ -378,10 +430,24 @@ esp_err_t sdmmc_host_start_command(int slot, sdmmc_hw_cmd_t cmd, uint32_t arg)
+ return ESP_OK;
+ }
+
++static void sdmmc_host_intmask_clear_disable(void)
++{
++ SDMMC.rintsts.val = 0xffffffff;
++ SDMMC.intmask.val = 0;
++ SDMMC.ctrl.int_enable = 0;
++}
++
++static void sdmmc_host_intmask_set_enable(uint32_t mask)
++{
++ SDMMC.intmask.val = mask;
++ SDMMC.ctrl.int_enable = 1;
++}
++
+ esp_err_t sdmmc_host_init(void)
+ {
+ if (s_host_ctx.intr_handle) {
+- return ESP_ERR_INVALID_STATE;
++ ESP_LOGD(TAG, "%s: SDMMC host already initialized", __func__);
++ return ESP_OK;
+ }
+
+ //enable bus clock for registers
+@@ -406,9 +472,7 @@ esp_err_t sdmmc_host_init(void)
+ ESP_LOGD(TAG, "peripheral version %"PRIx32", hardware config %08"PRIx32, SDMMC.verid, SDMMC.hcon.val);
+
+ // Clear interrupt status and set interrupt mask to known state
+- SDMMC.rintsts.val = 0xffffffff;
+- SDMMC.intmask.val = 0;
+- SDMMC.ctrl.int_enable = 0;
++ sdmmc_host_intmask_clear_disable();
+
+ // Allocate event queue
+ s_host_ctx.event_queue = xQueueCreate(SDMMC_EVENT_QUEUE_LENGTH, sizeof(sdmmc_event_t));
+@@ -431,15 +495,7 @@ esp_err_t sdmmc_host_init(void)
+ return ret;
+ }
+ // Enable interrupts
+- SDMMC.intmask.val =
+- SDMMC_INTMASK_CD |
+- SDMMC_INTMASK_CMD_DONE |
+- SDMMC_INTMASK_DATA_OVER |
+- SDMMC_INTMASK_RCRC | SDMMC_INTMASK_DCRC |
+- SDMMC_INTMASK_RTO | SDMMC_INTMASK_DTO | SDMMC_INTMASK_HTO |
+- SDMMC_INTMASK_SBE | SDMMC_INTMASK_EBE |
+- SDMMC_INTMASK_RESP_ERR | SDMMC_INTMASK_HLE; //sdio is enabled only when use.
+- SDMMC.ctrl.int_enable = 1;
++ sdmmc_host_intmask_set_enable(SDMMC_INTMASK_DEFAULT);
+
+ // Disable generation of Busy Clear Interrupt
+ SDMMC.cardthrctl.busy_clr_int_en = 0;
+@@ -537,6 +593,8 @@ esp_err_t sdmmc_host_init_slot(int slot, const sdmmc_slot_config_t *slot_config)
+ return ESP_ERR_INVALID_ARG;
+ }
+ s_host_ctx.slot_ctx[slot].slot_width = slot_width;
++ s_host_ctx.slot_ctx[slot].slot_gpio_num.cd = gpio_cd;
++ s_host_ctx.slot_ctx[slot].slot_gpio_num.wp = gpio_wp;
+
+ bool pin_not_set = s_check_pin_not_set(slot_config);
+ //SD driver behaviour is: all pins not defined == using iomux
+@@ -590,7 +648,7 @@ esp_err_t sdmmc_host_init_slot(int slot, const sdmmc_slot_config_t *slot_config)
+
+ bool pullup = slot_config->flags & SDMMC_SLOT_FLAG_INTERNAL_PULLUP;
+ if (pullup) {
+- sdmmc_host_pullup_en_internal(slot, slot_config->width);
++ sdmmc_host_pullup_en_internal(slot, s_host_ctx.slot_ctx[slot].slot_width);
+ }
+
+ configure_pin(s_host_ctx.slot_ctx[slot].slot_gpio_num.clk, sdmmc_slot_gpio_sig[slot].clk, GPIO_MODE_OUTPUT, "clk", use_gpio_matrix);
+@@ -664,14 +722,17 @@ esp_err_t sdmmc_host_init_slot(int slot, const sdmmc_slot_config_t *slot_config)
+ return ret;
+ }
+
++#if SOC_SDMMC_NUM_SLOTS >= 2
++ if (s_host_ctx.num_of_init_slots < SOC_SDMMC_NUM_SLOTS && s_host_ctx.active_slot_num != slot) {
++ s_host_ctx.num_of_init_slots += 1;
++ }
++ s_host_ctx.active_slot_num = slot;
++#endif
+ return ESP_OK;
+ }
+
+-esp_err_t sdmmc_host_deinit(void)
++static void sdmmc_host_deinit_internal(void)
+ {
+- if (!s_host_ctx.intr_handle) {
+- return ESP_ERR_INVALID_STATE;
+- }
+ esp_intr_free(s_host_ctx.intr_handle);
+ s_host_ctx.intr_handle = NULL;
+ vQueueDelete(s_host_ctx.event_queue);
+@@ -684,10 +745,103 @@ esp_err_t sdmmc_host_deinit(void)
+ SDMMC_RCC_ATOMIC() {
+ sdmmc_ll_enable_bus_clock(s_host_ctx.hal.dev, false);
+ }
++}
++
++static int sdmmc_host_decrease_init_slot_num(void)
++{
++#if SOC_SDMMC_NUM_SLOTS >= 2
++ s_host_ctx.active_slot_num = -1; // Reset the active slot number, will be set again before the next transaction
++ if (s_host_ctx.num_of_init_slots > 0) {
++ s_host_ctx.num_of_init_slots -= 1;
++ }
++ return s_host_ctx.num_of_init_slots;
++#else
++ return 0;
++#endif
++}
++
++static void sdmmc_host_deinit_slot_internal(int slot)
++{
++ int8_t gpio_pin_num;
++ sdmmc_slot_io_info_t* gpio = &s_host_ctx.slot_ctx[slot].slot_gpio_num;
++ // Disconnect signals and reset used GPIO pins
++ for (size_t i = 0; i < (sizeof(gpio->val) / (sizeof(gpio->val[0]))); i++) {
++ gpio_pin_num = gpio->val[i];
++ if (gpio_pin_num != GPIO_NUM_NC && GPIO_IS_VALID_GPIO(gpio_pin_num)) {
++ gpio_reset_pin(gpio_pin_num);
++ }
++ }
++ // Reset the slot context
++ memset(&(s_host_ctx.slot_ctx[slot]), 0, sizeof(slot_ctx_t));
++}
++
++esp_err_t sdmmc_host_deinit_slot(int slot)
++{
++ if (!(slot == 0 || slot == 1)) {
++ return ESP_ERR_INVALID_ARG;
++ }
++ if (!s_host_ctx.intr_handle) {
++ return ESP_ERR_INVALID_STATE;
++ }
++ sdmmc_host_deinit_slot_internal(slot);
++ int num_of_init_slots = sdmmc_host_decrease_init_slot_num();
++ if (num_of_init_slots != 0) {
++ ESP_LOGD(TAG, "SDMMC host not deinitialized yet, number of initialized slots: %d",
++ num_of_init_slots);
++ return ESP_OK;
++ }
++ sdmmc_host_deinit_internal();
++ ESP_LOGD(TAG, "SDMMC host deinitialized");
+
+ return ESP_OK;
+ }
+
++esp_err_t sdmmc_host_deinit(void)
++{
++ if (!s_host_ctx.intr_handle) {
++ return ESP_ERR_INVALID_STATE;
++ }
++ for (int slot = 0; slot < SOC_SDMMC_NUM_SLOTS; slot++) {
++ sdmmc_host_deinit_slot_internal(slot);
++ }
++ sdmmc_host_deinit_internal();
++ ESP_LOGD(TAG, "SDMMC host deinitialized");
++
++ return ESP_OK;
++}
++
++static bool sdmmc_host_slot_initialized(int slot)
++{
++ if (s_host_ctx.slot_ctx[slot].slot_host_div == 0) {
++ return false;
++ }
++ return true;
++}
++
++#if SOC_SDMMC_NUM_SLOTS >= 2
++static void sdmmc_host_change_to_slot(int slot)
++{
++ // If the slot is not initialized (slot_host_div not set) or already active, do nothing
++ if (s_host_ctx.active_slot_num == slot || sdmmc_host_slot_initialized(slot) == false) {
++ return;
++ }
++ s_host_ctx.active_slot_num = slot;
++
++ // Apply the appropriate saved host settings for the new slot before starting the transaction
++ SDMMC_CLK_SRC_ATOMIC() {
++ sdmmc_ll_set_clock_div(s_host_ctx.hal.dev, s_host_ctx.slot_ctx[slot].slot_host_div);
++#if !CONFIG_IDF_TARGET_ESP32
++ sdmmc_ll_set_din_delay(s_host_ctx.hal.dev, s_host_ctx.slot_ctx[slot].slot_ll_delay_phase);
++#endif
++ }
++ sdmmc_host_set_data_timeout(s_host_ctx.slot_ctx[slot].slot_freq_khz);
++
++ // Wait for the clock to propagate
++ esp_rom_delay_us(10);
++
++}
++#endif // SOC_SDMMC_NUM_SLOTS >= 2
++
+ esp_err_t sdmmc_host_wait_for_event(int tick_count, sdmmc_event_t *out_event)
+ {
+ if (!out_event) {
+@@ -758,6 +912,7 @@ esp_err_t sdmmc_host_set_cclk_always_on(int slot, bool cclk_always_on)
+ if (!(slot == 0 || slot == 1)) {
+ return ESP_ERR_INVALID_ARG;
+ }
++ // During initialization this is not protected by a mutex
+ if (cclk_always_on) {
+ sdmmc_ll_enable_card_clock_low_power(s_host_ctx.hal.dev, slot, false);
+ } else {
+@@ -925,10 +1080,29 @@ static esp_err_t sdmmc_host_pullup_en_internal(int slot, int width)
+
+ esp_err_t sdmmc_host_get_dma_info(int slot, esp_dma_mem_info_t *dma_mem_info)
+ {
+- if (!(slot == 0 || slot == 1)) {
++ if (!(slot == 0 || slot == 1) || dma_mem_info == NULL) {
+ return ESP_ERR_INVALID_ARG;
+ }
+ dma_mem_info->extra_heap_caps = MALLOC_CAP_DMA;
+ dma_mem_info->dma_alignment_bytes = 4;
+ return ESP_OK;
+ }
++
++esp_err_t sdmmc_host_get_state(sdmmc_host_state_t* state)
++{
++ if (state == NULL) {
++ return ESP_ERR_INVALID_ARG;
++ }
++
++ if (s_host_ctx.intr_handle) {
++ state->host_initialized = true;
++ state->num_of_init_slots = 1;
++ } else {
++ state->host_initialized = false;
++ state->num_of_init_slots = 0;
++ }
++#if SOC_SDMMC_NUM_SLOTS >= 2
++ state->num_of_init_slots = s_host_ctx.num_of_init_slots;
++#endif
++ return ESP_OK;
++}
+diff --git a/components/soc/include/soc/sdmmc_periph.h b/components/soc/include/soc/sdmmc_periph.h
+index 603e578480..fe646f5325 100644
+--- a/components/soc/include/soc/sdmmc_periph.h
++++ b/components/soc/include/soc/sdmmc_periph.h
+@@ -1,5 +1,5 @@
+ /*
+- * SPDX-FileCopyrightText: 2015-2023 Espressif Systems (Shanghai) CO LTD
++ * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+@@ -9,6 +9,7 @@
+ //include soc related (generated) definitions
+ #include "soc/soc_caps.h"
+ #include "soc/soc_pins.h"
++#include "soc/gpio_num.h"
+ #if SOC_SDMMC_HOST_SUPPORTED
+ #include "soc/sdmmc_reg.h"
+ #include "soc/sdmmc_struct.h"
+@@ -31,7 +32,7 @@ typedef struct {
+ uint8_t card_int; /*!< Card interrupt signal in GPIO Matrix */
+ } sdmmc_slot_info_t;
+
+-/** Width and GPIO matrix signal numbers for auxillary SD host signals, one structure per slot */
++/** Width and GPIO matrix signal numbers for auxiliary SD host signals, one structure per slot */
+ extern const sdmmc_slot_info_t sdmmc_slot_info[SOC_SDMMC_NUM_SLOTS];
+
+ /**
+@@ -39,17 +40,22 @@ extern const sdmmc_slot_info_t sdmmc_slot_info[SOC_SDMMC_NUM_SLOTS];
+ * or GPIO Matrix signal numbers (if SOC_SDMMC_USE_GPIO_MATRIX is set)
+ * for the SD bus signals. Field names match SD bus signal names.
+ */
+-typedef struct {
+- uint8_t clk;
+- uint8_t cmd;
+- uint8_t d0;
+- uint8_t d1;
+- uint8_t d2;
+- uint8_t d3;
+- uint8_t d4;
+- uint8_t d5;
+- uint8_t d6;
+- uint8_t d7;
++typedef union {
++ struct {
++ gpio_num_t cd;
++ gpio_num_t wp;
++ gpio_num_t clk;
++ gpio_num_t cmd;
++ gpio_num_t d0;
++ gpio_num_t d1;
++ gpio_num_t d2;
++ gpio_num_t d3;
++ gpio_num_t d4;
++ gpio_num_t d5;
++ gpio_num_t d6;
++ gpio_num_t d7;
++ };
++ gpio_num_t val[12]; // for iteration, num of entries in struct
+ } sdmmc_slot_io_info_t;
+
+ /** GPIO pin numbers of SD bus signals, one structure per slot */
+--
+2.34.1
+
diff --git a/idf_patches/idf_v5.3_freertos.patch b/idf_patches/idf_v5.3_freertos.patch
index 95c827bc6..f1021eca0 100644
--- a/idf_patches/idf_v5.3_freertos.patch
+++ b/idf_patches/idf_v5.3_freertos.patch
@@ -1,14 +1,16 @@
-From e6618c0eb5ab722c44b6580ec7e0b6bc151e8ffc Mon Sep 17 00:00:00 2001
-From: xutao
-Date: Thu, 27 Jun 2024 21:31:32 +0800
-Subject: [PATCH] idf: add task create API for allocated stack in psram
+From 9bfb5521e4073359f7c889b019e45097b0cd2e53 Mon Sep 17 00:00:00 2001
+From: xutao <18256993190@qq.com>
+Date: Tue, 3 Sep 2024 19:55:00 +0800
+Subject: [PATCH] freertos: add task create API for allocated stack in psram
---
.../freertos_tasks_c_additions.h | 47 +++++++++++++++++++
- 1 file changed, 47 insertions(+)
+ .../include/freertos/idf_additions.h | 2 +
+ components/freertos/linker_common.lf | 1 +
+ 3 files changed, 50 insertions(+)
diff --git a/components/freertos/esp_additions/freertos_tasks_c_additions.h b/components/freertos/esp_additions/freertos_tasks_c_additions.h
-index ec2236b87a..6b864ee971 100644
+index ec2236b87ac..6b864ee971f 100644
--- a/components/freertos/esp_additions/freertos_tasks_c_additions.h
+++ b/components/freertos/esp_additions/freertos_tasks_c_additions.h
@@ -376,6 +376,53 @@ _Static_assert( tskNO_AFFINITY == ( BaseType_t ) CONFIG_FREERTOS_NO_AFFINITY, "C
@@ -65,6 +67,31 @@ index ec2236b87a..6b864ee971 100644
#if ( configUSE_TIMERS == 1 )
/*
+diff --git a/components/freertos/esp_additions/include/freertos/idf_additions.h b/components/freertos/esp_additions/include/freertos/idf_additions.h
+index 5e50dd1ba3c..4a4e2b12c22 100644
+--- a/components/freertos/esp_additions/include/freertos/idf_additions.h
++++ b/components/freertos/esp_additions/include/freertos/idf_additions.h
+@@ -107,6 +107,8 @@
+ StaticTask_t * const pxTaskBuffer,
+ const BaseType_t xCoreID );
+
++ BaseType_t xTaskCreateRestrictedPinnedToCore( const TaskParameters_t * const pxTaskDefinition, TaskHandle_t *pxCreatedTask, const BaseType_t xCoreID);
++
+ #endif /* configSUPPORT_STATIC_ALLOCATION */
+
+ /* ------------------------------------------------- Task Utilities ------------------------------------------------- */
+diff --git a/components/freertos/linker_common.lf b/components/freertos/linker_common.lf
+index 8e3f63030be..fe7d156f307 100644
+--- a/components/freertos/linker_common.lf
++++ b/components/freertos/linker_common.lf
+@@ -24,6 +24,7 @@ entries:
+ # Task Creation
+ tasks:xTaskCreatePinnedToCore (default)
+ tasks:xTaskCreateStaticPinnedToCore (default)
++ tasks:xTaskCreateRestrictedPinnedToCore (default)
+ # Task Utilities
+ tasks:xTaskGetCoreID (default)
+ tasks:xTaskGetIdleTaskHandleForCore (default)
--
2.34.1
diff --git a/tools/adf_install_patches.py b/tools/adf_install_patches.py
index 92ed40532..9d613da6c 100755
--- a/tools/adf_install_patches.py
+++ b/tools/adf_install_patches.py
@@ -37,11 +37,19 @@ def apply_patch(patches_dir_path, patch_prefix, version):
patch_version = ''
match = re.match(r'(.[0-9]+\.[0-9]+)\.(\d+)', version)
+ # Note: About the path of p4_wifi_sdcard_coex_path,
+ # it is to be compatible with the current issue of esp32P4 not being able to coexist with wifi and sdcard in IDF v5.3
+ if (version[3] >= '3'):
+ p4_wifi_sdcard_coex_path = "esp32p4_hosted_and_sdcard_coexistent.patch"
+ absolute_p4_wifi_sdcard_coex_path = os.path.join(patches_dir_path, p4_wifi_sdcard_coex_path)
+ print(f"Applying patch {absolute_p4_wifi_sdcard_coex_path}")
+ subprocess.run(["git", "apply", f"{absolute_p4_wifi_sdcard_coex_path}"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
+
if match:
# If the IDF version is in vx.x.x format, the patch file named with vx.x.x and closest to the current version will be searched first.
major_minor = match.group(1)
- patch_num = int(match.group(2))
- for patch in range(patch_num, -1, -1):
+ minor_num = int(match.group(2))
+ for patch in range(minor_num, -1, -1):
patch_files = [f for f in os.listdir(patches_dir_path) if f.startswith(f"{patch_prefix}{major_minor}.{patch}_")]
if patch_files:
patch_version = f"{major_minor}.{patch}"
@@ -60,7 +68,6 @@ def apply_patch(patches_dir_path, patch_prefix, version):
patch_version = f"{version}.0"
else:
patch_version = str(version)
-
patch_files = [f for f in os.listdir(patches_dir_path) if f.startswith(f"{patch_prefix}{patch_version}_")]
if patch_files:
for patch_file in patch_files: