ESP-IDF Release v5.0
Documentation for release IDF v5.0 is available at https://docs.espressif.com/projects/esp-idf/en/v5.0/
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. Release v5.0 is the latest stable release at the time of writing.
We highly recommend referring to our migration guide while moving your apps from ESP-IDF v4.4 to v5.0 release.
Obtaining v5.0
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 --recursive https://github.com/espressif/esp-idf.git esp-idf-v5.0
cd esp-idf-v5.0/
This is the recommended way of obtaining v5.0 of ESP-IDF.
Download an archive with submodules included
Attached to this release is an esp-idf-v5.0.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.zip
Major changes
This is the list of changes since release v4.4:
Major New Features
Support of new SoC's
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
ESP32-H2 SoC
- Added support for ESP32-H2-beta2
Extended support of existing SoC's
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
- Pre-encrypted firmware distribution during OTA upgrades
- More robust security2 scheme (based on SRP6a+AES-GCM) in the WiFi provisioning component
- Integration of mbedTLS-3.x (3.2.1) stack
- Support for ECDSA based secure boot v2 scheme for ESP32-C2
- Included FreeRTOS SMP Kernel (upstream AWS version)
- More 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
Major Bug Fixes
- USB_SERIAL_JTAG: Can print through USB_SERIAL_JTAG port without change 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 time 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.
- Updated chip revision print format in compliance with AR2022-005
Breaking Changes
External Libraries
- ASIO: Internal ASIO component and ASIO examples were migrated from IDF to https://github.com/espressif/esp-protocols/components/asio
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
- driver component is not included by target components anymore. Applications using driver shall now explicitly require it in their CMakeLists.txt file
- efuse component is not included by target components anymore. Applications using efuse shall now explicitly require it in their CMakeLists.txt file
- Removed COMPILER_DISABLE_GCC8_WARNINGS option
- The "make" build system was deprecated in v4.0 in favor of idf.py (cmake). The remaining support is removed in v5.0.
- 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.
- Format string warnings (-Wformat) are now enabled for Xtensa and RISC-V targets. This will result in warnings whenever uint32_t values are formatted using
%u
or%d
format specifiers. The reason is that int32_t type is defined as long which was int in a past. The same is for uint32_t. To fix the warnings, do either one of the following: 1) Use PRIx32 specifier from inttypes.h instead of d or u. 2) Cast the values being formatted to unsigned int. 3) (Not recommended) add -Wno-format compiler flag to the files where this warning occurs using set_source_files_properties CMake function.
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
- TinyUSB: Remove TinyUSB component from esp-idf
- ESP_LCD: esp_lcd_color_space_t is deprecated now, please use lcd_color_rgb_endian_t to describe RGB data order.
- tjpgd: Removed tjpgd patch for chips, thats don't have tjpg in ROM. It is handled in esp_jpeg component now.
- GPIO: GPIO interrupt users callbacks should no longer read the GPIO interrupt status register to get the triggered GPIO's pin number. Users should use the callback argument to determine the GPIO's pin number instead.
- ESSL: The esp_serial_slave_link is removed from the esp-idf components. Now user should use the component manager to pull it in. See example examples/peripherals/sdio/host/main/idf_component.yml for more details
Protocols
- 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 return 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.2.1
- mDNS: Internal mDNS component and mDNS example was migrated from IDF folder to https://github.com/espressif/esp-protocols/tree/master/components/mdns
- 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: Internal esp_websocket_client component and websocket example was migrated from IDF folder to https://github.com/espressif/esp-protocols/tree/master/components/esp_websocket_client
- esp_netif: SLIP Flavor network interface has been removed from the official esp_netif implementation. Please use custom slip-modem implementation as demonstrated in https://github.com/espressif/esp-protocols/tree/master/examples/esp_netif/slip_custom_netif
- mqtt/ssl_ds example: configure_ds.py script has now been removed from ESP-IDF and moved to PyPi under the name esp-secure-cert-tool (https://pypi.org/project/esp-secure-cert-tool/)
- mqtt/ssl_ds example: The partition name which contains DS data has now been changed to esp_secure_cert instead of pre_prov
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. Use the Windows tool installer to set up such an environment.
- 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>
baud-rate setting has been renamed toidf.py monitor -b <baud>
in order to be consistent withidf.py -b <baud>
- Python 3.6 is not supported anymore (Python 3.7 or newer should be used)
- The enum
esp_apptrace_dest_t
in esp_app_trace.h has been changed;ESP_APPTRACE_DEST_UART0
was renamed toESP_APPTRACE_DEST_UART
and the size is extended.
Wi-Fi
- 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.
- If authmode threshold is not set and AP is operating in deprecated security modes(WEP/WPA), station won't connect to AP.
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
- All the partition handling APIs and data-type definitions have been moved from the 'spi_flash' to the new component 'esp_partition'. See Storage 5.x migration guide for more details
System
- esp_timer: Removed legacy ESP32 FRC timer implementation
- esp_event: Changed event_data in all event post functions (esp_event_post* and esp_event_isr_post*) from void * to const 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 components.
- 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.
- bootloader_support: The API bootloader_common_get_partition_description has now been made private, the alternative function esp_ota_get_partition_description should be used
Other
- clk: clk functions made private. target/clk.h & esp_clk.h would EOL, 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
- 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)
- 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
IDF v5.0 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
- Added MTD device type support
- 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
- Added Support for ESP32-H2-beta2
- Added support for automatic RCP update upon boot in border router
- Added NAT64 and DNS64 support
- Added NAT64 and DNS64 example commands
- Added some flash optimization options
Changed
- iperf: Simplify iperf send/recv loop
- Updated exclude file for RCP
- Moved CLI extension to a managed component
Fixed
- Fixed the issue of some esp_openthread functions called without lock
- Fixed 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
- esp32h2beta2 rx performance optimization
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
Removed
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
- Added HCI vendor commands to set coexistence status on ESP32
- Added support to use main crystal as Bluetooth lowe power clock in light sleep bluetooth support on ESP32-C3 and ESP32-S3
Changed
- Rename controller_hci_uart_esp32c3 to controller_hci_uart_esp32c3_and_esp32s3
- Move the pll track functions to IRAM on ESP32
Fixed
- Fixed missing in processing VHCI interrupt caused by lack of protection against race conditions in accessing VHCI environment variables on ESP32
- Fixed power down bluetooth module when deinit on ESP32-C3 and ESP32-S3
- Fixed the issue caused by the power off the BT/Wi-Fi power domain on ESP32-C3 and ESP32-S3
- 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
- Fixed the issue that FreeRTOS semaphores and queues used in Blueotooth ISRs can be allocated in SPIRAM which causes crash on ESP32 and ESP32S3
- Fixed assert failed when high level interrupt disable on ESP32
- Fixed the issue of Bluetooth disconnection due to not backing up Bluetooth AGC related registers when light sleep is enabled and baseband power down on ESP32-C3 and ESP32-S3
Bluetooth Low Energy
Added
- Support BLE for ESP32-C2
Changed
- Update BLE TX power level mapping on ESP32-C3 and ESP32-S3
Fixed
- Fixed crash when shutdown bluetooth on ESP32
- Fixed modem sleep hardware error on ESP32
- Fixed the BLE task watchdog timeout issue on ESP32
- Fixed encryption procedure bug which causes insufficient security error in BLE host on ESP32-C3 and ESP32-S3
- Fixed BLE scannable extended advertisinig performance issue in case of Wi-Fi coexistence on ESP32-C3 and ESP32-S3
- Fixed BLE LLCP collision for channel map update on ESP32
- Fixed BLE_ADV_UNDERRUN error lead to RX disable on ESP32
- Fixed BLE ke_mem.c assert on ESP32-C3 and ESP32-S3
- Fixed BLE ke_mem.c assert on ESP32
- Fixed BLE advertising report error on ESP32-C3/ESP32-S3
- Fixed BLE sch_arb assert on ESP32-C3 and ESP32-S3
- Fixed connect failed due to error sync found signal on ESP32-C3 and ESP32-S3
- Fixed BLE disconnect failed due to terminate_ind have sent but no ACK is received on ESP32-C3 and ESP32-S3
- Fixed the performance issue of BLE sync scan in coexistence scenario when PLL track is enabled on ESP32-C3 and ESP32-S3
- Fixed BLE RAL_UNDERRUN and TX_CRYPT_ERR assert on ESP32-C3 and ESP32-S3
- Fixed BLE disconnection issue when channel map instant passed due to bad channels on ESP32-C3 and ESP32-S3
- Fixed BLE lld_per_adv.c line 401 assert on ESP32-C3 and ESP32-S3
- Fixed BLE ASSERT_PARAM(32 0) in rwble.c at line 384 on ESP32
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 on ESP32
- Fixed that no Connection Complete event returns after processing HCI_Create_Connection_Cancel command, which blocks later reconnection on ESP32
- Fixed that HCI_Read_Clock command fails in reading local Bluetooth Clock on ESP32
- Fixed the delayed HCI Commmand Status Event in response of HCI_Read_Remote_Extended_Features command on ESP32
- 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 on ESP32
- Fixed the crash issue in handling HCI_Exit_Sniff_Request command from Host when controller just switches to active mode on ESP32
- 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 on ESP32
- 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 on ESP32
- Fixed the assertion in function em_bt_clkoff1_setf when clock overflow happened, the overflow can be safely ignored on ESP32
- 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 on ESP32
- Fixed that link key is not sent to host after re-pairing in legacy pairing mode on ESP32
- Fixed the exhaustion of ACL buffer in case of connection-disconnection stress test on ESP32
- Fixed the duplicated reports of HCI_Connection_Request event from the same Bluetooth device on ESP32
- Fixed the issue that Wi-Fi task can be blocked by Bluetooth Controller because of the use of blocking coexistence callback function on ESP32
Bluetooth Host (Bluedroid)
Fixed
- Fixed the linker error of functions not defined when enable memory debugging functionality
- Fixed the build warning in using strncpy after toolchain is upgrade
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
- 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
- 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 upon failure of connection
- SPP: Fixed SPP crash after calling esp_spp_deinit
- SPP: Fixed SPP resource leak due to missing of deleting the mutex upon failure of initialization
- A2DP: Fixed AVDTP general reject format error
- 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
- Fixed the failure of 'connect audio' operation in HFP examples with default SDK configuration.
- Fixed deadlock due to wrong parameter when calling btc_transfer_context() after calling esp_bluedroid_disable().(#9672)
- Fixed sink not being able to output mono audio because it can only decode dual channel audio data
- A2DP: fixed sink device not being able to accept and decode mono channel audio stream
- Fixed the issue Bluetooth Classic connection can not be created while there is an active Bluetooth Low Energy connection
Bluetooth Low Energy
Added
- Added check if the BLE extend connection parameters are valid
- Examples: README files are added for the Bluetooth Bluedroid BLE v5.0 examples.
- Examples: Walkthrough tutorial files added for the Bluetooth Bluedroid BLE 5.0 examples.
- Support low duty cycle directed advertising
- Added new OSI utility "osi_event" to avoid duplicated message posting and thus reducing the workqueue size for HCI thread.
- Added new OSI utilities "pkt_queue" and "fixed_pkt_queue" for data buffer management and reduce the frequent allocation/free of small memory fragments compared with previous "fixed_queue"
Changed
- SDKCONFIG Defaults and README update for bluedroid examples
- Modified the implementation of the workqueue of osi_thread using freeRTOS queue instead of fixed_queue, to reduce the use of system heap, and thus becoming more robust against memory allocation failure, and achieving better execution performance, with an increase of memory footprint by about 1600 Bytes during Bluedroid initialization.
- Optimized BLE legacy advertising report datapath and advertising report flow control mechanism, make it more robust in case of heap exhaustion
- Allow bluedroid host to report ADV_IND separately
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 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
- Fixed extend advertising set remove failed
- Fixed calling esp_ble_get_cur_sendable_packets_num() sometimes crashes when bluetooth is disconnecting
- Fixed TX power range error in extend advertising parameters
- Configurable max GATTC cache characteristic count
- Fixed TX power map error in BLE advertising data
- Fixed BLE resolvable private address generate and update
- Fixed BLE generate RPA for ESP32
- Configurable option to modify max GATT service attributes count on bluedroid
- Fixed HID host crash when authentication failed
Bluetooth Host (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 extra allocation for data pointer returned by controller for ESP32-C2
- Added check to not include VHCI buffer handling code if controller support is disabled
- Added check to deregister stack callback with controller during stack deinit
- Added change for extra allocation in header for ACL data for newer chips.
- Added an example framework for BLE PHY
- Added extra space for buffer allocation for ESP32-C2
- Added support for ESP32-C2
- Added changes for mbedTLS v3.1.0
- Added free keypair checking if already allocated to avoid memory leak
Changed
- adapt remove esp_nimble_hci_and_controller_init with IDF
- Optimize the nimble host interface function and divide the host interface into init and enable functions.
- Sync change with c2 bt component change
- Change Kconfig name because ci test
- crypto.h: correct function declaration
- Invoke xTimerGetExpiryTime in npl porting layer only when freertos timer is used
- Check stack status before executing stack command
- Updated nimble examples structure
- Updated debug level for a print to avoid unwanted console log.
- Clear timer handle during de-initialization
- Corrected stack initialisation dependency function checks.
- Sync sending Host Number of Completed Packets command
- Re-ordered the function sequence in stack deinit to be reverse of stack init process
- Modified timer not started / running warning print
- Resolved crash of esp_timer on esp32h2
Fixed
- Fixed memory corruption introduced in reconnection attempt code
- Fix memory corruption introduced due to wrong index of array in reconnection attempt code
- Bugfix: fix re-pairing issue
- Separate Host and controller Use macros. Fix uart hci driver
- fix 'a pointer to an array' argument
- Fixed compilation error when os_mbuf_free called by ESP32-C2 and ESP32-H2
- Fixed wifi_prov_mgr crash after provisioning
- fixed memory leak for ble_hs_flow_timer and ble_hs_stop_terminate_tmo.
- Removed extra npl_event_init done during periodic_sync_alloc
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
- Applied the errata E16350 of BLE Mesh from Bluetooth SIG
- Added Proxy Server connect and disconnect events
- Fixed Provisioner wrongly filtered received Heartbeat messages
- Fixed the abnormal disconnection of Proxy Client
- Fixed not checking the oversized SegN during provisioning
- Added an option for LPN to subscribe all-nodes-address automatically
- Fixed Friend not relay LPN message when relay feature is disabled
- Fixed handling continuously received secure update in friend queue
- Fixed using wrong range for Heartbeat Publication Period Log value
- Fixed using wrong count_log when Heartbeat Subscription Status is sent
- Fixed not ignoring connectable PB-ADV PDU containing a Link Open message
- Fixed ignoring KR flag within Secure Network Beacon from non-primary subnet
- Fixed the sequence of checking invalid Provisioning PDU type
- Fixed not checking invalid link flag during PB-GATT provisioning
- Fixed wrongly overwritten the expect_ack_for flag after send_pub_key
- Fixed not checking if AppKey is bound to model during model publication set
- Fixed the regression introduced in the btc_transfer_context changes
Wi-Fi
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
- Added hash key length validation
- Added fix for side channel attacks in WPA3 SAE
- Added an API to clear scan result to free memory
- Added changes for scan resumption in PBC mode
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
- 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
- Set default authmode threshold as wpa2 for STA mode
- Updated wifi country code docs.
- cleared the scan result when wifi stop
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
- Fixed the bug that esp_wifi_deinit does not return ESP_ERR_WIFI_NOT_INIT if the wifi driver is no longer initialized.
- Fixed get wrong channel value when use esp_wifi_get_config.
- Fixed annotation error of api esp_wifi_connect.
- Fixed the bug that fail to scan AP after receiving disassoc/deauth from AP on ESP32S2.
- Fixed the bug that espnow clear key register fail
- Fixed pairwise cipher tkip pmf compatibility issue.
- Fixed repeated scans causing bss overwrite in connect process.
- Install gtk before send group key handshake message 2
- Fixed connect fail when enable SPIRAM and ESP-NOW together
- Do not flush PMK caching when station received deauth with Reason Code unspecified
Removed
- Removed scan done event for internal scans
- Removed legacy framework for system events
- Removed scan done processing from btm task
- Removed 3DES and RC4 Cipher suites from wpa supplicant for mbedTLS (#9607)
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 which allows encrypted binaries over OTA update channel (#6172)
- 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
- esp-crypoauthlib: Pushed out component to IDF component manager link
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
- Flash Encryption: Fixed issue that 4-line flash encryption cannot work normally when 8-line psram enabled (#9244; #9287)
- esp_rsa_sign_alt: Fixed the behaviour of esp_ds_init_data_ctx API when ds_data is provided directly from the flash.
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
- 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)
- ESP_LCD: Added touch screen support into i80 LCD example
- SPI_LCD: support trunked color data transfer (#8496)
- SPI_LCD: Support LCD whose CS line is active high (#9881)
- SPI_LCD: Support transmit color buffer without specifying a command (#9881)
- SPI_LCD: Support SPI LCD single IO mode
- 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
- RGB_LCD: Support rotation by mirror and swap axis
- RGB_LCD: Support RGB-YUV data format conversion
- 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
- 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.
- MCPWM: Support calling mcpwm_comparator_set_compare_value under an ISR context
- PCNT: New pulse count driver driver/pulse_cnt.h, with OOP style.
- 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
- SDIO Slave: Support disabling the highspeed mode from slave side
- SDSPI: Added support for ESP32-S3 to SDSPI related examples.
- 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
- 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)
- Touch Sensor: Added touch_element support for ESP32-S3 (#9292)
- 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
- ESP_LCD: Changed tjpgd and SPI example for using esp_jpeg component
- 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
- PSRAM: Improved the way adding PSRAM memory to heap allocator, now it's added according to memory alignment caps
- 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 Host: Bring USB Host API out of beta
- USB Host: 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
- 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: Fixed the assertion failure or returning wrong error code when ADC2 failed the arbitration
- ADC: Fixed calibration value issue on ESP32-S2 (#9705, #9715)
- 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)
- ESP_LCD: Fixed incorrect bpp size of RGB666 color format (#9729)
- 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)
- GPIO: Fixed the issue that USB DP pullup can't be disabled when it's used as a normal GPIO (#9495)
- GPIO: Fixed the issue on ESP32 that GPIO can't hold on after deep sleep
- GPIO: Fixed GPIO potential interrupt lost issue for the edge-type interrupt.
- 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: 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.
- 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)
- 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)
- I2S: Fixed tx incomplete auto clear (#9882)
- I2S: Fixed i2s_adc_adc example gap (#9389)
- I2S: Fixed doubled mclk in TDM mode (#10196)
- I2S: Fixed typo philip of philips format (#10197)
- 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)
- LEDC: Fixed PWM signal glitch when calling ledc_set_freq to change PWM frequency
- MCPWM: Fixed implicit conversion in LL function (#8066)
- MCPWM: Fixed out of range issue in example (#9213)
- MCPWM: Fixed multiplication overflow in mcpwm_set_duty_in_us (#9648)
- MCPWM: Fixed legacy MCPWM driver that will return the incorrect value if input with wrong parameters
- MCPWM: Fixed the duty cycle only gets updated on TEZ event (#9904)
- PSRAM: Fixed PSRAM and Flash RODATA virtual address overlap issue
- PSRAM: Fixed heap pool reservation for DMA/internal usage fail issue
- PSRAM: Fixed 40MHz PSRAM CS signal glitch issue
- REGI2C: Updated the register base address reference for REGI2C group of registers on esp32s3
- 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)
- RMT: Fixed some RMT LL functions not always inlined (Closes #9487)
- RTCIO: Fixed the bug that prevents the users from using the RTC function on ESP32S3 pin 19 and 20.
- SDIO Slave: Fixed the issue that DMA descriptors allocated to non-DMA capable area
- SDIO Slave: Fixed crash issue when using release config and GCC11
- SDIO Slave: Fixed crash caused by incorrect return value check in host example
- SDSPI: Fixed potential conflict between sdspi driver and other devices on the same bus
- 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 Bus Lock: Fixed a concurrency issue leading to spi_device_polling_end assertion fail (#8179)
- SPI Master: Fixed SPI master example to keep CS active during read process
- SPI Master: Fixed an issue on ESP32S2, S3, C3 that more than 3 devices can't be added to the SPI2 Host (#8876)
- 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
- SOC: Fixed wrong external PHY GPIO pads for ESP32-S3 (#9302)
- 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)
- Timer Group: Propagate interrupt service allocation error (#9651)
- Touch_sensor: Fixed the touch measurement interval becomes longer after wake-up from sleep on ESP32-S3
- Touch Sensor: Fixed Timer callback is called after it is deleted
- TWAI: Fixed twai_ll_parse_frame_buffer() typo (#8743)
- TWAI: Fixed issue CONFIG_TWAI_ISR_IN_IRAM not working for ESP32-C3
- 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
- UART: Fixed the RS485 test to check the device to device communication on 1Mbit (#8947)
- UART: Fixed unreliable uart_wait_tx_done caused by the wrong handling to legacy UART_INTR_TX_DONE event (introduced in 4e09d147)
- Uart Select Example: Check status of driver install first in the task (#7872)
- esp-rom: fixed the wrong baud rate when 2nd bootloader use custom uart1 as console
- USB: Fixed TX buffer overwrites in device mode
- 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
- clk: Removed legacy clk headers (target/clk.h, esp_clk.h).
- ESSL: The esp_serial_slave_link is removed from the esp-idf components
- 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
- LCD: Removed check for hsync vsync GPIO unnecessary for DE mode
- 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
- PSRAM: Removed misleading PSRAM IS25WP032 in Kconfig option (#8863)
- Example: led_strip example component has been moved to the component registry
- SPI_FLASH: Removed legacy flash driver (with prefix spi_flash)
- esp-rom: Removed undefined spi_flash functions
- UART: Delete custom interrupt handler registration
- TinyUSB: Remove TinyUSB component from esp-idf
- tjpgd: Removed tjpgd patch for chips, thats don't have tjpg in ROM. It is handled in esp_jpeg component now.
- TWAI: Removed deprecated "CAN" driver, please use "TWAI" driver instead.
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-burn 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
- ULP-RISCV: Added low speed bitbanged UART tx implemention
- Heap: Added implementation of function hook called from tlsf_check() to check for memory corruption on the free blocks of memory.
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
- Modified the bootloader memory layout to increase the space available for static allocation on ESP32-C3 by 4 kB. Previously this space was only usable as heap.
- Modified the bootloader memory layout to increase the space available for static allocation on ESP32-C2 by 4 kB. Previously this space was only usable as heap.
- Modified the heap memory layout to increase the D/IRAM attribute region on ESP32-C2 by 19 kB. Previously this space was STACK/DRAM attribute.
- Moved placement of disable rom log efuse later in startup flow to allow logging (#9457)
- Task WDT: Interuptee task stack is now used for backtracing in case of a panic. On RISC-V targets, interuptee task's registers are now printed when WDT is triggered.
- Heap: Moved TLSF implementation to a separate submodule.
- Derease RTC Fast Frequency to make it stable on ESP32-C2
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)
- Console: Fixed console reset via RTS not working with USB CDC console on ESP32-S2 (#7404)
- Fixed bug where calling putchar as the first print would cause a system crash (due to stack corruption). The stack corruption was due the toolchain using 64-bit time_t (CONFIG_SDK_TOOLCHAIN_SUPPORTS_TIME_WIDE_64_BITS) but ROM functions continuing to use 32-bit time_t.
- Heap: malloc(0) and calloc(0) won't call heap_caps_alloc_failed() callback anymore
- esp-rom: Fixed error in miniz header documention for tdefl_init (#8435)
- spi_flash: Fixed clobbering RTOS base priority in spi_flash_disable_interrupts_caches_and_other_cpu()
- Console: Fixed a crash when calling esp_console_new_repl_usb_serial_jtag (#9662)
- Fixed xtal32k error detect when configured but doesn't actually exist
- esp_hw_support/esp_intr_alloc: Fixed missing call to portEXIT_CRITICAL_SAFE() when esp_intr_enable() returns early (#9867)
- Suppress CPU crash and memory issues under extreme temperature on a small amount of ESP32-C3 chips
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.
- heap: Removed misleading info about malloc being equivalent to heap_caps_malloc(p, MALLOC_CAP_8BIT) (#7659)
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
- espcoredump: Added ESP32-C2 target 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
- Changed documentation of the ulBitsToClearOnEntry parameter in xTaskGenericNotifyWait() function to match implementation (#7207)
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
- esp_ringbuf: Fixed bug where internal RX semaphore was not taken when calling xRingbufferAddToQueueSetRead()/xRingbufferRemoveFromQueueSetRead() if CONFIG_FREERTOS_ASSERT_DISABLE was enabled (#9497)
- Fixed ORIG_INCLUDE_PATH cmake property having the wrong path
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
- Allow using touch/ULP with RTC_PERIPH domain (including EXT0 wakeup source)
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
- Kconfig: Refactor xtal freq kconfig to common configuration item
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
- Fixed wrong register access to set/clear rtc fast mem low power mode on ESP32-C3
- Fixed issue where entering light/deep sleep could trigger a deadlock, thus leading to an interrupt watchdog timeout.
- Fixed the issue of sleeping time error beacause external 32kHz xtal does not exist
- Fixed Wi-Fi does not know that Bluetooth has modified the lpclk source
- Fixed that the backup_dma in the ROM code did not clear the reset signal, and the
RTC_WDT_RST
was triggered when the system continued to use the backup_dma afterRTC_SW_CPU_RST
- Fixed driver using wrong print function in a critical section (#7942)
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
- Added hook for DNS name resolution
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.
- Fixed IPv6 zone violation when using link local addresses without an explicit interface scope
- Fixed potential close() socket deadlock when SO_LINGER is enabled
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)
- Fixed error propagation while reading from socket (#10000)
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
- esp_https_ota: Fixed esp_https_ota_begin() to call http_client_init_cb before esp_http_client_perform()
Removed
- app_update: The app image metadata accessor APIs (esp_ota_get_app_description and esp_ota_get_app_elf_sha256) from app_update component are now deprecated and are replaced by corresponding alternatives (esp_app_get_description and esp_app_get_elf_sha256) from the new esp_app_format component
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.
- Added linger in httpd_config_t
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
- Fixed issue with default initialization in HTTPD_SSL_CONFIG_DEFAULT (#9653)
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.
- Added support for newer "security2" in protcomm layer and enabled it as default scheme in the provisioning manager example.
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)
- wifi_provisioning: Change API wifi_prov_mgr_is_provisioned() to not depends on provisioning manager initialization state.
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
- wifi_prov_mgr: Fixed prov_ctx_lock in deinit API of provisioning manager
- Fixed maximum BLE advertising device name length
Removed
mbedTLS
Added
- Enabled hardware support for SHA on ESP32-C2
Changed
- 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)
- Updated to v3.2.1
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
- Consider (appended) signature length while verifying image for allocated partition length
- Fixed bootloader printing an assert message even if CONFIG_OPTIMIZATION_ASSERTIONS_SILENT was set (#7518)
- Fixed not being able to compile with BOOTLOADER_SKIP_VALIDATE_ALWAYS on ESP32-C2
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
Fixed
- Fixed socket leak in esp-tls
- Fixed memory leak in mbedtls ds peripheral when MBEDTLS_THREADING_C enabled.
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
- Semihosting: VFS semihost additional syscalls implemented.
- VFS: VFS semihost additional syscalls implemented.
- Added a new component 'esp_partition' for the partition APIs separation
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, aprefix_map_gdbinit
file will be generated in theBUILD_DIR
. - Support for generating FATFS partition on a host (including wear levelling, long file names and FAT16 support)
- Added tool for analysing FATFS binary image
- idf.py: Added
clang-check
command to run clang-tidy check - idf.py: Added
clang-html-report
command to generate HTML report - Added
gen_soc_caps_kconfig.py
for parsing SOC capabilities into kconfig files - Added
idf.py save-defconfig
command to generatesdkconfig.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
- Added option for removing unused tools, to free up some disc-space (running export scripts will suggest this if possible)
- idf_size.py: Support
.noinit
section names (#8428) - Added a hint about that IDF Monitor can be exited with CTRL-T CTRL-X (#8508)
- Ensure environment variables are correctly updated when switching between versions of ESP-IDF in UNIX systems.
- 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
- 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 for 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
- Added support of
idf_tools.py install-python-env --features ci
to install CI related packages. - Added support of
idf_tools.py install-python-env --features docs
to install building documentation related packages. - partition_table: Added support for custom partition subtypes
- Added
git-lfs
into the docker image (#9563) - Build & Config: Enabled color output from the compiler by default (#4162)
Changed
- Updated toolchains to esp-2022r1-11.2.0
- Upgrade OpenOCD version to v0.11.0-esp32-20221026
- Upgraded gdb version to 11.2_20220823
- Updated CMake version to 3.23.1 (#8821)
- Updated Clang 14 in tools.json with ESP32-S3 support
- Upgraded ccache installed version to 4.6.2 on Windows (#9656)
- Upgraded esp32ulp toolchain version to 2.35_20220830, adding support for macOS and linux ARM64 hosts (#6432)
- 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 <baud> 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.
- Docker: Docker images for linux/arm64 platform are now also built and uploaded
- Use the built-in
venv
instead of thevirtualenv
package for creating Python environments (on Linux and macOS) idf_monitor.py
: Changed integer comparison ofESP_MONITOR_DECODE
to stringidf_tools.py
: Upgrade pip and setuptools in Python 3.7 and 3.8 virtual environments as wellidf.py openocd
now uses USB_SERIAL_JTAG interface on ESP32-C3 and ESP32-S3 by default.
Fixed
- Check if the
PIP_USER
environment variable exists and set to value "no" if exists - 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
- ESP32-H2: Fixed esp32h2beta2 erase_flash
- Detect missing component manager and print proper error message
export.fish
should not change the current working directory (#9637)- Fixed multi-byte characters appearance in the
idf.py monitor
- Handled I/O error in
idf.py
output capturing (for example for disconnected chip while the monitor is running) (#9649) - Export script should not fail if
python
is not available (#9749) - The export scripts should work offline and not updating the constraint file (#9328)
- Tools: Fixed esptool wrappers by avoiding importing the module (#9861)
Removed
- Remove MSYS/Mingw support
- Remove 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.
- Removed
libpython2.7
from the Docker image
Build System
Added
- Added support for using SOC capability 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.
- 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
- Format string warnings (-Wformat) are now enabled for Xtensa and RISC-V targets.
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.
- Fixed EXCLUDE_COMPONENTS not excluding the component from consideration of idf_component_manager
Removed
- Removed 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 target components (e.g. esp32)
- Removed COMPILER_DISABLE_GCC8_WARNINGS option
External Libraries
Changed
- 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: This component is now moved to idf-extra-components repository
- Console: Upgraded argtable3 library to version 3.2.1.
- protobuf-c submodule updated to latest v1.4.0 release
- 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, spi_slave.rst, gcc.rst, provisioning.rst, networking.rst and storage.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)
- I2S: Updated the FSM diagram of I2S
- Updated Chinese translation for wifi.rst, idf-monitor.rst, vfs.rst, ota.rst, fatfs.rst, esp_wifi, jtag-dub