Skip to content

ESP-IDF Release v4.3

Compare
Choose a tag to compare
@github-actions github-actions released this 15 Jun 07:01
· 20348 commits to master since this release

Documentation for release v4.3 is available at https://docs.espressif.com/projects/esp-idf/en/v4.3/

ESP-IDF v4.3 is a minor update for ESP-IDF v4.2.

Warning

ESP-IDF v4.3 is not recommended for development and manufacturing of products based on ESP32-C3.
In v4.3 release, a bug exists which affects ESP32-C3 chips. This bug causes a small number of ESP32-C3 chips to fail to boot.
For more information, please search AR2021-006 advisory on https://www.espressif.com.
Please upgrade to ESP-IDF v4.3.1, ESP-IDF v4.3.2, or a later version. Note, this bug in v4.3 does not affect ESP32 or ESP32-S2 based products.

Obtaining v4.3

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 v4.3 --recursive https://github.com/espressif/esp-idf.git esp-idf-v4.3
cd esp-idf-v4.3/

This is the recommended way of obtaining v4.3 of ESP-IDF.

Download an archive with submodules included

Attached to this release is an esp-idf-v4.3.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/dl/esp-idf/releases/esp-idf-v4.3.zip

Changelog

This is the list of changes since release v4.2:

Major New Features

  • Support for ESP32-C3 SoC
    • Wi-Fi
      • 802.11 bgn mode
      • 802.11 LR mode
      • Station, SoftAP, sniffer mode
      • ESP-NOW
      • CSI support
      • TX/RX A-MPDU, RX A-MSDU
      • TX Fragment, TXOP
      • WEP/TKIP/CCMP
      • WPA/WPA2-PSK/WPA2-ENT/WPA3-PSK/WPA3-ENT
      • WAPI-PSK
      • ESP-Touch v1/v2
      • Fine Time Measurement (FTM)
      • Device Provisioning Protocol(DPP)
      • Network-assisted roaming using 802.11k (Radio Measurements) and 802.11v (BTM) specifications
      • Wi-Fi Modem/Light Sleep
      • Wi-Fi Mesh support
    • Bluetooth
      • BLE 5.0 Controller support
      • BLE Modem/Light sleep support
      • UHCI support
      • Bluedroid host support with BLE5.0
      • NimBLE host support with BLE5.0
      • BLE-Mesh support
    • Wi-Fi & BLE coexistence
      • hardware switch based coexistence
    • Security
      • Secure boot
      • Flash encryption
      • RSA accelerator
      • AES accelerator
      • SHA accelerator
      • HMAC peripheral
      • RNG
      • Digital signature
      • Memory protection
      • mbedtls integration of Digital Signature
    • Peripherals
      • UART
      • Timer group
      • GPIO — Supported, except IO19
      • SPI Master
      • SPI Slave
      • I2C
      • LEDC
      • SigmaDelta
      • RMT
      • ADC
      • ADC DMA
      • SD card over SPI
      • Ethernet over SPI
      • Brownout detector
      • TWAI
      • GDMA
    • System features
      • Cache
      • esp_timer
      • SPI Flash auto suspend and auto resume
      • RTC Slow clock selection
      • Task, interrupt watchdogs
      • Efuse API
      • espefuse.py
      • Stack overflow "canary" detection
      • RISC-V architecture support
      • Watchpoint stack protection
      • Brownout reset
    • Build system and tools
      • Building the project using CMake (build, flash, monitor, menuconfig)
      • "idf.py size"
    • Sleep modes
      • Deep sleep
      • Light sleep
      • DFS
      • Automatic light sleep and esp_pm power management
      • Light sleep GPIO wakeup
      • Light sleep MAC/BB power down
      • Light sleep CPU power down
    • Debugging
      • Core dump
      • OpenOCD
    • Protocols
      • Provisioning
      • Other protocols on top of TCP/IP
    • Added more support for ESP32-S2 SoC
      • Touch Element library for touch sensor
      • Waterproof
      • USB Host HAL layer
        • TX A-MSDU
        • FTM
        • DPP
        • WAPI-PSK
        • ESP-Touch v2 support
        • 802.11k and 802.11v support
        • SPI Slave HD Append Mode
      • ADC calibration scheme v2
        • TinyUSB CDC Device class
        • Async memcpy driver
    • New Wi-Fi features for ESP32 SoC
      • TX A-MSDU
      • DPP
      • WAPI-PSK
      • ESP-Touch v2 support
      • 802.11k and 802.11v support
  • Updated FreeRTOS, based on upstream version v10.2.0
  • Heap: Switched heap algorithm to one based on TLSF, improves performance especially when using a high number of allocations in PSRAM
  • Digital Signature (DS) Peripheral integration in mbedTLS stack, showcasing end-to-end mutual auth based TLS use-case with newly added example examples/protocols/mqtt/ssl_ds
  • Light sleep: Added new options to reduce average current in light sleep: PM_SLP_IRAM_OPT, PM_RTOS_IDLE_OPT, WIFI_SLP_IRAM_OPT
  • Security: Support for "verify app image on update" (with Secure Boot disabled) is added for ESP32-S2, ESP32-C3, and ESP32 ECO 3 (Secure Boot V2)
  • Preview support for the "ESP32-S3 Beta 2" SoC is provided in v4.3. This SoC is different from the ESP32-S3 production SoC which will be supported in ESP-IDF v4.4, and ESP-IDF v4.3 will not work on the production ESP32-S3. After ESP32-S3 is released, support for "ESP32-S3 Beta 2" is planned to be removed in a future v4.3 bugfix release.
  • Added configuration option to disable IPV6 in LWIP, in order to reduce code size if only IPV4 is needed.

