Peripherals
UART
UART Wakeup API Update
In ESP-IDF v6.1, the legacy UART wakeup APIs uart_set_wakeup_threshold() and uart_get_wakeup_threshold() have been marked as deprecated and will be removed in future versions. These APIs only support the RXD edge threshold wakeup mode (Mode 0).
The new unified API uart_wakeup_setup() provides a more flexible configuration approach and supports multiple wakeup modes:
Mode 0 (UART_WK_MODE_ACTIVE_THRESH) - Active edge threshold wakeup (corresponds to the legacy API functionality)
Mode 1 (UART_WK_MODE_FIFO_THRESH) - RX FIFO threshold wakeup
Mode 2 (UART_WK_MODE_START_BIT) - Start bit detection wakeup
Mode 3 (UART_WK_MODE_CHAR_SEQ) - Character sequence detection wakeup
Migration Example:
Old code:
// Set wakeup threshold
ESP_ERROR_CHECK(uart_set_wakeup_threshold(UART_NUM_0, 3));
ESP_ERROR_CHECK(esp_sleep_enable_uart_wakeup(UART_NUM_0));
// Get wakeup threshold
int threshold;
ESP_ERROR_CHECK(uart_get_wakeup_threshold(UART_NUM_0, &threshold));
New code:
#include "driver/uart_wakeup.h"
// Configure active edge threshold wakeup mode (corresponds to legacy API functionality)
uart_wakeup_cfg_t wakeup_cfg = {
.wakeup_mode = UART_WK_MODE_ACTIVE_THRESH,
.rx_edge_threshold = 3, // Corresponds to the wakeup_threshold parameter of the legacy API
};
ESP_ERROR_CHECK(uart_wakeup_setup(UART_NUM_0, &wakeup_cfg));
ESP_ERROR_CHECK(esp_sleep_enable_uart_wakeup(UART_NUM_0));
// Note: The new API does not have a direct corresponding get function
// If you need to get the current configuration, you should save the configuration value yourself
Major Changes
API Replacement: -
uart_set_wakeup_threshold()→uart_wakeup_setup()-uart_get_wakeup_threshold()→ RemovedConfiguration Method: - Legacy API uses a simple integer parameter - New API uses
uart_wakeup_cfg_tstructure, supporting multiple wakeup modesHeader File: - New API requires including the
driver/uart_wakeup.hheader fileFeature Extension: - New API supports multiple wakeup modes, which can be selected based on chip capabilities - The availability of different wakeup modes depends on the chip's SOC capabilities (determined by
SOC_UART_WAKEUP_SUPPORT_XXX_MODEmacros)
Notes
Legacy API only supports Mode 0 (active edge threshold wakeup). When migrating, simply set
wakeup_mode = UART_WK_MODE_ACTIVE_THRESHThe
rx_edge_thresholdparameter of the new API has the same meaning as thewakeup_thresholdparameter of the legacy APIIf you need to get the current wakeup configuration at runtime, it is recommended to save the configuration value when calling
uart_wakeup_setup()Different chips may support different wakeup modes. Please refer to the UART Wakeup (Light-sleep Only) section.