ESP-IDF Release v3.3.1
Documentation for release v3.3.1 is available at https://docs.espressif.com/projects/esp-idf/en/v3.3.1/
ESP-IDF v3.3.1 is a bugfix update for ESP-IDF v3.3. This is the latest stable release of ESP-IDF at time of writing.
ESP-IDF v3.3.x is a Long Term Support release and will be supported until February 2022.
This is the list of changes since release v3.3:
Security Fixes
- Flash encryption: New config option to disable any plaintext reflashes. This is enabled by default if Secure Boot is enabled, to mitigate impact of CVE-2019-15894.
- cJSON: Updated to v1.7.12, fixes potential DoS issue in cJSON_Minify - see DaveGamble/cJSON#354
New Features
- Support new NimBLE BLE stack on ESP-IDF v3.3. More information
Wi-Fi
- Fixed bug where WPA2-Enterprise STA incorrectly connects to an open AP
- Fixed WPS and WPA2-Enterprise memory leak
- Fixed bug where calling
esp_wifi_stop()
causedesp_wifi_internal_reg_rxcb()
to fail - Fixed bug where calling
esp_wifi_stop()
can lead to task watchdog timeout - Fixed WiFi initialization sequence bug
- Fixed SmartConfig IPC crash
- Moved internal
g_promis_buf
buffer to IRAM - Fixed bug where
esp_wifi_set_channel()
did not return an error value when sniffer was not enabled. - Fixed bug where no error is returned when setting WEP authmode or wrong authmode
- Fixed bug where STA was parsing authmode incorrectly when AP sets WPA_WPA2_PSK mode
- Fixed bug where an incorrect error code and event is returned when there is an Auto AP in a multi-SSID environment
- Fixed TKIP/CCMP PN replay attack detection bug
- Increased buffer number type from uint8_t to uint16_t to support more than 255 buffers
- Now avoids recalculating PMK if
esp_wifi_set_config()
is not called - Fixed bug where a scan with more than 255 results can lead to a crash
SmartConfig
- Fixed bug where ESP32 sends broadcasts to phone after SmartConfig is completed
- Fixed SmartConfig crash if no AP is found during scan
ESP-MESH
- Fixed bug where
esp_mesh_stop()
doesn't return
Bluetooth
- Added support for setting a minimum encryption key length requirement
- Fixed some internal controller ISR bugs
- Fixed data loss bug and bug where the same BT packet is sometimes sent twice
- Fixed occasional adv data error
- Fixed occasional adv start/stop crash
- Fixed connection fail when connecting to some speakers
- Added sdkconfig option to set default SCO data path
- Disabled BR/EDR GATT
- Fixed some potential scheduler/ISR concurrency issues
Bluetooth Classic
- Fixed memory leak in RFCOMM
- Fixed some performance issues in A2DP source data flow control
- Fixed call of
esp_a2dp_media_ctrl(ESP_A2D_MEDIA_CTRL_SUSPEND)
not receiving an ACK from callback on A2DP sink - Fixed assertion failure if A2DP is deinitialized while playback is running
- Fixed assertion failure happens occasionally in classic BT is in connection active mode, such as A2DP is playing.
Bluetooth Low Energy
- Fixed error when unpacking HCI enhance connection complete event
Coexistence
- Fixed crash in BLE full scan when coexistence is enabled
- Fixed high beacon and broadcast packets loss ratio of WiFi
- Improved stability of Wi-Fi performance with a little sacrifice of throughput.
- Improved BLE advertising and connection performance with dynamic priority. It sacrifices a little Wi-Fi throughput, but achieves a balance between Wi-Fi and Bluetooth.
- Fixed bug where Wi-Fi MAC reset could cause task watchdog timeout
- Fixed bug in Wi-Fi MAC reset
- Fixed bug that WiFi scan and connect may cause A2DP playing stuck, disconnect or other problems when coexist with Bluetooth
- Fixed bug that PHY may be blocking in I2C and trigger interrupt watchdog when WiFi and bluetooth coexist, then PHY cannot initialize successfully even reboot.
LWIP
- Added option to prefer allocating memory in SPIRAM first, and fallback to internal RAM otherwise
- Fixed bug where invalid IPv6 broadcast address does not return an error
- Increased DHCP timeout parameters from 16 bits to 32 bits in order to prevent overflow on long timeout periods
SNTP
Core System
- Added configuration item to set minimum chip revision. This value is checked in the bootloader before booting (#4000)
- Added support for building an image for ESP32-D0WD-V3 (revision 3) only, where PSRAM workaround is not needed
- Fixed SPI flash configuration issues when OTA is updating an app from an earlier bootloader
- Disabled high priority interrupts (up to level 5) when using DPORT workaround. This allows the use high priority assembler ISRs with DPORT workaround
- Prevent interrupt nesting during
esp_pm_impl_isr_hook()
(#3057) - Moved
_gettimeofday_r()
call inclock_gettime()
(#3789) - Removed spurious semicolon in definition of
xTaskNotifyGive()
- Removed unsafe
printf()
calls when heap poisoning was enabled - esp_timer: Now handles
esp_timer_delete()
in timer task (#3458) - esp_timer: Fixed issue where system time jumps back ~54 secs on an internal overflow (#2513)
- esp_timer: Fixed a race condition when a timer is deleted from a higher priority task while trying to run the timer callback
Storage
- FAT: Fixed memory leak if
esp_vfs_fat_sdmmc_mount()
failed - spi_flash: Fixed
spi_flash_read()
bug when destination buffer in PSRAM and size < 16 (#4010)
VFS
- Fixed bug when a VFS driver is installed during a
select()
call (#3554)
Peripheral Drivers
- Added peripheral module reset before enabling each peripheral (fixes issues with initialization following a soft CPU reset)
- CAN: Fixed missing functionality when assertions are disabled in compiler configuration
- CAN: Added support for lower bit rates on ESP32-D0WD-V3 (silicon revision 3)
- CAN: Fixed issues caused by incorrect calls to
can_enter_reset_mode()
/can_exit_reset_mode()
- I2C: Enable Power Management locks
- I2C: Fixed
ticks_to_wait
parameter when set to 0, or time expired - I2S: Enable Power Management locks
- I2S: Fixed left/right channels swapped
- SDIO Slave: Fixed possible infinite loop in
send_flush_data()
- SPI Driver: Placed argument of macro
SPI_SWAP_DATA_TX/RX
in parentheses (#3996)
esp_event library
- Fixed possible
malloc()
/free()
issues found by static analyzer - Fixed minor memory leak when overwriting an already registered event handler
Bootloader
- Don't check factory reset triggers when waking from deep sleep (#3800)
- Fixed bug where
bootloader_random_disable()
disables ADC incorrectly on boot, meaning the ADC sometimes fails to work in the app
mDNS
- Fixed crash caused when receiving query responses if the hostname used was an instance name (#4224)
HTTP Server
- Fixed possible race condition in
httpd_sess_close()
- Fixed parsing of empty header values (#3803)
- Added support for parsing ICY URLs
HTTP Client
- Fixed issue where calling
esp_http_client_set_url()
discarded username and password - Added API to add authorization info
- Added API to allow skipping of certificate CN validation
ESP HTTPS OTA
- Added support for URL redirection
- Added support for basic auth
- Added support for custom HTTP header, custom firmware header
- Added new API that allows monitoring upgrade status
TCP Transport
- Modified
ws_read()
to read payload directly to the read buffer and separately from header bytes - Added API to allow skipping of certificate CN validation
ESP-TLS
- Added support for reading expected host CN from config
- Now includes
esp_err.h
inesp_tls.h
(#4100)
MQTT
- Fixed disconnect issues
- Fixed incorrect MQTT API documentation
- Added support for ESP-TLS global CA store
- Expanded error structure to include MQTT-specific errors
External Libraries
- cJSON: Updated to v1.7.12, fixes potential DoS issue in cJSON_Minify - see DaveGamble/cJSON#354
- FreeMODBUS: Fixed incorrect set coils read event (#3289)
- libexpat: Updated to v2.2.9
- Mbed TLS: Remove unnecessary check for "WOULD BLOCK" in lwIP port layer
Build System
- Added support for "IDF Tools" scripts, the same used for tools setup in ESP-IDF v4.x
- kconfig: Fix host build system dependency errors when switching ESP-IDF versions
- kconfig: Don't create "split" directory structures under build/include/config, fixes potential issue on Windows with creating directories using reserved names. (#3299)
- kconfig: Fixed issue on Windows where backslashes in Kconfig paths are incorrectly expanded as shell escape sequences
- idf.py: Fixed calling wrong make binary for version check on Windows (#3333)
- idf.py: Fixed encoding issue with serial port names on Windows (#3334)
- cmake: Fixed some variable scope issues
Host Tools
- idf_monitor: Possible to exit menu with
Ctrl-T Ctrl-X
(previously requiredCtrl-]
) (#4167) - esptool.py: Update to v2.8 release, includes support for detecting ESP32 revision 3
Obtaining v3.3.1
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.1 --recursive https://github.com/espressif/esp-idf.git esp-idf-v3.3.1
cd esp-idf-v3.3.1/
This is the recommended way of obtaining v3.3.1 of ESP-IDF.
Download an archive with submodules included
Attached to this release is an esp-idf-v3.3.1.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.1.zip