Major Bug Fixes

  • Secure Boot: Fixed crash in app if signature verification fails (#6210)
  • Default supported ESP32-C3 Revision ECO3. When targeting ESP32-C3, the default configuration is "minimum ESP32-C3 revision ECO3", but some ESP32-C3 samples are revision ECO2 or earlier. Change CONFIG_ESP32C3_REV_MIN configuration item in order to boot the firmware on earlier ESP32-C3 chip revisions.
  • Fixed arithmetic overflow issues in FreeRTOS queue and stream_buffer APIs (CVE-2021-31571 and CVE-2021-31572)

Breaking Changes

  • BLE_Mesh: Previously if starting/stopping BLE advertising when BLE Mesh is enabled, the corresponding events will be notified through the callback registered by esp_ble_mesh_register_prov_callback(). With this MR, the function esp_ble_mesh_register_ble_callback() need to be invoked for registering the callback used for BLE coexistence related functionalities (i.e. ADV/SCAN)
  • esp_tls_wolfssl: Previously an API named wolfssl_tlsext_host_name was inappropriately used for domain (host) name check.
    In earlier case if the domain name was different than the ISSUER field in the peer's server certificate, then the connection might have succeeded (provided skip_common_name = false).
    The old API is now replaced with wolfSSL_check_domain_name, which makes wolfSSL to check if the domain name provided matches with the ISSUER name on the peer's server certificate. With this API change, wolfSSL_connect should return a fatal error in case of a domain name mismatch
  • esp-tls: esp-tls client connection will now return error by default in the absence of server verification option
  • tinyusb: The return value of tusb_init has changed from tusb_error_t to bool in the upstream tinyusb (hathach/tinyusb@d887829)
  • NVS Encryption: "NVS Encryption" feature is now automatically enabled whenever the Flash Encryption feature is enabled.
  • bootloader: If anti-rollback is enabled, the partition table should not have a test app and the config option to use a GPIO to boot the test app is no longer supported. If OTA updating an existing installation, the bootloader is not updated so the test app will still be available. If you wish to disable the test app following a secure update, use the partition API to erase the first flash sector of the test app in the flash.
  • ESP32 ECO3: UART ROM download mode is no longer permanently disabled by default when security features (Flash Encryption, Secure Boot) are enabled. To have equivalent behaviour in v4.3, this option must be specifically selected in the project configuration.

Future Breaking Changes

  • Python: Python versions 3.5 and earlier are now deprecated and a warning is printed if used for ESP-IDF. All users are encouraged to move to Python 3.6 or newer, as soon as possible. Python 3.6 or newer will be required in the future to use ESP-IDF v4.4. Python 2.7 has been End of Life since January 2020, and Python 3.5 has been End of Life since September 2020.

Known Issues

  • ESP32-S2/ESP32-C3 do not support Wi-Fi Mesh power save.
  • ESP32-C3 with Power Management and FreeRTOS tickless idle enabled, when entering deep sleep the SoC may sometimes reset immediately rather than entering deep sleep correctly. To workaround this issue in the current release, disable the config option Power down CPU in light sleep.
  • Auto-suspend feature of SPI Flash will not work on all kinds of flash, the default value is set to no.
  • Secure Boot: Reading SHA-256 hash of an app partition returns incorrect value (usually all FF) if Secure Boot is enabled
  • Secure Boot: Signature verification in app fails if JTAG debugger is attached (#6873)
  • Infrequent crash happens on ESP32 during BLE remove bond list stress test.
  • Crash happens on ESP32 when start BLE scan with scan window 4 and scan interval 5. This issue will not happen on other scan parameters.
  • Nimble might not report scan complete event (BLE_GAP_EVENT_DISC_COMPLETE) when scan duration (set in ble_gap_disc or ble_gap_ext_disc) expires.
  • Nimble resolvable private address does not work properly in some use scenarios.
  • When GPIO wakeup is enabled, light sleep current of ESP32-S2 is 2mA higher than expected value in datasheet.

Bluetooth Controller

  • Reduce IRAM consumption about 300 bytes
  • Fixed bt controller task watchdog in Wi-Fi test
  • Fixed crash in Bluetooth when esp_restart
  • Modified ambiguous descriptions for BT_CTRL_BLE_MAX_ACT
  • Fixed the issue of modem sleep which may lead to the crash issue "assert(-218959118,0)"
  • Modified log level of messages E8192 ELx200 ELx40 to debugging, to prevent same issue occur repetitively due to too much logging
  • Fixed controller do not report disconnect event to host
  • Created repository for BLE library files of ESP32-C3 and ESP32-S3, as a new submodule of ESP-IDF. Modify directory layout to better support multiple chips.

Bluetooth Low Energy

  • Fixed error message exl200
  • Added btdm_disable_adv_delay() function to disable advertising delay
  • Fixed RPA address update error
  • Fixed Spelling mistakes

Classic Bluetooth

  • Fixed unexpected LMP timeout problem when rejecting remote device
  • Fixed HCI Timeout by 0x40F or 0x41C by freeing ACL RX Buffer in Exchange Memory

Bluedroid

  • Fixed the problem of early release of pointer(p_ccb) in function
  • Fixed ‘Impersonation in the Passkey Entry Protocol’ Vulnerability: -26558
  • Added comments to avoid ‘Impersonation in the Pin Pairing Protocol' Vulnerability: -26555
  • Added comments to avoid ‘Authentication of the LE Legacy Pairing Protocol' Vulnerability
  • Disabled Bluetooth before esp_restart()
  • Added check for NULL valued combination key to prevent ‘Impersonation in the Pin Pairing Protocol’ Vulnerability (CVE-2020-26555)
  • Added check for peer device bdaddr to be different than ours when sending conn req to prevent ‘Impersonation in the Pin Pairing Protocol’ Vulnerability

Classic Bluetooth

  • Fixed crash caused by dividing zero
  • SPP: fixed SPP vfs demo crash when use dynamic memory
  • SPP: fixed SPP vfs memory leaks when exception occurs
  • Added protection for ACL-U packet type exchange procedure
  • Rejected connection request if BD_ADDR of peer is same as ours (-26555)
  • Added API to config QoS for Classic Bluetooth ACL link
  • HFP: modified hfp console style by using esp console
  • HFP: first atuomatic connection of HFP
  • HFP: fixed the crash issue when bta_hf_client_sco_co_out_data is called
  • AVRC: fixed the issue that target unhandles set_player_app_value cmd
  • A2DP: added Init & Deinit Event for A2DP
  • A2DP: fixed A2DP sink audio crash
  • A2DP: fixed data stream underrun for A2DP sink
  • Added SPP input module to help users understand secure simple pair
  • Added ESP32 Secure Simple Pair document in SPP examples
  • Improved the documentations of Classic BT API
  • SPP: Fixed a crash caused by pairing cancel
  • SPP: Added API esp_spp_stop_srv_scn to stop a specific server
  • SPP: Added parameter service_name with event ESP_SPP_DISCOVERY_COMP_EVT
  • SPP: Added parameter scn with event ESP_SPP_START_EVT
  • SPP: Added parameter scn with event ESP_SPP_SRV_STOP_EVT
  • L2CAP: Fixed L2CAP channel ID duplicated
  • HFP: Fixed crash in btc_hf_arg_deep_copy when name or number is NULL
  • Shortened some log messages in bluedroid
  • Fix AG use dynamic memory error

Bluetooth Low Energy

  • Fixed a potential double free error
  • Added support of BLE Authorization
  • Added support of BLE Application Layer Encryption key size check
  • Added support of BLE Read Attribute value by UUID
  • Added support of BLE Non-Resolvable Private Address setting
  • Fixed BLE incorrect encryption flag setting
  • Added connection parameter check
  • Fixed read multiple characteristic failed
  • Fixed multi-connection crash
  • Fixed bluedroid repair faild if the two most significant bits of public address is '01'
  • Fixed scan rsponse length error
  • Fixed vendor hci memory leak
  • Fixed BLE throughput example build error
  • Fixed bluedroid host report connection address error when remote device used RPA address
  • Modified parameter description for esp_ble_gattc_open()
  • Fixed multi-connection pair failed
  • Added an option to enable/disable ESP32 controller RPA
  • Added an option in menuconfig to configure maximum gatt services
  • Fixed ESP32-C3 multi-connection failure when device acts as master and slave at the same time
  • Fixed reconnect failure when using rpa public address

NimBLE

  • Updated NimBLE submodule to latest upstream release 1.3.0
  • Added an example to run ICMP echo-reply (PING) and BLE peripheral simultaneously
  • Added API to remove address from whitelist
  • Made set packet length API public
  • Fixed some bugs in NimBLE NVS storage and ble_eddystone
  • Removed recursive call(apache/mynewt-nimble#857)
  • Added missing MYNEWT_VAL_BLE_L2CAP_COC_MPS definition(#5825)
  • Added workaround in NimBLE host to overcome connection establishment failure error

Blufi

  • Fixed an error caused by incorrect conn_id parameters
  • Added a macro to control the compilation of blufi
  • Fixed the issue that sending longer customer data will cause congestion

ESP-BLE-Mesh

  • Updated connection parameters used by GAP Central
  • Added support of receiving heartbeat messages for Provisioner
  • Always need device uuid when adding a device for provisioning
  • Added support of using multiple NVS namespaces to store information by Provisioner
  • Updated the definition of the macro ARRAY_SIZE
  • Use a separate callback for BLE coexistence operations
  • Added support for scanning normal BLE advertising packets
  • Replaced the Zephyr integer types with C99 types
  • Fixed Node ID adv with wrong timeout
  • Enabled updating lighting hsl state
  • Fixed Proxy Client may fail to resend messages
  • Now uses different random for each provisioning
  • Fixed deinit server models with no matching model id
  • Fixed number endianess error for Provisioner when using input/output auth (#6862)
  • Fixed provisioning input/output count number should be at least 1 (#6863)

Wi-Fi & BT Coexistence

  • Fixed IRAM_ATTR missing in coex mode
  • Changed wifi scan duration from 120ms to 100ms
  • Decouple Wi-Fi and bluetooth for coexist in order to reduce binary file size

Wi-Fi Mesh

  • Mesh power save: add esp_mesh_ps_duty_signaling to accelerate the broadcast of new network duty
  • Mesh power save: modify the default network duty from 12 to 10
  • Mesh power save: remove the support of MESH_PS_NETWORK_DUTY_APPLIED_UPLINK
  • Mesh power save: remove ps duty info from the ADD announcement packets
  • Mesh power save: modify beacon interval to 300ms when ps is enabled
  • add esp_mesh_send_block_time to set blocking time of esp_mesh_send
  • Chain topology: add chain topology networking IE mesh_chain_assoc_t to esp_mesh_internal.h

Wi-Fi

  • WPA2-Enterprise: Added documentation for WPA2-Enterprise
  • WPA2-Enterprise: Updated README.md file for wpa2-enterprise example
  • WPA3: Fixed the issue that WPA3 code cannot be disabled by disabling WPA3 flag in Menuconfig (#5971)
  • PMF: Fixed an issue that PMF stops working after dynamic mode change
  • ESP-NOW: Fixed the bug that esp-now channel config range is not correct(#6276)
  • wpa_supplicant: Fixed sending of encrypted mgmt frames for PMF connection in supplicant
  • Added support of SHA256 AKM without PMF enabled
  • Fixed EAP Client issue
  • Adjusted max tx power to 20dBm
  • Fixed the issue that the esp_wifi_sta_get_ap_info can't get country
  • Added CSA state check before CSA timer processing
  • Used DPORT bus instead of AHB bus to access Wi-Fi MAC and BB register
  • Fixed the crash caused by receiving BAR with TID >=8
  • Revert to report specific reason code when receiving deauth during 4-way-handshake
  • Fixed the issue that tx A-MPDU parameter is not from peer device
  • Fixed the issue that ESP32-S2 fails to get CSI info
  • Fixed the issue that PHY version log could not be disable
  • Fixed the issue of phyqueue in psram
  • Updated PHY version
  • Refactored wifi_interface_t
  • Improved faster WiFi STA connect, avoid 100ms passive scan
  • Added FCS failed packets filter
  • Changed country code last byte to space instead of \0
  • Fixed the issue that Soft-AP cannot forward A-MSDU
  • Fixed the issue that no TBTT is generated in STA+Soft-AP mode when maximum modem sleep is enabled (#6006)
  • Added support of TX A-MSDU
  • Unlock mutex for esp_wifi_80211_tx when out of memory
  • Fixed an issue that esp_wifi_80211_tx can't be used in ap mode
  • Added pairwise cipher configuration support for Soft-AP mode
  • Fixed a crash issue caused by receiving CSA IE with wrong channel
  • Fixed the issue that STA fails to connect open AP after it failed to connect to a WPA3 AP
  • Fixed PMK not saved in NVS for Soft-AP with PSK mode
  • Cleared hotspot bss when auth timeout happens
  • Fixed the MIC comparison logic -CMAC decryption
  • Fixed issue of setting incorrect log_length of NVS misc log
  • Added exception handling for iperf example when scan doesn't find any AP
  • Fixed data length bug when CSI is enabled
  • Fixed a crash when an AMSDU larger than 3200 Bytes is received
  • Fixed crash issue in presence of WEP AP with SSID same as connected WPA2/WPA3 SSID
  • Fixed smartconfig issue when router reply arp late
  • Updated wifi docs (#6448)
  • Added support for disabling 11b rate
  • Added support for configuring esp-now rate
  • Fixed the issue that connect scan may crash the device
  • Fixed potential crash or watchdog during FTM
  • Fixed miss-overwrite of some PHY registers when Wi-Fi modem sleep is enabled
  • Added encrypt option for ESPTouch v1
  • Fixed issue of reason code change from 15 to 200 when provided password is wrong
  • Fixed return type of esp_wifi_deinit when Wi-Fi is not stopped
  • Fixed the issue that the parameters obtained from RAM cannot be saved to NVS
  • Modified code to not store the default value in NVS
  • Fixed an issue with hidden AP scans after connecting AP
  • Fixed issue of reason code change from 15 to 204 when wrong password is provided
  • Fixed esp_wifi_set_config return value error
  • Fixed ampdu age timer memory leak
  • Optimized Wi-Fi DTIM sleep current consumption
  • Added support for station to sleep when in disconnected state
  • Added support to adjust wake-up ratio for esp-now at disconnected status
  • Keep wakeup state during csa
  • Add beacon timeout event
  • Updated TBTT when probe response is received after beacon timeout
  • Fixed a bug that ESP32S2 current too high on light sleep mode when using gpio to wake up
  • Updated libphy.a to V1800 20210413_e7ef680 for ESP32-S2
  • Disable FTM by default for examples other than FTM to save space
  • Prevent reinstallation of an already in-use group key
  • wpa_supplicant: Cleaned GTK after disconnect
  • Updated PHY lib and PHY init data for ESP32-C3
  • Forward decrypted Mgmt frames with skipping CCMP header to fix parsing issues in Application for ESP32-C3
  • Fixed setting channel error after WiFi stop
  • Added station based check for auth frame formation
  • Fixed Block Ack setup issue in PMF scenario
  • Validate FTM Initiator config parameters and propagate status

Smartconfig

  • Added support of ESP-Touch v2
  • Fixed the issue when router reply arp late
  • Fixed the issue that ESP-TOUCH failed to find hidden APs

Ethernet

  • Added W5500 Ethernet driver (MAC RAW mode only)
  • Added ETH_CMD_G_DUPLEX_MODE for getting duplex mode (#6436)
  • Deprecated esp_eth_receive

Security

  • Fixed the manual enabling of Secure Boot V2 via espefuse (#6050)
  • efuse: Added convenience APIs to work with keys, protection/purpose bits
  • efuse: Improved the batch mode that efuse fields can be read inside this mode
  • efuse: Batch mode can be called recursively
  • Added HAL and LL for AES accelerator and refactor driver
  • Added support for doing AES-GCM fully in hardware on ESP32-S2 with mbedtls_gcm_crypt_and_tag()
  • Secure Boot V2: Fixed padding issue when the bootloader image size is exactly equal to the size between the bootloader offset and partitions offset when secure boot v2 and flash encryption are enabled
  • Secure Boot V2: Fixed the issue which checks the signature block digest instead of the flash digest during app OTA validation (bootloader validation is not affected).
  • Secure Boot: Fixed crash in app if signature verification fails (#6210)
  • flash_encryption_example: Updated the example to showcase NVS encryption
  • flash_encryption: Fixed the flash_encrypted_write/read issue under 40M psram and 80M spiflash on ESP32 (#6322, #6254)
  • Secure Boot V2 verify app signature on update
  • Digital Signature: Fixed invalidating Digital Signature key in HMAC peripheral if assertions are disabled

Peripheral Drivers

  • periph_ctrl: Add support for PHY clock control
  • Extract independent HAL component
  • Fix xtal 32k not oscillate or oscillate too slowly issue for esp32
  • ADC: support API adc2_vref_to_gpio on ESP32-S2
  • ADC: Support adc calibration scheme on ESP32-S2
  • ADC: Fixed the issue that ADC power is affected by Wi-Fi usage
  • ADC: remove ESP_LOGD from adc_set_init_code (#6091)
  • ADC_DMA: Fixed IO not initialized properly bug on ESP32
  • Async memcpy: Added new driver async_memcpy
  • DAC: Fix DAC influenced by ADC bug by disabling the synchronization operation from ADC1 to DAC
  • Dedicated GPIO: Added Dedicated GPIO driver for ESP32-S2
  • GPIO: Provided API gpio_slp_sel_en, gpio_slp_sel_dis, gpio_slp_set_direction, gpio_slp_set_pull_mode to control GPIO state during sleep.
  • GPIO: Fix the problem that : IF you failed to use a RTC GPIO to wakeup lightsleep, especially when you used low level to trigger it.
  • I2C: Added allocator for clock source choice.
  • I2C: Fixed PM lock release in case of a timeout
  • I2C: Add const to signature of data in master_write function
  • I2C_CXX: Added C++ wrapper for I2C driver (Experimental)
  • I2S: Fixed PDM clock incorrect issue when using APLL.
  • I2S: Fix I2S word-order issue caused by incomplete reset
  • LEDC: Fix the bug that ledc low-sleep channel can not work when chip in light-sleep mode
  • MCPWM: Fixed MCPWM second fault line broken (#6053)
  • MCPWM: add an option to do mcpwm capture on both edges
  • MCPWM: Fix fault pin initialization issue
  • PCNT: Fixed pcnt driver doesn't clear interrupt status properly (#5929)
  • PCNT: Added new example to parse rotary encoder signals in 4x mode
  • RMT: Supported setting loop count at runtime
  • RMT: Support passing user context to RMT translator (#6002)
  • ROM: Extracted UART rom functions into esp_rom_uart.h
  • ROM: Extracted GPIO rom functions into esp_rom_gpio.h
  • SPI: Fixed master HD DMA mode cannot correctly receive data when a TX (no RX) transaction is done
  • SPI Master: Fixed the error log when using SPI_TRANS_USE_TXDATA or SPI_TRANS_USE_RXDATA with data longer than expect
  • SPI_Master: Added dummy check when both mosi and miso are set
  • SPI: Fixed CS polarity configuration issue (#4726, #5490)
  • SPI: Turned off DMA before CPU reset to avoid memory corruption after the reset
  • SPI: Fixed crash issue when cs is set to -1 (#5784)
  • SPI: Refactored HAL context and related codes in SPI Master driver
  • SPI: Refactored DMA related functions in SPI drivers
  • SPI: Fixed duplex mode switch issue when switching multiple devices (#4641)
  • SPI Slave: New driver for the half duplex mode
  • SPI_Slave_HD: Added feature of SPI Slave HD Append Mode
  • SPI_SLAVE_HD: Check if callback is defined before calling the callback
  • SDSPI: Fix the probe issue that forbid sdspi working in highspeed mode
  • Touch: Allow interrupt enable/disable API being called in the ISR on ESP32-S2
  • Touch_sensor: Fixed touch sensor false trigger in sleep mode
  • TWAI: Initialize brp_div field to zero, fixed register field name
  • TWAI: Fixed issue that code in asserts will not be executed in release builds
  • TWAI: Fix size of RX msg count field on the esp32
  • TWAI: Support on ESP32-S2
  • TWAI: Allow TWAI driver to continue to operate whilst the cache is disabled (e.g., during and OTA operation)
  • UART: Fixed UART FIFO read on ESP32 with -O2 optimization
  • UART: Changed buffer argument type of read/write functions void* to be consistent
  • UART: Fix RXFIFO_CNT bug on ESP32
  • UART: Fixed uart module reset issue
  • UART: Fixed issue that uart_wait_tx_done return ESP_OK when failed
  • USB: Fix issue that CLK always reset and swapped pins not working through HAL
  • Tinyusb: Support Tinyusb CDC
  • TinyUSB: fixed a typo in configure_pins (#5355 (comment))
  • TinyUSB: Fixed configure_pins issue when setting pin to fixed level (#5588)
  • TinyUSB: Fixed a strncpy-related warning caused by a wrong argument
  • TinyUSB: Update to the latest upstream version
  • SPI Flash: Fixed issues of cs support and slow read on ESP32-S2
  • SPI Flash: Fix regression in encrypted flash write on ESP32 (#5467)
  • SPI Flash: Added configuration option to select flash write chunk size
  • SPI Flash: Add config option to override inherited flash size from bootloader header
  • SPI Flash: Fixed the incorrect check_idle logic in LL and chip_driver
  • SPI Flash: Patched unlock ROM function, clearing the WEL bit to improve reliability
  • SPI Flash: Fixed failure when initialize external flash on non-SPI1 bus with PSRAM enabled
  • SPI Flash: Fixed ID/size check in spi_flash_chip_generic_detect_size() is too strict (#4248)
  • SPI Flash: Fixed issue that WEL is possibly left uncleared after some actions
  • SPI Flash: Modified flash timeout threshold for GD chips
  • SPI Flash: Added a config option to disable timeout checking
  • SPI Flash: esp_partition API can be mocked now
  • SPI: Applied GDMA allocator to SPI. DMA channel is now selected using an enum (spi_dma_chan_t) not an integer. Specifying the exact DMA channel number is no longer required on any chip target, the driver can select it automatically. This API is still compatible with previous code that specified the channel number using an integer (and a typedef is used to avoid the API change breaking on C++, this argument is still treated as an int when compiling C++ code)
  • touch_sensor: Fixed the last touch interrupt state will wake up the next deep sleep process
  • touch_sensor: Fixed high current consumption of the touch sensor during deep sleep (see example sleep/deep_sleep for how to apply this fix)
  • ADC: Fixed issue of crashing when verbose logs are enabled
  • UART: Apply FORCE_INLINE_ATTR to all UART LL functions to inline them correctly with "-O2" option (#5694)
  • cxx: fixed extern "C" declarations in touch_sensor.h and esp_adc_cal.h (#6633, #6634)
  • TWAI: Fixed brp divider not taking effect issue on ESP32 (eco3) chip due to incorrect capability naming
  • TWAI: Added detection and handling of RX FIFO overrun condition
  • TWAI: Added workarounds for hardware errata on the ESP32 (#2519, #4276)
  • touch_sensor: Fixed touch sensor default power source on ESP32-S2
  • Place timer_spinlock_give/timer_spinlock_take in IRAM

Core System

  • Heap: Switched heap algorithm to one based on TLSF, improves performance especially when using a high number of allocations in PSRAM
  • efuse: Fixed the order of writing eFuse blocks in batch mode
  • console: added helper function to install console REPL environment easily
  • pthread: fixed priority inheritance in pthread_mutex_destroy
  • esp_event: AP_STAIPASSIGNED now passes the IP through 'event_data'
  • Correctly detect ESP32-S2FH16/S2FH32 embedded flash in feature flags (#5774)
  • esp_event: fixed misuse of recursive semaphore take/give calls for profiling_mutex (#6102)
  • linker_fragment: added scheme to redirect BSS to external SPIRAM
  • esp_timer: added an option to skip unhandled events
  • esp_timer: added C++ wrapper for esp_timer
  • esp_log: correct timestamp formatting to unsigned integer type (#6226)
  • esp_system: specify esp_gdbstub as a dependency (#6274)
  • cxx: fixed init priority ordering on RISC-V
  • Added debug log for init array functions
  • Fixed lightsleep wakeup failure when power down rtc_peripheral on ESP32-S2
  • Improved 32k xtal startup time on ESP32-S2
  • ULP: fixed a issue where wakeup from ULP only triggers once
  • SOC: fixed incorrect address definition of ROM functions
  • PSRAM: support for esp32-pico-v3-02
  • PSRAM: Fixed 16mbit psram id read error
  • console: Added USB CDC as a console option
  • Added dummy bytes to end of flash.text to prevent errors with CPU prefetching instructions past the end
  • Fixed possible failure to boot if Stack Smashing Protection was set to Overall mode (#6403)
  • VDD_SDIO power domain can now be configured to remain on during light sleep
  • Fixed some inaccuracies calling gettimeofday() on wake from deep sleep
  • Bootloader initialization is now faster on ESP32-S2
  • Remove core1 disable cache in cache_utils.c
  • Fixed arithmetic overflow issues in FreeRTOS queue and stream_buffer APIs (CVE-2021-31571 and CVE-2021-31572)
  • ULP: Fixed potential failure to start in ESP32-S2 RISC-V ULP
  • ULP: Updated the ld file for riscv ulp for ESP32-S2
  • longjmp function call is now context-switch safe (#5229)
  • Placed xtensa_intr_asm into IRAM

Debugging

  • core dump: Fixed core dump feature with encrypted flash (#2932)
  • core dump: Non-encrypted core dump partition will always hold plain text data
  • espcoredump: Add support for RISC-V based boards
  • coredump: Fixed multiple bugs related to fake stacks and stacks in RTC DRAM

FreeRTOS

  • Updated FreeRTOS, based on upstream version v10.2.0
  • Placed some additional freertos functions into flash memory to increase free IRAM
  • freertos_hooks: Fix unbalance lock in deregistration for cpu functions (#6275)
  • FreeRTOS static allocation support is now always enabled (previously this was a config option)
  • Fixed a sign conversion warning in a header file (#5838)
  • esp_ringbuf: fixed the linker.lf file to place ringbuffer functions into flash when FREERTOS_PLACE_FUNCTIONS_INTO_FLASH is active
  • Fixed delay between interrupt request and interrupt trigger
  • Disabling asserts for the entire project (or setting silent) now applies to the FreeRTOS assert configuration
  • Fixed race condition where it was possible for vTaskDelete() to delete a blocked task on the other core without the task being cleaned up

Power Management

  • Added two options named PM_SLP_IRAM_OPT and PM_RTOS_IDLE_OPT to reduce current in light sleep:
  • If you enabled PM_SLP_IRAM_OPT, IRAM size increases by 1427 bytes but possible to sleep longer in light sleep and decrease current
  • If you enabled PM_RTOS_IDLE_OPT, IRAM size increases by 263 bytes but possible to sleep longer in light sleep and decrease current
  • Added new esp_sleep_is_valid_wakeup_gpio() function to check GPIOs available as wake sources
  • Made lightsleep overhead time as accurate as possible to make it wake up more precisely
  • Enabled sleep reject feature, to return from light sleep quicker if the wakeup trigger is set.
  • Fixed issue with garbled UART output in light sleep
  • Fixed issue with crashes entering light sleep under some conditions
  • Provided an option in Menuconfig named PM_SLP_DISABLE_GPIO, which would disable all pins at sleep and recovered them on wakeup
  • Wi-Fi: Made it more accurately to respond TBTT interrupt
  • Wi-Fi: Provided an option in Menuconfig named WIFI_SLP_IRAM_OPT to reduce pover saving active current.
  • Decreased deep sleep current on ESP32-S2
  • Fixed the issue that light/modem sleep current is too high because ADC power is kept enabled after calibration
  • UART: suspend output using XOFF before entering light sleep
  • Disable brownout detector before entering deep sleep on ESP32-S2 (#6179)
  • Fixed some issues during light sleep and DFS
  • Provide an interface to get pm_configuration

newlib libc

  • Reduced RAM usage by combining multiple rarely taken locks into 2 mutexes
  • Fixed for FD_ISSET macro when n==-1
  • Keep esp_rtc_get_time_us can get correct time even when RTC_SLOW_CLK_CAL_REG has been rewritten
  • Implemented __sync atomic APIs and __atomic_exchange_n for architectures that don't have atomic instructions

LWIP

  • Enabled TCP initial sequence number (ISN) randomization hook
  • Fixed issue of assert "tcp_receive: ooseq tcplen > rcv_wnd"
  • esp_netif: fixed possible use of hostname pointer after its freed (#6048)
  • Added support for configurable LwIP hooks (#6034)
  • Added Kconfig options to enable/disable checksum validation for IP/UDP/ICMP protocols (#6187)
  • pppos_client: fixed a race condition on closing the PPP mode
  • esp-modem: Fixed PPP stack smashing protect failure in OVERALL mode
  • esp-modem: Added access technology used by the modem
  • esp-modem: Added get operator functionality for BG96 and SIM800L (#5750)
  • Added support for dhcp MTU judgement
  • Added DHCP key state transition log
  • Added DHCP option 61
  • Fixed potential crash of ping when zero ping interval supplied
  • Documented that lwIP does not support delete of a task while it is actively waiting on select() or poll()
  • esp_netif: Added methods for conversion IP4/IP6 addresses from their string interpretation
  • esp-netif: Added support for SLIP interface (#4985)
  • Fixed a thread safe issue which leads to assert in LWIP
  • Silent assert option now works with LWIP asserts, also
  • Added LWIP_IPV6 macro to strip IPv6 function
  • Fixed LWIP_DEBUG define which was always defined

mDNS

  • Fixed wrong mdns source address if lwIP zoning disabled (#6055)
  • Fixed length calculation of mDNS text field (#6114)
  • Fixed the resolver to accept non-strict answers (allowing non empty question field within answers) (#6190)
  • Added MDNS_STRICT_MODE config option to work with strict resolvers
  • Fixed non-strict mdns query resolution if instance/hostname wasn't set
  • Fixed IP header TTL to meet the mdns spec

OTA

  • app_update: add support for incremental flash erase during write
  • app_update: Added definition for esp_ota_abort() API (#5331)
  • app_update: Fixed incorrect first byte from esp_ota_get_app_elf_sha256 for -O2 optimization level (#6389)
  • esp_https_ota: Added definition for esp_https_ota_abort() API

HTTP Client

  • Fixed issue with esp_http_client when disable_auto_redirect is enabled
  • Fixed issue with digest auth when opaque field is not present in response
  • Added a configuration in esp_http_client_config_t to set user agent string
  • Fixed buffer overread when esp_http_client_read is called after esp_http_client_perform
  • Fixed esp_http_client_read with OpenSSL server for file size aligned to 289 bytes

HTTP Server

  • Fixed expired x509 certificate in esp_local_ctrl_example
  • Added support for setting websocket subprotocol
  • Fixed ssl_ctx not being freed in case of error (#6143)
  • Added 401, 403 response error code for HTTP server (#5466)
  • httpd/websocket server: Fixed wrong length calculation for longer packets (#6196)

mbedTLS

  • Upgrade to release v2.16.9
  • esp_crt_bundle: Allow verifying of trusted certificates with a weak signature hash algorithm
  • Added software support for Modular Exponentiation for larger MPI values
  • Fixed ESP32-S2 AES DMA could return before all bytes completed writing back to RAM
  • Added CONFIG_MBEDTLS_ROM_MD to enable ROM MD acceleration
  • Fixed mbedtls_ssl_send_alert_message crash due to ssl->out_iv is NULL

Bootloader

  • Now prints segment load addresses without 0x prefix to avoid unnecessary decoding by IDF Monitor
  • ESP32-S2: Switched to use of efuse APIs for keys, purposes, wr/rd-protection bits for flash encryption, secure boot
  • Fixed SECURE_ENABLE_SECURE_ROM_DL_MODE cannot be y when SECURE_DISABLE_ROM_DL_MODE=y (#6442)
  • If anti-rollback is enabled, the partition table should not have a test app and the config option to use a GPIO to boot the test app is no longer supported. If OTA updating an existing installation, the bootloader is not updated so the test app will still be available. If you wish to disable the test app following a secure update, use the partition API to erase the first flash sector of the test app in the flash
  • Added config options to bypass app validation for minimum boot-time overhead
  • ESP32_ECO3 - UART ROM download mode is no longer disabled by default when security features are enabled
  • Silent assert option now applies when building bootloader
  • Fixed bootloader "skip validate on exiting deep sleep" option if "use RTC memory as heap" is enabled

ESP-TLS

  • Updated "tls->sockfd" after the socket is freed internally (#6163)
  • esp_tls_wolfssl: Use correct API to validate domain name with peer's server certificate.
  • Added a menuconfig option to allow users to skip server cert verification for testing purpose
  • Fixed memory leak in esp-tls
  • tcp_transport: enabled TCP keep-alive function in transport level
  • Prevent freeing of global ca_store when mbedtls dynamic cert free is enabled
  • esp_tls: Fixed misplaced parenthesis found during static analysis
  • protocomm: Fixed NULL pointer check found during static analysis

Websocket

  • Added mutual TLS authentication for websocket (#6059)
  • Added option to propagate control packets to the application (#6307)
  • Added configurable ping interval (#6399)

ESP-MQTT

  • Restore default MQTT_OUTBOX_EXPIRED_TIMEOUT_MS to 30 sec (#6080)
  • tcp_transport: extended error handle to capture socket's errno from tcp_transport
  • Renamed error type MQTT_ERROR_TYPE_ESP_TLS to MQTT_ERROR_TYPE_TCP_TRANSPORT, which now includes socket errno (#5906)
  • Added configuration value to set network timeout
  • Used size_t for all lengths to allow for other architectures
  • mqtt_outbox: Removed unused retry_count field from outbox_item_t
  • config: Fixed typo for configuring OUTBOX_EXPIRED_TIMEOUT_MS
  • Fixed missing MQTT_API_UNLOCK in esp_mqtt_client_stop error path (espressif/esp-mqtt#173)
  • Added esp_mqtt_client_get_outbox_size API
  • Added config value to disable keepalive mechanism
  • Added a new event to report deleted messages from outbox if enabled
  • Added a new config option to disable publishing when disconnected (espressif/esp-mqtt#177)
  • Added a new API to enqueue publish messages with qos>0 (espressif/esp-mqtt#155)
  • Added a new config option to use incremental message id instead of random (espressif/esp-mqtt#176)
  • configure_ds.py: Added support to read and parse the efuse summary from ESP32-S2
  • configure_ds.py: Added option for the user to save DS parameters on host machine in ESP32-S2

Storage

  • FATFS: added option FATFS_USE_FAST_SEEK in menuconfig to enable fast seek algorithm (#5625)
  • NVS: fixed partition de-intialization function to only close its own handles
  • NVS: fixed coverage report in Makefile
  • NVS: fixed string comparison in nvs_api.cpp
  • mmap: fixed the issue mmap cannot be called with pointers to psram
  • mmap: Fixed the issue cache not restored after mmap failure.
  • Fixed minor documentation issue in the header file "sdmmc_cmd.h" (#6192)
  • VFS: Return EINVAL when truncate length is less than zero
  • partiton_table: Added two standard partition tables for NVS encryption
  • nvs_flash: Updated "nvs_flash_init" API to encrypt the default NVS partition when "NVS_ENCRYPTION" is enabled
  • VFS: Fixed build errors in esp_vfs.h when included in C++ files with target esp32-c3

FreeModbus

  • Added tcp master and slave support
  • freemodbus: added support for list of area descriptors for each register area
  • freemodbus: moved register read/write callback functions into common slave and support to override in concrete controller port
  • Fixed comm fail when optimization for performance option is active (#4499)
  • Fixed event processing failure after driver destroy
  • Added MB_PORT_PARITY_GET() to propagate UART parity options from mb controller to serial port layer (#6377)
  • Removed duplicated event post line added after automatic merge of TCP stack
  • Added processing of events in one poll cycle

Tools

  • idf.py on Windows handles Ctrl+C event
  • Added support for generating default and range values of the Kconfig options for the documentation
  • Kconfig documentation page updated with default and range values
  • tools: fix python requirement for click?
  • Windows: documented limitation for installation on path which contains white space or parentheses
  • Windows: documented solution for installation on path with Unicode characters
  • Added deprecation warning for Python 2 and Python 3.5 and older
  • Can now set a mirror for all GitHub asset URLs downloaded as part of IDF Tools install process
  • Added pre-installation system check screen to Windows installer for validation of installed Python environment and Windows Defender
  • Clean the state of ESP-IDF git repository after installation (#6182)
  • Added support for Python installed from Microsoft Store
  • Fixed requirements incompatible with Python 2
  • Allow decoding a stack trace in idf_monitor by running gdb in the background
  • Wrap flash binaries into a UF2 file for flashing through USB MSC
  • idf.py: modified port detection to find the port with esp device connected by default (#5125)
  • Allow installation on arm64 macOS (#6113)
  • Added ability to disable address decoding using env variable or cmd option (#1679)
  • idf_tools.py: fixed deprecation warnings during tools installation with python 3.8 and newer (#6200)
  • Windows Installer added support for Embedded Python 3.9 which simplifies installation in environments with existing Python from Windows Store or Anaconda
  • Windows Installer and idf_tools.py added support for Espressif PyPI repo to resolve Python Wheels
  • Windows Installer added support for unattended installation
    Added PowerShell shortcut
  • Fixed a bug in ldgen where an object file name gets truncated with mapping symbols
  • Refactor espcoredump.py. Add dependency construct==2.10.54
  • Update to Ninja 1.10.12 - Solves problem with writing to build files
  • Specify UTF-8 encoding for Eclipse Make build which is not the default value under Python 2
  • Prefer python3 during install and export (#6471)
  • Simpler installation by not requiring to set up manually an alias for python on Unix systems where it doesn't exist by default (#6532)
  • Fixed c++ include usage for esp_core_dump.h (#6585)
  • Don't count BSS into the total image size in the report of idf_size.py. Revert the behavior to ESP-IDF v4.1 and earlier
  • Reinstall virtualenv if it is broken
  • Fixed automatic port detection
  • Fixed autocomplete initialization (#6587)
  • idf_tool.py: Improved error message about tool being installed but failed to run
  • export.bat/install.bat: Human-readable error message if Git or Python is not in PATH
  • "idf.py gdbgui" - Add workaround for typing errors from greenlet and use compatible Socket.IO library (#5968)
  • Upgrade OpenOCD version to v0.10.0-esp32-20210401
  • Fixed crash of idf_monitor.py in case processing input with Unicode character

Build System

  • Added esptool_py_flash_to_partition CMake function to flash a given binary flash to a partition. idf.py encrypted-flash can now flash encrypted and non-encrypted images at the same time if necessary. (for example, spiffs images must be flashed as non-encrypted)
  • Added possibility to choose Linux target to run on host
  • Now defines IDF_VERSION_MAJOR, IDF_VERSION_MINOR, IDF_VERSION_PATCH variables during the early expansion phase of component CMakeLists.txt files
  • Added support for honoring ESPPORT and ESPBAUD environment variables when doing idf.py read_otadata and idf.py erase_otadata (#5280)
  • Added loadable elf support for ESP32-S2 and ESP32-C3

External Libraries

  • cJSON: upgraded to release v1.7.14, new feature additions and small bug-fixes

Examples

  • Fixed socket examples to use sockaddr_storage for both IPv4 and IPv6 addresses
  • Fixed expired x509 certificate in esp_local_ctrl_example
  • SMTP Client: fixed missing newline causing incorrect attachment issue (#6098)
  • SMTP Client: fixed content type of the attachment
  • IPERF: fixed issue that iperf example parameter opt isn't initialized (#5681)
  • Fix invalid clock source in i2c_self_test example (#6216)
  • ble_mesh: Added Aligenie BLE Mesh example
  • ble_mesh: Delete local variables to avoid null global variables in coexistence example
  • esp_http_client: updated esp_http_client example to demonstrate partial HTTP downloads
  • RMT: added musical buzzer example, based on RMT loop mode
  • Updated the https_request_example to showcase cacert_buf, global ca_store
  • Fixed the issue of restart in esp-now blocking system
  • Power Management: Added power consumption graphs for wifi/power_save and ulp examples
  • Do not check the return value of esp_wifi_connect()
  • Do not check the return value of Wi-Fi scan
  • Allow access SD card though file_server example
  • MCPWM: Fix period calculation bug when frequency too high
  • UART: fixed echo example crash when UART ISR not disabled with cache (placed in IRAM)
  • Matrix Keyboard: Added matrix keyboard example, based on Dedicated GPIO driver
  • Fixed enable CONFIG_EXAMPLE_RESET_PROVISIONED will cause device crash
  • Added QR code support for provisioning examples
  • Added touch element lib examples
  • provisioning: Updated README.md to explain QR code format
  • Added change to consider Audio Major Class while showing discovery results (#6548)
  • MQTT: Updates certificates for examples using ssl and wss transport (#6776)

Documentation

  • Provided comparison of key features of ESP32, ESP32-S2 and ESP32-C3 chips
  • Wi-Fi: Updated description for new API esp_wifi_set_inactive_time() in wifi.rst
  • Wi-Fi: Updated description to avoid using WiFi modem sleep for WiFi/BT coexistence
  • Wi-Fi: Fixed description of unusable API esp_wifi_restart()
  • Wi-Fi: Updated esp_now_fetch_peer description
  • Wi-Fi: Updated table format for esp_wifi_set_max_tx_power()
  • Wi-Fi Driver: added Chinese translation of Wi-Fi Driver and fixed formatting issues in the original English text
  • Updated Getting Started section to get English and Chinese documentation in sync
  • Updated Chinese translation of some documents in the API Guides section: index.rst, ulp, bootloader, external-ram, ulp-risc-v, partition-table, tips-and-quirks
  • SPI: added explanation for the modes
  • SPI Flash: added documents for the 32-bit address support of flash chips
  • SPI_FLASH: updated document to reflect the restrictions of mmap/cache, and modified SPI Flash driver definitions
  • SPI_FLASH: fixed documentation errors in esp_partition.h
  • Updated docs/en/api-reference/protocols/icmp_echo.rst
  • Added libusb linux dependencies to prevent error about running openocd (#4095)
  • Updated the usage of DAC digital controller on ESP32-S2 (#6333)
  • Increase cairo2svg version (#6365)
  • Corrected suggested voltages for ADC of ESP32-S2 and removed full scale voltages for both ESP32 and ESP32-S2 chips
  • Tools: Kconfig documentation page updated with default and range values
  • Tools: Sorted order of menu items in the Kconfig option reference
  • Updated Power Management logic for ESP32-S2
  • Added API reference documentation for touch element library
  • Updated "Fatal Errors" chapter
  • Fixed invalid links directed to ESP-IoT-Solution repo
  • Updated Wi-Fi driver docs
  • Adjusted ESP32-C3 LEDC documentation
  • Fixed UART chapter in Programming Guide for ESP32-C3
  • Updated SPI chapter in Programming Guide for ESP32-C3
  • Added JTAG debugging guides for ESP32-C3
  • Added layout of ESP-WROVER-KIT board in DXF format
  • Added User Guide for ESP32-PICO development board
  • Added User Guide for ESP32-PICO-DevKitM-2 development board
  • Added User Guide for ESP32-DevKitM-1 development board
  • Added User Guide for ESP32-C3-DevKitM-1 development board
  • Added User Guide for ESP32-C3-DevKitC-02 development board