Skip to content

ESP-IDF Release v3.3 (LTS)

Compare
Choose a tag to compare
@projectgus projectgus released this 05 Sep 02:38
· 28633 commits to master since this release

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

ESP-IDF v3.3 is a minor update for ESP-IDF v3.2.x. Release v3.3 is compatible with apps written for ESP-IDF v3.x, but features in v3.3 may not be available in earlier versions.

Version 3.3 is the first ESP-IDF Long Term Support release. ESP-IDF v3.3.x will be supported for 2.5 years, until March 2022.

Known Issues

  • When Wi-Fi & Bluetooth coexistence is enabled and Wi-Fi and BT task are pinned to different cores, Wi-Fi start/stop will crash. Workaround is to pin the two tasks to the same core (this is the default configuration).
  • Watchdog timeout when using an RSA 4096-bit key to connect to WPA2-Enterprise (EAP-TLS) AP.
  • SmartConfig crashes if it fails to scan any APs. Normally a least one AP will be in range when using SmartConfig.
  • esp_wifi_set_country() has bug when setting WIFI_COUNTRY_POLICY_MANUAL, the workaround is to set .max_tx_power field to WIFI_COUNTRY_POLICY_MANUAL if the application needs policy WIFI_COUNTRY_POLICY_MANUAL.
  • WPS leaks some memory each time it completes the WiFi connection. This is legacy bug has existed in the system for several releases.
  • esp_wifi_stop() generates error log E(18732) event: system_event_ap_stop_handle_default 172 esp_wifi_internal_reg_rxcb ret = 0x3014. This log message doesn't impact normal functioning and can be ignored.
  • If Secure Boot and Flash Encryption features are in use, an additional firmware change is required to avoid a potential fault injection attack. Please refer to this security advisory.

Known issue bugfixes are planned for the v3.3.1 bugfix release.

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

Major New Features

Wi-Fi Related

New Functionality

Bug Fixes

  • Fixed Enterprise vulnerability issues with EAP-FAIL response, or crash if EAP-SUCCESS was sent before PMK setup completed (-12586, -12587)
  • Fixed WPS/ Enterprise memory leak
  • Fixed the bug that scan fails after STA failed to connect to a nonexistent AP
  • Fixed the bug that task watchdog happens when during WiFi scan and BLE scan
  • Fixed the bug that no WiFi disconnect event is generated when STA receives disassociation frame after sending authentication frame
  • Reduced cases where Wi-Fi needs to listen for RX when waking from sleep state, depending on beacon contents
  • Fixed thread safety bug in WPS
  • Fixed WPS failure when AP is encrypted
  • Reduced IRAM usage of libnet80211.a
  • Fixed Wi-Fi baseband reset issue after baseband switched to 11b weak signal mode
  • Fixed bug that if set_config() was called before connecting to an encrypted AP, PMK would be recalculated
  • Fixed STA HT20/40 coexist
  • Fixed bug about WiFi signal test
  • Fixed compliance by disallowing WEP/TKIP with HT rates
  • Fixed a bug which could block the scan timeout before the scan finished
  • Modified WiFi default RX buffer configuration values in order to achieve better compatility and performance
  • Added configuration option to set number of Wi-Fi mgmt short buffers
  • Improved WPA2 support
  • Fixed SoftAP mode multicast and broadcast saving and flushing when the associated stations enable 802.11 legacy power saving mode (called modem sleep in ESP32).
  • Fixed bug where scan would fail after STA failed to connect to a non-existent AP
  • Fixed SoftAP crash when STA resets
  • Fixed thread safety issues in SmartConfig
  • Fixed bug that SmartConfig leads to crash when no AP is found
  • Fixed memory leak following Wi-Fi stop/deinit
  • Fixed bug that calling esp_wifi_stop() could lead to a task watchdog timeout
  • Fixed bug where no disconnect event was sent when STA recieved disassociate frame after sending auth frame
  • Fixed bug where full scan would send multi events when recieving deauth/disassociate frames
  • Fixed unsafe uses of sprintf() in wpa_supplicant
  • Make WiFi disconnect reason code more accurate: STA reports reason code WIFI_REASON_4WAY_HANDSHAKE_TIMEOUT instead of WIFI_REASON_NO_AP_FOUND if it connects the open AP with a valid password or if it connects the encrypted AP with an empty password; STA reports reason code WIFI_REASON_4WAY_HANDSHAKE_TIMEOUT instead of other reasons if it connects the encrypted AP with a wrong password.
  • Fixed the bug that ESP32 incorrectly deletes the receiving BA session
  • Fixed the bug that STA incorrectly receives packets when scanning in connected status
  • Fixed the bug that STA receives the unexpected packets during background scan
  • Fixed the bug that PMK calculation time is too long

