Skip to content

ESP-IDF Release v3.0

Compare
Choose a tag to compare
@igrr igrr released this 24 Apr 08:06
· 37447 commits to master since this release

Documentation for release v3.0 is available at http://esp-idf.readthedocs.io/en/v3.0/.

This is the list of changes since release v3.0-rc1.

If upgrading from previous stable release V2.1, check the v3.0-rc1 release notes for changes which also apply.

Breaking Changes

Release v3.0 is largely compatible with apps written for ESP-IDF v3.0-rc1. However some breaking behaviour and significant API changes have been introduced:

  • Some I2S APIs which mixed return values and error codes have been deprecated. New APIs have been introduced to replace them.

    • i2s_write should be used instead of i2s_write_bytes and i2s_push_sample, which are deprecated.
    • i2s_read should be used instead of i2s_read_bytes and i2s_pop_sample, which are deprecated
  • A new parameter remote_addr_type is added for esp_ble_gattc_open() (esp_ble_gattc_open())

  • Modify the parameter of the ESP_GATTS_ADD_CHAR_DESCR_EVT BLE GATTS event, renaming the char_uuid parameter of this event to descr_uuid (!1484)

  • Modify the Classic BT AVRC events

    • Remove the feat_mask parameter from the ESP_AVRC_CT_CONNECTION_STATE_EVT event
    • Delete the ESP_AVRC_CT_MAX_EVT event
    • Add a new event ESP_AVRC_CT_REMOTE_FEATURES_EVT

Build System and tools

New functionality

  • Support C++ source files with .cc extension
  • idf_monitor now supports pausing log output from the console
  • Support editorconfig for editing ESP-IDF source files
  • Fix for reduced RTC core voltage when waking from sleep

Bug fixes

  • Restore application compatibility with pre-IDF v2.1 bootloaders
  • Fix SysView support when building in single core mode

Bootloader

  • Disable logging before UART is reconfigured by second stage bootloader (possibly setting a custom baud rate)
  • Always boost VDD_SDIO voltage 1.8V -> 1.9V if flash frequency is 80MHz

FreeRTOS

New Functionality

  • Backported FreeRTOS V9.0.0 task deletion behaviour: a deleted task will be immediately cleaned up if it is not currently running.
  • IDF ringbuffer: Add new APIs xRingbufferGetCurFreeSize(), xRingbufferIsNextItemWrapped(), xRingbufferCreateNoSplit()

Bug fixes

  • Fix for cross-core deleted tasks not being cleaned up in some circumstances.

System Library Features

New Functionality

  • spi_flash: New configuration options to detect invalid writes

Bug Fixes

  • Fix esp_timer accuracy issues
  • Fix realloc() behaviour when heap tracing is enabled
  • Fix realloc() memory corruption bug when heap poisoning is enabled
  • Fix memory fragmentation issue when splitting large free blocks
  • Fix compilation error when RTC used as clock source
  • Fix invalid SPIRAM clock changes by clock subsystem
  • Fix clock initialization in single core mode
  • Restrict linker size of DRAM to enforce static RAM limits, rather than erroring at runtime

Drivers

New functionality

  • ADC eFuse factory calibration functionality
  • I2S driver: New function i2s_write_expand() to automatically expand bit width of supplied samples to match hardware
  • UART driver: Allow reading character pattern detection position without modifying the pattern detection queue

Bug fixes

  • I2C driver: fixes for timeout recovery, thread safety
  • I2C driver: allow NACKing last byte read
  • I2S driver: fix inaccurate errors returned from some functions

TCP/IP

New Functionality

Bug Fixes

  • Fix closing TCP socket causes system crash bug
  • Fix the bug that incorrect event is posted when setting static IP of soft-AP or Ethernet

Known Issues

  • Long time TCP traffic stability test causes LWIP assert, it is only found in dual core mode with PSRAM is enabled
  • TCP traffic stability test causes Interrupt watchdog timeout, it is found in dual core mode and when the WiFi mode of the device is configured as WIFI_MODE_APSTA mode

