Documentation for pre-release v5.0-beta1 is available at https://docs.espressif.com/projects/esp-idf/en/v5.0-beta1/
ESP-IDF v5.0 is a major update for ESP-IDF v4.x. Release v5.0 is mostly compatible with apps written for ESP-IDF v4.x, but there are some breaking changes (please consult the list below) and removal of deprecated functionality which will require code changes when updating projects.
We highly recommend referring to the migration guide while moving your apps from ESP-IDF v4.4 to v5.0 release.
Obtaining v5.0-beta1
For full installation instructions, see the ESP-IDF Programming Guide.
The source files attached to this release will not work due to our use of git submodules. Use one of the following methods instead:
Using git
To get this release, use the following commands:
git clone -b v5.0-beta1 --recursive https://github.com/espressif/esp-idf.git esp-idf-v5.0-beta1
cd esp-idf-v5.0-beta1/
This is the recommended way of obtaining v5.0-beta1 of ESP-IDF.
Download an archive with submodules included
Attached to this release is an esp-idf-v5.0-beta1.zip
archive. It includes .git
directory and all the submodules, so can be used out of the box. This archive is provided for users who have connectivity issues preventing them from cloning from GitHub.
This archive can also be downloaded from Espressif's download server:
https://dl.espressif.com/github_assets/espressif/esp-idf/releases/download/v5.0/esp-idf-v5.0-beta1.zip
Major changes
This is the list of changes since release v4.4:
Major New Features
Support of new SoCs
Support for ESP32-C2 SoC
- Wi-Fi
- 802.11 bgn mode
- Station, SoftAP, sniffer mode
- ESP-NOW
- TX/RX AMPDU, TX/RX AMSDU
- TX Fragment, TXOP
- WEP/TKIP/CCMP
- WPA/WPA2-PSK/WPA2-ENT/WPA3-PSK/WPA3-ENT
- ESP-Touch v1/v2
- Device Provisioning Protocol(DPP)
- Network-assisted roaming using 802.11k (Radio Measurements), 802.11v (BTM) specifications and 802.11r (Fast BSS Transition)
- Wi-Fi modem sleep and light sleep
- Bluetooth
- BLE 5.0 Controller
- HCI
- NimBLE host with BLE 5.0
- BLE modem sleep and light sleep
- Wi-Fi & BLE coexistence
- Hardware arbiter based coexistence mechanism
- Application scenarios based scheme coexistence mechanism
- Security
- Secure boot
- Flash encryption
- ECC accelerator
- RNG
- Peripherals
- LCD driver
- GDMA
- GPIO driver
- I2C
- LEDC driver
- memory copy by DMA
- Dedicated GPIO driver
- GPTimer driver
- SPI Flash driver
- GPSPI
- UART
- Temperature Sensor driver
- Power management
- Dynamic Frequency Scaling
- Light Sleep
- Deep Sleep
- Auto Light Sleep
- Security Features
- Secure boot
- Flash encryption
- ECC accelerator
- SHA accelerator
- RNG
- System features
- MMU
- Efuse controller driver
- Cache
- Brownout Detector
- OTA
- Tools
- idf.py
- esptool.py
- Debugging
- JTAG debugging with OpenOCD
- Protocols
- Provisioning
Preview support for ESP32-H2 SoC
- Added support for ESP32-H2-beta2
Extended support of existing SoCs
ESP32-S3 SoC
- Added PMS bus-based memory access protection for ESP32-S3
- Added temperature sensor support on ESP32-S3
- PSRAM: Supported .bss on PSRAM on ESP32-S3
- Added support for ULP FSM for ESP32-S3
- trax: Added ESP32-S3 Support
- apptrace: Added ESP32-S3 Support
- Added support for using touch sensor in sleep modes on ESP32-S3
ESP32-C3 SoC
- Added support for ESP32-C3 ECO4
- Added support for semihosting on ESP32-C3
ESP32-S2 SoC
- PHY: Added support for ESP32-S2-ECO1 silicon
ESP32 SoC
- PSRAM: Added support on ESP32-D0WDR2-V3
Other features
- Included FreeRTOS SMP Kernel (upstream AWS version)
- New Wi-Fi features:
- 802.11r (Fast BSS Transition)
- PMF support for softAP
- WPS registrar support in softAP
- WPA3 OWE support for station
- WPA3 SAE H2E support for station
- Toolchain updated to use GCC 11.2, GDB 11.2. Default language standards were upgraded from C11 to C17 and from C++11 to C++20.
- Added a tool to generate FAT filesystem images as part of the build process.
Major Bug Fixes
- USB_SERIAL_JTAG: Can print through USB_SERIAL_JTAG port without changing the config option from UART.
- Heap: Fixed a bug in the TLSF allocator returning a chunk of memory smaller than requested
- tcp-transport: Fixed potential null dereference if esp_transport_tcp_init is used separately.
- efuse: Fixed eFuse time settings issue on ESP32-C3
- efuse: Fixed eFuse times settings for ESP32-S3 chip
- I2C Master: Fixed watchdog timeout issue (#8543, #8120, #7281)
- Fixed POWER ON reset when using RTC IO as input in deepsleep on ESP32-S3.
- Fixed RTC memory lost in high temperature in deepsleep on ESP32-S3.
- Reduce power consumption in lightsleep when using 8MD256 as RTC slow clock, but not using LEDC clock source on ESP32-S3.
- Decreased power consumption in different use cases on ESP32-S3.
- Fixed dangerous power parameters in sleep modes on ESP32-S3.
Breaking Changes
Bluetooth
- Bluedroid: Changed API parameter for esp_bt_hf_init & esp_bt_hf_deinit
- Bluedroid: Renamed some macros/types/functions typos (see Bluetooth migration notes)
- NimBLE: Now esp_nimble_hci_and_controller_init is not accepted any more, just use nimble_port_init is ok, consistent with native nimble operations.
Build System
- The "make" build system was deprecated in v4.0 in favor of idf.py (cmake). The remaining support is removed in v5.0.
- driver component is not included by components/esp32* anymore. Applications using driver shall now explicitly require it in their CMakeLists.txt file
- efuse component is not included by components/esp32* anymore. Applications using efuse shall now explicitly require it in their CMakeLists.txt file
- Removed COMPILER_DISABLE_GCC8_WARNINGS option
- Adding non-existent directories to COMPONENT_DIRS or EXTRA_COMPONENT_DIRS is no longer supported and will result in an error.
- Kconfig option CONFIG_SDK_TOOLCHAIN_SUPPORTS_TIME_WIDE_64_BITS has been removed. The size of time_t type in the toolchain is determined automatically now. See "System Time" chapter of API reference for more information on 64/32-bit time_t support.
- Components which use esp_timer must add esp_timer to the requirements when calling idf_component_register
- Components which use lwip, vfs, esp_wifi, esp_event, esp_netif, esp_eth must add add these dependencies to the requirements list when calling idf_component_register.
- Removed Kconfig option SDK_TOOLPREFIX. Now the toolchain prefix can be fetched by CMake variable _CMAKE_TOOLCHAIN_PREFIX
- Removed the target components (e.g. esp32), it is no longer necessary to require this component in any CMakeLists.txt
- It is now necessary to specify PRIVATE, PUBLIC or INTERFACE in target_link_libraries calls to project_elf instead of leaving the default behavior
- Using CMake versions lower than 3.16 is not supported anymore. Run "tools/idf_tools.py install cmake" to install a suitable version if your OS versions doesn't have one.
- ESP-IDF v5.0 reorders the applying order of target-specific config files and other files listed in SDKCONFIG_DEFAULTS. Now, target-specific file will be applied right after the file bringing it in, before all latter files in SDKCONFIG_DEFAULTS. (see also ESP-IDF v5.0 migration guide)
Networking
- esp_https_server: Now servercert variable inherits role of cacert variable
- esp_https_server: Now cacert variable inherits role of client_verify_cert_pem variable
- esp_https_server: The return type of the httpd_ssl_stop API has been changed to esp_err_t from void.
- esp_http_server: http_server.h header is no longer available in esp_http_server.
- esp-netif: Removed tcpip_adapter compatibility layer, please use esp_netif component directly.
- esp_netif/esp_wifi: The API esp_netif_get_sta_list() from esp_netif component has been migrated to esp_wifi component and renamed to esp_wifi_ap_get_sta_list_with_ip()
- Ethernet: esp_eth_ioctl third argument always acts as untyped pointer to memory now
- Ethernet: esp_eth_phy_new_ksz8041 and esp_eth_phy_new_ksz8081 functions were removed, use esp_eth_phy_new_ksz80xx instead. esp_eth_phy_new_lan8720 was removed, use esp_eth_phy_new_lan87xx instead.
- Ethernet: Removed deprecated esp_eth_set_default_handlers and esp_eth_clear_default_handlers functions
- Ethernet: Updated internal EMAC's API esp_eth_mac_new_esp32() to pass two configuration parameters: One general driver's config of eth_mac_config_t type and the other one describes vendor specific options (eth_esp32_emac_t type), such as SMI IO, interface or clock.
- Ethernet: SPI Ethernet modules initialization changed
- http_parser: Create new component out of nghttp
- lwip: DHCP server callback has additional argument with client's info
- lwip: DHCP server API has been updated to accommodate object-oriented usage. All functions use DHCP server's handle pointer as their first parameter now.
- lwip: DHCP server API has been updated to return err_t error code in case of failure.
- nghttp: This component is now moved to idf-extra-components, will be used through component manager
- OpenSSL: Component has been discontinued. Please use mbedTLS API or esp-tls API directly.
Peripherals
- ADC: ADC driver driver/adc.h is deprecated now, suggest migrating to the new driver esp_adc/adc_oneshot.h for oneshot mode driver, esp_adc/adc_continuous.h for continuous mode driver, and esp_adc/adc_cali.h and esp_adc/adc_cali_scheme.h for ADC calibration driver.
- ADC: ADC_UNIT_BOTH, ADC_UNIT_ALTER and ADC_UNIT_MAX in adc_unit_t are removed.
- ADC: Previous driver/adc2_wifi_private.h has been moved to esp_private/adc2_wifi.h.
- Clock: Now peripheral clock gating APIs are private and the including path has changed to esp_private/periph_ctrl.h
- esp_lcd: Display won't be turned on automatically in esp_lcd_panel_init, user needs to call esp_lcd_panel_disp_on_off(panel_handle, true) manually.
- RGB_LCD: RGB data is clocked out on the PCLK falling edge by default, set pclk_active_pos to true can change the default behaviour to the rising edge.
- RGB_LCD: relax_on_idle flag is renamed to refresh_on_demand.
- RGB_LCD: Event callbacks can only be registered by the new function esp_lcd_rgb_panel_register_event_callbacks.
- RGB_LCD: In non-stream mode, esp_lcd_panel_draw_bitmap won't help to refresh the screen, now user has to call esp_lcd_rgb_panel_refresh manually.
- SPI_LCD: Removed dc_as_cmd_phase as it's added by mistake and the functionality is not ready in the hardware. Now you have to use a GPIO to control the LCD's D/C line.
- Freemodbus: The component is moved out of esp-idf into external component: https://github.com/espressif/esp-modbus, while the examples are kept. See examples on how to use them as managed components.
- GPIO: rtc_gpio_desc is deleted for ESP32, using rtc_io_desc instead
- GPIO: GPIO_SEL_n macros in hal/gpio_types.h are removed
- I2C: Users cannot register a custom ISR handler anymore
- I2S: I2S driver driver/i2s.h is deprecated now, suggest migrating to the new driver driver/i2s_std.h, 'driver/i2s_pdm.h' and driver/i2s_tdm.h.
- I2S: The value of enum 'i2s_channle_t' changed for backward compatible. The I2S_CHANNEL_MONO and I2S_CHANNEL_STEREO will still be 1 and 2 as v4.3, meanwhile the TDM channel mask I2S_TDM_ACTIVE_CHx is now at high 16 bits of 'i2s_channle_t'. For now we are able to switch to mono mode for ESP32-C3/ESP32-S3 by calling i2s_set_clk and passing something like I2S_CHANNEL_MONO | I2S_TDM_ACTIVE_CH0 | I2S_TDM_ACTIVE_CH1 or I2S_CHANNEL_MONO into the third parameter.
- I2S: i2s deprecated dma_buf_count and dma_buf_len field in i2s_config_t, use dma_desc_num and dma_frame_num instead
- I2S: The enum names in i2s_std_slot_mask_t updated, I2S_STD_SLOT_ONLY_LEFT, I2S_STD_SLOT_ONLY_RIGHT and I2S_STD_SLOT_LEFT_RIGHT are renamed to I2S_STD_SLOT_LEFT, I2S_STD_SLOT_RIGHT and I2S_STD_SLOT_BOTH.
- I2S: i2s_pdm_tx_slot_config_t::sd_en is updated to i2s_pdm_tx_slot_config_t::line_mode.
- MCPWM: MCPWM driver driver/mcpwm.h is deprecated now, recommend migrating to the new driver.
- MCPWM: Disable the one-shot pulse in the MCPWM carrier, which is not supported by HW.
- PCNT: PCNT driver driver/pcnt.h is deprecated now, recommend migrating to the new driver driver/pulse_cnt.h.
- PSRAM: esp_spiram_get_chip_size has been deleted.
- PSRAM: esp_spiram_get_size is now moved to esp_private/spiram_private.h.
- PSRAM: Target specific spiram.h have been removed. esp_spiram.h has been removed. Use esp_psram.h instead.
- RMT: RMT driver driver/rmt.h is deprecated now, suggest migrating to the new driver driver/rmt_tx.h and driver/rmt_rx.h.
- SDM: The legacy driver/sigmadelta.h driver is deprecated now, suggest migrating to the new driver/sdm.h driver.
- SPI: spi_common_internal has been moved to esp_private
- SPI_FLASH: Deprecate the speed structure esp_flash_speed_t
- SPI_FLASH: Now legacy flash driver (with prefix spi_flash) is removed, use new driver in
esp_flash
instead. - Temp Sensor: Old temperature sensor api driver/temp_sensor.h is deprecated now. Recommend migrating to new driver driver/temperature_sensor.h
- Timer Group: The timer group driver is deprecated, it will bring build warnings if driver/timer.h is used. Use driver/gptimer.h instead.
- UART: Users cannot register a custom ISR handler anymore
- USB Host/CDC: Event handling callback signature updated
Protocols
- ASIO: Internal ASIO component and ASIO examples were migrated from IDF to https://github.com/espressif/esp-protocols/components/asio
- esp_http_client: HTTP digest auth is disabled as it is an insecure protocol. esp_http_client_get_content_length and esp_http_client_fetch_headers now returns int64_t to support performing HTTP requests with larger responses.
- esp_http_client: esp_http_client_read and esp_http_client_fetch_headers now return -ESP_ERR_HTTP_EAGAIN for timeout errors
- esp_https_ota: The function esp_https_ota() now requires pointer to esp_https_ota_config_t as argument instead of pointer to esp_http_client_config_t.
- esp-tls: API esp_tls_conn_delete is now marked as deprecated, please use esp_tls_conn_destroy instead.
- esp-tls: Removed deprecated API esp_tls_conn_new(), esp_tls_conn_delete()
- esp_tls: esp_tls_t structure is now private.
- esp-tls: The esp_ds_rsa_sign API now does not take mode as input.
- mbedTLS: If application has dependency on MBEDTLS_DHM_C then it must be explicitly enabled through mbedTLS configuration
- mbedTLS: Updated mbedtls to v3.1.0
- mDNS: Internal mDNS component and mDNS example was migrated from IDF folder to https://github.com/espressif/esp-protocols/components/mdns
- mdns: Removed deprecated event driver mdns_handle_system_event(). Please remove any potential calls to this API, this function was a no-op and esp_event handler was used to drive mDNS asynchronous actions.
- mdns: Search result contain references to esp_netif pointer instead of enum of default interface
- MQTT: MQTT client config struct is reorganized with fields organized by context.
- tcp_transport: esp_transport_read returns 0 a for connection timeout and < 0 for other errors (refer enum esp_tcp_transport_err_t for all possible return values)
- Websocket: Removing "esp_websocket_client_send" API in v5.0 due to alternatives esp_websocket_client_send_text/esp_websocket_client_send_bin
- Websocket: Internal esp_websocket_client component and websocket example was migrated from IDF folder to https://github.com/espressif/esp-protocols/components/esp_websocket_client
FreeRTOS
- Components, apps and examples using the absolute path for including FreeRTOS headers in their build files or source code may need update
- Source files using task snapshots shall now explicitly include freertos/task_snapshot.h
- Legacy FreeRTOS API and types are no longer supported by default (i.e. configENABLE_BACKWARD_COMPATIBILITY is disabled).
- CONFIG_FREERTOS_LEGACY_HOOKS is no longer supported. Enable CONFIG_USE_TICK_HOOK and CONFIG_USE_IDLE_HOOK if usage of FreeRTOS tick and idle hooks respectively is required
- FreeRTOS MPU related functions are no longer supported. There were previously enabled (but not supported) due to an FPU work around.
- API vTaskGetSnapshot now returns BaseType_t to indicate status
- Projects defining FreeRTOS module handles (viz., TaskHandle_t, EventGroupHandle_t, TimerHandle_t) as void* type would need to update the definition to respective struct types to avoid compilation errors
- FreeRTOS asserts are now configured the same way as all other asserts (COMPILER_OPTIMIZATION_ASSERTION_LEVEL) instead of having its own config (FREERTOS_ASSERT).
- portGET_ARGUMENT_COUNT() has been removed. Call CHOOSE_MACRO_VA_ARG() instead.
- portmacro_deprecated.h file is removed. Alternatives for the deprecated APIs are noted in the migration guide.
- esp_ringbuf function placement in flash is no longer controlled by CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
Tools
- MSYS/Mingw is no longer supported on Windows. The native environment based in Windows Command Line or Power Shell can be used instead.
- IDF Monitor follows the UART console baud rate by default
- Custom IDF Monitor baud-rate setup is not possible from menuconfig anymore
- idf.py monitor -B baud-rate setting has been renamed to idf.py monitor -b in order to be consistent with idf.py -b
- Python 3.6 is not supported anymore (min must be Python 3.7 or newer)
- The enum esp_apptrace_dest_t in esp_app_trace.h change ESP_APPTRACE_DEST_UART0 name to ESP_APPTRACE_DEST_UART and extend the size of enum.
WiFi
- Changed nvs default country from "CN" to "01".
- Disabling PMF in Station configuration no longer possible, Station will always connect in PMF Mode if AP advertises support
- Function name esp_wifi_set_connectionless_wake_interval is replaced by esp_wifi_connectionless_module_set_wake_interval. Please use its replacement.
- wifi_provisioniong: "wifi_prov_mgr_start_provisioning" API now accepts sec_params instead of pop string.
Storage
- Removed mbedtls as default public dependency from NVS
- FATFS: f_mkfs has a new function signature
- partition table: esp-idf no longer supports creation of data partitions which offset is not aligned to 4kB.
- VFS: 2nd parameter (absolute path) removed from the esp_vfs_semihost_register()
- FATFS: Removed UTF-16 options for filename encoding (CONFIG_FATFS_API_ENCODING_UTF_16). It was not a valid option since VFS only supports UTF-8.
- NVS: nvs_entry_find and nvs_entry_next, nvs_entry_info return error codes now and modify/take iterator via parameters, instead of returning one.
- SDSPI: Removed deprecated API structure sdspi_slot_config_t and fuction sdspi_host_init_slot
System
- esp_timer: Removed legacy ESP32 FRC timer implementation
- esp_event: Changed event_data in all event post functions (
esp_event_post*
andesp_event_isr_post*
) fromvoid *
toconst void *
. This is a breaking change if users reference these functions as a function pointer, or are using this interface to provide their own implementation, etc. - esp_panic.h has been deleted, please use esp_debug_helpers.h for debug related helper functions.
- Register writing or modification macros can no longer be used as expressions, and can only be used as statements: REG_WRITE, REG_SET_BIT, REG_CLR_BIT, REG_SET_BITS, REG_SET_FIELD, WRITE_PERI_REG, CLEAR_PERI_REG_MASK, SET_PERI_REG_MASK, SET_PERI_REG_BITS.
- IPC: IPC is not an independent component anymore, it is part of esp_system.
- bootloader: The following two functions in bootloader_support are private now and can not be accessed from outside the bootloader components
- esp_secure_boot_verify_sbv2_signature_block()
- esp_secure_boot_verify_rsa_signature_block()
- bootloader: The function bootloader_common_get_reset_reason was deleted, use esp_rom_get_reset_reason() instead.
- CPU: Dedicate GPIO LL functions moved from cpu_ll.h to dedic_gpio_cpu_ll.h. Prefixed renamed accordingly
- efuse: New define for secure boot key digests: esp_secure_boot_key_digests_t instead of the old one from target-specific ROM headers
- Interrupt Watchdog: Interrupt watchdog API is now private and should only be called by other IDF component.
- Task Watchdog: esp_task_wdt_init() API and behavior has changed. It now accepts a esp_task_wdt_config_t configuration structure, and will also handle the subscription of the idle tasks.
Other
- clk: Now the clk functions are moved to private. target/clk.h & esp_clk.h would EOL, please use esp_private/esp_clk.h instead.
- cbor: Cbor component moved to idf-component-manager
- CXX: I2C C++ class changes to strong-value types for function parameters, simple data types are not allowed anymore and will produce compilation errors.
- CXX: Removed i2c driver header dependency from C++ header file.
- esp_common: EXT_RAM_ATTR is deprecated. New macro EXT_RAM_BSS_ATTR now is used for putting .bss on PSRAM.
- esp_crt_bundle: "esp_crt_bundle_set" API now has additional argument bundle_size and now returns esp_err_t.
- esp_hw_support: Deleted soc/cpu.h files. Users need to include esp_cpu.h for functions previously defined in soc/cpu.h.
- esp_hw_support: esp_intr.h has been deleted, please use esp_intr_alloc.h instead.
- esp_hw_support: soc_log.h is now renamed to esp_hw_log.h and all logging macros have been updated from SOC_LOGx to ESP_HW_LOGx.
- esp_hw_support: spinlock.h must now be included as #include "spinlock.h" instead of #include "soc/spinlock.h".
- esp_hw_support: clk_ctrl_os.h must now be included as #include clk_ctrl_os.h" instead of #define "soc/clk_ctrl_os.h".
- esp_hw_support: rtc_wdt.h must now be included as #include "rtc_wdt.h" instead of #include "soc/rtc_wdt.h".
- esp_image: Rename image speed definitions in esp_image_spi_freq_t
- Examples: Internal PPPoS client component from IDF example folder was removed. PPPoS client is supported using esp-modem component (https://components.espressif.com/component/espressif/esp_modem)
- expat: This component is now moved to idf-extra-components repository. It can be used through IDF component manager
- jsmn: Jsmn component moved to idf-component-manager
- Legacy system events will not be supported anymore.
- ldgen: Drop the support for ESP-IDF v3.x fragment file grammar
- libsodium: Libsodium component moved to idf-component-manager
- OpenThread: TREL support is removed. The feature is totally rewritten in OpenThread.
- OpenThread: The rcp update functions are merged to a single function esp_openthread_update_rcp. The underlying mechanism is changed to the serial flasher to support updating the paritition table.
- ROM: Deleted deprecated headers from esp32 component, these have been replaced by headers in the esp_rom component.
- ROM: rom//ets_sys.h are not exposed from public header files by default.
- RTC Subsystem: driver/rtc_cntl.h was moved from driver component to esp_hw_support component, the new include path is esp_private/rtc_ctrl.h.
- sh2lib: This component is now moved to idf-extra-components, will be used through component manager
- SOC: Unstable soc header files are removed from public API headers
- esp_system/esp_ipc: esp_ipc_isr_init() initialization method is not public.
- esp_system: Applications using functions defined in esp_random.h, esp_mac.h and esp_chip_info.h will need to include these header files explicitly instead of including esp_system.h.
- esp_system: eh_frame_parser.h must now be included as #include "esp_private/eh_frame_parser.h" instead of #include "eh_frame_parser.h".
- test_utils: Renamed memory check function names which may be used in unit tests outside IDF
- Users who have been using the GPIO and SPI classes may need to revisit their code as it's now not allowed anymore to pass raw numbers for classes like MOSI or GPIONum.
Known Issues
- There is a slight chance that the client on the station fails to connect to the TCP server on SoftAP in an extremely noisy environment.
- The station can not connect to AP through WPS.
- Bluetooth connection takes a long time to establish and break.
- On ESP32-S3 and ESP32-C3, BLE may disconnect at extremely low temperatures.
- Periodic sync fails to establish when secondary PHY is set as 2M when Wi-Fi is enabled on ESP32-C2.
- Periodic adv task asserts when calling it exceeds MAX_SCHED_ATT (15) times on ESP32-C3.
- Seldom task watchdog is seen during AP connecting or scanning. This issue won’t affect the overall functionality of Wi-Fi.
- Station has a small chance of failing to disassociate with softAP.
Changelog
This is the list of changes since release v4.4.
IEEE802154
Added
- Added ieee802154 timer APIs for Zigbee CSMA-CA
- Support ESP32-H2-beta2
Changed
- Updated lib for support ESP32-H2-beta2 and ESP32-H2-beta1
Fixed
- Fixed assert caused by processing isr delay
Openthread
Added
- Supported Thread Radio Encapsulation Link in border routers
- Added support for updating RCP with OTA over spinel
- Support openthread device type: MTD
- Added sta command for connecting Wi-Fi
- Added wifiinfo command for getting Wi-Fi information
- Added support for Thread 1.2 Backbone Border Router(BBR) and multicast routing
- Support ESP32-H2-beta2
- Added support for automatic RCP update upon boot in border router
Changed
- iperf: Simplify iperf send/recv loop
- Updated openthread submodule to commit 1267bdb
- Updated exclude file for RCP
- Updated OpenThread submodule
- Moved CLI extension to a managed component
Fixed
- Fixed the issue of some esp_openthread functions called without lock
- libopenthread_port: aggressively process pending tasks
- Fixed socket failing to receive messages sent to multicast groups on Thread network.
Removed
- Remove TREL support
Zigbee
Added
- Added Zigbee light examples with Coordinator (light_coordinator), Router (light_bulb) and End-Device (light_switch) roles.
- Added rcp and gateway example
Changed
- Updated zigbee light example
- Merging light_coordinator and light switch into one
PHY
Added
- Added the pll track feature to keep the ble connection stable
- Added support for ESP32-H2-beta2
- Added support for ESP32-S2-ECO1 silicon
Changed
- Optimized phy calibration for ESP32-C3 and ESP32-S3
Fixed
- Fixed the issue in libphy.a that Wi-Fi gets disconnected after Bluetooth is de-initialized (#8481)
- Fixed ESP32-C3/ESP32-S3 phy cause USB no log issue
- Fixed ESP32-C3/ESP32-S3 rssi change with bandwith issue
- Fixed ESP32-C3/ESP32-S3 phy disable USB issue
- Fixed issue where CONFIG_ESP_PHY_REDUCE_TX_POWER was only available on ESP32
- Fixed phy tx power limit for ESP32-S2/ESP32-C3/ESP32-S3
Bluetooth
Controller
Added
- Added change to free resources in deinit that were allocated during controller init procedure.
- Added support for ESP32-S3 chip in controller_hci_uart_esp32c3_and_esp32s3's README
- Support BLE for ESP32-C2
- Added description for de-initialize bt controller API
- Added HCI vendor commands to set coexistence status
Changed
- Rename controller_hci_uart_esp32c3 to controller_hci_uart_esp32c3_and_esp32s3
- Move the pll track functions to IRAM
- Rearranged menuconfig options for ESP32-C2 and ESP32-H2
- Updated ESP32-C2 default configuration options
- Updated Bluetooth code framework
Fixed
- Fixed missing in processing VHCI interrupt caused by lack of protection against race conditions in accessing VHCI environment variables
- Fixed: Power down bluetooth module when deinit
- Fixed the issue caused by the power off the BT/Wi-Fi power domain
- Fixed defining common symbol for "le_scan_duplicate_option" in ESP32 Bluetooth controller.
- Fixed some functions not in IRAM causing rtc watchdog timeout when waking up light sleep on ESP32-S3
- Fixed BLE got disconnected when when modem sleep is disabled and Bluetooth is initialized after Wi-Fi on ESP32-C3 and ESP32-S3
- Reset Bluetooth Baseband and MAC to fix the task watchdog triggered during controller initialization due to invalid hardware state after system reset on ESP32-C3 and ESP32-S3
- Make sure semphr/queue used in interrupt is in DRAM
- Fixed assert fail when high level interrupt disable
Bluetooth Low Energy
Added
- Support ESP32-C2 BLE modem sleep and lightsleep
Fixed
- Fixed crash when shutdown bluetooth
- Fixed modem sleep hardware error
- Fixed the BLE task watchdog timeout issue
- Fixed encryption procedure bug which causes Insufficient security error in BLE host in ESP32-C3 and ESP32-S3
- Fixed BLE scannable extended advertising performance issue in case of Wi-Fi coexistence
- Fixed BLE LLCP collision for channel map update
- Fixed BLE_ADV_UNDERRUN error lead to RX disable
- Fixed BLE ke_mem.c assert on ESP32-C3 and ESP32-S3
- Fixed BLE ke_mem.c assert on ESP32
- Fixed BLE advertising report on ESP32-C3/ESP32-S3
Classic Bluetooth
Changed
- Initialize all elements of esp_bt_controller_config_t.
Fixed
- Fixed the assertion in stopping inquiry due to invalid software state in processing the last received packet from inquiry procedure
- Fixed that no Connection Complete event returns after processing HCI_Create_Connection_Cancel command, which blocks later reconnection
- Fixed that HCI_Read_Clock command fails in reading local Bluetooth Clock
- Fixed the delayed HCI Commmand Status Event in response of HCI_Read_Remote_Extended_Features command
- Fixed the crash in accessing bt_util_buf_env buffer list due to lack of protection against race condition when operating on the linked list in context of both task and interrupt service routine
- Fixed the crash issue in handling HCI_Exit_Sniff_Request command from Host when controller just switches to active mode.
- Fixed the EDR mode wrongly cleared by a successful role switch which caused that the 2M/3M package type can not be selected for use.
- Allow max supported feature page lower than current feature page when handle with the respond of extend features to support for some devices which generate wrongly LMP respond
- Fixed the assertion in function em_bt_clkoff1_setf when clock overflow happened, the overflow can be safely ignored
- Fixed the issue in encryption pause and resume procedure that causes the failure of connection in using bt_spp_acceptor example with a Windows machine using Realtek Bluetooth adapter
Bluedroid
Added
- Support for bluedroid stack with ESP BT controller
Classic Bluetooth
Added
- HFP: Added support of vendor specific battery level and docker status indication over HFP profile
- GAP: Added Bluetooth address field in the parameter structure of ESP_BT_GAP_READ_REMOTE_NAME_EVT callback event
- A2DP: Added avdtp delay reporting
- SPP: Added support of using L2CAP Enhanced Retransmission Mode as the underlying protocol bearer
- L2CAP: Added support of L2CAP Enhanced Retransmission Mode, and added L2CAP APIs for application data communication
- SDP: Added SDP APIs on both the server and client side for creating and discovering vendor-defined service records
Changed
- Updated licenses
- Updated document of bt discovery example
- SPP: Improved SPP related examples and documents
- A2DP: Improved documents for A2DP examples
- HFP: Updated HFP(HF) version to 1.7.2
- HFP: Updated HFP(AG) version to 1.7.2
- HID Device: Improved documents for Bluetooth HID Device API reference and example
- Renamed some macros/types/functions typos (see Bluetooth migration notes)
- HFP: Changed API parameter for esp_bt_hf_init & esp_bt_hf_deinit
Fixed
- HFP: fixed that HFP_AG example does not generated the single-tone audio stream as expected
- Fixed issues from static source code analysis reports
- HID: Fixed esp_hidh report map length checking function (#7586)
- HID: Fixed output report characteristics declaration (#5369)
- HID: Fixed left right key confusion in comments (#4670)
- A2DP: Fixed a2dp source audio data packet congestion causing choppy audio in a2dp sink
- A2DP: Fixed the crash caused by calling esp_a2d_media_ctrl(ESP_A2D_MEDIA_CTRL_START) after stream started
- HFP: Fixed the error in HFP(HF) example when performing audio disconnection(#7911)
- A2DP: Fixed the failure of being reconnected in A2DP sink example due to the issue in using i2s driver
- SPP: Fixed SPP cannot malloc slot bugs
- SPP: Fixed SPP acceptor open with wrong remote address
- SPP: Fixed SPP initiator can not free resources when the connection is failed.
- SPP: Fixed SPP crash after calling esp_spp_deinit
- SPP: Fixed SPP initialization failure without free mutex
- A2DP: Fixed AVDTP general reject format error
- SPP: Fixed crash when spp sends data
- A2DP: Fixed A2DP Sink wrong sniff parameters which caused by HID Porting
- A2DP: Fixed in A2DP sink example that audio playback is clogged due to higher priority of application task in case of heavy workload from the task.
- HID: Resolved type redefinitions in btc_spp.h and btc_hd.h/btc_hh.h
- HID: Fixed wrong parameter of get_report_by_id_and_type in bt_hidd.c
- HID: Fixed memory leak in esp_bt_hidh_dev_report_write and esp_bt_hidh_dev_set_report in bt_hidh.c
- Fixed the linker error of functions not defined when memory debug is enabled.
- Fixed crash in failure of memory allocation after erasing flash (#6170)
- A2DP: Fixed the A2DP source example application state machine in the processing of inquiry response, which can result in the failure of stopping device discovery
Bluetooth Low Energy
Added
- Added check if the BLE extend connection parameters are valid
- Examples: README files added for the Bluetooth Bluedroid BLE v5.0 examples.
- Examples: Walkthrough tutorial files added for the Bluetooth Bluedroid BLE50 examples.
- Support low duty cycle directed advertising
- Support set HW CCA threshold value
Changed
- SDKCONFIG Defaults and README update for bluedroid examples
Fixed
- Fixed the issue of device name length limited
- Fixed the code analysis report error reported by customer
- Fixed can not find mac address error
- Fixed high duty cycle directed advertising will not be stopped when timeout
- Fixed BLE periodic advertising data length check issue
- Fixed bluedroid compile failed if both enable BT_MULTI_CONNECTION_ENABLE and SMP_SLAVE_CON_PARAMS_UPD_ENABLE
- Fixed the null pointer deference issue reported by BLE dos.
- Fixed bluedroid BLE extend advertising parameters detection
- Fixed BLE extended advertising parameters check on bluedroid
- Fixed BLE periodic advertising report will lose data
- Fixed compilation error when BLE v5.0 is enabled
- Fixed bluedroid host memory overflow
NimBLE
Added
- Added BLE SPP service example.
- Added support for multiple profile connection in NimBLE SPP
- Added support for sending notification to multiple clients from single server in BLE SPP example
- Added support for BLE Read and Write Suggested Default Data Length commands
- Added new example for sending data over L2CAP connection oriented channels
- Added option to configure the max gatt procedures allowed for GATT client
Changed
- Enabled ESP Timer for ESP32-H2 in existing examples by default
- Updated bleprph example to add functionality of advertising with random address (instead of public address)
Fixed
- Fixed incorrect print during stop timer
- Fixed wifi_prov_mgr crash after provisioning.
- Added fix to not check for stack status while registering listener
- Added fix to handle 0 length ATT write request
- Clear timer handle during de-initialization
- Fixed memory leak of timer during NimBLE Host start-stop process
- Fixed BLE SPP build fail on Windows
- Corrected stack initialisation dependency function checks.
- Fixed crash issue in BLE provisioning in wifi prov mgr application.
- Fixed example compilation issues for ESP32-H2
- Sync sending Host Number of Completed Packets command
- Corrected the default value for ATT_PREFERRED_MTU and ACL_BUF_SIZE selected via Kconfig
- Corrected the log level of timer related print
- Added free keypair checking if already allocated to avoid memory leak
- Added fix to clear peer device record correctly, when pairing is removed.
- Fixed compilation error when os_mbuf_free called by ESP32-C2 and ESP32-H2
- Fixed project name for BLE L2CAP COC example
Removed
- Removed extra npl_event_init done during periodic_sync_alloc
- Removed unused bluetooth initialization api
Blufi
Fixed
- Fixed blufi encryption interrupted unexpectedly lead to unable encryption again
- Fixed an issue that Softap mode do not assign ip
- Fixed an issue that SoftAP current connection always show 0
ESP-BLE-Mesh
- Apply the errata E16350 of BLE Mesh from Bluetooth SIG
- Added Proxy Server connect and disconnect events
- Fixed Provisioner receiving Heartbeat messages filter error
- Fixed the abnormal disconnection of Proxy Client
- Fixed not checking the oversized SegN during provisioning
Wi-Fi
Added
- SoftAP and be disabled by CONFIG_ESP_WIFI_SOFTAP_SUPPORT in build stage to reduce image size
- Added support of EAP-FAST authentication
- Added support of Protected Management Frames (ieee80211w PMF) in softAP
- Added security validation for BTM request
- Added ht40 support for esp_wifi_80211_tx
- Added support for CA certificate bundle support for Wi-Fi Enterprise
- Added API to disable PMF configuration
- Added support 802.11r (Fast BSS Transition)
- Added Config option to use internal TLS client with MbedTLS crypto
- Added WPS registrar support in softAP mode
- Added Support for connectionless traffic with power-save mode and coex mode
- Added support for "WPA3 OWE" feature in ESP32 STA
- Added support for SAE H2E for station
- Added Wi-Fi support for ESP32-C2 with both 26M and 40M crystal
Changed
- Enabled GCMP, GMAC for 192 bit configuration
- Updated Mexico operating channel refer to FCC
- Updated miswritten and abbreviated words and syntax errors for initialize WiFi section in esp_wifi.h header file
- Refactor key install code
- Added changes for scan resumption in PBC mode
- Enabled MbedTLS for DPP enrollee by default
- Always connect Station in PMF mode if possible
- Optimized example of wifi station
- Move adding prefix/postfix of DPP key to example and doc correction
- Skipped PMKID if BSS SSID is changed for SAE AP
- Changed nvs default country from "CN" to "01"
- WiFi sleep optimization when beacon lost
- Updated wpa2 enterprise certs
- Optimized espnow when disconnection pm enable
- Updated wifi beacon timeout docs
Fixed
- Fixed stale FTM report issue (#7773)
- Fixed repeated FTM failures (#7702, #7753)
- Fixed sniffer fcs error crash issue
- Fixed fragment packet loss when 2nd pn compare with 1th pn
- PMF allow keyindex in big endian format to workaround faulty APs
- Allow for minimal scope of wifi_init_config_t.
- Fixed static analysis warnings
- Fixed verbosity of supplicant logs
- Fixed some issues in WPS PIN
- Fixed memory leak in WPA3 connection
- Corrected task deletion for RRM and DPP tasks
- Fixed miscellaneous FTM issues including (#8127)
- Fixed the negotiation of method with eap server
- Fixed not getting IP after DPP (#7646)
- smartconfig: Fixed smartconfig set socket option fail
- Fixed failing to transmit data or getting stuck in WiFi sleep if running Wi-Fi and BT with modem-sleep together.
- Fixed issue "ca md too weak" for certificates in wifi_enterprise example
- Fixed memory corruption in Wi-Fi Enterprise
- Fixed Assoc comeback causing invalid state bug and cleanup in some FTM failure cases
- Fixed an iperf issue
- Corrected ECDH calculations for DPP
- Fixed issues reported in static analysis
- Correctly identify AP's with mixed key management during scan (#8426)
- Fixed deadlock while deleting DPP task (#8724)
- Ignored unauthenticated encrypted EAPOL-Key data
- Fixed handling of key RSC
- Fixed clearing default wifi netif procedure
- Fixed issue of ca certificate expired in wifi_enterprise example
- Fixed smartconfig esptouch v2 found none fail issue
- Fixed espnow recv unencrypted packets issue
- Fixed issue of default ap ssid is not getting set
- Fixed bug in SoftAP mode change
- Fixed data loose when WiFi power-save is enabled with WiFi API being called.
- Fixed some Wi-Fi country code and channel check issues
- Fixed FTM issue when WiFi Sleep enable
- Fixed SSID copy length during WPS scan
- Fixed stale PMF config in NVS issue
- Fixed bug on close sniffer mode when wifi stop
- Fixed deep sleep can't reconnect to ap when pmf enable
- Fixed some ap will ignore auth when rx deauth for a while
- Fixed wrong configuration of static txbuf
- Fixed QoS Null will change SSN of AMPDU agreement
- Reset beacon timeout timer when keep alive null works or hw drop beacon
- Fixed PMF connection fail by clearing old keys before going for new connection
- Fixed sta reset beacon timeout timer trigger assert issue
- Fixed missing LoRa IE length in SoftAP mode
- Fixed some WPA enterprise issues when supplicant's TLS agent is used
- Fixed beacon timeout issue
- Fixed crash in esp_wifi_set_ant_gpio()
- Fixed double free for rsnxe ie
- Fixed Unicast key not renew for TKIP mic failure in unicast packets
Removed
- Removed scan done event for internal scans
- Removed legacy framework for system events
- Removed scan done processing from btm task
ESP-WIFI-MESH
Fixed
- Fixed the issue that layer2 node connect to lower-layer node when FIXED-ROOT root disappeared
- Fixed the device can not receive IP_EVENT_STA_GOT_IP when the router restarted
Ethernet
Added
- Added support of Ethernet PHY KSZ8091
- Added esp_eth_ioctl options to set Ethernet speed and duplex mode
- Added support for KSZ8001, KSZ8021, KSZ8031, KSZ8051 and KSZ8061
- Examples: Added bandwidth limitation option to iperf example
Changed
- Increased LAN8720 ETH-PHY reset assertion time
- Updated EMAC start/stop functions to prevent any unintended behavior
- Made internal ESP32 EMAC-DMA burst size configurable (#7380)
- Enabled lwIP IRAM optimization in Ethernet iperf example default configuration
- Extended infrastructure to optionally provide more advanced access to MAC/PHY layers
- Examples: Common source for GPIO range in Kconfigs defined
- PHY drivers refactor to group common IEEE 802.3 MII Management Interface functionality in single common file
- SPI Ethernet modules initialization simplification
Fixed
- Fixed KSZ8851SNL driver to enable Rx multicast in MAC filter
- Fixed enc28j60 driver to allow multicast packets
- Fixed ESP32 EMAC driver insufficient TX buffer size issue after Ethernet stop/start sequence
Removed
- Removed auto_nego_en member from esp_eth_config_t as it is not used anywhere
- Removed deprecated esp_eth_set_default_handlers and esp_eth_clear_default_handlers functions
Security
Added
- esp_cryptoauthlib: Enable v3.3.1 support for older IDF branches
- MPI: Added kconfig option for doing intr-based exp-mod operations
- Added pre_encrypted_ota example
- ESP32-C2: Support for Secure Boot V2 based on ECDSA scheme
- ESP32-C2: Added support for Flash Encryption
- Added protocomm security version 2
- Added PMS bus-based memory access protection for ESP32-S3
Changed
- ESP32-C3: Memory protection API unified for all PMS-aware chips
- Digital Signature: Updated gen_digital_signature_tests.py to handle different max key sizes
- Digital Signature: Updated the documentation for the DS API's
Fixed
- Fixed the Memprot feature check in esp_restart()
- secure_boot: Fixed warning when UART ROM DL mode is disabled
- AES/SHA: Fixed issue with descriptors and buffer potentially being placed in RTC ram
- AES/SHA: Fixed cache writeback/invalidate not being applied for CONFIG_SPIRAM_USE_MEMMAP
- ssl_ds/configure_ds.py: Fixed error regarding verification for production mode
- Flash Encryption: Fixed issue that 4-line flash encryption cannot work normally when 8-line psram enabled (#9244; #9287)
Removed
- AES: Removed potential unaligned access to buffers in AES-GCM which could be a problem for certain cache mappings to external PSRAM on ESP32-S2.
- "Protocomm" protocomm_security_pop_t is now deprecated, use protocomm_security1_params_t instead.
Peripheral Drivers
Added
- Added default clock source that can be used across chips for each peripheral
- ADC: New ADC oneshot mode driver esp_adc/adc_oneshot.h
- ADC: New ADC continuous mode driver esp_adc/adc_continuous.h
- ADC: New ADC calibration driver esp_adc/adc_cali.h and esp_adc/adc_cali_scheme.h
- ADC: Supported ADC DMA mode
- ADC: Added an ADC DMA example
- ADC: Upgraded ADC calibration algorithm on ESP32-C3
- GDMA: Support IRAM-Safe interrupt handler
- GPTimer: Introduced new timer group driver - GPTimer
- I2C: Support i2c use input-only pin as SCL in slave mode
- I2S: Added missing mck pin configuration in the example
- I2S: New I2S driver driver/i2s_std.h, driver/i2s_pdm.h and driver/i2s_tdm.h.
- I2S: Added examples for STD/TDM/PDM modes
- ESP_LCD: Added bounce buffer support
- ESP_LCD: Added SPI read support into esp_lcd component
- ESP_LCD: Support esp_lcd_panel_io_rx_param with I2C transport
- ESP_LCD: Support LSB first SPI LCD (#8790)
- ESP_LCD: Added GC9A01 driver and example (#7905)
- ESP_LCD: I80 LCD supports frame buffer in PSRAM (#8085)
- ESP_LCD: Added I2C OLED example with LVGL GUI
- ESP_LCD: Support NT35510 LCD model in the i80 LCD example
- ESP_LCD: Support ILI9341 in the I80 LCD example. (#9311)
- SPI_LCD: support trunked color data transfer (#8496)
- RGB_LCD: Support PCLK fractional divisor for RGB LCD
- RGB_LCD: Added double frame buffer support
- RGB_LCD: Added bounce buffer mode, bypass the EDMA to achieve higher FPS
- RGB_LCD: Support 8bit RGB interface
- RGB_LCD: Support the LCD mode of I2S1 on ESP32
- RGB_LCD: Added LVGL based RGB LCD example
- LEDC: Added LEDC_fade_stop API to allow to stop LEDC fading for ESP32-S2, ESP32-S3, ESP32-C3
- MCPWM: Added new driver for MCPWM peripheral. The driver of each MCPWM submodule is independent of each other.
- PCNT: New pulse count driver driver/pulse_cnt.h, with OOP style.
- SPI/hal: Fixed the max value for the clkdiv_pre field in ESP32-S3 SPI master clock configuration
- SPI Flash: Added support for TH Flash chips
- SPI Flash: Support unlock for MXIC chips
- SPI Flash: Added support for 16MB octal flash MX25UW12345G (#7996)
- SPI Flash: Added flash high performance mode (> 80MHz) support for some flash chips on ESP32-S3
- SPI Flash: Added an example showing how to run non-iram ISR when operating flash
- SDSPI: Added support for ESP32-S3 to SDSPI related examples.
- Temp sensor: Added support on ESP32-S3
- Temp sensor: New temperature sensor driver driver/temperature_sensor.h
- Touch Sensor: Added description for the misleading API. (#9067)
- PCNT: Support set a deterministic level for unused control signal.
- PSRAM: New PSRAM driver esp_psram.h
- PSRAM: Supported Octal PSRAM Error Correcting Code (ECC) feature
- PSRAM: Supported .bss on PSRAM on ESP32-S3
- RMT: Added DMA driver support for RMT peripheral.
- RMT: New RMT driver driver/rmt_tx.h, driver/rmt_rx.h and basic RMT encoder driver driver/rmt_encoder.h
- RMT: Added DShot ESC motor control example based on RMT infinite transmission.
- RMT: Added example to simulate the 1-wire protocol with RMT driver
- SDM: Added Sigma-Delta channel allocator driver.
- UART: Added new uart_get_tx_buffer_free_size API to get the free space size of tx ring buffer (#8932, #3078)
- UART: Added UART wakeup event for ESP32-S2, ESP32-S3, ESP32-C3. And the light sleep example is refactored
- USB: Added Human Interface Device example
- USB Host: Added USB Host Library example and documentation.
- USB Host/CDC: Added Virtual Com Port example
- TinyUSB: Added MIDI device example (#8541)
- TinyUSB: Support dynamic configuration descriptor
- TinyUSB: Added support for second CDC channel
- USB_SERIAL_JTAG: Can print through USB_SER_JTAG port without change the config option from UART.
Changed
- GPIO: Changed gpio_hal_iomux_func_sel() to be always inlined to avoid access issues when cache disabled.
- GPIO: Updated gpio driver to use the non-target specific config name CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND
- esp_hw_support: Refactor to have a same regi2c_ctrl.h header for all targets
- ESP_LCD: Write I2C can send without param (when it is -1)
- ESP_LCD: Allocate framebuffer in alignment
- Freemodbus: Updated of modbus examples for tcp and serial port
- I2S: Improved clock division calculation speed, expanded the supported frequency range of APLL, 8K sample rate is supported by APLL now.
- I2S: Updated FIFO direct access reg on ESP32 according to the TRM (https://www.github.com/espressif/esp-idf/issues/8862)
- PSRAM: Make SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY configurable on ESP32-S2 and ESP32-S3
- RTC WDT: Unify the RTC watchdog implementation
- SPI_FLASH: flash qio implementation in bootloader could be overridable
- SPI_FLASH: Now including target/esp_rom/spi_flash.h is not accurate. Include esp_rom_spiflash.h instead.
- SPI_FLASH: Changed ID_DEV_MASK() to be always inlined to avoid access issues when cache disabled.
- TWAI: TWAI hardware errata workarounds on the ESP32 are now enabled by default.
- USB Host/Hub: Enumeration will now fetch Manufacturer, Product, and Serial Number string descriptors.
- USB: USB HOST MSC example made hot pluggable
Fixed
- ADC: Fixed wrong ADC continuous mode sampling frequency issue on ESP32
- ADC: Fixed wrong ADC bytes per conversion on ESP32-S2
- ADC: Fixed wrong ADC output resolution issue on ESP32-S3
- ADC: Fixed legacy ADC Oneshot driver clock gating issue on ESP32-C3, ESP32-C2
- ADC: Fixed missing cplusplus guard in adc_hal.h (#8430)
- ADC: Fixed issue where ADC digital part not disabled by RNG, and not reset by driver
- ADC: Fixed ADC calibration error after waking up from light sleep
- ADC: Fixed ESP32-S3 ADC conflicts with Wi-Fi issue
- ADC Calibration: Fixed the assertion failure or returning wrong error code when ADC2 failed the arbitration
- DAC: Fixed offset for cosine wave function generator (#9430)
- esp_hw_support: Always inline cpu_hal_set_vecbase to avoid issues at -O0
- esp_hw_support: Fixed brownout not working issue after deepsleep
- esp_hw_support: Fixed calibration failure on rtc8m clock after cpu/core reset as 8md256 clock is not enabled during calibration
- esp_hw_support: Fixed bbpll calibration fail bug in high temperature on ESP32-S3
- esp_lcd: Can flush predefined pattern to screen before turning on the display (#8516)
- RGB LCD: Fixed RGB LCD drift issue
- i80 LCD: Fixed the issue that i80 LCD can't get data from DMA in time (#8212)
- fast_gpio: Fixed the wrong initial occupy mask
- Freemodbus: Fixed tcp master example and mb controller to allow r/w parameter with length > 24 bytes
- Freemodbus: Fixed uart_set_pin() check error in modbus master serial example
- Freemodbus: Fixed the mb_tcp_master example to resolve slave IP address correctly when address gaps exist in data dictionary
- GDMA: Fixed the issue that channel object was not allocated from internal memory when CONFIG_GDMA_CTRL_FUNC_IN_IRAM is true but CONFIG_GDMA_ISR_IRAM_SAFE is false
- GDMA: Fixed thread-safety of channel operations
- GPIO: Fixed ESP32-S3 GPIO48 does not support hold function bug
- GPIO: Fixed wrong GPIO_IS_DEEP_SLEEP_WAKEUP_VALID_GPIO macro (#8733)
- GPIO: Fixed some gpio pin num errors on ESP32-S2 and ESP32-C3
- GPIO: Fixed issue that GPIO interrupt cannot br triggered on APP CPU on ESP32S3 (#7885)
- GPIO: Fixed interrupt watchdog timeout when calling gpio_uninstall_isr_service (#5571)
- HAL: Forced cpu_ll_get_cycle_count to always be placed in IRAM if not inlined
- HAL: Fixed typo for kconfig option HAL_ASSERTION
- I2C Master: Fixed transfers crashing when not finished with a STOP condition
- I2C Master: Correct I2C clock frequency on ESP32-C3, ESP32-S3
- I2C Master: Read transactions not followed by a STOP won't trigger a panic anymore.
- I2C Master: Fixed watchdog timeout issue (#8543, #8120, #7281)
- I2C: Fixed typo of SOC_I2C_SUPPORT_SALVE (#8513)
- I2C: Corrected some I2C functions IRAM usage and placement (#8422)
- I2C: Fixed I2C command memory check when SPIRAM is used for heap allocation
- I2C: Fixed typo in timing macro name
- I2C: Output frequency is now more accurate on ESP32
- I2C: Fixed a bug in the ISR handler. The delay between transactions has now been greatly decreased.
- I2S: Fixed ws signal polarity in tdm mode
- I2S: Fixed the i2s event queue
- I2S: Fixed mclk stop issue on ESP32-C3/ESP32-S3 when setting clock, now the master clock will be enabled during installation instead of start function, and they will only be disabled after uninstalling the driver.
- I2S: Fixed the bug that can't switch mono/stereo by 'i2s_set_clk' on ESP32-C3 and ESP32-S3.
- I2S: Fixed adc/dac clock calculation (#8344, #8327)
- I2S: Fixed the issue that I2S_CHANNEL_FMT_ONLY_RIGHT not take effect.(#8538)
- I2S: Fixed write timeout while setting the clock
- I2S: Fixed divide 0 issue while setting PDM rx down-sampling rate (https://www.github.com/espressif/esp-idf/issues/8850)
- I2S: Fixed left/right slot swapped issue on ESP32-C3/ESP32-S3
- I2S: Fixed PDM RX mono/stereo issue (#9208)
- LEDC: Fixed ledc_cb_register not inside cplusplus guard (#8139)
- LEDC: Fixed incorrect check to s_ledc_fade_rec array
- LEDC: Fixed ledc_set_duty failed to take effect when called frequently (#7288)
- LEDC: Fixed incorrect fading behaviour with LEDC_FADE_NO_WAIT fade mode (#6710)
- LEDC: Fixed the wrong initial level of output signal if LEDC GPIO is configured to be inverted (#8497)
- MCPWM: Fixed implicit conversion in LL function (#8066)
- MCPWM: Fixed out of range issue in example (#9213)
- PSRAM: Fixed PSRAM and Flash RODATA virtual address overlap issue
- PSRAM: Fixed heap pool reservation for DMA/internal usage fail issue
- RMT: Fixed wrong RMT register for ESP32-S2, RMT doesn't have RX wrap mode (#8354)
- RMT: Fixed LED Strip timing issue by adding reset signal (#8827)
- RMT: Fixed undetermined idle level of RMT TX channel (#8864)
- RMT: Fixed error in the rmt_reg.h for ESP32-S3 and ESP32-S2 (#9100)
- SOC: Fixed wrong external PHY GPIO pads for ESP32-S3 (#9302)
- SDIO Slave: Fixed the issue that DMA descriptors allocated to non-DMA capable area
- sleep: Fixed driver using wrong print function in a critical section (#7942)
- SPI: Fixed crash calling spi_bus_free when not initialized (#8642)
- SPI: Fixed SPI Master driver cs_ena_posttrans wrong issue (#7758)
- SPI: Fixed wrong bus flag check for SPI driver Octal mode (#9133)
- SPI Master: Fixed SPI master example to keep CS active during read process
- SPI Slave: Fixed an issue with placing the interrupt handler into IRAM (#3870)
- SPI SLAVE HD: Fixed stack variable bug in seg_slave example (#7163)
- SPI Flash: Enable HPM(120M) flash mode on several kinds of XMC chips on ESP32-S3
- SPI Flash: Fixed behavior of esp_partition_get_sha256() in case the image is invalid.
- SPI Flash: Forbid writing to main flash when using invalid init arguments
- SPI Flash: Added a patch for XMC flash chip to increase its stability when brownout detected.
- SPI Flash: Fixed Coverity scan warning about null pointer deference in esp_flash_api
- SDSPI: Fixed potential conflict between sdspi driver and other devices on the same bus
- Systimer: Fixed bug with systimer_counter_value_t where a bad counter value could be returned when compiling with -O0 optimization.
- Timer Group: Fixed the issue that timer group can't re-alarm if auto-reload is disabled (#8095)
- Touch_sensor: Fixed the touch measurement interval becomes longer after wake-up from sleep on ESP32-S3
- TWAI: Fixed twai_ll_parse_frame_buffer() typo (#8743)
- TWAI: Fixed issue CONFIG_TWAI_ISR_IN_IRAM not working for ESP32-C3
- USB: Fixed TX buffer overwrites in device mode
- UART: Fixed RTS mis-reset before sending caused by context switch
- UART: Fixed the incorrect channel num on ESP32-S2, ESP32-C3, ESP32-S3
- UART: Fixed reset logic on ESP32-S3
- UART: Fixed a bug which prevented RX interrupts to be enabled after filling the RX buffer
- USB: Fixed interface descriptor printing (#9000)
- USB Host/HCD: Fixed bug where the returned actual number of bytes transferred was incorrect.
- USB Host/Hub: Fixed enumeration flow. Descriptor lengths are now pre-fetched during enumeration to workaround some non-compliant devices.
- USB Host/Hub: Fixed handling of sudden disconnects and port recovery.
- USB Host/Hub: Fixed bug where the size of wTotalLength was incorrect.
- USB Host/Stack: Fixed incorrect implementation of the USB_TRANSFER_FLAG_ZERO_PACK flag.
- USB Host/PHY: Fixed incorrect USB PHY initialization on the ESP32-S3. Host stack now uses the USB PHY driver for PHY initialization.
- USB Host/MSC: Fixed bug where MSC Host driver would issue MSC resets after enumeration.
- TinyUSB: Fixed return type in tu_fifo_peek_n() function (#8161)
- TinyUSB: Fixed dangling pointer when tinyusb using external USB PHY (#9264)
- TinyUSB: Fixed build issue when CONFIG_TINYUSB_NO_DEFAULT_TASK is enabled
- USB Serial JTAG: Make CONFIG_DEFAULT initializer match order of structure definition (#8812)
- USB Serial JTAG: Fixed the issue that there is no rom log when restarting
- USB Serial JTAG: Fixed issue that cannot print with wifi by default (#8131)
Removed
- Freemodbus: The component is moved out of esp-idf into external component: https://github.com/espressif/esp-modbus, while the examples are kept. See examples on how to use them as managed components.
- HAL: Removed dependency on log component
- I2C: Delete custom interrupt handler registration
- I2C: Removed ringbuf.h include from i2c.h.
- I2S: i2s deprecated dma_buf_count and dma_buf_len, use dma_desc_num and dma_frame_num instead
- LEDC: Removed REF_TICK choice for ESP32-C3 (as it is not supported by HW)
- LEDC: Removed REF_TICK as a supported clock source for LEDC on ESP32-S3
- clk: Removed legacy clk headers (target/clk.h, esp_clk.h).
- LCD: Removed check for hsync vsync GPIO unnecessary for DE mode
- SPI_FLASH: Removed legacy flash driver (with prefix spi_flash)
- PSRAM: Removed misleading PSRAM IS25WP032 in Kconfig option (#8863)
- UART: Delete custom interrupt handler registration
Core System
Added
- pthread: Added simple reader-writer-lock implementation
- esp_timer: Added a new esp_timer_get_expiry_time() and esp_timer_get_period() APIs
- CXX: Added missing explicit for some strong value types
- CXX: Added host tests for all I2C C++ code, reduced number of unit tests for that code
- newlib: Implemented sysconf, posix_memalign, realpath (#6119, #7798)
- newlib: Additional atomic builtins were implemented: __atomic_OP_fetch_n, __sync_OP_and_fetch_n, all nand related builtins (espressif/arduino-esp32#5948)
- ULP: ULP RISC-V Coprocessor support is added for ESP32-S3
- ULP: Added API for stopping/restarting the ulp-riscv.
- ULP: Added support for ULP FSM for ESP32-S3
- efuse: Added support ESP32-C2 chip
- efuse: Added major and minor versions for wafer and efuse block
- ULP: Added new config options for ULP
- Partition table: Added support for 32MB, 64MB, 128 MB flash sizes (#7688)
- efuse: Added efuse HAL layer
- ULP-RISCV: Added support and example of using GPIO interrupt to wakeup ULP-RISCV coprocessor
- efuse: Added ERR_RST_ENABLE efuse for ESP32-C3 and ESP32-S3
- Added support for placing FreeRTOS stacks in PSRAM for ESP32-S2 and ESP32-S3
- Added support for ESP32-C3 ECO4
- efuse: Validate written data after burning and re-burns it if necessary
- console: Allow selecting APB as the clock source for a higher baud rate (#8572)
- newlib: Added missing implementations of __atomic_load and __atomic_store builtins used by Clang
- ESP-IDF now warns you when one or more of the partitions are nearly full
- Task Watchdog: Added feature to subscribe arbitrary users to the task watchdog timer
- ULP: Re-enabled ULP riscv support for ESP32-S3
- ULP: Added support for ESP32-S3 to ULP-FSM example
- ULP: Added support and example for using the RTC ADC from ULP-RISC-V on ESP32-S3
- efuse: New define for secure boot key digests: esp_secure_boot_key_digests_t
- Examples: Added log_level command to console examples
Changed
- Substract rtc_iram_seg memory region size from ESP_BOOTLOADER_RESERVE_RTC
- IPC: Moved sources to esp_system
- CXX: C++ I2C example now uses MPU9250 instead of MCP9808
- CXX: I2C C++ is now using strong-value types
- esp_hw_support: appropriate waiting time in esp_random() for ESP32-S3
- heap: Make multi heap memory region's priority more reasonable
- esp_system/esp_ipc: ipc_isr does not use its own initialization task, it is done from ipc_task()
- esp_event: Change event_data argument in event post functions (esp_event_post* and esp_event_isr_post*) from void* to const void *.
- Extend GDBStub component for handling GDB by serial port at runtime in multicore mode. Include breakpoints, stepping and console output in GDB.
- esp_system: ESP32_X_BROWNOUT_* and ESP32_X_DEBUG_OCDAWARE kconfig options moved from target component to esp-system
- esp_hw_support/esp_system: Updated header file visibility and removed unnecessary inclusions.
- newlib: Changed ESHUTDOWN value to 110 to avoid overlap with ENOTSOCK (108)
- esp_system: CONFIG_ESP*_DEFAULT_CPU_FREQ* kconfig options moved from target component to esp-system and merged into a single non-target specific option
- newlib: ESP*_TIME_SYSCAL kconfig options moved from target component to newlib and merged into a single non-target specific option
- esp_hw_support: ESP*_REV_MIN and ESPRTC (all RTC related configs) kconfig options moved from target component to esp-hw-support
- Examples: Improved structure of console examples, added USB_SERIAL_JTAG support
- Semihosting: User defined sys call numbers aligned with the ARM standard
- Semihosting: Xtensa syscall instruction changed from break 1, 1 to break 1, 14
- eFuse: Renamed ERR_RST_ENABLE to DIS_USB_OTG_DOWNLOAD_MODE
- eFuse: Renamed DIS_USB_DOWNLOAD_MODE to DIS_USB_SERIAL_JTAG_DOWNLOAD_MODE
- eFuse: Renamed DIS_LEGACY_SPI_BOOT to DIS_DIRECT_BOOT
- eFuse: Renamed UART_PRINT_CHANNEL to DIS_USB_SERIAL_JTAG_ROM_PRINT
- Modified the memory layout to increase the space available for static allocation on ESP32-S3 by 78 kB. Previously this space was only usable as heap
- Improved flash power down logic
- esp-ringbuf: funtion placement is now controlled by its own configs: CONFIG_RINGBUF_PLACE_FUNCTIONS_INTO_FLASH and CONFIG_RINGBUF_PLACE_ISR_FUNCTIONS_INTO_FLASH instead of CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
- IPC: Increased IPC stack size when compiling with -O0
Fixed
- RISC-V: Fixed usage of mcause within the interrupt handler.
- RISC-V: Fixed GDB backtrace of interrupted threads
- RISC-V: Fixed GDB backtrace end function to point to prvTaskExitError
- RISC-V: Fixed handling exceptions when running under debugger
- efuse: Fixed a bug related to the non-sequential way of describing eFuses in efuse_table when such fields go together sequentially.
- spi_flash: No CPU release time for erase operations when OS is not running
- Heap: Fixed abort on allocation failure regardless of SPIRAM
- rtc clock calibration: Fixed bootup time increase when using usb-serial-jtag
- esp_timer: Fixed Coverity scan warning about unreachable code
- Heap: Fixed a bug in the TLSF allocator returning a chunk of memory smaller than requested
- esp_system: Fixed RTC_WDT protection in esp_restart_noos. App is compatible with 3.1 bootloader.
- Fixed system unable to start up when a toolchain with 64-bit time_t is used (CONFIG_SDK_TOOLCHAIN_SUPPORTS_TIME_WIDE_64_BITS)
- efuse: Fixed eFuse timesettings issue on ESP32-C3
- console: Fixed LF ('\r') causing console to get stuck if received less than 30ms after the previous character
- efuse: Fixed eFuse times settings for ESP32-S3 chip
- ULP: Fixed ULP FSM initialization code flow for ESP32-S2
- heap: Fixed wrong arg passed to assert_valid_block
- Xtensa: Fixed SET_SP potentially causing invalid access exceptions after updating SP
- heap: Fixed a bug in memory free bytes calculation causing esp_get_minimum_free_heap_size() to return a wrong value
- console: Fixed potential usage of an uninitialized buffer (#6440)
- esp_ipc: Fixed a case when ipc_task() can wake up blocking task early
- esp_hw_support: Fixed time spent in light sleep when RTC is used for gettimeofday
- rtc regulator: Fixed occasional rtc mem load err
- Fixed _rtc_slow_length being incorrectly optimized by compiler
- Fixed app crash when running OTA and OTA related task's stack is in rtc fast memory at the same time.
- ULP: Reset ULP coprocessor each time it is halted (#7863)
- Console: Fixed linenoiseProbe blocking forever on terminals without ANSI escape codes support when USB_SERIAL_JTAG is used (#8839)
- Fixed 8MD256 can't be used as RTC slow src in deepsleep on ESP32 (#8007, #8089)
- Fixed cpu crash bug caused by memory lost after woken up from lightsleep on ESP32-C3/ESP32-S3
- Fixed efuse fail bits
- Newlib: Fixed the definition of struct dirent::d_ino. It is now defined as ino_t (2 bytes), instead of an int (4 bytes) (esp-rs/rust#117)
- esp_hw_support: Fixed spinlocks not working on ESP32-S3 if placed in PSRAM
- efuse (ESP32-C3): EFUSE_RST is treated like POWER_ON
- efuse (ESP32-C3): Checked state of eFuse BLOCK0 at the start app
- PSRAM: Fixed startup crash when CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=0
- app: Fixed app startup stuck when bootloader with 40Mhz and app with 80Mhz (ESPTOOLPY_FLASHFREQ)
- Fixed garbled UART output on startup on ESP32-S2 (#9168)
- ULP: Fixed ULP-FSM erroneously waking up due to RISC-V co-processor trap signal
- esp_system: Fixed esp32c2/esp32c3/esp32h2 TLS size
- heap: heap_caps_*_prefer functions now only call heap_caps_alloc_failed callback once, in case all attempts failed.
- Fixed implicit conversion incompatible with C++
- Fixed format of PC and SP registers in the backtrace for easier parsing (#9138)
Removed
- ROM: Deleted deprecated headers from esp32 component, these have been replaced by headers in the esp_rom component.
- CXX: Removed public i2c driver include from I2C C++ class
- esp_hw_support: Removed deprecated CPU util functions in soc/cpu.h and deleted the files. Equivalent functions are now available in esp_cpu.h
- esp_timer: Removed legacy ESP32 FRC timer implementation
- eFuse: Free ESP32-C3/ESP32-H2 some unused efuse fields
- esp-system: Removed esp_phy and nvs dependencies, change app update and pm to weak dependencies
- portmacro_deprecated.h file is removed.
- soc,esp_rom: Removed target-specific header files and generalized lldesc, created SOC cap for Cache memory Ibank size on ESP32-C3
- ULP: Removed ESP32 ULP TSENS references from deep sleep example and docs.
- CPU: Removed usage of old CPU related API. Deprecated interrupt_controller_hal.h, cpu_hal.h, cpu_ll.h, soc_hal.h and soc_ll.h.
- CPU: Deleted API header file compare_set.h. Substituted by API function esp_cpu_compare_and_set() from esp_cpu.h.
Debugging
Added
- trax: Added ESP32-S3 Support
- apptrace: Added ESP32-S3 Support
- app_trace: Implement UART trace destination
- debug_stubs: Refactor and add support for RISC-V
- sysview: Added ESP32-C3 into the supported target list
- sysview: Connect SystemView through UART to view data in real-time.
- Added FreeRTOS objects showing support to GDB with-python
- Added standalone GDB v11.1 release with python 3.6+ support
Changed
- gcov: Do not use shrunk ROM's fake stdout and stderr FILE struct
- espcoredump.py script is now part of esp_coredump package (https://pypi.org/project/esp-coredump). This package is installed automatically when installing ESP-IDF. The package provides a Python module, esp_coredump, which can be used to programmatically access information from core dumps from Python scripts.
- app_trace: Moved all apptrace related functions to IRAM
- System/CPU: Modify IRAM/DRAM split when debugger attached to the CPU
Fixed
- gcov: Fixed interference of gcov dump with normal IPC calls
- Fixed crash at startup when apptrace is enabled
- espcoredump: Fixed a bug preventing variables marked as COREDUMP_DRAM_ATTR to be dumped in core file
- sysview: Fixed sysview examples build error for ESP32-C3
- Fixed stepping and tracing in GDB
FreeRTOS
Added
- Added pm_trace header include, fixing compile error when CONFIG_PM_TRACE was enabled
- Added FreeRTOS unit test to verify the yielding behavior of the kernel
- Added support for RISC-V targets to the FreeRTOS SMP kernel
- Enabled FreeRTOS SMP for ESP32-S2. ESP32-S3, ESP32-C2 and ESP32-H2
Changed
- Enabled single-core build for FreeRTOS SMP
- Enabled xTaskAbortDelay() and xTaskGetHandle()
- Updated FreeRTOS module handles to struct type from void* type
- Changed minimal stack size to regard watchpoint usage
- Changed freertos xtensa port to always inline xPortSetInterruptMaskFromISR and vPortClearInterruptMaskFromISR (#8301)
- Reorganized FreeRTOS test folder structure
- Modified API vTaskGetSnapshot to return success or failure status
- Power Management: SMP FreeRTOS does not support power management yet. Power management features are disabled when SMP FreeRTOS is enabled.
- Function vTaskInternalSetTimeOutState modifies the timeout parameter in tasks.c critical section
Fixed
- esp_ringbuf: Fixed a bug where the Rx and Tx semaphore release sequence was incorrect in xRingbufferSend and xRingbufferSendFromISR functions.
- esp_ringbuf: Fixed a bug where comparision between a signed and unsigned operand resulted in incorrect free size for no-split/allow-split buffers (#7344)
- Fixed xStreamBufferReset function always crashing
- Fixed thread safety issue with configASSERT
- Fixed backtraces in coredump and GDB Stub when the project is built at release optimization level.
- Fixed build warnings with -Wsign-conversion CFLAG
- Added stdint.h to linux portmacro header
- Fixed stack and TCB allocation order for idle and FreeRTOS Timer tasks
- Fixed bug in Xtensa FreeRTOS port where extra CPU registers (such as threadptr and SCOMPARE1) were not being saved on solicited context switches.
- Fixed a bug in event group functions where the blocked task list was being accessed without acquiring the task list spinlock
- Fixed application startup issue with ESP_MAIN_TASK_AFFINITY_CPU1 config enabled
- Fixed a FreeRTOS timer bug where xTimerIsTimerActive incorrectly returns pdTRUE from callback (#8014)
- Fixed an SMP scheduling bug where core 1 would always yield after a tick interrupt
- Fixed a bug where xTaskResumeAll() called on core 1 could unwind the pended ticks managed by core 0
Removed
- Clean task.h file from ESP's include freertos/task_snapshot.h addition
- Removed FREERTOS_ASSERT kconfig option
Power Management
Added
- Added the usage of wakeup source EXT0, and how to use internal pullups if necessary
- Support power management for ESP32-C2
- Added support for using touch sensor in sleep modes on ESP32-S3
Changed
- light sleep reject is now enabled for all wakeup sources
- Increasee lightsleep current on ESP32-C3/ESP32-S3, to avoid memory lost
- Reduced power consumption in lightsleep when using 8MD256 as RTC slow clock, but not using LEDC clock source on ESP32-S3.
- Decreased power consumption in different use cases on ESP32-S3.
- Simplify code for time compensation when wakeup from light sleep
Fixed
- Fixed crash caused by bluetooth high level interrupt
- Fixed WiFi/BT MAC BB power down in light sleep
- Fixed the issue of deep sleep wakeup failure caused by using light sleep and deep sleep at the same time
- Fixed ext1 cannot wakeup via RTCIO >= 18 issue
- pm_impl: Fixed neither enter light sleep nor enter "waiti" state in idle task
- Fixed RTC8M domain power down issue when used as RTC source (#8007, #8089)
- Fixed cannot lightsleep again after a wakeup from ULP (#6229)
- Fixed POWER ON reset when using RTC IO as input in deepsleep on ESP32-S3.
- Fixed RTC memory lost in high temperature in deepsleep on ESP32-S3.
- Fixed dangerous power parameters in sleep modes on ESP32-S3
- Fixed mspi current leakage during light sleep
- Fixed cannot pd cpu and rc fast at the same time during light sleep
LWIP
Added
- Added support for IPv6 input hook
- Support multiple DHCP servers
- Added ESP-NETIF L2 TAP example
- Added option to route LWIP logs through ESP_LOG interface
- Added LwIP IEEE 802.1D bridge example
- Added support for TTL option in ping API
- Added support for appending custom options to dhcpserver
- esp_netif: Added support for implementing custom lwip based network interface
- esp-netif: Added ESP-NETIF L2 TAP interface to be able to access L2 frames from user's application
- esp-netif: Added client's MAC address to DHCP server's callback and IP_EVENT_AP_STAIPASSIGNED event (#7541)
- esp_netif: Added support to set/override default interface from user code (#8330)
- Examples: Added example to create a raw ICMPv6 socket and sends an ICMPv6 Echo-Request
Changed
- Updated lwip version based on 2.1.3 release
- Updated port layer to enable using vanilla lwip (upstream version without Espressif specific patches)
- Updated LWIP_DHCP_OPTIONS_LEN default value when LWIP_DHCP_DISABLE_VENDOR_CLASS_ID disabled
- Examples: Updated UDP socket example to use recv_msg
- esp_netif: Added NETIF_FLAG_MLD6 flag for ethernet netif interface
Fixed
- Fixed sys_arch_sem_wait to wait for at least timeout milliseconds, making it POSIX compliant
- Fixed potential null-dereference when processing valid PPPoS packet containing zero characters (#8300)
- Fixed NAPT forwarding of reference type pbufs, used by the default Ethernet interface
- Example: Fixed the build error in ICMP echo example of unmatched initialization order of esp_ping_callbacks_t (#8962)
- esp_netif: Fixed incorrect return value of esp_netif_leave_ip6_multicast_group()
- esp_netif: Fixed cyclic dependencies between esp_netif, lwip and drivers (wifi, ethernet). Dependencies are formally defined as: lwip <- esp_netif <- esp_eth, esp_wifi.
Removed
- esp-netif: Removed tcpip_adapter compatibility layer, please use esp_netif component directly.
- esp-netif: Removed dependency of L2 TAP Interface from netif_lwip. The L2 TAP VFS can be used even without lwIP ESP NETIF initialized.
TCP Transport
Added
- Added support for continuation frames in websocket transport
- Added websocket dynamic buffer feature
Fixed
- Fixed possible leak in Websocket transport
- Fixed potential null dereference if esp_transport_tcp_init is used separately
- Fixed error propagation to higher layers (esp_http_client, esp_https_ota)
OTA
Added
- esp_https_ota: Added support for decryption callback
Changed
- Updated esp_https_ota() API
- Updated esp_https_ota_begin() API signature
- Updated pre_encrypted_ota example to check FW version
Fixed
- esp_https_ota: Fixed esp_https_ota_begin may return ESP_OK when HTTP status code is not 200
- esp_https_ota: Fixed esp_https_ota_begin may exist memory leak
- Fixed the component to check chip id at start of ota
- Fixed handling of HTTP 303 status code
HTTP Client
Added
- Added an interface that can get session errno so that it can be processed according to requirements in the user layer
- Added event for HTTP redirection
- Added caching mechanism to fix data corruption in http_on_body
- Added HTTP 303 status code
Changed
- Changed default value of HTTP digest config to n.
- Changed content_length and data_process fields to int64_t and return type in API signatures to return int64_t.
Fixed
- Fixed HEAD request will affect the all next HTTP requests unless we close the HTTP request
- Fixed that parsing invalid url (with empty hostname) causes crash
- Fixed memory leak in esp_http_client_example
- Fixed location field for multiple redirects
- Fixed auth_header field for multiple redirects
HTTP Server
Added
- Example: HTTPS Request: Added certificate expiry checking
- http_parser: Create new component out of nghttp
- WebSocket CLOSE frame can support callback function
- Enable support of secure element (ATECC608A) for https_server through esp-tls (#8286)
- Added config option to ensure that API httpd_queue_work() enqueues work more reliably.
Changed
- Updated variable holding different certs in https server component
- Updated return type of httpd_ssl_stop API
Fixed
- Fixed indefinite wait in httpd_stop
- protocomm_httpd: Fixed Coverity scan warning about unused value
- Fixed websocket server not support handle multiple connections when client send CLOSE frame
- Fixed websocket server not supports handle PING and CLOSE frame when handle_ws_control_frames enable
- Fixed wss_server_example not close socket
Removed
- nghttp/sh2lib: Move components to idf-extra-component repository, they will be used through component manager
- Removed http_server.h header file
Provisioning
Added
- wifi_prov/ Bluedroid: Added support to configure link encryption during characteristic read /write
- wifi_prov_mgr: Added configurable BT option after provisioning is completed.
Changed
- wifi_provisioning: Updated component to remove dependency on mdns
- wifi_provisioning: Optimized the number of AP for wifi scan
- Switch from bluez/dbus to bleak module (#9117)
Fixed
- wifi_provisioning: Fixed provisioning not stopping in release mode
- wifi_prov_mgr: Fixed device disconnection issue after pairing
- wifi_prov_mgr: Simplified application by not using raw adv data which remote application was not able to scan
mbedTLS
Added
- Enabled hardware support for SHA on ESP32-C2
Changed
- Upgraded to v3.1.0 release
- Disable MBEDTLS_DHM_C (cipher-suite MBEDTLS_KEY_EXCHANGE_DHE_XXX) in default configuration
- Decrease SSL peak heap cost by around 30% in dynamic buffer configuration feature
- Updated the default root certificate bundle (cacrt_all.pem)
Fixed
- Fixed issue where hardware MPI was not being used in some cases for ESP32-C3
- Disable MBEDTLS_DYNAMIC_BUFFER feature when MBEDTLS_SSL_PROTO_DTLS is selected
- Fixed ssl server memory leak when enable mbedtls dynamic buffer function
- Fixed ssl server crash for rsa key exchange methods when enable mbedtls dynamic buffer function
Bootloader
Added
- Added fault injection protection for check_anti_rollback
- Added rng entropy activation and deactivation API
- Added an option to choose GPIO level for entry into the test app (#8332)
Changed
- Code size at -Os optimization level was increased by 600 Bytes on ESP32, due to using MMU HAL functions and Cache LL functions
- Code size at -Os optimization level was increased by 812 Bytes on ESP32-S2, due to using MMU and Cache HAL/LL functions
- Code size at -Os optimization level was increased by 992 Bytes on ESP32-S3, due to using MMU and Cache HAL/LL functions
- Code size at -Os optimization level was increased by 864 Bytes on ESP32-C3, due to using MMU and Cache HAL/LL functions
- Create option for toggling memory region protection.
Fixed
- Fixed and re-enable bootloader_debug_buffer function for logging relevant Bootloader buffers.
- Fixed the issue custom uart gpio doesn't take effect
Removed
- Removed target-specific ROM header inclusions from public headers
ESP-TLS
Added
- Support for TLS 1.3 for wolfSSL
- Added an API to free client session
Removed
- Mark API esp_tls_conn_delete as deprecated
- Marked esp_tls_conn_http_new() as deprecated, added alternative esp_tls_conn_http_new_sync()
- Fixed integration of I2C address related menuconfig option from esp-cryptoauthlib
ESP-MQTT
Added
- Added qos and dup flags to data events
- Added support for suback massage payload in mqtt events
- Added support for client with empty id
- Added support for MQTT v5.0 specification
Changed
- Updated ping processing to explicitly request ping messages in periodic intervals (unrelated to current communication)
- Updated transport list allocation to save up to 2.5K by removing unused transport
- Changed configuration struct organization, grouping fields by context.
Fixed
- Fixed user requested disconnect to correctly send MQTT disconnection message
- Fixed reconnection request with disabled autoreconnect
- Fixed publishing message longer than Tx buffer size (espressif/esp-mqtt#214)
- Fixed esp_mqtt_client_enqueue() API to send data with correct dup flag
- Fixed read malfunction and error propagation if transport read returns negative value (indicating errors)
- Fixed esp_mqtt_client_enqueue() with len=0 (espressif/esp-mqtt#226)
- Fixed MQTT Ping message timeout processing
Storage
Added
- FAT: Volumes count can now be configured through the menuconfig
- VFS: timeout of select function is now POSIX compliant.
- NVS: Added NVS partitions "encrypted" flag related v4.3 backward compatibility config
- Added support for semihosting on ESP32-C3
- Updated FATFS to 0.14b
- SDMMC: Support erase/trim/discard/sanitize
- VFS: Added ftruncate function support (#8279)
- VFS: Added truncate/ftruncate VFS support for spiffs
- SPIFFS: Added built-in checks for partition size, alignment and page size
- SPIFFS: Added esp_spiffs_gc function to force garbage collection in SPIFFS (#8626)
- Added esp_vfs_fat_info function to obtain information about usage of a FATFS partition
- SDMMC: Validate HS mode switch for MMC device
- fatfsparse.py: Added cluster chaining support to enable reading longer-than-sector files
- NVS: Added menuconfig option to turn assertions into function return codes
- NVS: Partially new interface and behavior changes for iterator functions (#7826)
- fatfsparse.py: Enable long file name support
Changed
- FatFS: Updated FatFS API - added implementation of disk_status() callback
- UnitTest: Enabled SDSPI FATFS write/read speed test for ESP32-S2
- UnitTest: Enabled SDSPI FATFS write/read speed test for ESP32-C3
- VFS/FAT: Renamed convenience mounting functions. esp_vfs_spiflash_mount is now called esp_vfs_spiflash_mount_rw_wl and esp_vfs_rawflash_mount is now called esp_vfs_spiflash_mount_ro. Their unmount functions have the same changes with unmount instead of mount.
- Examples: Refactored ext_flash_fatfs example to be compatible with all ESP32 targets
- FatFS: Updated FatFS API - added option to disable mocked disk_status() (which is now default behavior) for SDMMC via disk_status_check_enabled field in esp_vfs_fat_mount_config_t struct
- FatFS: Updated FatFS API - added ff_sdmmc_set_disk_status_check() function to change disk_status() behavior (mocked or not) in runtime
Fixed
- VFS: Fixed access function setting incorrect errno value (#8037)
- NVS: Fixed OOM check wrong pointer issue
- FatFS: It is now possible to mount more than 2 volumes
- VFS: Fixed cleanup procedure in esp_vfs_register_fd_range function to not deallocate an unrelated VFS entry (#7413)
- VFS: Fixed errno value reported by open function (#8036)
- NVS: Fixed issues found by Coverity
- VFS: Bugfix vfs_fat_write/pwrite errno and return value upon disk-full (#5027)
- SDMMC: Fixed CMD38 erase argument validation
- VFS: Fixed a race condition in select() if both socket-fd and non-socket fd trigger simultaneously
- SPIFFS: Fixed errno value set to EIO when readdir reached the end of the directory.
- FatFS: Fixed incorrect mtime reported for files created during daylight savings time (#9039)
- nvs_flash: Fixed nvs_flash_init_partition_ptr() to pass correct arguments to NVSPartitionManager::init_custom()
Removed
- nvs_flash: Removed mbedtls as default dependency
- VFS: Absolute path support removed from VFS semihosting registration
- FATFS: Removed UTF-16 options for filename encoding (CONFIG_FATFS_API_ENCODING_UTF_16), which was non-functional.
- SDSPI: Removed deprecated API structure sdspi_slot_config_t and fuction sdspi_host_init_slot
Tools
Added
- kconfig: Added APP_REPRODUCIBLE_BUILD menuconfig option to produce reproducible binaries. when enabling this, a prefix_map_gdbinit file would be generated under the BUILD_DIR
- Provided support for generating FATFS partition on a host
- Provided support for wear levelling for FATFS partition generator
- idf.py: Added clang-check command to run clang-tidy check for current app
- idf.py: Added clang-html-report command to generate HTML report for current app
- Added CMake functions for integration into the build system for FATFS with and without WL support
- Added gen_soc_caps_kconfig.py for parsing soc caps into kconfig files
- Check if the PIP_USER environment variable exists and if exists, set to value "no"
- Added "idf.py save-defconfig" command to generate sdkconfig.defaults based on current sdkconfig (https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/kconfig.html#using-sdkconfig-defaults)
- Introduce features for selective installation of Python packages
- Provided support of FAT16 for FATFS partition generator
- Added option for removing unused tools, to free up some disc-space
- idf_size.py: Support .noinit section names (#8428)
- Added a hint about that IDF Monitor can be exited with CTRL-T CTRL-X (#8508)
- Enabled long file names support for fatfsgen.py
- Ensure environment variables are correctly updated when switching between versions of ESP-IDF in UNIX systems.
- Added support for setting file modification time in FATFS partition generator (fatfsgen.py)
- esptool_py: Support ESP32-S3 USB OTG compressed flashing with stub
- Added macos-arm64 platform definition and binary links
- Added --no-reset option for IDF Monitor in order to avoid resetting the chip target upon connection (#8889, #7651, #8788)
- Added extra gdbinit file loading for reproducible build
- Added tool for analysing fatfs binary image
- Added extra gdbinit file loading for reproducible build
- Docker: Added build arguments to reduce the image size: IDF_CLONE_SHALLOW and IDF_INSTALL_TARGETS
- mkdfu.py supports setting flash parameters and partitions over 2 MiB
- Added GCC 11 support
- Added a guide to migrate code to GCC 11
- Added support of idf_tools.py install-python-env --features pytest to install pytest related packages
- Added default IDF_PATH detection in export.fish (#6814)
- Added optional install script argument --disable-* for removing optional Python features
- Add automated hints into idf.py for suggesting resolutions of common errors
- Support for blank lines in configuration and values file was added for the Mass Manufacturing Utility
- idf.py: Added ESP32-S3 to supported DFU targets for idf.py
- Added argument "--json" for "idf.py help" for printing help in machine readable format
Changed
- Updated toolchains to esp-2022r1-RC1 version
- Upgrade OpenOCD version to v0.11.0-esp32-20220706
- Upgraded gdb version to 11.2_20220715
- Updated CMake version to 3.23.1 (#8821)
- Updated Clang 14 in tools.json with ESP32-S3 support
- idf_size: Changed --archive_details output
- idf_size: Improved chip target detection
- Force objdump to produce output in English (#7903)
- test_utils: Separate file for memory check functions, renamed functions
- Improved diagnostics in install scripts when creating virtualenv
- ldgen: Updated pyparsing version to 3.x. Rewrite fragment file parser.
- Made the ELF file as an optional argument for IDF Monitor
- Manage package versions outside of ESP-IDF repo (Python constraints are downloaded from https://dl.espressif.com)
- Unity: Improved test selection menu by echoing the input and supporting backspace (#8338)
- Use delay between rename attempts on Windows in the installer (https://esp32.com/viewtopic.php?f=13&t=25962)
- idf.py -b monitor sets the monitor baud rate as well (#8316)
- Changed python_version_checker.py to accept Python 3.7+
- idf_tools.py prints URL before starting the download (#8625)
- esptool.py is no longer included as a submodule but as a Python package. This package is installed automatically when installing ESP-IDF. The package provides a Python module, esptool, espefuse, and espsecure, which can be used to communicate with the ROM bootloader in Espressif chips.
- Docker: Docker images for linux/arm64 platform are now also built and uploaded
- Use built-in venv instead of the virtualenv package for creating Python environments (on Linux and macOS)
- idf_monitor.py: Changed integer comparison of ESP_MONITOR_DECODE to string
Fixed
- idf_size: Fixed bug with --archive_details that always runs like with --diff label
- Create the ".espressif" directory on the first run on clean system (#7848)
- PowerShell export script: Initialize $envvars_array to an empty list (#7819)
- PowerShell export script: Define $IsWindows if not defined (#7858 fixes #7820)
- Avoid shell autocomplete initialization for bash version lower than 4
- idf_monitor: Prevent missing characters when the user prints escape sequences that are not expected (#8100)
- Fixed ldgen not allowing '+' sign in archive names (#8073)
- fatfsgen: Open files in binary mode instead of encoding content of files (#8042, #8169)
- idf_size: Fixed bug with wrong memory calculation in ESP32-C3, ESP32-H2, ESP32-S3, ESP32
- Don't check the environment during idf.py shell completion (#8362)
- IDF Monitor should flash with the same and unmodified port it was invoked with (#8432)
- Fixed core dump decoding failure in IDF Monitor (#8099)
- idf_size.py: Identify objects without extensions (*.{o,obj}) in MAP files
- Fixed an issue with handling of errors from script files for execute_scripts cmd (#8420)
- Allow to specify port and baud rate for otadata commands (#8317)
- Fixed installing by install.ps1
- CMake: It is now possible to specify component specific compiler settings without affecting the rest of the project (#8806, #8881)
- Fixed the printed esptool arguments at the end of "idf.py build" (#8798)
- esptool: Don't add SHA256 digest to images when flash size detection is enabled
- Fixed an issue with handling multiline strings in NVS partition generator (#7175)
- Fixed clang-tidy work for ESP32-S2 and ESP32-S3
- Avoid the crash of IDF Monitor when it is run without an ELF file (#9385)
- Resolved symlinks when installing ESP-IDF using install.sh (#9375)
- nvs_partition_gen: Bugfix Allow strings up-to 4000 bytes with NVS V2 format
Removed
- Remove MSYS/Mingw support
- Delete the old C-based kconfig tools (kconfiglib is used in all supported environments)
- Deprecated commands removed from idf.py, but kept working as cmake deprecated targets.
Build System
Added
- Added support for using soc caps defines in kconfig and cmake
- kconfig: Added target specific sdkconfig.rename.TARGET files
- Added WHOLE_ARCHIVE component property to force all object files of the archive to be included into the executable (#8667)
- Examples: Added link-time plugin registration example
- Added CMake property for chip architecture (riscv/xtensa)
- Added IDF_COMPONENT_MANAGER build property
- Minimal CMake version that is supported has increased to 3.16
Changed
- CMake build can now be called from another project, regardless on previously defined CMAKE_*_FLAGS (#7507).
- Components espcoredump, esp_gdbstub and app_trace are no longer automatically added to the build as dependencies of core components, such as esp_system and freertos. If you have previously trimmed the list of components by setting COMPONENTS variable and if you need these components to be included, you have to add these components to the COMPONENTS list.
- Build & config: Enable linker warnings on 'common' symbols
- kconfig: confgen.py now handles many-to-one config renames
- APP_NO_BLOBS kconfig option moved from target component to the main kconfig menu, under build type.
- Enable the component manager for pure CMake builds by default
- Config: Moved all configs out of target components (e.g. esp32) to the actual component where they are used, primarily esp_system and esp_hw_support
- Moved inclusion of common requirements from early expansion to later stage
- Default C language standard was changed from C11 to C17 (with GNU extensions)
- Default C++ language standard was changed from C++11 to C++20 (with GNU extensions)
- regi2c_*.h header files have been moved from esp_hw_support to soc
- Refactor build_system/cmake/import_lib example to demonstrate ExternalProject_Add
Fixed
- Fixed the unused TAG strings when CONFIG_COMPILER_OPTIMIZATION_CHECKS_SILENT is enabled. (#8250)
- kconfig: Fixed non-visible deprecated configs missing from sdkconfig.h
- ldgen: Fixed error reporting of duplicate and missing entries.
- kconfig: Fixed check_kconfigs.py not correctly handling "rsource", "osource", "orsource" commands.
- Fixed special treatment of 'main' with managed components
- Fixed a bug where the -mlongcalls flag was not being passed to assembly (.S) source files when building for Xtensa targets
- Fixed an issue where disassembly of ELF files built with ESP-IDF would sometimes be incorrect. The issue was related to .xt.prop sections missing from the final ELF file.
Removed
- Remove the "make" build system
- Using string concatenation to define COMPONENT_DIRS or EXTRA_COMPONENT_DIRS variables is now deprecated. These variables should be defined as CMake lists, instead. For example, use set(EXTRA_COMPONENT_DIRS path1 path2) and list(APPEND EXTRA_COMPONENT_DIRS path3) instead of set(EXTRA_COMPONENT_DIRS "path1 path2") and set(EXTRA_COMPONENT_DIRS "${EXTRA_COMPONENT_DIRS} path3"). Defining these variables as CMake lists is compatible with previous IDF versions.
- Removed public dependency of freertos component on esp_timer component
- The following components are removed from common component requirements: lwip, vfs, esp_wifi, esp_event, esp_netif, esp_eth, esp_phy.
- Removed the target components (e.g. esp32)
- Removed COMPILER_DISABLE_GCC8_WARNINGS option
External Libraries
Changed
- Console: Upgraded argtable3 library to version 3.2.1.
- protobuf-c submodule updated to latest v1.4.0 release
- libsodium: Libsodium component moved to idf-component-manager
- cbor: Cbor component moved to idf-component-manager
- jsmn: Jsmn component moved to idf-component-manager
- expat: Expat component moved to idf-component-manager
- ASIO: ASIO component moved to idf-component-manager
- mDNS: mDNS component moved to idf-component-manager
- Websockets: esp_websocket_client moved to idf-component-manager
Documentation
Added
- Added ESP-IDF 4.4 to 5.0 Migration Guides
- Added Chinese translation for sleep-modes.rst, system.rst, system_time.rst, esp-https-server.rst, gpio.rst, dfu.rst, build-system.rst, dedic_gpio.rst, gptimer.rst, pcnt.rst, system.rst, and spi_slave.rst
- Added English translation for RF Coexistence documentation
- Added ESP32-S3-DevKitC-1 v1.1 user guide
- Added Reproducible Builds documentation
- Added a modem sleep example in Sleep Modes documentation
- Added the section Application Examples for ESP-NOW
- Added README.md for demo controller_hci_uart_esp32
- Added an example list for ESP-WROVER-KIT
- Added a user-friendly guide about how to use ws_server_example_test.py.
- Added a section explaining pairing pop during Wi-Fi provisioning
- Added documents for USB Serial/JTAG
- Added copyright header guide into the Contribution Guide
- Added documentation about sharing SPI bus among SD card and other devices (#6510)
- Added a note to mck_io_num, to specify that only GPIO0/GPIO1/GPIO3 can be set as mck signal for ESP32
- Added pin header version information in ESP32-PICO-KIT user guide
- Added ordering information to ESP32-S3-DevKitC-1 User Guide
- Added chip target and link to gpio.h
- Provided tips about Python certificates for Mac users
- SPI Flash: Added Flash suspend feature to Optimizing IRAM Usage chapter in programming guide
- Added a programming guide about configuring Flash and PSRAM on ESP32-S3
- SPI Flash: Added docs for optional features
- LEDC: Added documentation for clock source and ledc_fade_mode_t
- SPI Flash: Added docs to explain the erase yield
Changed
- Updated documentation for Wi-Fi driver Wi-Fi for ESP32-S3 target, Wi-Fi CSI, and Wi-Fi multiple antennas
- Updated documentation for mocking, high-level interrupts, interrupt allocation, timer, ulp, flash-encryption, flash power-down, and memory types
- Updated Hardware Reference section for ESP32-S3, frontpage and general topics for ESP8684
- I2S: Updated I2S programming guide (#8618)
- Updated Chinese translation for wifi.rst, idf-monitor.rst, vfs.rst, ota.rst, fatfs.rst, esp_wifi, jtag-dubugging/index, console.rst, timers.rst, memory-types, build-system.rst, fatal-errors.rst, spi_flash.srt, sdmmc.rst, linker-script-generation.rst, external-ram.rst, flash-encryption.rst, fatal-errors.rst, unit-tests.rst, building-openocd-windows.rst, configure-other-jtag.rst, using-debugger.rst, fatfs.rst, power_management.rst, components/wear_levelling/README_CN.rst and readme.rst for Manufacturing Utility
- Updated Chinese translation for the following sections of the programming guide: get-started, BLE-MESH, and hw-reference
- Updated Chinese translation for esp32-devkitc and esp32-s2-kaluga-1-kit user guides
- Updated README on how to use UUID128 for GATT server and client examples
- Updated dedicated GPIO information for ESP32-C3
- Updated section Condition Checking in Linker Script Generation
- Updated RTCIO information for ESP32-C3. The function "rtc_gpio_isolate" is not available (or necessary) for ESP32-C3
- Updated a statement specifying the heap_caps_malloc usage for PSRAM and DMA
- Updated pin layout diagrams for ESP32-S3-DevKitC-1 user guide and SP32-S3-DevKitM-1 user guide
- Updated USB pins in api-guides/usb-serial-jtag-console
- Updated the module on ESP32-DevKitc from ESP32-WROVER to ESP32-WROOM
Fixed
- Fixed esp_ota_revoke_secure_boot_public_key API documentation not appearing in the appropriate docs
- Examples: Simple sniffer example bug fixes (#7966)
- Fixed typo in sdmmc_cmd.h and inconsistency in spi_master.h
- Make target-specific installation clearer in the getting started guide (#8254)
- Fixed the name of the IP_EVENT_STA_LOST_IP event
- Marked I2C driver i2c_master_cmd_begin() function as thread-safe
- Fixed documentation of power down flash
- Made Classic BT documents only visible for ESP32