ESP-MESH Related

New Functionality

Bug Fixes

  • Now if g_ic.tx_buf has pending frames caused by channel switch, will resend these frames when channel switch is finished
  • Now sends the entire routing table multiple times
  • Now clears candidate settings if failed to receive a candidate beacon within 8 seconds
  • Disabled A-MPDU for non-root
  • Added lock for mgmt/xon/bcast queues to protect sending during user flush
  • Fixed bug with reusing a freed eb
  • Fixed bug in group send
  • Fixed bug in esp_mesh_set_router when the input argument is not initialized
  • Fixed issue when node becomes root, it did not record the assoc value to nvs
  • Fixed discarding of unnecessary forwarded group packets
  • Fixed issue where toDS state is not updated in time
  • Fixed issue where s_sta_cnx_times not cleared when deinit causes root sends ADD annoucement
  • Fixed crash in processing scan results which contain more than 255 APs
  • Fixed memory leak ocurred when receiving an unknown option packet
  • root: Increased beacon timeout time from 6 seconds to 15 seconds to delay initiation of reconnection
  • softap: Added check if secondary offset is correct when starting softap
  • softap: In inactive timer handler, added check if child bss is removed to avoid removing it again

Wi-Fi/Bluetooth Coexistence Related

  • Reduced binary size when coexistence is not enabled, or if only BT is used
  • Fixed issue that spike transmit power of WiFi could be higher than configured when Bluetooth coexistence enabled
  • Fixed assertion failures in Bluetooth controller when coexistence is enabled
  • Fixed watchdog timeout if Wi-Fi and BLE scans happend simultaneously

Bluetooth Related

BLE Related

New Functionality

Bug Fixes

  • Fixed btc_gatts_arg_deep_copy() and bta_gatts_indicate_handle()
  • Fixed interrupt watchdog timeout in Bluetooth controller
  • Fixed BLE assert(512) or assert(1536) in rwble.c at line 222
  • Fixed ASSERT_ERR((((uint16_t)rxwinsz << 0) & ~((uint16_t)0x00003FFF)) == 0), in lld_evt.c at line 871
  • Fixed memory leak when setting BLE TX power
  • Fixed no advertising report when scaning with sleep enabled
  • Fixed blufi prepare write crash
  • Fixed iOS and win10 compatibility error for HID
  • Fixed the issue that updates of connection parameters caused link loss while data are being sent
  • Fixed write char crash after disconnection
  • Fixed the issue assert(8192 0) in rwble.c 234
  • Fixed the issue that there is low ratio of crash when BLE does re-connect/re-scan/re-adv
  • Fixed the issue that there is very low ratio to cause BLE assert(65536, 0) in rwble.c at line 222
  • Fixed the issue that there is very low ratio to cause BLE assert(32768, 0) in rwble.c at line 222
  • Fixed interrupt watchdog timeout in bluetooth "btdm_bb_isr"
  • Supported vendor HCI commands
  • Fixed a bug where controller may wake up twice (and process ISR twice) without the controller task running

Bluetooth Classic Related

Bug Fixes

  • Set the minimum encryption key size to be 7 octects for BR/EDR link (fix for "KNOB Attack" -9506)
  • Fixed abort if esp_spp_deinit() is called without calling esp_spp_init() first

RF PHY Related

Ethernet related

New Functionality

  • Added support for IP101 PHY
  • Added promiscuous mode control

Bug Fixes

  • Cleaned up invalid register mappings for LAN8720 PHY
  • Fixed the power and init functions for LAN8720 PHY
  • Enforced that only ETH_CLOCK_GPIO_IN mode can be used if PSRAM is in use (due to GPIO16 and GPIO17 being occupied by PSRAM)
  • Fixed OTA when using Ethernet
  • Fixed multicast when using Ethernet
  • Fixed potential memory leak of ethernetif structure

