Releases: espressif/esp-idf
ESP-IDF Pre-release v4.1-rc
Documentation for pre-release v4.1-rc is available at https://docs.espressif.com/projects/esp-idf/en/v4.1-rc/
ESP-IDF v4.1 is a minor update for ESP-IDF v4.0.
This is the list of changes since release v4.0:
Major New Features
- Wi-Fi: Added support for Protected Management Frames (PMF)
- Wi-Fi: Added SAE authentication support for WPA3 Personal
- New Python-based
menuconfig
tool - Networking: Added new esp_netif API to manage network interfaces, replaces tcpip_adapter which is now deprecated.
- Classic Bluetooth: Added support for Hands Free Profile (HFP) Audio Gateway (AG)
- DTLS support in libcoap using mbedTLS (#3977)
- Secure Boot V2 support (RSA based) added for ESP32 V3
- Preview support for ESP32-S2 Beta SoC. This support will be replaced with ESP32-S2 SoC support in ESP-IDF v4.2. ESP32-S2 Beta firmware is not compatible with the ESP32-S2 production SoC, and not all features are supported.
Major Bug Fixes
- Security fix: Fixed AP switch to adjacent channel without disconnect (CVE-2020-12638)
- Updated toolchain fixes for PSRAM issue in ESP32 revisions prior to V3
Breaking Changes
- As part of the fix for CVE-2020-12638, the event
WIFI_EVENT_STA_AUTHMODE_CHANGE
has been removed. STA will now disassociate (with reasonWIFI_REASON_AUTH_CHANGED
) and reassociate in this case.
Known Issues
- A new macro to call a function with a user-allocated stack has been added but is non-functional
- Using ADC in DMA mode does not work correctly
- Can not correctly config IPv6 segmentation and reassembly from menuconfig
- Nimble doesn't support non-resolvable private address
- Watchdog timeout when using an RSA 4096-bit key to connect to WPA2-Enterprise (EAP-TLS) AP.
- CAN driver doesn't work correctly if assertions are disabled in menuconfig
Bluetooth
Controller
- Added API to query the number of available buffers for the current connection
- Improved handling of calloc() failure
- Fixed HCI timeout issues when using multiple cores and sleep is enabled
- Fixed BLE crash issue triggered by BLE event interrupt missed
- Fixed bugs related to role switch
- Fall back to main XTAL as Bluetooth sleep clock source if the External 32kHz crystal is configured but not detected
- Fixed a division by zero error in BT sleep clock cycle calculation
- Fixed software assertion of invalid state when using HCI_Create_Connection_Cancel command
- Fixed LMP timeout issue when handling LMP_sniff_req
- Fixed the issue of repeatedly sending LMP_features_req_ext
Bluedroid
- Fixed bug with fixed_queue semaphore pointer dereference
- Fixed potential memcpy buffer overflow problem
- Fixed wrong complete Identity Address (Public Address) of the Privacy-enabled Bonded Device got after bonding
- Fixed the issue with pointer type conversion in gattc
- Added missing GATT descriptors 0x2909 (Number of Digitals) through 0x290E (Time Trigger Setting) (#4082, #4470)
- Fixed some spurious uninitialized variable warnings when optimization level set to Performance
NimBLE
- Updated to 1.2.0 upstream NimBLE release, plus some subsequent upstream bugfixes
- Added config option to enable host flow control
- Added host based privacy (RPA) feature support
- NimBLE stack buffers are now allocated dynamically instead of .bss. Added a config option to choose the allocation
- Added new project configuration options for host task stack size
- Added system level mbuf block count (MSYS_1) option in project configuration
- Fixed check for static random address in ble_hs_id_set_rnd()
- Increased maximum concurrent connections to 9 (controller supported)
- Reduced the size of the compiled binary (espressif/esp-nimble#6)
- Added upstream NULL pointer check (apache/mynewt-nimble#701)
- Fixed pairing procedure abort on unexpected pairing request (apache/mynewt-nimble#710)
- Fixed connection flags after pairing (apache/mynewt-nimble#730)
- Removed notification for update process timeout (Vol 6, Part B, section 5.2) (apache/mynewt-nimble#782)
- Fixed CCCD behavior in case of an overflow and while storing for bonded devices (apache/mynewt-nimble#790, apache/mynewt-nimble#804)
Classic Bluetooth
- GAP: Added new
esp_bt_gap_read_remote_name()
function to get remote device's Bluetooth name at any time - GAP: Fixed error on EIR type in Config EIR event
- HFP: Added Audio Gateway (AG) support
- HFP: Added AT+NREC=0 command for disabling AG echo cancellation (#3665)
- HFP: Fixed crash on incoming audio
- HFP: Fixed connection fail and crash when receiving unknown AT command
- HFP: Fixed AG audio crash (change the return position)
- A2DP: Fixed assertion for de-initializing A2DP while audio streaming is ongoing
- AVRC: Fixed AVRC metadata length error
Bluetooth Low Energy
- Fixed BLE throughput wasting memory
- Fixed the BLE throughput client crash when enable the CONFIG_GATTC_WRITE_THROUTHPUT option
- Fixed client no BLE_AUTH_CMPL_EVT when client proactively initiate an encryption request after device restart
- Fixed notify malloc failed when testing multi-connection notify performance
- Fixed btc disable crash sometimes
- Fixed don't dequeue the command queue after process the read_by_type_req
- Add BLE API to set channel classification
- Added support to enable Peripheral Preferred Parameters in GAP service
- Fixed data loss and send same pkt twice sometimes
- Fixed adv data error in air sometimes
- Fixed adv start/stop crash sometimes
- Fixed the wrong mask value according to HID protocol
- Fixed GATTC trigger open event multiple times
Blufi
- Fixed the wrong type from
BLUFI_TYPE_DATA_SUBTYPE_SOFTAP_MAX_CONN_NUM
toBLUFI_TYPE_DATA_SUBTYPE_SOFTAP_CHANNEL
- Fixed blufi prepare write buf len invalid
- Reply with an error response when the format of the received data packet is wrong
- Check if BLE is connected before sending a message via BLE
ESP-BLE-Mesh
- Miscellaneous modifications for Provisioner
- Support Provisioner persistent functionality
- Add a function to set Provisioner static oob value
- Add a function to set Provisioner unicast address
- Add a function to provision devices with fixed address
- Add a function to store node composition data
- Add a function to get node with device uuid
- Add a function to get node with unicast address
- Add a function to delete node with device uuid
- Add a function to delete node with unicast address
- Add a function for Provisioner to update local AppKey
- Add a function for Provisioner to update local NetKey
- Fix Provisioner entering IV Update procedure
- Fix Provisioner failed to publish messages
- Provisioner ignores msg from removed node
- Fixed Provisioner provisioning deadlock
- Checks if the AppKey exists before deleting it
- Updated next allocated address when node info is added
- Synchronized a few Zephyr BLE Mesh updates
- Support using a specific partition for BLE Mesh
- Add a function to de-initialize BLE Mesh stack
- Fixed use-after-free issue when de-initialize mesh
- Fixed not free beacon timer when de-initialize mesh
- Fixed de-initialize error when using NimBLE host
- Supports using SPIRAM for BLE Mesh dynamic memory, queue, etc.
- Fixed compile error when using performance optimization level
- Fixed compile error when including from C++ files
- Made RSSI value available to mesh applications
- Fixed reset transport info when node is removed
- Now allows sending maximum 377 octet payload
- Now uses lock for mesh timer operations
- Fix an issue which may cause client failing to send msg
- Added check of the result of creating mesh timer
- NULL can be used if client message has no parameters
- Unified client application and lower transport layer timeout
- Removed timeout for client message to non-unicast address
- Fixed timer start when sending client message
- Fixed client local parameters not initialized
- Calculates incomplete message timeout based on message info
- Added check of buf->ref before decrementing buffer ref count
- Sensor models related miscellaneous fixes
- Update the ESP BLE Mesh examples hierarchy
- Added BLE Mesh vendor models examples
- Added BLE Mesh sensor models examples
- Added BLE Mesh whitelist test functions
- Added option to send normal BLE advertising packets while connected to mesh
- Changed to continue node info restore even if failure happens
- Added check if assigned node address is duplicated
- Removed BLE_MESH_MAX_STORED_NODES option
- Associates replay protection list size with nodes count
- Fixed time scene wrong spelled macro name
- Add length check for some mesh operations
- Fix not erasing mesh node information completely
- Added a option to fix mesh node nvs information restore
- Now initializes mesh node device name during proxy server init
- Fix using old menuconfig options for mesh duplicate scan
Wi-Fi Coexistence
- Fixed A2DP disconnect when Wi-Fi switches channels
- Fixed A2DP stuck after creating...
ESP-IDF Release v3.2.4
Important
A high severity bug has been found in the Wi-Fi functionality of ESP-IDF v3.2.4. If the ESP32 is configured with fragmentation enabled and the fragmentation threshold is configured less than 1600 bytes, the ESP32 will immediately crash if a fragmented frame is received. The circumstances of fragmentation will depend on the AP configuration and the Wi-Fi mode(s) currently in use.
For this reason, we recommend not to update to ESP-IDF v3.2.4 if Wi-Fi will be used. The download link and documentation for this version have been removed. For users who have updated to ESP-IDF v3.2.4 already, it is recommended to immediately roll back to ESP-IDF v3.2.3 or update to pre-release ESP-IDF commit 688c623 where this issue is fixed.
This issue will be fixed in the upcoming ESP-IDF v3.2.5 release, and all users are encouraged to update once it is available.
Major Changes
- Websocket client component has been backported from ESP-IDF v3.3
- Bootloader SPI flash configuration was previously used for all apps. Now, the app SPI flash configuration is used to reconfigure the SPI flash settings when the app starts up.
Security Fixes
- cJSON: Updated to v1.7.12, fixes potential DoS issue in cJSON_Minify - see DaveGamble/cJSON#354
This is the list of changes since release v3.2.3:
Wi-Fi
- Fixed esp_wifi_stop() crash
- Fixed WiFi stop when sniffer enable
- Fixed esp_wifi_sta_get_ap_info() api to return correct value of group cipher
- Fixed WiFi receiving which is caused by WiFi reloading
- Fixed WiFi performance, such as BA parameter negotiation etc
- Fixed AMSDU decrypt
- Fixed the bugs for bandwidth
- Fixed some wifi timer bugs
- Fixed WiFi block scan crash issue
- Fixed association request RSN information length too big lead crash
- Fixed some espnow bugs
- Fixed the API_CHECK_ENABLED
- Fixed 5.5M signal test bug
- Placed the Vendor Specific element at the end according to the protocol
- Added softAP example channel configuration
- Fixed the timeout issue of EAPOL four-way handshake
- Fixed ESP32 can't get IP address from China Mobile router
- Fixed softAP updates second channel
- Fixed bug where WPA2-Enterprise STA incorrectly connects to an open AP
- Added separate performance configuration option to move some Wi-Fi RX code to IRAM (disable this to save approx 17KB of IRAM)
- Include DMA reserved pool when allocating internal-only memory
- Fixed Wi-Fi RX bug by adding support for Wi-Fi/BT MAC register writing when the Wi-Fi/BT common clock is disabled.
- WPS 2.0: Relax the check on older config methods. Allows WPS handshake to complete on some APs which incorrectly advertise newer WPS 2.0 config method bits without setting bits for the corresponding older methods.
- WPS: Fixed WPS config default initializer to work with C++ as well as C syntax
- WPS: Now allows NULL-padded WPS attributes
- WPS: Interoperability fixes
- Place the Vendor Specific element at the end of the frame according to the protocol
- Fixed AP switch to adjacent channel without disconnect
- Removed
WIFI_REASON_AUTH_CHANGED
event - Fixed TKIP/CCMP PN replay attack detection bug
- Increased buffer number type from uint8_t to uint16_t to support more than 255 buffers
- Fixed bug where a scan with more than 255 results can lead to a crash
- Avoid recalculating PMK if esp_wifi_set_config() is not called
- Fixed bug where calling esp_wifi_stop() can lead to task watchdog timeout
- Fixed SmartConfig IPC crash
- Fixed issue where sniffer may access flash when cache is disabled
- Reduced the total binary size when using Wi-Fi
- Fixed Sniffer caused by WiFi mode switching
- Added TX packet size check
- Added check for Wi-Fi stop when calling esp_wifi_deinit
- Scanning: Fixed Wi-Fi scan RSSI error
- Return failure when AP channel value is set out of range
- Fixed bug for setting channel when in NULL mode.
SmartConfig
- Fixed bug where ESP32 sends broadcasts to phone after SmartConfig is completed
- Fixed bug where Airkiss couldn't get IP of the cellphone
ESP-MESH (Wi-Fi Mesh)
- Fixed bug that receiving a mesh packet when stopping mesh will cause a crash
- Fixed two small bugs in cycle detection
- Fixed bug that root rssi not updated when receiving internal roots direct/forward events
- Fixed bug that association information in mesh ie is incorrect
- Increased the success rate to form single mesh network
- Improved the efficiency of mesh transmission
- Fixed the bug that esp_mesh_send returns unexpected ESP_ERR_MESH_TIMEOUT sometimes
Bluetooth
- Disabled BR/EDR GATT
- OSI: Added handling of OSI memory calloc failure
- Added Bluedroid host stack size config option
- Added support for setting a minimum encryption key length requirement
- HID: Fixed issue with security info restore when a paired BLE HID device disconnects and then reconnects after a BT Classic HID device has connected
- Consider link_xmit_data_q in congest events to prevent excessive memory usage
- Fixed incomplete data packets issue caused by out-of-order ACL data packets
- Fixed A2DP stuck when BLE advertisement interval is too short
Bluetooth Classic
- Fixed assertion failure if A2DP is deinitialized while playback is running
- HFP: Fixed HFP Client parsing of AT+CNUM
- HFP: Fixed HFP Client parsing of AT+CIEV items
- Choose AVRC category according to A2DP role
- Fixed AVRC metadata length error
Bluetooth Low Energy
- Added missing GATT descriptors
- Fixed bug with fixed_queue semaphore pointer dereference
- GATTC: Fixed open event triggering multiple times
- GATTC: Fixed issue with pointer type conversion
- Fixed prepare write buf len invalid error
- Fixed malloc failed when multi_connection notify performance test
- Fixed client have no auth event when client Proactively initiate encryption after reboot
- Fixed throughput wasting memory and packet loss issues.
- ble_throughput example: Fixed the throughput clinet crash bug when open the CONFIG_GATTC_WRITE_THROUTHPUT option
Controller
- Fixed bugs about role switch
- Fixed assertion failure when a create connection operation is cancelled
- Fixed issue that Bluetooth controller may not be able to enter sleep after end of wake up request
- Fixed LMP sniff req timeout behavior
Blufi
- Now checks if BLE is connected before sending a message via BLE
- Added memcpy overflow check when blufi received error format data packet and send error report to phone.
Wi-Fi Coexistence
- Fixed Bluetooth event scheduling when Wi-Fi is also enabled.
- Improved stability of WiFi performance with a little sacrifice of throughput
- Improved BLE advertising and connection performance with dynamic priority. It sacrifices a little WiFi throughput, but achieves balance between WiFi and Bluetooth.
LWIP
- IPV6: Allow DNS servers to be retrieved from NDS6 as an optimization
- Randomize the first local port number created after reset. (Configurable)
- Added support for IPv6 stateless address autoconfiguration
- Added a check in
sys_arch_protect()
that mutex is created before use, and allow creating on demand - Fixed DHCP client issue with some China Mobile routers
- TCP MSS: Increase default to 1440 but extend range to allow as small as 536
- Fixed rare crash of DHCP Server during WIFI AP network reconfiguration (#3466)
- Added LWIP header missing_C++ guards (#3681)
- Added hostname option to DHCP request on reboot (#3150)
- Fixed disable TCP_QUEUE OOSEQ compile fail (#3902)
- Fixed IP6 that input the wrong broadcast address to return OK
- Fixed TCP6 send ok when STA disconnect
- Fixed random UDP port
Core System
- Bootloader SPI flash configuration was previously used for all apps. Now, the app SPI flash configuration is used to reconfigure the SPI flash settings when the app starts up.
- Added
esp_idf_version.h
and related build system macros for version info - Fixed DPORT ECO workaround register operation to improve workaround reliability. (Details of workaround in ECO document item 3.10 "When each CPU reads certain different address spaces simultaneously, a read error can occur")
- Fixed esp_ptr_executable() result when running in single core configuration and pointer is to freed APP CPU cache memory
- Added an option to disable interrupts to be Level 5 for DPORT workaround
- Added support for building an image for ESP32-D0WD-V3 (revision 3) only, where PSRAM workaround is not needed
- Removed spurious semicolon in definition of xTaskNotifyGive()?
- Clear RF PHY peripheral status during early startup
- esp_timer: Fixed a race condition when a timer is deleted from a higher priority task while trying to run the timer callback
- 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 set_alarm function when timestamp < now
- esp_timer: Fixed overflow case when alarm_reg > counter_reg but FRC_TIMER_INT_STATUS is not set (#2954)
- heap: Removed unsafe printf() calls when heap poisoning was enabled
- heap: Ensure that malloc(0) returns NULL in any poisoning configuration
Bootloader
- Don't check factory reset triggers when waking from deep sleep (#3800)
- Fixed bug where b...
ESP-IDF Pre-release v4.1-beta2
Documentation for pre-release v4.1-beta2 is available at https://docs.espressif.com/projects/esp-idf/en/v4.1-beta2/
ESP-IDF v4.1 is a minor update for ESP-IDF v4.0.
This is the list of changes since release v4.0:
Major New Features
- Preview support for ESP32-S2 Beta SoC. This support will be replaced with ESP32-S2 SoC support in ESP-IDF v4.2. ESP32-S2 Beta firmware is not compatible with the ESP32-S2 production SoC, and not all features are supported.
- New Python-based
menuconfig
tool - Networking: Added new esp_netif API to manage network interfaces, replaces tcpip_adapter which is now deprecated.
- Classic Bluetooth: Added support for Hands Free Profile (HFP) Audio Gateway (AG)
- DTLS support in libcoap using mbedTLS (#3977)
- Secure Boot V2 support (RSA based) added for ESP32 V3
Known Issues
- A new macro to call a function with a user-allocated stack has been added but is non-functional
Bluetooth
Controller
- Improved handling of calloc() failure
- Fixed HCI timeout issues when using multiple cores and sleep is enabled
- Fixed BLE crash issue triggered by BLE event interrupt missed
- Fixed bugs related to role switch
- Fall back to main XTAL as Bluetooth sleep clock source if the External 32kHz crystal is configured but not detected
- Fixed a division by zero error in BT sleep clock cycle calculation
- Fixed software assertion of invalid state when using HCI_Create_Connection_Cancel command
Bluedroid
- Fixed bug with fixed_queue semaphore pointer dereference
- Fixed potential memcpy buffer overflow problem
- Fixed wrong complete Identity Address (Public Address) of the Privacy-enabled Bonded Device got after bonding
- Fixed the issue with pointer type conversion in gattc
- Added missing GATT descriptors 0x2909 (Number of Digitals) through 0x290E (Time Trigger Setting) (#4082, #4470)
- Fixed some spurious uninitialized variable warnings when optimization level set to Performance
NimBLE
- Updated to latest 1.2.0 upstream NimBLE release
- Added host based privacy (RPA) feature support
- Added config option to enable host flow control
- NimBLE stack buffers are now allocated dynamically instead of .bss. Added a config option to choose the allocation
- Added new project configuration options for host task stack size
- Added system level mbuf block count (MSYS_1) option in project configuration
- Fixed check for static random address in ble_hs_id_set_rnd()
- Increased maximum concurrent connections to 9 (controller supported)
- Reduced the size of the compiled binary (espressif/esp-nimble#6)
- Added upstream NULL pointer check (apache/mynewt-nimble#701)
- Fixed pairing procedure abort on unexpected pairing request (apache/mynewt-nimble#710)
- Fixed connection flags after pairing (apache/mynewt-nimble#730)
- Removed notification for update process timeout (Vol 6, Part B, section 5.2) (apache/mynewt-nimble#782)
- Fixed CCCD behavior in case of an overflow and while storing for bonded devices (apache/mynewt-nimble#790, apache/mynewt-nimble#804)
Classic Bluetooth
- Added new
esp_bt_gap_read_remote_name()
function to get remote device's Bluetooth name at any time - Fixed error on EIR type in Config EIR event
- Added support to enable Peripheral Preferred Parameters in GAP service
- HFP: Added Audio Gateway (AG) support
- HFP: Added AT+NREC=0 command for disabling AG echo cancellation (#3665)
- HFP: Fixed crash on incoming audio
- HFP: Fixed connection fail and crash when receiving unknown AT command
- HFP: Fixed AG audio crash (change the return position)
Bluetooth Low Energy
- Fixed BLE throughput wasting memory
- Fixed the BLE throughput client crash when enable the CONFIG_GATTC_WRITE_THROUTHPUT option
- Fixed client no BLE_AUTH_CMPL_EVT when client proactively initiate an encryption request after device restart
- Fixed notify malloc failed when testing multi-connection notify performance
- Fixed btc disable crash sometimes
- Fixed don't dequeue the command queue after process the read_by_type_req
- Added BLE API to set channel classification
Blufi
- Fixed the wrong type from
BLUFI_TYPE_DATA_SUBTYPE_SOFTAP_MAX_CONN_NUM
toBLUFI_TYPE_DATA_SUBTYPE_SOFTAP_CHANNEL
ESP-BLE-Mesh
- Synchronized Zephyr v1.14.0 & v2.0 BLE Mesh updates
- Several newly added features, including:
- Add separate advertising buffers for relay packets
- Add heartbeat message receive callback
- Add Low Power node APIs and events
- Add Friend node events
- Add BLE Mesh Proxy client functionality
- Add BLE Mesh Generic/Sensor/Time and Scenes/Lighting server models
- Add application events of Configuration server model
- Update Health server Model callbacks
- Update examples based on newly added server models
- Fixed getting wrong timer remaining time
- Checked mesh queue and task init status
- Fixed client model invalid address access
- Fixed not restoring mesh node cfg value
- Fixed wrong device name in mesh proxy adv
- Fixed mesh device with wrong name on iOS
- Checked client model timer remaining time
- Fixed memory leak when node is reset
- Fixed adv buf unref issue and wrong link_id in exceptional list
- Update lightness last state when actual state is changed
- Fixed compile error when using release optimization level
- Removed some useless CONFIG_BLE_MESH_NODE
- Fixed Provisioner failed to send msg to 0xFFFF
- Made RSSI value available to mesh applications
- Fixed compile errors when including from C++ files
- Fixed reset transport info when node is removed
- Now allows sending maximum 377 octet payload
- Unified client application and lower transport layer timeout
- Removed timeout for client message to non-unicast address
- Fixed timer start when sending client message
- Calculates incomplete message timeout based on message info
- Moved dev_role to the end of model_pub
- Added check of buf->ref before decrementing buffer ref count
- Fixed use-after-free issue when deinit mesh
- Added BLE mesh deinit in btc task
- Fixed not free beacon timer when deinit mesh
- Now uses lock for mesh timer operations
- Fixed deinit error when using NimBLE host
- Renamed
ble_mesh_vendor_models
tocommon_vendor_models
in examples - Added test function for an unprovisioned device to enter the mesh automatically
- Added option to send normal BLE advertising packets while connected to mesh
- Fixed client local parameters not initialized
- Changed to continue node info restore even if failure happens
- Removed some redundant functions
- Now notifies unprovisioned device beacon to application layer
- Added check if assigned node address is duplicated
- Updated next alloc address when node info is added
- Fixed Provisioner provisioning deadlock
- Removed BLE_MESH_MAX_STORED_NODES option
- Associates replay protection list size with nodes count
- Fixed time scene wrong spelled macro name
Wi-Fi Coexistence
- Fixed A2DP disconnect when Wi-Fi switches channels
- Fixed A2DP stuck after creating another connection
- Improve Wi-Fi TX & RX performance
- Fixed wakeup delay when DFS is enabled
- New API
esp_coex_ble_conn_dynamic_prio_enable()
allows configuring BLE/W-Fi relative priority in coexistence - Optimize WiFi/BT coexist sleep
- Adjust coexist scheme when BT is in connected status
Wi-Fi
- Added PMK caching feature for WPA2 Enterprise stations
- Added support for Protected Management Frames (PMF)
- Added SAE authentication support for WPA3 Personal
- Wi-Fi now uses new esp_event library added in ESP-IDF v4.0
- Fixed wpa_supplicant EAP re-authentication issue
- Fixed wpa_supplicant assoc_ie_len setting based on generated RSN/WPA IE
- Fixed EAPOL key used during reauthentication
- Fixed wpa_supplicant memory leak on Wi-Fi stop
- Added wpa_supplicant parsing support for WEP40 key
- Disabled wpa_supplicant TLS 1.2 support by default due to issues with some Enterprise Authentication Servers. This option can be enabled in menuconfig.
- Fixed bug for setting channel when in NULL mode.
- Added check for Wi-Fi stop when calling esp_wifi_deinit
- Now places the Vendor Specific element at the end according to the protocol
- Fixed crash during WEP shared auth
- Fixed WiFi buffer reload that WiFi receiving no longer works because internal buffer reloading fails
- Fixed WiFi receiving that WiFi receiving no longer works because it writes the MAC registers when WiFi/BT common clock is disabled
- Fixed WiFi performance, including AMPDU parameter negotiations, WiFi TX optimization etc
- Fixed AMSDU decrypt that ESP32 can't decrypt the AMSDU if it's encrypted
- Reduced Wi-Fi compiled binary size
- Added TX packet length checking, Wi-Fi driver will drop a packet which is too long
- Improved RSSI scan ac...
ESP-IDF Release v4.0.1
Documentation for release v4.0.1 is available at https://docs.espressif.com/projects/esp-idf/en/v4.0.1/
ESP-IDF v4.0.1 is a bugfix update for ESP-IDF v4.0. v4.0.1 is the latest stable release of ESP-IDF at time of writing.
ESP-IDF v4.0.x will be supported until October 2021, according to the ESP-IDF Support Policy. The current Long Term Support release is v3.3.2, v3.3.x will be supported until March 2022.
Major Changes
- Wi-Fi: Support for PMF and WPA3-Personal has been added. WPA3 will become mandatory for new Wi-Fi certifications starting in June 2020
Known Issues:
- If configuration option mbedtls: Enable hardware MPI (bignum) acceleration is disabled and wpa_supplicant: Use mbedtls crypto is enabled, the project will fail to build. Changing either configuration item will work around this problem. The default is for both options to be enabled. (#5321)
Known issues will be fixed in the next ESP-IDF bugfix release.
This is the list of changes since release v4.0:
Wi-Fi
- Fixed the vendor specific IE is not at the end of beacon
- Fixed the station can't get the IP address from China Mobile router
- Fixed beacon timeout and station fails to connect to AP sometimes when WiFi and Bluetooth run together
- Fixed an issue parsing the
WPS_CONFIG_INIT_DEFAULT()
initializer macro in C++ - Throughput improvements
- Fixed Wi-Fi receive failure due to internal buffer reload failure
- Fixed AMSDU decrypt that ESP32 can't decrypt the AMSDU if it's encrypted
- Fixed some Wi-Fi timer issues
- Fix crash caused by too big of association request RSN information
- Fixed crash caused by block scan
- Fixed bug for getting channel and bandwidth
- Fixed sniffer during Wi-Fi mode switching
- Added additional documentation about limitations of using
esp_wifi_set_channel()
(#4311) - Now places the Vendor Specific element at the end according to the protocol
- Reduced Wi-Fi compiled binary size
- Added TX packet length checking, Wi-Fi driver will drop a packet which is too long
- Improved RSSI scan accuracy
- Added check for Wi-Fi stop when calling esp_wifi_deinit
- Now returns an error if the setting AP's channel is out of range
- Fixed bug for setting channel when in NULL mode.
- Fixed Wi-Fi log print level
- Fixed
esp_wifi_stop()
crash if Wi-Fi not initialized - Fixed possible
esp_wifi_stop()
memory leak esp_wifi_sta_get_ap_info()
now returns actual values of group ciphers- wpa_supplicant: Fixed some TLS 1.2 issues
- Added support for WPA2-enterprise re-authentication
- wpa_supplicant: Added support for PMK caching
ESP-NOW
- Fixed bug when modifying the channel info of peer node
- Fixed crash when modifying peer node between unencrypted and encrypted
- Fixed bug when fetching peer
- Fixed the bug that the channel parameter doesn't work when adding peer node
- Updated documentation about format of ESP-NOW Wi-Fi frame (#2833)
SmartConfig
- Fixed an AirKiss bug with IP address length
ESP-MESH (Wi-Fi Mesh)
- Cleared ie.child field when fully associated or the ie.child was connected
- Fixed
esp_mesh_send
returns unexpectedESP_ERR_MESH_TIMEOUT
- Fixed a lock error in
esp_mesh_deinit
- Fixed incorrect ie.assoc field
- Increased roots_window_close_time from 60 seconds to 120 seconds
- Modified mesh packets to use AC_VI instead of AC_BE
- Fixed ie.rc_rssi field is not updated when receiving internal roots direct/forward events
Bluetooth
- OSI: Added length check for snprintf in osi config
Bluetooth Classic
Controller
- Fixed Bluetooth event scheduling when Wi-Fi is also enabled.
- Fixed A2DP stuck issue when BLE interval is too small, new auto latency configuration controls priority.
- Fixed the incorrect timing of FHS and POLL packet during role switch
- Fixed that EDR packets are not accepted after role switch.
- Fall back to main XTAL as Bluetooth sleep clock source if the External 32 kHz crystal is configured but not detected
- Fixed a division by zero error in BT sleep clock cycle calculation
- Fixed assertion failure when a create connection operation is cancelled
Bluedroid
- Fixed HFP/A2DP coex bug with iPhone and disabled initiating sniff request when HFP is in use
- Fixed error EIR type in config EIR event
- Fixed Audio Gateway crash
- Changed or removed unnecessary logs in SCO code
Bluetooth Low Energy
Controller
- Fixed send ACL pkt after BLE has sent terminate ind
Bluedroid
- Fixed GATTC triggering open event multiple times
- Fixed the issue with pointer type conversion in gattc
- Fixed security info restore bug
- Modified minimum advertising interval to 10ms
- Added handling of osi memory calloc failure
- Fixed BLE throughput wasting memory
- Fixed the BLE throughput client crash when enable the CONFIG_GATTC_WRITE_THROUTHPUT option
- Fixed client no BLE_AUTH_CMPL_EVT when client proactively initiate an encryption request after device restart
- Fixed notify malloc failed when testing multi-connection notify performance
- Fixed btc disable crash sometimes
NimBLE
- Added config option to enable host flow control
- Added host based privacy (RPA) feature support
- Added ble_hs_lock in ble_gap_unpair (from upstream PR)
- Fixed ble_hs_hci_rx_evt (from upstream PR)
- NimBLE stack buffers are now allocated dynamically instead of .bss. Added a config option to choose the allocation strategy
- Fixed check for static random address
- Reset master and slave states on host reset
ESP-BLE-Mesh
- Added Zephyr v2.0 BLE Mesh fixes, including:
- Fixed Previous Address endianess in Friend Request
- Fixed next_period computation
- Made model publication struct more compact
- Fixed Provisioner not supporting friend feature
- Fixed wrong subnet info used for Friend Clear
- Fixed virtual addr wrong return value
- Made persistent storage of Virtual Address
- Now proxies forwards to ALL_NODES addr
- Added model message macros
- Added use of net_buf_simple_clone
- Now skips local messages in rx
- Added checks for seqnum match in app/net
- Exposed app key get function
- Exposed header parsing outside net
- Removed unused macro FRIEND_BUF_SIZE
- Fixed encrypting friend packets on send
- Update lightness last state when actual state is changed
- Fixed compile error when using release optimization level
- Removed some useless CONFIG_BLE_MESH_NODE
- Fixed Provisioner failed to send msg to 0xFFFF
- Made RSSI value available to mesh applications
- Fixed memory leak when node is reset
- Fixed compile errors when including from C++ files
- Fixed reset transport info when node is removed
- Now allows sending maximum 377 octet payload
- Unified client applicaton and lower transport layer timeout
- Removed timeout for client message to non-unicast address
- Fixed timer start when sending client message
- Calculates incomplete message timeout based on message info
- Moved dev_role to the end of model_pub
- Fixed use of right netkey during iv update
- Fixed use of right net_idx & app_idx for publish
- Added check of buf->ref before decrementing buffer ref count
- Fixed use-after-free issue when deinit mesh
- Added BLE mesh deinit in btc task
- Now frees beacon timer when deinit mesh
- Now uses lock for mesh timer operations
- Fixed deinit error when using NimBLE host
- Renamed
ble_mesh_vendor_models
tocommon_vendor_models
in examples - Added test function for an unprovisioned device to enter the mesh automatically
- Added option to send normal BLE advertising packets while connected to mesh
- Fixed client local parameters not initialized
- Changed to continue node info restore even if failure happens
- Removed some redundant functions
- Now notifies unprovisioned device beacon to application layer
- Added check if assigned node address is duplicated
- Updated next alloc address when node info is added
- Fixed Provisioner provisioning deadlock
- Removed BLE_MESH_MAX_STORED_NODES option
- Associates replay protection list size with nodes count
Blufi
- Fixed invalid prepare write buffer value
Wi-Fi Coexistence
- Fixed A2DP stuck after creating another connection
- Improved Wi-Fi throughput in some Classic BT coexistence scenarios (idle, inquire scan, connected, sniff, a2dp pause, etc)
- Supports coexistence with Wi-Fi + Classic BT + BLE mesh concurrently enabled
- Improved Wi-Fi scan and connection success ratio when coexistence enabled
- Improved throughput in some circumstances when coexistence enabled
- Fixed incorrect wakeup delay when DFS is enabled
Ethernet
- Fixed Ethernet interrupt crash when cache is disabled.New flag
ETH_MAC_FLAG_WORK_WITH_CACHE_DISABLE
introduced to support Ethernet MAC continuing to operate while cache is disabled. - Ensure that eth_driver handle is allocated in i...
ESP-IDF Release v3.1.7
Documentation for release v3.1.7 is available at https://docs.espressif.com/projects/esp-idf/en/v3.1.7/
ESP-IDF v3.1.7 is a bugfix update for ESP-IDF v3.1. ESP-IDF v4.0 is the latest stable release of ESP-IDF at time of writing.
ESP-IDF v3.1.x will be supported until October 2020, according to the ESP-IDF Support Policy. The current Long Term Support release is v3.3.2, v3.3.x will be supported until March 2022.
This is the list of changes since release v3.1.6:
Wi-Fi
- Fixed WiFi stop leads to memory leak
- Improved WiFi performance
- Added option to move Wi-Fi RX code to IRAM, improves receive performance but increases IRAM usage.
- Fixed the bug that WPA2 enterprise STA can connect to open AP
- Improved power usage in SoftAP mode
- Moved some critical values to IRAM
- Fixed bug for API_CHECK_ENABLED
- Fixed TKIP/CCMP PN replay attack detection bug
- Increased buffer number type from uint8_t to uint16_t to support more than 255 buffers
- Disabled recalculating PMK if esp_wifi_set_config() is not called
- Fixed the bug that calling esp_wifi_stop() can lead to task watchdog timeout
- Fixed esp_wifi_stop() crash if Wi-Fi not initialized
- Fixed 5.5M signal test bug
- WPS 2.0: Relax the check on older config methods. Allows WPS handshake to complete on some APs which incorrect advertise newer WPS 2.0 config method bits without setting bits for the corresponding older methods.
- Fixed wifi block scan crash issue.
- Fixed crash due to association request RSN information too long
- Fixed wifi stop bug when sniffer enabled
- Fixed some wifi timer bugs
- Fixed AMSDU decrypt that ESP32 can't decrypt the AMSDU if it's encrypted
- Added additional documentation about limitations of using
esp_wifi_set_channel()
(#4311) - Fixed an issue parsing the
WPS_CONFIG_INIT_DEFAULT()
initializer macro in C++ - Fixed Wi-Fi receive failure due to internal buffer reload failure
- Now places the Vendor Specific element at the end according to the protocol
- Added TX packet length checking, Wi-Fi driver will drop a packet which is too long
- Improved RSSI scan accuracy
- Added check for Wi-Fi stop when calling esp_wifi_deinit
- Now returns an error if the setting AP's channel is out of range
- Fixed bug for setting channel when in NULL mode.
- Fixed Wi-Fi log print level
- Now returns an error if the setting AP's channel is out of range
esp_wifi_sta_get_ap_info()
now returns actual values of group ciphers
SmartConfig
- Fixed bug that ESP32 sends broadcast to phone after smartconfig is done
- Fixed IPC crash
- Fixed bug where Airkiss can't get the IP of the cellphone
Bluetooth
- Added support for setting a minimum encryption key length requirement
- Fixed pointer dereference in fixed_queue implementation
- Fixed security info restore bug
- Fixed the issue with pointer type conversion in gattc
- Added handling of osi memory calloc failure
Bluetooth Classic
- Disabled GATT over BR/EDR
- A2DP: Fixed connection failure with some speakers
- A2DP: Fixed calling esp_a2d_media_ctrl(ESP_A2D_MEDIA_CTRL_SUSPEND) not receiving an ACK from callback on A2DP sink
- A2DP: Fixed assertion failure if deinitializing A2DP while playing music
- AVRCP: Fixed AVRC metadata length error
- AVRCP: Now selects AVRCP category according to A2DP role
Bluetooth Low Energy
- Fixed bug where BT/BLE interrupts were not enabled after controller disable
- Fixed bug where GATTC open could trigger multiple events
- Fixed crash with multiple stop advertising events
- Added some missing GATT descriptors
- Fixed BLE throughput wasting memory
- Fixed the BLE throughput client crash when enable the CONFIG_GATTC_WRITE_THROUTHPUT option
- GATTS: Fixed failure to dequeue command queue after processing read_by_type_req
- Fixed the wrong mask value according to HID protocol in ble_hid_device_demo example
- Add handling of osi memory calloc failure
- Add length check for snprintf in osi config
- Fixed client no BLE_AUTH_CMPL_EVT when client proactively initiate an encryption request after device restart
- Fixed notify malloc failed when testing multi-connection notify performance
- Fixed btc disable crash sometimes
Controller
- Fixed sending Lmp_feature_req_ext in a loop
- Fixed ISR bugs
- Fixed memory leak when setting TX power
- Fixed data loss and sending of same packet twice sometimes
- Fixed occasional advertising data error in transmitted packet
- Fixed advertising start/stop crash sometimes
- Fixed controller could sleep twice after wake up request
- Fixed assertion failure when a create connection operation is cancelled
- Fixed the incorrect timing of FHS and POLL packet during role switch
- Fixed that EDR packets are not accepted after role switch
- Fixed A2DP stuck issue when BLE interval is too small, new auto latency configuration controls priority.
- Fixed LMP_sniff_req timeout
- Fixed that Bluetooth controller may not be able to enter sleep after end of wake up request
Blufi
- Fixed invalid prepare write buffer value
- Check if BLE is connected before sending a message
RF PHY
- Fixed critical section for some RF PHY operations when operating in dual core mode
LWIP
- Added IPV6 stateless address autoconfiguration support
- Now drops packets larger than MTU, but outgoing IP fragmentation is now enabled by default
- IPV6/MLD6: Return an error on attempt to join a non-multicast address
Core System
- Fixed DPORT ECO workaround register operation to improve workaround reliability. (Details of workaround in ECO document item 3.10 "When each CPU reads certain different address spaces simultaneously, a read error can occur")
- Added support for ESP32 V3 silicon revision.
- Now updates flash & PSRAM configuration during app startup, to support older bootloaders which may not make the same configuration
- Fixed
esp_ptr_executable()
result for single core ESP32 cache memory - heap: Fixed usage of printf() inside some critical sections if heap poisoning errors were detected
- heap: Ensure
malloc(0)
returns a NULL pointer regardless of heap poisoning configuration - FreeRTOS: Removed extra semicolon in xTaskNotifyGive macro definition
- Core peripherals: Fixed bug where peripheral state was not always reset before enabling
- esp_timer: Fixed crash when timer is deleted by a higher priority task during a timer callback
- esp_timer: Fixed case when alarm_reg > counter_reg but
FRC_TIMER_INT_STATUS
is not set (#2954) - vfs: Fixed memory leak upon failure of esp_vfs_fat_sdmmc_mount() (#4165)
- vfs: Fixed bug if a driver is installed while select() is being called
- startup: Clear RF PHY peripheral status during early startup
- newlib: don't define non-thread-safe versions of getc, putc
- Fixed issue detecting the size of some PSRAM chips
- RTC WDT: Fixed incorrect setting of feed bit during rtc_wdt_enable/rtc_wdt_disable
Power Management
- Now prevents interrupt nesting during esp_pm_impl_isr_hook (#3057)
Bootloader
- Fixed testing for factory reset on wake from deep sleep (#3800)
Peripheral Drivers
- I2S and Timergroup: Fixed ISR crash when flash cache disabled (#4545)
- I2S: Fixed issue with internal ADC mode, data was inverted (#4557)
mbedTLS
- Fixed hardware accelerated big number multiplication (MPI/RSA) if operand and result overlap in memory
mDNS
- Fixed crash on query if hostname was used as instance name (#4224)
Build System
- Replace kconfiglib with a vendored copy inside ESP-IDF
- Hide the config items for Secure Boot and Flash Encryption if CMake build system is used, support for these features with CMake is not added in this version.
- CMake: Fixed build failure if project git repo is initialized but no first commit
Host Tools
- esptool.py: Update to v2.8
- idf_monitor: Allow exiting with Ctrl-T Ctrl-X (#4167)
Examples
- blufi: Check if ble is connected before sending a ble message
- espnow: Fixed bug calling esp_wifi_set_channel(), this function only can be called after Wi-Fi started and sniffer enabled.
Documentation
- Update Debian and Ubuntu install prerequisites
- Update documentation about "test" partition type
Obtaining v3.1.7
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.1.7 --recursive https://github.com/espressif/esp-idf.git esp-idf-v3.1.7
cd esp-idf-v3.1.7/
This is the recommended way of obtaining v3.1.7 of ESP-IDF.
Download an archive with submodules included
Attached to this release is an esp-idf-v3.1.7.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 issue...
ESP-IDF Release v3.3.2
Documentation for release v3.3.2 is available at https://docs.espressif.com/projects/esp-idf/en/v3.3.2/
ESP-IDF v3.3.2 is a bugfix update for ESP-IDF v3.3. The latest stable release of ESP-IDF at time of writing is ESP-IDF v4.0.
ESP-IDF v3.3.x is a Long Term Support release and will be supported until March 2022.
Known Issues:
- Bluedroid BLE could behave abnormally when the transmit queue is full and sending very large packets. If your application needs to send very large packets, please use the same approach as the ble_throughput example (specifically, call
esp_ble_get_sendable_packets_num
to do flow control in application).
This is the list of changes since release v3.3.1:
New Features
Changes not compatible with earlier versions
(These changes are not breaking changes, but a project that is updated and then downgraded to the earlier version should take notice.)
- Wi-Fi/BT Coexistence: Removed support to choose software coexistence preference manually in the project configuration, as it is now determined automatically by the coexistence scenario. If a project is updated to v3.3.2 and then downgraded to an earlier version, the removed configuration item
SW_COEXIST_PREFERENCE
will restore to the default setting ("Balanced").
Wi-Fi
- Fixed WiFi AMSDU decrypt
- Fixed Sniffer caused by WiFi mode switching
- Fixed crash caused by block scan
- Fixed crash caused by too big association request RSN information length
- Fixed wifi stop when sniffer enable
- Fixed wifi timer that leads to rare crash
- Fixed the bugs for bandwidth
- Added TX packet size check.
- Added separate performance configuration option to move some Wi-Fi RX code to IRAM (disable this to save approx 17KB of IRAM)
- Added check for Wi-Fi stop when calling esp_wifi_deinit
- Fixed Wi-Fi RX bug by adding support for Wi-Fi/BT MAC register writing when the Wi-Fi/BT common clock is disabled.
- Fixed bug for setting channel when in NULL mode.
- Improved Wi-Fi performance
- Include DMA reserved pool when allocating internal-only memory
- Now places the Vendor Specific element at the end according to the protocol
- Reduced the total binary size when using Wi-Fi.
- Scanning: Fixed Wi-Fi scan RSSI error
- WPS 2.0: Relax the check on older config methods. Allows WPS handshake to complete on some APs which incorrect advertise newer WPS 2.0 config method bits without setting bits for the corresponding older methods.
- WPS: Fixed WPS config default initializer to work with C++ as well as C syntax
SmartConfig
- Fixed bug where Airkiss couldn't get IP of the cellphone
ESP-MESH (Wi-Fi Mesh)
- Cleared ie.child field when fully associated or the ie.child was connected
- Fixed
esp_mesh_send
returns unexpectedESP_ERR_MESH_TIMEOUT
- Fixed a lock error in
esp_mesh_deinit
- Fixed incorrect ie.assoc field
- Increased roots_window_close_time from 60 seconds to 120 seconds
- Modified mesh packets to use AC_VI instead of AC_BE
- Fixed ie.rc_rssi field is not updated when receiving internal roots direct/forward events
Bluetooth
- ACL: Changed the white_list_full message log level from debug to warning
- Fixed initializer order for BT_CONTROLLER_INIT_CONFIG_DEFAULT when used from C++
- Fixed issue that Bluetooth controller may not be able to enter sleep after end of wake up request
- Include DMA reserved pool when allocating internal-only memory
- OSI: Added handling of OSI memory calloc failure
- OSI: Added length check for snprintf in osi config
- bluedroid: Fix bug with fixed_queue semaphore pointer dereference
- bluedroid: Fixed potential memcpy buffer overflow problem
ESP-BLE-Mesh (SIG Full-Feature Certified)
Guide to the new BLE Mesh support
- All SIG BLE Mesh Core Features
- PB-ADV and PB-GATT
- Provisioner and Node roles
- Friend and Low Power Node
- Proxy Server & Client
- Configuration Server & Client Models
- Health Server & Client Models
- Relay, Segmentation and Reassembly, Key Refresh, IV Update, etc
- All SIG BLE Mesh Client Models
- Generic Client Models
- Sensor Client Models
- Time and Scenes Client Models
- Lighting Client Models
- All SIG BLE Mesh Server Models
- Generic Server Models
- Sensor Server Models
- Time and Scenes Server Models
- Lighting Server Models
- BLE Mesh and Wi-Fi Coexistence
- Support both Bluedroid Host and NimBLE Host
- Includes tutorials and technical documents
- Performance Optimizations (Fast Provisioning Solution demo video, 100 nodes provisioned within 50s)
Bluetooth Classic
Controller
- Fixed LMP sniff req timeout behavior
- Fixed bugs about role switch
Bluedroid
- HFP: Fixed HFP Client parsing of AT+CNUM
- HFP: Fixed HFP Client parsing of AT+CIEV items
- HFP: Disable sniff mode during (e)SCO connection for HFP
- Choose AVRC category according to A2DP role
- Fixed AVRC metadata length error
- Fixed A2DP stuck when BLE advertisement interval is too short
Bluetooth Low Energy
- Passed the SIG Bluetooth LE 5.0 Certification
- Passed more test cases compared to ESP32 previous certification
- Due to hardware limitations, ESP32 does not support Bluetooth LE 5.0 new features like 2M PHY, LE Long Range, and ADV Extensions
Bluedroid
- Added missing GATT descriptors
- Fixed not getting complete Identity Address (Public Address) of the Privacy-enabled Bonded Device after bonding
- GATTC: Fixed open event triggering multiple times
- GATTC: Fixed issue with pointer type conversion
- HID: Fixed issue with security info restore when a paired BLE HID device disconnects and then reconnects after a BT Classic HID device has connected
NimBLE
- Corrected the connection handle in update and enc_change event in NimBLE examples
- Added project configuration options for NimBLE host flow control
- Added project configuration options to choose memory allocation strategy (dynamic vs static)
- Added system level mbuf block count (MSYS_1) option in project configuration
- Added host based privacy (RPA) feature support
- Bugfix: Added ble_hs_lock() in ble_gap_unpair()
- Bugfix: Fixed check for static random address in ble_hs_id_set_rnd()
Blufi
- Fixed the wrong type from BLUFI_TYPE_DATA_SUBTYPE_SOFTAP_MAX_CONN_NUM to BLUFI_TYPE_DATA_SUBTYPE_SOFTAP_CHANNEL
- Fixed invalid prepare write buffer length
- Fixed incorrect Wi-Fi storage mode from WIFI_STORAGE_RAM to default WIFI_STORAGE_FLASH
- Now checks if BLE is connected before sending a message via BLE
Coexistence
- Removed support to choose software coexistence preference manually in the project configuration, as it is now determined automatically by the coexistence scenario
- Improved Wi-Fi throughput in some Classic BT coexistence scenarios (idle, inquire scan, connected, sniff, a2dp pause, etc)
- Supports coexistence with Wi-Fi + Classic BT + BLE mesh concurrently enabled
- Improved Wi-Fi scan and connection success ratio when coexistence enabled
- Fixed issue where A2DP stuck after creating another connection
- Fixed Bluetooth event scheduling when Wi-Fi is also enabled.
- Improved coexistence performance according to specific Wi-Fi/BT/BLE scenarios
LWIP
- Added option to support sending ethernet packets with VLAN header
- Added missing C++ header guards
- Added hostname option when sending DHCP request on reboot
- Added support for IPv6 stateless address autoconfiguration
- Fixed rare crash of DHCP Server during Wi-Fi AP network reconfiguration and DHCP restart due to missed callback
- IPV6: Allow DNS servers to be retrieved from NDS6 as an optimization
- Now drops packets larger than MTU, but outgoing IP fragmentation is now enabled by default
- Randomize the first local port number created after reset. (Configurable)
- Support
sntp_init
running before network initialization, by adding a check to mutex sys_arch_protect #944 #3931
Core System
- Fixed DPORT ECO workaround register operation to improve workaround reliability. (Details of workaround in ECO document item 3.10 "When each CPU reads certain different address spaces simultaneously, a read error can occur")
- Fixed esp_ptr_executable() result when running in single core configuration and pointer is to freed APP CPU cache memory
- Clear RF PHY peripheral status during early startup
- esp_timer: Fixed overflow case when alarm_reg > counter_reg but FRC_T...
ESP-IDF Pre-release v4.1-beta1
Documentation for pre-release v4.1-beta1 is available at https://docs.espressif.com/projects/esp-idf/en/v4.1-beta1/
ESP-IDF v4.1 is a minor update for ESP-IDF v4.0.
This is the list of changes since release v4.0:
Major New Features
- Preview support for ESP32-S2 Beta SoC. This support will be replaced with ESP32-S2 SoC support in ESP-IDF v4.2. ESP32-S2 Beta firmware is not compatible with the ESP32-S2 production SoC.
- New Python-based
menuconfig
tool - Networking: Added new esp_netif API to manage network interfaces, replaces tcpip_adapter which is now deprecated.
- Classic Bluetooth: Added support for Hands Free Profile (HFP) Audio Gateway (AG)
- DTLS support in libcoap using mbedTLS (#3977)
Bluetooth
Controller
- Improved handling of calloc() failure
- Fixed HCI timeout issues when using multiple cores and sleep is enabled
- Fixed BLE crash issue triggered by BLE event interrupt missed
- Fixed bugs related to role switch
- Fall back to main XTAL as Bluetooth sleep clock source if the External 32kHz crystal is configured but not detected
- Fixed a division by zero error in BT sleep clock cycle calculation
- Fixed software assertion of invalid state when using HCI_Create_Connection_Cancel command
Bluedroid
- Fixed bug with fixed_queue semaphore pointer dereference
- Fixed potential memcpy buffer overflow problem
- Fixed wrong complete Identity Address (Public Address) of the Privacy-enabled Bonded Device got after bonding
- Fixed the issue with pointer type conversion in gattc
- Added missing GATT descriptors 0x2909 (Number of Digitals) through 0x290E (Time Trigger Setting) (#4082, #4470)
NimBLE
- Updated to latest 1.2.0 upstream NimBLE release
- Added config option to enable host flow control
- Added support to use dynamic buffers instead of static memory
- Added new project configuration options for host task stack size
- Added system level mbuf block count (MSYS_1) option in project configuration
- Fixed check for static random address in ble_hs_id_set_rnd()
- Increased maximum concurrent connections to 9
Classic Bluetooth
- Added new
esp_bt_gap_read_remote_name()
function to get remote device's Bluetooth name at any time - Fixed error on EIR type in Config EIR event
- Added support to enable Peripheral Preferred Parameters in GAP service
- HFP: Added Audio Gateway (AG) support
- HFP: Added AT+NREC=0 command for disabling AG echo cancellation (#3665)
- HFP: Fixed crash on incoming audio
- HFP: Fixed connection fail and crash when receiving unknown AT command
Blufi
- Fixed the wrong type from
BLUFI_TYPE_DATA_SUBTYPE_SOFTAP_MAX_CONN_NUM
toBLUFI_TYPE_DATA_SUBTYPE_SOFTAP_CHANNEL
BLE Mesh
- Synchronized Zephyr v2.0 BLE Mesh updates
- Updated mesh examples and added example description
- Fixed getting wrong timer remaining time
- Added advertising buffers for relay packets
- Modified Health Server model callbacks
- Added Heartbeat message receive callback
- Added low power node APIs and events
- Added friend node events
- Added proxy client functionality
- Added sig-defined server models
- Added Configuration Server model events
- Checked mesh queue and task init status
- Fixed client model invalid address access
- Fixed not restoring mesh node cfg value
- Now uses bt device name in mesh proxy adv
- Fixed mesh device with wrong name on iOS
- Checked client model timer remaining time
- Fixed memory leak when node is reset
- Fied adv buf unref and link_id in exceptional list
Wi-Fi Coexistence
- Fixed A2DP disconnect when Wi-Fi switches channels
- Fixed A2DP stuck after creating another connection
Wi-Fi
- Added PMK caching feature for WPA2 Enterprise stations
- Added support for Protected Management Frames (PMF)
- Added SAE authentication support for WPA3 Personal
- Wi-Fi now uses new esp_event library added in ESP-IDF v4.0
- Fixed wpa_supplicant EAP re-authentication issue
- Fixed wpa_supplicant assoc_ie_len setting based on generated RSN/WPA IE
- Fixed EAPOL key used during reauthentication
- Fixed wpa_supplicant memory leak on Wi-Fi stop
- Fixed ESP-NOW unicast packet TX failure
- Fixed bug for setting channel when in NULL mode.
- Added check for Wi-Fi stop when calling esp_wifi_deinit
- Now places the Vendor Specific element at the end according to the protocol
- Fixed crash during WEP shared auth
- Fixed WiFi buffer reload that WiFi receiving no longer works because internal buffer reloading fails
- Fixed WiFi receiving that WiFi receiving no longer works because it writes the MAC registers when WiFi/BT common clock is disabled
- Fixed WiFi performance, including AMPDU parameter negotiations, WiFi TX optimization etc
- Fixed AMSDU decrypt that ESP32 can't decrypt the AMSDU if it's encrypted
- Reduced Wi-Fi compiled binary size
- Added TX packet length checking, Wi-Fi driver will drop a packet which is too long
- Improved RSSI scan accuracy
- Now returns an error if the setting AP's channel is out of range
- Fixed sniffer during WiFi mode switching
Ethernet
- Fixed Ethernet interrupt crash when cache is disabled
- Ensure that eth_driver handle is allocated in internal RAM (#4635)
Peripheral Drivers
- Most drivers have been refactored internally, however public behaviour of existing APIs should be the same as in ESP-IDF V4.0
- Added option to place UART ISR in IRAM
- Added new ESP Serial Slave Link library to communicate with serial slave devices via SDIO or similar interfaces
- CAN: Fixed can_reconfigure_alerts() function taking semaphore in a critical section
- CAN: Fixed possible logging in critical sections
- CAN: Added bitfields to
can_message_t
as an alternate way to set CAN message flags. - I2S: Fixed compile error if FreeRTOS header not included before I2S header (#4251)
- LEDC: Added missing
ledc_set_pin()
function declaration - SDSPI & SDMMC: Fixed
gpio_pin_bit_mask
truncation to max GPIO value 31 - UART: Added simplified API to set threshold values for RX FIFO full and TX FIFO empty
- SPI_SLAVE: Fixed assertion failure when
spi_slave_initialize
failed with DMA channel equals zero (#2740)
Core System
- Fixed DPORT ECO workaround register operation to improve workaround reliability. (Details of workaround in ECO document item 3.10 "When each CPU reads certain different address spaces simultaneously, a read error can occur")
- Added a macro to call a function with a user-allocated stack
- Added likely & unlikely macros to help compiler produce optimized instruction sequences
- bootloader_random: Added protected for shared CLK_EN & RST_EN registers when calling
bootloader_random_enable()/_disable()
in the app - esp_attr: Fixed multiple definition linker errors when using section attributes in C++ builds (#4021 )
- esp_event: Fix a possible null pointer dereference (#4373)
- esp_timer: Add parameter NULL checks to public API Return ESP_ERR_INVALID_ARG if the handle is NULL, instead of crashing.
- heap: Added dedicated "aligned alloc" and "aligned free" functions functions (some restrictions apply, see linked documentation).
- heap: Added new heap_caps_get_allocated_size() functionv
- ipc: IPC now runs at priority of the caller's task, preventing priority inversion issue where one core commandeers the other core
- log: Added option to log system time rather than RTOS time (#3958)
- mac: Calling
esp_base_mac_addr_set()
now fails if MAC is not a unicast MAC (#4263) - panic handler: Moved some panic handler code into flash to reduce IRAM usage, cache will be re-enabled in panic handler if necessary
- pthread: Fixed pthread_once() possible race condition (#4561)
- single core: Don't compile in unnecessary
ipc
code in single core configurations - startup: Clear RF PHY peripheral status during early startup
- time: Added optional support for 64-bit time_t, depends on toolchain support which is not part of the default toolchain yet, this is planned for ESP-IDF v5.0.
- toolchain: add new compiler optimization levels for "Performance" (-O2) and "None" (-O0)
FreeRTOS
- Reduc...
ESP-IDF Release v4.0
Documentation for release v4.0 is available at https://docs.espressif.com/projects/esp-idf/en/v4.0/
ESP-IDF v4.0 is a major update for ESP-IDF v3.x. Release v4.0 is mostly compatible with apps written for ESP-IDF v3.x, but there are some breaking changes (please consult the list below) and removal of deprecated functionality which will require code changes when updating projects
ESP-IDF v4.0.x will be supported for 18 months until October 2021, according to the ESP-IDF Support Policy. The current Long Term Support release is v3.3.1, v3.3.x will be supported until March 2022.
Note: No changes were made between the v4.0-rc
release candidate and v4.0
.
Major New Features
- Bluetooth: Added alternative BLE-only host stack - NimBLE. Reduced resource usage compared to Bluedroid (but no dual mode support).
- ESP-BLE-MESH: Added SIG Full-Feature Certified ESP-BLE-Mesh stack, supporting both Bluedroid Host and NimBLE Host.
- Build system: New CMake-based build system, including native Windows support (MSYS2 is no longer required). IDE support includes VSCode and Eclipse. GNU Make build system from earlier ESP-IDF versions is still supported as a legacy build system.
- ESP32: Support for ESP32 ECOV3. By default ESP-IDF projects still support all ECO version, but project can be configured with a minimum ECO version which may disable workaround and improve performance.
- ESP-TLS: Added support for server side SSL/TLS connection
- Ethernet: Refactored ethernet support into new
esp_eth
component, added support for DM9051 standalone Ethernet interface - Flash Encryption: New "Development" mode allows unlimited serial flashing of encrypted flash during development
- lwIP: Updated lwIP version from v2.0.3 to v2.1.2
- New "ESP Local Control" feature to provide capability to control an ESP32 over Wi-Fi+HTTPS or BLE using protocomm messages
- SPI Flash: New SPI flash driver includes support for storage on additional SPI flash chips, partitions on external SPI flash chips
- SPIFFS: New host based image generator tool
- SystemView based heap and log tracing
- toolchain: New "IDF Tools" scripts and mechanism for installing toolchain for a specific ESP-IDF version
- toolchain: Upgraded ESP32 toolchain to gcc 8.2.0 (esp32-2019r2 toolchain release)
- toolchain: Upgraded libc to newlib version 3
- VFS: New semihosting driver for outputting via JTAG debugger
- Websocket: New Websocket client component
- Wi-Fi: New Wi-Fi Provisioning Manager feature
- Wi-Fi: Refactor and improve softAP power saving support
- Wi-Fi: wpa_supplicant code is now open source as part of ESP-IDF
Breaking Changes Since v3.x
- APIs deprecated in ESP-IDF v3.x and earlier have been removed. If building a project output warnings about deprecated functionality when building for ESP-IDF v3.x, these warnings will now be errors as the functionality has been removed.
- AWS IoT: The AWS IoT SDK is now an independent component repository: https://github.com/espressif/esp-aws-iot
- Bluetooth: Added new parameter for updating whitelist API
- Bluetooth: Adding AVRCP Target (TG) role means interfaces of AVRCP Controller(CT) have changed
- Bluetooth: API of
esp_bt_gap_set_scan_mode()
is changed to allow setting connection modes as well as discoverable modes - CMake:
idf.py
argument parsing has changed, and not all argument orders that work withidf.py
v3.x are still valid - CMake:
idf.py defconfig
andbootloader-clean
targets are removed (these existed but did not work correctly in earlieridf.py
versions) - CMake: CMake "external project" integration API is different to ESP-IDF v3.x and not compatible.
- CMake: Variables like
IDF_PATH
,IDF_TARGET
,PYTHON
etc are now read-only inside the IDF build system. Instead, modify build properties of the same name using theidf_build_set_property
function. - Core: Some function-like macros (
ESP_ERROR_CHECK
,ESP_PM_TRACE_ENTER/EXIT
) had incorrect trailing semicolons which have been removed. May cause problems if relying on non-single-statement macro behaviour. - ESP32: The
hwcrypto
AES & SHA APIs are now internal to the mbedTLS component. Suggest refactoring existing code to use the mbedTLS APIs directly, if hardware acceleration is enabled in project configuration then the same implementations will be used. - Ethernet: v3.x APIs are no longer supported, Ethernet initialization steps has been changed to using the new
esp_eth
component. - FATFS no longer includes
integer.h
. Applications should either include "ff.h", or redefine types such as BYTE, DWORD, etc. - Flash encryption workflow has changed to develop/release workflow. In "develop" mode unlimited serial flashing is supported, but the device is not secure. It is still possible to OTA update devices with flash encryption to ESP-IDF V4.0, but set Release mode in config before building a project for a production device, including for an OTA update.
- freemodbus: Refactor the "port" API to have a common master and slave interface, port mode is now selected via API not in KConfig.
- ldgen: The fragment grammar has changed to simplify the syntax. Linker fragments written for ESP-IDF V3.x will need to be updated.
- LWIP: Multicast UDP socket interface binding has changed, and multicast sockets can no longer bind to all interfaces in a single call
- micro-ecc: The micro-ecc component is now part of the ESP-IDF bootloader only. For existing projects which use micro-ecc, recommend refactoring to use mbedTLS for the same functionality. If this is not possible, micro-ecc can be added to the project source files directly.
- nvs_util & mfg_util command lines are not 100% backwards compatible with ESP-IDF v3.x
- protocomm: Session security now supports multiple instances of the same type (security APIs have changed to add a "handle" parameter).
- ringbuffer: Interface to
vRingbufferGetInfo
has an additional parameter - SmartConfig:
esp_smartconfig_start
has been changed toesp_err_t esp_smartconfig_start(const smartconfig_start_config_t *config);
- SmartConfig: SmartConfig has been refactored to use IDF new event mechanism. Old events
SC_STATUS_WAIT
,SC_STATUS_FIND_CHANNEL
,SC_STATUS_GETTING_SSID_PSWD
,SC_STATUS_LINK
,SC_STATUS_LINK_OVER
have been removed, and new eventsSC_EVENT_SCAN_DONE
,SC_EVENT_FOUND_CHANNEL
,SC_EVENT_GOT_SSID_PSWD
,SC_EVENT_SEND_ACK_DONE
have been added. - Storage: esp_partition encrypted reads/writes are now disabled if flash encryption is disabled in project config
- VFS:
fcntl()
argument is now anint
notva_list
, in line with newlib - VFS: Custom drivers which implemented
select
support will need to implement a newselect
API - ESP-WIFI-MESH: use the new esp_event library and remove
event_cb
frommesh_cfg_t
Major Non-Breaking Changes Since v3.x
The following major changes are non-breaking but are not compatible if downgrading to ESP-IDF v3.x:
- CMake-based build system no longer uses "linker groups" to allow circular dependencies in the project at link time. Instead, components are expected to declare which other components they require. See build system docs
- CMake: New component registration API. The API that was used by CMake for ESP-IDF v3.x is still supported but is deprecated
- Many header files have been consolidated or moved, as part of reorganization to support multiple chip targets. These are not breaking changes in ESP-IDF V4.0, but the compiler will emit a warning which includes the new header path. The old headers will be completely removed in ESP-IDF V5.0
- KConfig config item names have been standardized, meaning many items were renamed. The build system will automatically rename old config names to the new names on first build. Take care if you plan to downgrade a project to v3.x again, as the sdkconfig names will no longer be recognized.
Tip: If writing code that needs to work with ESP-IDF v3.x
and v4.0
, include the esp_idf_version.h header and check against the provided macros.
List of changes since ESP-IDF v3.3:
Wi-Fi
- Documented that SSID & Password fields should be NULL terminated strings (#1176)
- Maximum TX power range changed from 0-20dBm to 10-20dBm to avoid poor performance
- Refactored event system to use new esp_event library. Includes backwards compatibility for legacy system_event functions
- Now includes DMA reserved pool when allocating internal-only memory for Wi-Fi internal use (#3592)
- Fixed a WiFi receiving bug which is caused by disabling WiFi/BT common clock
- Fixed the bug that WPA2 Enterprise STA can connect open AP
- Fixed TKIP/CCMP PN replay attack detection bug
- Increased buffer number type from uint8_t to uint16_t to support more than 255 buffers
- Avoided recalculating PMK if esp_wifi_set_config() is not called
- Added WiFi menuconfig option to put more WiFi receiving code into IRAM
- Fixed blocking scan crash issue
- Fixed crash if association request RSN information length too big
- Fixed crash issue caused by placing g_promis_...
ESP-IDF V4.0 Release Candidate
ESP-IDF V4.0 Release Candidate
Documentation for release v4.0-rc is available at https://docs.espressif.com/projects/esp-idf/en/v4.0-rc/
ESP-IDF v4.0-rc is a release candidate of ESP-IDF v4.0, which is a major update for ESP-IDF v3.x. Release v4.0-rc is mostly compatible with apps written for ESP-IDF v3.x, but there are some breaking changes (please consult the list below) and removal of deprecated functionality which will require code changes when updating projects
ESP-IDF v4.0.x will be supported for 18 months from the v4.0 stable release date, according to the ESP-IDF Support Policy.
The latest stable release of ESP-IDF is v3.3.1 at time of writing.
Major New Features
- Bluetooth: Added alternative BLE-only host stack - NimBLE. Reduced resource usage compared to Bluedroid (but no dual mode support).
- ESP-BLE-MESH: Added SIG Full-Feature Certified ESP-BLE-Mesh stack, supporting both Bluedroid Host and NimBLE Host.
- Build system: New CMake-based build system, including native Windows support (MSYS2 is no longer required). IDE support includes VSCode and Eclipse. GNU Make build system from earlier ESP-IDF versions is still supported as a legacy build system.
- ESP32: Support for ESP32 ECOV3. By default ESP-IDF projects still support all ECO version, but project can be configured with a minimum ECO version which may disable workaround and improve performance.
- ESP-TLS: Added support for server side SSL/TLS connection
- Ethernet: Refactored ethernet support into new
esp_eth
component, added support for DM9051 standalone Ethernet interface - Flash Encryption: New "Development" mode allows unlimited serial flashing of encrypted flash during development
- lwIP: Updated lwIP version from v2.0.3 to v2.1.2
- New "ESP Local Control" feature to provide capability to control an ESP32 over Wi-Fi+HTTPS or BLE using protocomm messages
- SPI Flash: New SPI flash driver includes support for storage on additional SPI flash chips, partitions on external SPI flash chips
- SPIFFS: New host based image generator tool
- SystemView based heap and log tracing
- toolchain: New "IDF Tools" scripts and mechanism for installing toolchain for a specific ESP-IDF version
- toolchain: Upgraded ESP32 toolchain to gcc 8.2.0 (esp32-2019r2 toolchain release)
- toolchain: Upgraded libc to newlib version 3
- VFS: New semihosting driver for outputting via JTAG debugger
- Websocket: New Websocket client component
- Wi-Fi: New Wi-Fi Provisioning Manager feature
- Wi-Fi: Refactor and improve softAP power saving support
- Wi-Fi: wpa_supplicant code is now open source as part of ESP-IDF
Breaking Changes Since v3.x
- APIs deprecated in ESP-IDF v3.x and earlier have been removed. If building a project output warnings about deprecated functionality when building for ESP-IDF v3.x, these warnings will now be errors as the functionality has been removed.
- AWS IoT: The AWS IoT SDK is now an independent component repository: https://github.com/espressif/esp-aws-iot
- Bluetooth: Added new parameter for updating whitelist API
- Bluetooth: Adding AVRCP Target (TG) role means interfaces of AVRCP Controller(CT) have changed
- Bluetooth: API of
esp_bt_gap_set_scan_mode()
is changed to allow setting connection modes as well as discoverable modes - CMake:
idf.py
argument parsing has changed, and not all argument orders that work withidf.py
v3.x are still valid - CMake:
idf.py defconfig
andbootloader-clean
targets are removed (these existed but did not work correctly in earlieridf.py
versions) - CMake: CMake "external project" integration API is different to ESP-IDF v3.x and not compatible.
- CMake: Variables like
IDF_PATH
,IDF_TARGET
,PYTHON
etc are now read-only inside the IDF build system. Instead, modify build properties of the same name using theidf_build_set_property
function. - Core: Some function-like macros (
ESP_ERROR_CHECK
,ESP_PM_TRACE_ENTER/EXIT
) had incorrect trailing semicolons which have been removed. May cause problems if relying on non-single-statement macro behaviour. - ESP32: The
hwcrypto
AES & SHA APIs are now internal to the mbedTLS component. Suggest refactoring existing code to use the mbedTLS APIs directly, if hardware acceleration is enabled in project configuration then the same implementations will be used. - Ethernet: v3.x APIs are no longer supported, Ethernet initialization steps has been changed to using the new
esp_eth
component. - FATFS no longer includes
integer.h
. Applications should either include "ff.h", or redefine types such as BYTE, DWORD, etc. - Flash encryption workflow has changed to develop/release workflow. In "develop" mode unlimited serial flashing is supported, but the device is not secure. It is still possible to OTA update devices with flash encryption to ESP-IDF V4.0, but set Release mode in config before building a project for a production device, including for an OTA update.
- freemodbus: Refactor the "port" API to have a common master and slave interface, port mode is now selected via API not in KConfig.
- ldgen: The fragment grammar has changed to simplify the syntax. Linker fragments written for ESP-IDF V3.x will need to be updated.
- LWIP: Multicast UDP socket interface binding has changed, and multicast sockets can no longer bind to all interfaces in a single call
- micro-ecc: The micro-ecc component is now part of the ESP-IDF bootloader only. For existing projects which use micro-ecc, recommend refactoring to use mbedTLS for the same functionality. If this is not possible, micro-ecc can be added to the project source files directly.
- nvs_util & mfg_util command lines are not 100% backwards compatible with ESP-IDF v3.x
- protocomm: Session security now supports multiple instances of the same type (security APIs have changed to add a "handle" parameter).
- ringbuffer: Interface to
vRingbufferGetInfo
has an additional parameter - SmartConfig:
esp_smartconfig_start
has been changed toesp_err_t esp_smartconfig_start(const smartconfig_start_config_t *config);
- SmartConfig: SmartConfig has been refactored to use IDF new event mechanism. Old events
SC_STATUS_WAIT
,SC_STATUS_FIND_CHANNEL
,SC_STATUS_GETTING_SSID_PSWD
,SC_STATUS_LINK
,SC_STATUS_LINK_OVER
have been removed, and new eventsSC_EVENT_SCAN_DONE
,SC_EVENT_FOUND_CHANNEL
,SC_EVENT_GOT_SSID_PSWD
,SC_EVENT_SEND_ACK_DONE
have been added. - Storage: esp_partition encrypted reads/writes are now disabled if flash encryption is disabled in project config
- VFS:
fcntl()
argument is now anint
notva_list
, in line with newlib - VFS: Custom drivers which implemented
select
support will need to implement a newselect
API - ESP-WIFI-MESH: use the new esp_event library and remove
event_cb
frommesh_cfg_t
Major Non-Breaking Changes Since v3.x
The following major changes are non-breaking but are not compatible if downgrading to ESP-IDF v3.x:
- CMake-based build system no longer uses "linker groups" to allow circular dependencies in the project at link time. Instead, components are expected to declare which other components they require. See build system docs
- CMake: New component registration API. The API that was used by CMake for ESP-IDF v3.x is still supported but is deprecated
- Many header files have been consolidated or moved, as part of reorganization to support multiple chip targets. These are not breaking changes in ESP-IDF V4.0, but the compiler will emit a warning which includes the new header path. The old headers will be completely removed in ESP-IDF V5.0
- KConfig config item names have been standardized, meaning many items were renamed. The build system will automatically rename old config names to the new names on first build. Take care if you plan to downgrade a project to v3.x again, as the sdkconfig names will no longer be recognized.
Tip: If writing code that needs to work with ESP-IDF v3.x
and v4.0
, include the esp_idf_version.h header and check against the provided macros.
List of changes since ESP-IDF v3.3:
Wi-Fi
- Documented that SSID & Password fields should be NULL terminated strings (#1176)
- Maximum TX power range changed from 0-20dBm to 10-20dBm to avoid poor performance
- Refactored event system to use new esp_event library. Includes backwards compatibility for legacy system_event functions
- Now includes DMA reserved pool when allocating internal-only memory for Wi-Fi internal use (#3592)
- Fixed a WiFi receiving bug which is caused by disabling WiFi/BT common clock
- Fixed the bug that WPA2 Enterprise STA can connect open AP
- Fixed TKIP/CCMP PN replay attack detection bug
- Increased buffer number type from uint8_t to uint16_t to support more than 255 buffers
- Avoided recalculating PMK if esp_wifi_set_config() is not called
- Added WiFi menuconfig option to put more WiFi receiving code into IRAM
- Fixed blocking scan crash issue
- Fixed crash if association request RSN information length too big
- Fixed crash issue ca...
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: U...