ESP-IDF Release v3.3 (LTS)
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 settingWIFI_COUNTRY_POLICY_MANUAL
, the workaround is to set.max_tx_power
field toWIFI_COUNTRY_POLICY_MANUAL
if the application needs policyWIFI_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 logE(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
- New option to free approx 10KB of IRAM by moving some Wi-Fi functions to flash.
- Fixed Wi-Fi SoftAP mode multicast and broadcast saving and flushing when the associated stations enable 802.11 legacy power saving mode (called modem sleep in ESP32).
- New Wi-Fi Provisioning Manager
- New Efuse Manager component for working with Efuses
- New app rollback and secure anti-rollback features for OTA updates
- cmake: New support for adding IDF as libraries in a non-IDF CMake project, includes example projects
- Added official PPPoS support including cellular modem example
Wi-Fi Related
New Functionality
- Added option to free approx 10KB of IRAM by moving some Wi-Fi functions to flash, at expense of performance
- Fixed issue where PHY data was loaded even if NVS is not initialized
- New WireShark instructions for submitting Wi-Fi diagnostic information
- STA mode: Send the connected event after 4-way handshake with SoftAP is completed
- Added Wi-Fi Debug Log feature to enable detailed Wi-Fi logging
- Added new
WIFI_REASON_CONNECTION_FAIL
disconnect reason - WPS: Added new "overlap" event (
SYSTEM_EVENT_STA_WPS_ER_PBC_OVERLAP
)
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
- Added API
esp_mesh_get_tsf_time
to return TSF time - Expanded ESP-MESH documentation
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
- Added option to support BLE full scans
- Added option to support BLE Adv report flow control
- Added BLE blocking APIs
- Support OOB in SMP
- Added option to configure BLE controller task stack size
- Added option for slave to update connection parameters during pairing. Previously this behaviour was the default, but this can cause iOS and Windows 10 compatibility errors.
- Added BLE Compatibility Test demo
- Added handling in gatts conf event for indication
- Added an option to make report adv data and scan response individually
- Updated duplicate scan exceptional list APIs
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
- Added API to clear RF PHY calibration data kept in NVS
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
- New Efuse Manager component for working with Efuses
- Added configuration option to increase 32KHz crystal current during deep sleep, to prevent an issue where some crystals may fail to start
- Added APIs to get app firmware description
- Print the of the firmware ELF file in the panic handler (also available via firmware description API above)
- New app rollback and secure anti-rollback features
- When using 4MB PSRAM, allow configuring the HSPI host peripheral to output the clock (frees VSPI peripheral)
- Improved performance/timing when using DIO mode with integrated flash
- SPI RAM: Configure SPI PSRAM pins based on efuse SPI pin configuration
- POSIX: Allow setting core affinity and thread name for pthreads and std::thread (#2743)
- VFS: Implemented fsync() for the VFS UART driver
- VFS: Implemented standard poll() based on select() implementation
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
- Partition API examples
- BLE Compatibility Test
- FreeRTOS runtime statistics example
- NMEA0183 GPS data parser
- HTTP File Server
- PPPoS cellular modem
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