LWIP related

  • Added official support for PPPoS and cellular modem example
  • Added configuration option for TCP Window scale feature
  • dhcp_server: suppress send_offer debug output (#2924)
  • Fixed missing DNS crash bug when a static IP is set

tcpip_adapter related

  • Fixed zero initialization of unused system_event_t fields
  • Added field to pass client IP address along with SYSTEM_EVENT_AP_STAIPASSIGNED (#2949)

Network Protocol Related

mDNS related

  • Fixed uninitialized memory bug after some operation failed and strdup() step skipped

HTTP Client

New Functionality

  • Added support for TLS Client authentication (#2688)
  • Added capability to load certificates from the ESP-TLS global CA store
  • Added esp_http_client_set_redirection() function to manage redirection URLs when using direct operations

Bug Fixes

  • URI schemes are now treated as case insensitive
  • Fixed infinite loop on esp_http_client_fetch_headers()
  • Fixed bug where member paths were not correctly cleaned up following an error
  • Fixed issue where esp_http_client_open() would set wrong content length (#2967)
  • Fixed issue when calling esp_http_client_set_url (#2631)
  • Fixed issue where "header sent" event was not always sent
  • Fixed case insenstivie comparison of headers (#3106)

HTTP Server

New Functionality

  • Added new "esp_https_server" component allowing HTTP server with TLS connection (#2578)
  • Added uri_match_fn field in config structure which allows a custom URI matching function to be set
  • Added feature to invoke user configurable handlers for server errors (#3005)
  • Allow binding to same address and port upon immediately restarting server

Bug Fixes

  • Updated and fixed problems with httpd_sess_get_ and httpd_sess_set_ APIs
  • New helper APIs for sending string content
  • Remove use of 'template' C++ keyword (#2956)
  • Now only accepts new socket connections if server has capacity to handle more concurrent connections
  • Fixed support for LF terminated headers
  • Fixed bug when open_fn() option failed (#3479)

HTTPS OTA Library

  • Added config option to (optionally) allow insecure HTTP updates
  • Added support for configurable OTA buffer size (#2998)

Unified Provisioning Library

  • Fixed correct conn_id being passed to protocomm_req_handle in transport_simple_ble_write() and transport_simple_ble_exec_write()
  • Fixed case when simple_ble_start() is used with Bluetooth Dual Mode (Classic & BLE)
  • Fixed custom service UUID support
  • Added new Wi-Fi Provisioning Manager

mbedTLS

  • Updated to v2.16.2 release
  • Fixed AWS-IoT and ESP-TLS builds if ALPN is disabled in mbedTLS config
  • cmake: mbedTLS project is now built using the upstream project's CMakeLists file
  • hwcrypto: Fixed sign of result when calling mbedtls_mpi_exp_mod() with RSA accelerator enabled (#1681, #3603)

ESP-TLS

  • New esp_tls_init_global_ca_store() function (#2654)

App Trace Related

System Related

New Functionality

Bug Fixes

  • Improved SPI flash access CS pin timing (setup and hold)
  • Fixed a newlib crash if built with -O2 optimization level
  • When using section attributes (IRAM_ATTR, DRAM_ATTR, etc), now places each variable in a unique section - allows gc-sections to work, and prevents section type conflicts
  • Moved newlib qsort() and setlocale() functions to flash not IRAM when PSRAM is enabled (reduces overall IRAM usage)
  • Added more complete description for CRC APIs in ESP32 ROM
  • esp_intr_alloc: Fixed bug where level 5 interrupts were never called (#3039, #3040)
  • hwcrypto: Fixed issue where esp_sha() function could disable interrupts for an extended period (#3127)
  • hwcrypto: Added protection against AES & SHA accelerator fault injection issues reported by LimitedResults under Espressif Bug Bounty Program
  • secure boot: Use mbedTLS implementation not esp_sha() in IDF apps
  • secure boot: Secure boot now enabled only after encrypting flash (when configured). Prevents possible bad state if there's a power failure during a short window of time on first boot.
  • secure boot: Fixed failure to verify OTA updated app images which were larger than 3.2MB
  • VFS: Allocate the socket select semaphore outside the ISR
  • Fixed newlib adjtime() bug where time correction would accumulate error if gettimeofday() called at high frequency

Bootloader Related

  • Fixed setting of UART RXD pin mode when custom console pins are configured in project
  • Fixed issue with early UART log output being lost after reset if custom console pins are configured in project

Register and Low-Level System Related

  • Fixed incorrect divider setting in rtc_clk_cpu_freq_to_config()
  • Reduced FLASH_CRYPT_CNT register width to 7 bits

FreeRTOS Related

  • Simplified usage of spinlocks protecting the tick count
  • Added new port*_CRITICAL_SAFE API to call port*_CRITICAL or port*_CRITICAL_ISR depending on the context. Allows APIs to be otherwise compliant with vanilla FreeRTOS API requirements.
  • Fixed issue unwinding pended ticks from CPU1, could cause tasks not to run in some situations (#1952)

Peripheral Driver Related

New functionality

  • CAN: Added functions can_clear_transmit_queue() and can_clear_receive_queue() (#2906)
  • RMT: New function rmt_get_channel_status() to get status of all channels
  • RMT: New function rmt_get_idle_level() (#2666)
  • RMT: Allow polling use of rmt_wait_tx_done() with wait_time set to 0 (#2666)
  • SPI: New API to show the owner of the SPI host explicitly
  • SPU: Split configuration of SPI ISRs in IRAM from the IRAM-safe interrup flag, allowing more flexibility
  • SPI: Added runtime checks for valid DMA buffers, valid transaction length

Bug Fixes

  • CAN: Fixed multiple documentation errors (#2898, #2794)
  • CAN: Fixed can_reconfigure_alerts() returning incorrect current_alerts. (#3028)
  • GPIO: Fixed a bug where it was possible to enable interrupts on the wrong core when installing the interrupt service, if calling not pinned to a core.
  • SPI: Fixed selection of input-only vs input-output pins for master vs slave (#2455)
  • SPI Slave: Improved peripheral timing configuration (#1346, #2393)
  • I2S: Fixed APLL clock source when using PDM/ADC/DAC mode
  • I2S: Fixed bug when calculating I2S APLL parameters (#3648)
  • LEDC: Fixed errors when fading is too fast (#2903)
  • LEDC: Fixed errors when setting duty cycle and updating immediately (#2903)
  • SPI Master: Reduced some spurious "info" level logs to "debug" level
  • Timer_Group: Fixed bug where initializing hardware timers could crash after a system soft reset
  • UART: Fixed uart_wait_tx_done() incorrect behaviour when sending a single byte of data
  • UART: Fixed uart_set_rx_timeout timeout value when ref_tick is enabled

Storage Related

  • fatfs: Implemented utime()
  • fatfs: Added option to prefer external SPIRAM when allocating buffers
  • nvs: Improved nvs_flash_init_partition() speed (#2847)
  • spi_flash: Long erase operations now include an option (enabled by default) to yield CPU regularly, preventing resource starvation.
  • spi_flash: Fixed stale read bugs when reading mmap()ed data after a write/erase operation

Third Party Libraries

  • freemodbus: Use semaphores instead of FreeRTOS critical sections for concurrency support
  • mbedTLS: Update to v2.16.2
  • cJSON: Update to v1.7.11

Debugging Related

  • Backtraces now work from inside interrupts to the task code which was running at the time
  • core dump: New API to retrieve current core data layout in flash
  • core dump: New menuconfig option for max tasks in core dump
  • core dump: Fixed core dump when flash write address checks are enabled
  • gdbstub: Allow gdb to list tasks and switch tasks in the gdbstub (#2828)

Build System Related

  • Added initial support for multiple targets (currently only ESP32 is supported)
  • New linker script generation feature
  • cmake: New support for adding IDF as libraries in a non-IDF CMake project, includes example projects
  • cmake: Fix Windows path issues in the convert_to_cmake helper script
  • Set ESP_PLATFORM as a variable in the build system (#2601)
  • cmake: Automatically re-run idf.py under winpty if running in MSYS environment
  • cmake: idf.py no longer has issues qwith symlinks on Windows during "fullclean"
  • cmake: Fixed idf.py errors with relative paths if project and IDF are on different drives
  • cmake: Fixed capability to override the bootloader component in a project
  • confserver: Supports a new "V2" protocol with improved behaviour around sending changes back to the client

Host Tools Related

  • nvs_util: Added support for creating unique encryption keys
  • nvs_util: Fixed setting of previous page state to FULL before adding new page

Examples Related

New Examples Added

Changes in Examples

  • A2DP Sink Example: Fixed issue where iPhone did not get song information
  • ESP-NOW: Added config item for Long Range mode
  • Wi-Fi Sniffer: Added capability to send captured packets to the host via JTAG
  • Console: Added NVS support
  • iperf: Fixed error on exit
  • openssl_server: Fixed Content_length
  • mcpwm: Fixed buffer overflow error when allocating signal buffer (#3757)

Documentation Related

  • Translated more IDF Programming Guide content into Chinese

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

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

Download an archive with submodules included

Attached to this release is an esp-idf-v3.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-v3.3.zip