WiFi

Bug Fixes

  • Fix a bug that system crashes when station disconnects from AP.
  • Fix the bug that receiving beacon time is not correct.
  • Fix the bug that esp_wifi_restore() will cause a fail wifi connection.(#233)
  • Fix the bug that in sniffer mode it asserts when receive misc data.(#1037,#1404)
  • Fix a memory leak in espnow
  • Fix the bug that wpa2 assert when disconnect from AP
  • Fix QoS bug in 11g mode
  • Fix esp_wifi_stop() never returns bug
  • Fix esp_wifi_deinit() causes system assert bug
  • Fix EAPOL retransmission causes system crash bug
  • Fix WPS not work correctly on WIFI_MODE_APSTA bug (#1045)
  • Fix sha256 signature of WPA2 causes system assert bug ([#1297](Unable to use wpa2_enterprise example on ESP32))

Performance Improvements

  • Optimize WiFi retransmission and timeout mechanism

BLE

Known Issues

  • Bluetooth controller will crash if ESP32 is overloaded, e.g. running the BLE throughput example and printing a lot of logs at the same time

Link Layer

  • Fix the bug where the LL_LENGTH_REQ packet is sent even if the remote device doesn't support this feature

GATT Server

  • Fix the incorrect result of the esp_ble_gatts_get_attr_value() event when the characteristic value that the event gets is written by the remote device using Prepare Write Request (#1612)

GAP

  • Fix the bug where the start/stop advertising completed events sometimes are not accurate
  • Fix the bug where the connection parameters update procedure sometimes fails in the period of pairing
  • Fix the bug where the connection parameter update procedure sometimes leads to disconnection
  • Fix the bug where the bonding list that read from the flash is not correct once the chip reboots

SMP

  • Fix the bug where the reconnection sometimes fails when the device is already paired (#1561)

Performance optimization

  • Improve the stability of the multi-connection

Bluetooth Common Parts

  • Fix some bugs related to the memory leakage (BLE SMP, A2DP, Timer)
  • Fix some bugs that may lead to crash (xQueueGenericSend, page scan procedure, etc)

Classic BT

  • Add the option to configure the stack size of A2DP sink task through menuconfig
  • Fix the bug where the restart of media task fails when the esp_a2d_sink_deinit() is called in the period of connection (#1522
    )
  • Fix the incorrect disc_rsn parameter value of the ESP_A2D_CONNECTION_STATE_EVT event when the receiving device acts as a master
  • Fix the incorrect remote_bda parameter value of the ESP_AVRC_CT_CONNECTION_STATE_EVT event
  • Fix the bug that causes the initiating side to lose the link key notification event when the receiving device is repairing in simple_pairing mode(#1275)
  • Fix the bug about string_to_bdaddr where the address of the device that read from the flash is not converted correctly when nano formatting options is enabled in the menuconfig

openssl wrapper

  • Fix compilation error when ALPN is disabled in mbedTLS configuration

mbedTLS

Bug Fixes

Ultra Low Power Processor

Bug Fixes

  • Fix I_DELAY macro error when using new toolchain
  • Document execution time for ULP instructions

mDNS

Bug Fixes

  • Produce TXT records compatible with all mDNS parsers
  • Fix issue when mDNS service is NULL

External Libraries

  • cJSON updated to v1.7.1, includes some memory corruption fixes

Documentation

  • Add tutorials in some BLE examples
  • Modify the readme files in some BLE/BT examples
  • Improved RMT driver API documentation

Examples

New Examples

  • New RMT driver example

Bug Fixes

  • Fix some bugs for the Eddystone example (#1682)

Obtaining v3.0

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 pre-release, use the following commands:

git clone https://github.com/espressif/esp-idf.git esp-idf-v3.0
cd esp-idf-v3.0/
git checkout v3.0
git submodule update --init --recursive

This is the recommended way of obtaining v3.0 of ESP-IDF.

Download an archive with submodules included

Attached to this release is an esp-idf-v3.0.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.