ESP-IDF Pre-release v4.1-beta1
Pre-releaseDocumentation 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
- Reduced interrupt cycle overhead by using window overflow and underflow exceptions to speed up Xtensa register spills to the stack
- Added support for including FreeRTOS headers using the traditional header paths, instead of requiring
freertos/
prefix
newlib libc
- Fixed linking of newlib nano from ROM only if PSRAM cache workaround is disabled
LWIP
- Added option to automatically resolve mDNS queries when looking up
.local
addresses - Added IPV6 stateless address autoconfiguration support
- Cleaned up the TCP/IP stack port layer
- Fixed crash when a netconn is marked as closed
- Fix
select_waiting()
assert caused by UDP socket closing - Fix the crash caused by socket lock not initialized
- Fixed issue with IPV6 TCP sending OK when STA disconnects
- MLD6: Fixed error when attempting to join a non-multicast IPV6 address
- Now includes hostname in DHCP discover packet, if set
- PPPoS: Fixed power_down DCE immediately after getting IP
- sntp: Added API to set the SNTP update interval (#4437)
mDNS
- Added configuration values for mDNS task priority, affinity, internal service timeouts
- Fixed missing "bye" packet if services removed with mdns_service_remove_all() or mdns_free() (#3660)
Provisioning
- NimBLE: Fix bug in
protocomm_nimble
chararcteristic access callback - Unified Provisioning: Fixed BLE characteristics read response issue when read response length is a multiple of () length
- Wifi_provisioning_softap: Allow applications to start webserver externally
- Wifi_prov_manager: Fix to ensure that provisioning status is reliably conveyed to remote host
OTA
- esp_https_ota: Added error checking functionalities. A few additional error checking mechanisms have been added which returns the control in case an invalid header is received, and a wrapper to the
esp_http_client_is_complete_data_received()
function of esp_http_client has been added.
HTTP Client
- Added esp_http_client_set_authtype() function (#4444)
- Fixed HTTP client issue regarding message_complete callback invocation (fixes some issues with OTA failing with unexpected errors if the connection closes early)
- Fixed memory leak in esp_http_client_set_username/password (#4444)
mbedTLS
- Added new fast Montgomery exponentiation implementation for RSA accelerator. Significantly improves ESP32 RSA performance (especially public key operations)
- Don't allow disabling ECDSA support in mbedTLS config if app image signature checking is enabled
ULP
- Added some missing ULP macro functionality: stage counters, branch on stage counter, I2C operations. (#3580)
- Added ULP macro
MOVE <label>
construct which helps when writing larger programs. (#3580) - Added a union member to allow getting the encoded ULP instruction from a macro result (#3759)
Bootloader
- Added option to skip image validation when waking from deep sleep (incompatible with Secure Boot) (#3304)
- Restructured bootloader initialization, moving target-specific initialization into separate source files
ESP-TLS
- Added support for WolfSSL backend (see https://github.com/espressif/esp-wolfssl)
- Added timeout support for blocking connections
TCP Transport
- Added API to use password protected client keys
- Added functionality to use ALPN with SSL
Websocket
- Added User-Agent and additional headers to websocket client (#4345)
Storage
- FATFS: handle the internal
FR_INT_ERR
error as "filesystem corrupted" - NVS: Add support to expose a NVS entry via a C++ smart pointer handle
- SPIFFS: Fixed bugs when
CONFIG_SPIFFS_USE_MTIME
is not defined - SPIFFS: Now follows symlinks in spiffsgen (#3778)
- spi_flash: Added new SPI flash driver using new hardware abstraction layer (backwards compatible API, legacy implementation can be re-enabled)
VFS
- VFS: Check in select() if the UART driver is installed or not
Modbus
- Added support for Modbus ASCII master mode
- Fixed issue re-initializing Modbus controller after call to
mbc_master_destroy()
External Libraries
- coap: Improved support for different mbedTLS configurations (#3961, #3971, #3977)
- jsmn: Added project configuration options for library (#4416)
- tinycbor: Added new tinycbor component and example
Tools
- c++: Allow enabling RTTI
- core dump: Default Core Dump data format is now ELF (configurable)
- idf_monitor: Work around a Windows driver bug when using a USB-CDC device
- idf_monitor: fix the bug that idf_monitor not blocked when no log printed (#3884)
- idf_size: Added support to write size data to a JSON file
- idf_size: Significantly improved performance (#4518)
- openocd: Documented support for ARM architecture
Build System
- Added PowerShell versions of "install.bat" and "export.bat" for Windows PowerShell users
- Added
idf.py --cache
option and support for setting config variableIDF_ENABLE_CCACHE
to permanently enable CCache - Added minor fixes for
convert_to_cmake.py
- Added new
idf.py --version
command - Allow idf.py and CMake build system to work on FreeBSD (not officially supported) (#2029)
- Fix IDF_PATH case mismatches on case insensitive filesystems
- Fixed execution order for dependent tasks
- Updated kconfiglib to the upstream version, switch to a Python-based menuconfig tool
Examples
- http_request: Fixed some non-compliant parts of the HTTP request, amde example configurable
- Improved the example behaviour when
esp_restart()
is called and Wi-Fi is initialized - ping: Added new example
- restful server: Added NetBIOS support for discovery
- tcp_server: Fixed unnnecessary reopening of listening socket
- efuse: Added example demonstrating efuse API for writing efuses
- ble throughput: Fixed intermittent crash when running the BLE throughput client
- ble hid device: Fixed the wrong mask value based on the HID protocol
- ble hid device: Fixed issue with security info restore when a paired BLE HID device disconnects and then reconnects after a BT Classic HID device has connected
- blufi: Changed the Wi-Fi storage mode to default
WIFI_STORAGE_FLASH
- bluetooth: Added HFP Audio Gateway example
- ota: Fixed bug with failing OTA if the connection closed prematurely
Documentation
- Translated more ESP-IDF Programming Guide pages into Chinese
- Added basic C++ style guide
- Encourage Python 3 rather than Python 2 for new users
- Added Getting Started Guide for Ethernet Kit V1.1
Obtaining v4.1-beta1
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 v4.1-beta1 --recursive https://github.com/espressif/esp-idf.git esp-idf-v4.1-beta1
cd esp-idf-v4.1-beta1/
This is the recommended way of obtaining v4.1-beta1 of ESP-IDF.
Download an archive with submodules included
Attached to this release is an esp-idf-v4.1-beta1.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-v4.1-beta1.zip