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)| -|:----------- |:---------------------: | :---------------------:| :---------------------:|:---------------------: | :---------------------:| :---------------------:| :---------------------:| :---------------------:| -| | [ESP32-LyraT Development Board](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-lyrat.html) **2** | [ESP32-LyraTD-MSC Development Board](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-lyratd-msc.html) **2** | [ESP32-LyraT-Mini Development Board](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-lyrat-mini.html) | [ESP32-Korvo-DU1906 Development Board](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-korvo-du1906.html) **2** | [ESP32-LyraT-Mini Development Board](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/hw-reference/esp32s2/user-guide-esp32-s2-kaluga-1-kit.html) **2** | [ESP32-S3-Korvo-2 Development Board](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/user-guide-esp32-s3-korvo-2.html) | [ESP32-C3-Lyra Development Board](https://docs.espressif.com/projects/esp-adf/en/latest/design-guide/dev-boards/user-guide-esp32-c3-lyra.html) | [ESP32-S3-Box Development Board](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)| +|:----------- |:---------------------: | :---------------------:| :---------------------:|:---------------------: | :---------------------:| :---------------------:| :---------------------:| :---------------------:| :---------------------:| +| | [ESP32-LyraT Development Board](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-lyrat.html) **2** | [ESP32-LyraTD-MSC Development Board](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-lyratd-msc.html) **2** | [ESP32-LyraT-Mini Development Board](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-lyrat-mini.html) | [ESP32-Korvo-DU1906 Development Board](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/get-started-esp32-korvo-du1906.html) **2** | [ESP32-LyraT-Mini Development Board](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/hw-reference/esp32s2/user-guide-esp32-s2-kaluga-1-kit.html) **2** | [ESP32-S3-Korvo-2 Development Board](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/user-guide-esp32-s3-korvo-2.html) | [ESP32-C3-Lyra Development Board](https://docs.espressif.com/projects/esp-adf/en/latest/design-guide/dev-boards/user-guide-esp32-c3-lyra.html) | [ESP32-S3-Box Development Board](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 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ESP32 + + + +P4 + + + + \ 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 --> | ESP32 | ESP32 | ESP32 | ESP32 | ESP32-S2 |ESP32-S3 | ESP32-C3 -| 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 --> | ESP32 | ESP32 | ESP32 | ESP32 | ESP32-S2 |ESP32-S3 |ESP32-C3 |ESP32-P3 +| 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) | -| . | 板载乐鑫芯片 --> | ESP32 | ESP32 | ESP32 | ESP32 | ESP32-S2 |ESP32-S3 |ESP32-C3 -| 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) | +| . | 板载乐鑫芯片 --> | ESP32 | ESP32 | ESP32 | ESP32 | ESP32-S2 |ESP32-S3 |ESP32-C3 |ESP32-P3 +| 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: