Releases: espressif/esp-idf
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...
ESP-IDF Pre-release v4.0-beta2
ESP-IDF V4.0-beta2 Pre-Release
Documentation for release v4.0-beta2 is available at https://docs.espressif.com/projects/esp-idf/en/v4.0-beta2/
ESP-IDF v4.0-beta2 is a prerelease of ESP-IDF v4.0, which is a major update for ESP-IDF v3.x. Release v4.0-beta2 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
The latest stable release of ESP-IDF is v3.3 at time of writing.
Changes since v4.0-beta1
Major Changes
- Remove some APIs deprecated in ESP-IDF v3.x and earlier
Bluetooth changes
- BLE Mesh: Added example READMEs
- BLE Mesh bugfixes
- Fixed linking errors with gcc 8.2.0
- NimBLE: Added optional mbedTLS support to reduce code size and improve performance
- Bluedroid: Support setting minimum encryption key size requirement
- Fixed A2DP function esp_a2d_media_ctrl(ESP_A2D_MEDIA_CTRL_SUSPEND) not getting an ACK from callback on A2DP sink
- Bluedroid: Fixed setting stack size for Bluedroid tasks such as BTU task not succeed through menuconfig
- Bluedroid: Disabled HFP Wide Bind Speech when SCO data path is selected as PCM instead of HCI
- Fixed controller may repeatedly send LMP_feature_req_ext with specific devices.
Bluetooth/Wi-fi Coexistence
- coexistence: Fixed BT BB reset lock may cause assert when WiFi do start/stop.
- coexistence: Fixed WiFi MAC reset may block and cause task watch dog timeout.
Wi-Fi
- Fixed WPS handshake for routers who support but incorrectly advertise WPS2.0
- Fixed failure to connect to some Apple APs in WPA2-PSK mode
- Fixed the bug related to WiFi init sequence
- Fixed the bug that sniffer causes system crash because of accessing SPIRAM when cache is disabled
- Fixed the bug that SmartConfig may occasionally emit the log message
wifi ipc: failed to post wifi task
and then crash
Core System
- Fixed error code collision in some error code values
- flash encryption: Fixed booting with flash encryption enabled
- flash encryption: Ensure flash encryption is permanently enabled if secure boot is enabled (CVE-2019-15894)
- efuse: Improved timing settings when burning efuses
- esp_flash: Fixed get/set write protection functions
- esp_flash: Support encrypted read and write when using new API
- drivers: Reset each driver peripheral module before enabling the driver (fixes issues with invalid peripheral state following a CPU reset)
- bootloader: Disabled factory reset GPIO check when waking from deep sleep
- uart vfs: Fixed use after free bug in select()
Build System
- Fixed 'make' errors rebuilding mconf after switching IDF versions
- cmake: Fixed issues with encrypted project flasher args
- cmake: Fixed issue where component properties not set correctly
- cmake mbedtls: Fixed issue where some files not added to correct component library
- cmake: Set ESP_PLATFORM variable when processing CMake files
- GNU Make: Fixed build errors due to path backslash escaping on Windows
External Libraries
- Updated CJSON library to v1.7.12
- mbedtls: Enabled asymmetric TLS buffer lengths by default to reduce default RAM usage
HTTP Server
- Fixed parsing of empty header values
- Fixed closing of invalid session
Major New Features in ESP-IDF v4.0
- Bluetooth: Added alternative BLE-only host stack - NimBLE. Reduced resource usage compared to Bluedroid (but no dual mode support).
- Bluetooth: Added feature-rich ESP-BLE-Mesh stack (SIG Certified)
- Build system: New CMake-based build system, including native Windows support (MSYS2 is no longer required). GNU Make build system from earlier ESP-IDF versions is still supported as a legacy build system.
- 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-2019r1 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
This does not include removing functions/types which already produced deprecation warnings in ESP-IDF v3.x.
- 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, provided hardware acceleration is enabled in project configuration then the same implementations will be used. - esp_event: Refactored Wi-Fi, Ethernet, IP event handling to use the new esp_event library. Old event handling code is no longer supported.
- 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-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 co...
ESP-IDF Release v3.0.9
Documentation for release v3.0.9 is available at https://docs.espressif.com/projects/esp-idf/en/v3.0.9/
ESP-IDF v3.0.9 is a bugfix update for ESP-IDF v3.0. The latest release of ESP-IDF is v3.3 at time of writing.
ESP-IDF v3.0.9 is the last v3.0.x release. ESP-IDF v3.0.x is now End of Life and is no longer supported. It is recommended to upgrade to a newer stable release version.
This is the list of changes since release v3.0.8:
Wi-Fi
- Fixed WPA2 Enterprise Zero PMK installation vulnerability (CVE-2019-12587)
- Fixed bugs related to authentication mode and multi SSID
- Fixed potential memory leaks caused by WiFi stop
- Fixed ESP32 AP crash when a connected STA powered off
- Fixed bug that STA can scan the channel out of regdomain
- Fixed some scan/connect bugs
- Fixed bug that ESP32 STA fails to connect to an Apple AP in WPA2 PSK mode
- Fixed crash in scan done handled caused by uint8 overflow in number of APs
- Fixed bug that smartconfig crashes when no AP is found
- Fixed bug that ESP32 sends broadcast to phone after smartconfig is done
Bluetooth
- Set the minimum encryption key size to be 7 octets for BR/EDR link, preventing KNOB attack (CVE-2019-9506)
- Fixed error when calculating sniffer anchor point. This fixes a supervision timeout after connection set to sniffer mode
- Fixed error when entering sniff mode with attempt large than 0xFF
- Now clears BT/BLE interrupts after controller_disable to overwrite the default non-zero value of interrupt control registers.
Network Protocols
- mdns: Worked around an issue where netif did not re-probe after an IP link-local address change
Core System
- flash encryption: By default, plaintext flashes are disabled when secure boot is enabled. (CVE-2019-15894)
- freertos: Removed semicolon in xTaskNotifyGive definition
- spi_flash: Fixed potential deadlock during SPI flash write or erase by temporarily raising priority of calling task
Peripheral Drivers
- SPI master & slave driver: Fixed a possible interrupt race condition
External Libraries
- Update cJSON to v1.7.12
Obtaining v3.0.9
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.0.9 --recursive https://github.com/espressif/esp-idf.git esp-idf-v3.0.9
cd esp-idf-v3.0.9/
This is the recommended way of obtaining v3.0.9 of ESP-IDF.
Download an archive with submodules included
Attached to this release is an esp-idf-v3.0.9.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.0.9.zip
Obtaining v3.0.9
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.0.9 --recursive https://github.com/espressif/esp-idf.git esp-idf-v3.0.9
cd esp-idf-v3.0.9/
This is the recommended way of obtaining v3.0.9 of ESP-IDF.
Download an archive with submodules included
Attached to this release is an esp-idf-v3.0.9.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.0.9.zip