Skip to content

ESP-IDF Release v3.3.1

Compare
Choose a tag to compare
@projectgus projectgus released this 12 Dec 03:48
· 33869 commits to master since this release

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

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() caused esp_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

  • Added some new modes and options for time synchronization (#1668 #4103)

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 in clock_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 in esp_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 required Ctrl-]) (#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