Releases: espressif/esp-idf
ESP-IDF Release 2.1.1
Release 2.1.1 is a bug fix release. It includes the fixes for KRACK and BlueBorne vulnerabilities.
Documentation for release 2.1.1 is available at http://esp-idf.readthedocs.io/en/v2.1.1/.
This is the list of changes since release 2.1.
Build system and tools
- Add workaround for "git submodule" stray output bug on Windows
Bootloader
- Optimize pin configuration for 80MHz flash frequency
- Raise core voltage when 80MHz flash frequency is used
- Add option to boost VDDSDIO regulator voltage to 1.9V (enabled by default)
FreeRTOS
- Fix an assert that erroneously triggered when popping a zero-byte payload from the end of the ringbuffer
- Make sure xPortGetCoreID and uxTopUsedPriority are placed into IRAM
- Fix copy-paste error in HOLD_FORCE field name for GPIO26
SoC functions
- By default, assume 40MHz crystal frequency (autodetection can still be enabed in menuconfig)
- Fix possible lock-up when switching to higher CPU frequency
- Fix possible race condition while stalling other CPU during esp_restart
WiFi
- Fix a bug which caused calibration current as high as 800mA in some cases
- Fix WPA/WPA2 PTK and GTK re-install vulnerability issue
LwIP
- Take portTICK_PERIOD_MS into account when calculating timeouts
- Broadcast IP route based on source IP address
BT/BLE
- Add continuation offset check to SDP server
- Fix BLE controller lock-up in long duration BLE scan
- PHY library changes to increase BT/BLE performance
- Disable role switch feature in Classic BT to increase compatibility
- Adjust some timing parameters in BT/BLE controller to increase its stability
- Fix controller to host flow control bug in HCI
- Fix bonding-related bugs
- Fix memory corruption caused by BT/BLE controller
- Fix thread safety issues in BT/BLE host
- Fix SMP-related bugs
Drivers
- Fix reads/writes to/from unaligned buffers in SDMMC driver
- Fix swapped reset bits of HSPI/VSPI peripherals
Storage
- Check CRC of items on full pages in NVS library.
Third party libraries
- nghttp2: Add submodule to COMPONENT_SUBMODULES, update to release v1.24, build port directory
Obtaining v2.1.1
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 https://github.com/espressif/esp-idf.git esp-idf-v2.1.1
cd esp-idf-v2.1.1/
git checkout v2.1.1
git submodule update --init --recursive
This is the recommended way of obtaining v2.1.1 of ESP-IDF.
Download an archive with submodules included
Attached to this release is an esp-idf-v2.1.1.zip
archive. It includes .git
directory and all the submodules, so can be used out of the box. This archive is provided for users who have connectivity issues preventing them from cloning from Github.
ESP-IDF Release v2.1
Changes since v2.0.
Breaking changes
Release v2.1 is aimed to be largely compatible with applications written for ESP-IDF v2.0. However, the following breaking changes were introduced:
esp_bt_controller_init
function received a newesp_bt_controller_config_t *
argument.- If the application is built with dual core support, access to DPORT registers using normal register access macros will result in an compile time error (or run time error if register address can not be evaluated at compile time). Applications must be updated to use register access macros with
DPORT_
prefix. nvs_flash_init
function can now return an error code, which must be checked by the application (see NVS examples).- After calling
esp_ble_gatts_create_attr_tab
, application should only expect to receiveESP_GATTS_CREAT_ATTR_TAB_EVT
in GATTS callback.ESP_GATTS_CREATE_EVT
,ESP_GATTS_ADD_xxx_EVT
will not be received now.
Please refer to example gatt_server_service_table for detailed usage.
Build system and tools
- Fix a bug where component src subdirs needed listing before parent source dirs
- Add cleaner way to conditionally compile files
- Significantly reduce startup time on Windows
- esptool: Update to v2.0 final release
- gen_esp32part: Fix app offset errors, Python 3 support
- New 'make monitor' idf_monitor tool for better monitor output.
Bootloader
- Fix secure boot enable - can verify bootloader image
- Enable checks for encrypted flash in OTA (#453)
- Enable SPI flash Quad I/O in bootloader: Bootloader checks flash ID, enables Quad I/O mode based on flash type.
FreeRTOS
Bug fixes
- Fixes for the following APIs in SMP mode:
- uxTaskGetSystemState
- vTaskSuspend()/vTaskResume()
- Always disable interrupts in a critical region
- Release coprocessor registers when a task is deleted
- Delay context switch from queue/task APIs until exiting critical section
- Fix finding location of ISR stack space for CPU1
- Fix cross-core event group sync
Other changes
- Assert when a new task is started on CPU1 while application is running in single core mode
- Make internal stack size variables in 32-bit instead of 16-bit
- Increase timer task stack size to 2048 bytes
- Add max task length name configuration
- Expose task stack overflow watchpoint option
- Use more regions previously reserved for ROM routines/stack as heap, freeing up about 28K of RAM.
- Add an option to configure IPC task stack size
SoC functions
- Introduce soc component, add source of rtc_clk and rtc_pm libraries
- Add support for 32k XTAL as RTC clock source
- Improved timekeeping accuracy when using internal RTC clock
- Improve XTAL frequency detection, add support for selecting XTAL frequency in menuconfig
- Default CPU frequency in menuconfig is set to 160 MHz (previously was 240 MHz)
- Add workaround for DPORT access bug in ESP32. When accessing DPORT registers, applications must use register operation macros with DPORT_ prefix.
- Allow REG_SET_FIELD macro to be used for bit fields
- Update soc/io_mux_reg.h to latest version (#349)
WiFi
New features
- Add smartconfig example
- Support static WiFi TX buffers, the number of the buffers is configured via menuconfig
- Support for active/passive scan with configurable dwell time (new members of wifi_scan_config_t structure)
- Support for packet filtering in promiscuous mode using new esp_wifi_{get,set}_promiscuous_filter APIs
- New member of wifi_auth_mode_t enum for WPA2 Enterprise
- New channel number setting in wifi_sta_config_t for fast connection to the AP
Bug fixes
- Fix a WiFi compatibility issue which caused failure to connects to some APs, such as TP-LINK 742N, in some scenarios
- Fix a bug which caused OTA upgrade to fail
- Improve WPS connection success ratio
- Fix the bug that ESP32 didn't receive MIMO packet and missed some AMPDU encrypted packets in promiscuous mode
- Fix the bug that Long Range mode was not working
- Fix several WiFi crash bugs
Other changes
- Add documentation for WiFi driver
- Change scanned AP's SSID array length to 33 bytes
- Update all examples to call nvs_flash_init before initializing WiFi
BLE
-
Gatt server creating GATT service via attribute table optimization
- Remove restrictions in characteristic numbers for each service
- Fix memory leak while creating or deleting services
- Fix a bug while setting attribute values
-
Gatt server auto-response via stack optimization
- Add process of prepare_write_request packet
- Fix bugs while processing packets of read blob request, write request and read request
-
Gatt server general optimization
- Add events of GATT server open, cancel open and close
-
Gatt client optimization
- Register remote device’s GATT service change ccc descriptor automatically
- Add API to prepare write descriptor
- Add API to refresh cache of service discovery results to initiate a new service discovery procedure
-
GAP central role scan mode optimization
- Fix a bug that scan lasts only 5 minutes in permanent scan mode
- Add advertising data length and scan response length in scan results
-
GAP peripheral role advertising mode optimization
- Add events of advertising stop and scan stop complete
- Fix a bug that sometimes advertising is stopped unexpectedly
-
Connection establishment and disconnection APIs optimization
- Add common gap disconnect API for both GATT server and GATT client
- Add connected event and disconnected event for GATT client, to detect connection state in either GATT server or GATT client callback functions
-
GAP general optimization
- Add LE data packet length set completed event
- Add connection parameter update request completed event
- Fix a bug that host can’t get remote device’s features
-
New SMP APIs
- Add support of different pairing methods, including MITM, secure connection and others
- Add APIs to configure secure parameters
- Add SMP security example
- Fix reconnection issue in security mode
-
L2CAP and HCI optimization
- Fix a bug of HCI packet fragmentation error
- Add support of HCI UART
-
Memory optimization
- BT and BLE can be enabled individually
- Support for disabling GATT server, GATT client, SMP, etc, in menuconfig
-
Merge bug fixes from Bluedroid 7.1.1
-
Smartphone compatibility optimization
-
BLE example code optimization
-
Enhance error checking and processing in stack
-
Improve packet receive performance
-
Update all examples to call nvs_flash_init before initializing BT
Classic BT
-
New Host APIs
- Add APIs to set device name
- Add APIs to set discoverability and connectability mode
-
New Profiles
- Add A2DP Sink Profile
- Add AVRCP Controller Profile
-
Controller Bugs Fixes
- Fix a bug of inconsistent state handling in sniff mode
- Fix a bug while using HCI Controller to host data flow control
- Fix a bug of Invalid handling of HCI command "HCI_Host_Number_of_Completed_Packets"
- Fix a bug of assertion fails in ACL-U data transmission for classic BT
- Fix controller RX/TX bugs (using rand/srand in cache, tasks block, exception and etc)
- Fix PHY init bug
-
Bluetooth tasks priorities optimization
-
Osi_alarm module optimized to be thread-safe
Drivers
New features
- Motor Control PWM (MCPWM) driver and examples
- SPI slave driver and examples
- Support for PDM and built-in DAC in I2S driver
- Support for low speed channels in LEDC driver
- Add ADC1 example
- Add example on using capacitive touch sensors
Bug fixes
- Make arguments to all config calls 'const' (#519)
- I2C driver:
- I2S driver:
- Fix error when changing channel number in i2s_set_clk function
- Fix support for 24 and 32 bit samples
- Fix TX/RX at the same time
- RMT driver:
- SPI master driver:
- Handle SD card removal when CD signal is not used
- Send init sequence to SD card before MMC_GO_IDLE_STATE command
- Fix impossible check in uart_set_line_inverse (#489)
- Fix UART data bug when stop-bit is set as 2-bit mode
- Optimize touch pad read function to reduce time spent in spin lock
Ethernet
- Add LAN8720 phy support, move PHY to components (#383)
- Allow separate ethernet & wifi configuration
ULP and deep sleep
- Support for generation of ULP coprocessor programs with binutils assembler
- Add ULP pulse counting example
- Add ULP ADC example
- Add support for deep sleep wakeup using touch sensor
- And deep sleep example illustrating various wakeup modes
Storage
New features
- Add support for nested mount points in VFS
- Add wear_levelling component, which presents an interface similar to the interface of spi_flash. Inside, it stores data inside a partition to in a way that reduces worst case number of erase cycles for any given sector.
- enable support for multiple FATFS drives
Bug fixes
- nvs: check value size before writing, document limitations
- nvs: remove search cache at page level (#365)
- nvs: improve error handling during initialization
- fix inconsistent definition of PATH_MAX and ARG_MAX (#289)
- fat/sdmmc: unmount FATFS object on error
SPI flash library
- Fix large writes, unaligne...
ESP-IDF Pre-release v2.1-rc1
Changes since v2.0.
Breaking changes
Release v2.1 is aimed to be largely compatible with applications written for ESP-IDF v2.0. However, the following breaking changes were introduced:
esp_bt_controller_init
function received a newesp_bt_controller_config_t *
argument.- If the application is built with dual core support, access to DPORT registers using normal register access macros will result in an compile time error (or run time error if register address can not be evaluated at compile time). Applications must be updated to use register access macros with
DPORT_
prefix. nvs_flash_init
function can now return an error code, which must be checked by the application (see NVS examples).- After calling
esp_ble_gatts_create_attr_tab
, application should only expect to receiveESP_GATTS_CREAT_ATTR_TAB_EVT
in GATTS callback.ESP_GATTS_CREATE_EVT
,ESP_GATTS_ADD_xxx_EVT
will not be received now.
Please refer to example gatt_server_service_table for detailed usage.
Build system and tools
- Fix a bug where component src subdirs needed listing before parent source dirs
- Add cleaner way to conditionally compile files
- Significantly reduce startup time on Windows
- esptool: Update to v2.0 final release
- gen_esp32part: Fix app offset errors, Python 3 support
- New 'make monitor' idf_monitor tool for better monitor output.
Bootloader
- Fix secure boot enable - can verify bootloader image
- Enable checks for encrypted flash in OTA (#453)
- Enable SPI flash Quad I/O in bootloader: Bootloader checks flash ID, enables Quad I/O mode based on flash type.
FreeRTOS
Bug fixes
- Fixes for the following APIs in SMP mode:
- uxTaskGetSystemState
- vTaskSuspend()/vTaskResume()
- Always disable interrupts in a critical region
- Release coprocessor registers when a task is deleted
- Delay context switch from queue/task APIs until exiting critical section
- Fix finding location of ISR stack space for CPU1
- Fix cross-core event group sync
Other changes
- Assert when a new task is started on CPU1 while application is running in single core mode
- Make internal stack size variables in 32-bit instead of 16-bit
- Increase timer task stack size to 2048 bytes
- Add max task length name configuration
- Expose task stack overflow watchpoint option
- Use more regions previously reserved for ROM routines/stack as heap, freeing up about 28K of RAM.
SoC functions
- Introduce soc component, add source of rtc_clk and rtc_pm libraries
- Add support for 32k XTAL as RTC clock source
- Improved timekeeping accuracy when using internal RTC clock
- Improve XTAL frequency detection, add support for selecting XTAL frequency in menuconfig
- Default CPU frequency in menuconfig is set to 160 MHz (previously was 240 MHz)
- Add workaround for DPORT access bug in ESP32. When accessing DPORT registers, applications must use register operation macros with DPORT_ prefix.
- Allow REG_SET_FIELD macro to be used for bit fields
- Update soc/io_mux_reg.h to latest version (#349)
WiFI
New features
- Add smartconfig example
- Support static WiFi TX buffers, the number of the buffers is configured via menuconfig
- Support for active/passive scan with configurable dwell time (new members of wifi_scan_config_t structure)
- Support for packet filtering in promiscuous mode using new esp_wifi_{get,set}_promiscuous_filter APIs
- New member of wifi_auth_mode_t enum for WPA2 Enterprise
- New channel number setting in wifi_sta_config_t for fast connection to the AP
Bug fixes
- Fix a WiFi compatibility issue which caused failure to connects to some APs, such as TP-LINK 742N, in some scenarios
- Fix a bug which caused OTA upgrade to fail
- Improve WPS connection success ratio
- Fix the bug that ESP32 didn't receive MIMO packet and missed some AMPDU encrypted packets in promiscuous mode
- Fix several WiFi crash bugs
Other changes
- Change scanned AP's SSID array length to 33 bytes
BLE
-
Gatt server creating GATT service via attribute table optimization
- Remove restrictions in characteristic numbers for each service
- Fix memory leak while creating or deleting services
- Fix a bug while setting attribute values
-
Gatt server auto-response via stack optimization
- Add process of prepare_write_request packet
- Fix bugs while processing packets of read blob request, write request and read request
-
Gatt server general optimization
- Add events of GATT server open, cancel open and close
-
Gatt client optimization
- Register remote device’s GATT service change ccc descriptor automatically
- Add API to prepare write descriptor
- Add API to refresh cache of service discovery results to initiate a new service discovery procedure
-
GAP central role scan mode optimization
- Fix a bug that scan lasts only 5 minutes in permanent scan mode
- Add advertising data length and scan response length in scan results
-
GAP peripheral role advertising mode optimization
- Add events of advertising stop and scan stop complete
- Fix a bug that sometimes advertising is stopped unexpectedly
-
Connection establishment and disconnection APIs optimization
- Add common gap disconnect API for both GATT server and GATT client
- Add connected event and disconnected event for GATT client, to detect connection state in either GATT server or GATT client callback functions
-
GAP general optimization
- Add LE data packet length set completed event
- Add connection parameter update request completed event
- Fix a bug that host can’t get remote device’s features
-
New SMP APIs
- Add support of different pairing methods, including MITM, secure connection and others
- Add APIs to configure secure parameters
- Add SMP security example
- Fix reconnection issue in security mode
-
L2CAP and HCI optimization
- Fix a bug of HCI packet fragmentation error
- Add support of HCI UART
-
Memory optimization
- BT and BLE can be enabled individually
- Support for disabling GATT server, GATT client, SMP, etc, in menuconfig
-
Merge bug fixes from Bluedroid 7.1.1
-
Smart phone compatibility optimization
-
BLE example code optimization
-
Enhance error checking and processing in stack
Classic BT
-
New Host APIs
- Add APIs to set device name
- Add APIs to set discoverability and connectability mode
-
New Profiles
- Add A2DP Sink Profile
- Add AVRCP Controller Profile
-
Controller Bugs Fixes
- Fix a bug of inconsistent state handling in sniff mode
- Fix a bug while using HCI Controller to host data flow control
- Fix a bug of Invalid handling of HCI command "HCI_Host_Number_of_Completed_Packets"
- Fix a bug of assertion fails in ACL-U data transmission for classic BT
- Fix controller RX/TX bugs (using rand/srand in cache, tasks block, exception and etc)
- Fix PHY init bug
-
Bluetooth tasks priorities optimization
-
Osi_alarm module optimized to be thread-safe
Drivers
New features
- Motor Control PWM (MCPWM) driver and examples
- SPI slave driver and examples
- Support for PDM and built-in DAC in I2S driver
- Support for low speed channels in LEDC driver
- Add ADC1 example
- Add example on using capacitive touch sensors
Bug fixes
- Make arguments to all config calls 'const' (#519)
- I2C driver:
- I2S driver:
- Fix error when changing channel number in i2s_set_clk function
- Fix support for 24 and 32 bit samples
- Fix TX/RX at the same time
- RMT driver:
- SPI master driver:
- Handle SD card removal when CD signal is not used
- Send init sequence to SD card before MMC_GO_IDLE_STATE command
- Fix impossible check in uart_set_line_inverse (#489)
- Fix UART data bug when stop-bit is set as 2-bit mode
- Optimize touch pad read function to reduce time spent in spin lock
Ethernet
- Add LAN8720 phy support, move PHY to components (#383)
- Allow separate ethernet & wifi configuration
ULP and deep sleep
- Support for generation of ULP coprocessor programs with binutils assembler
- Add ULP pulse counting example
- Add ULP ADC example
- Add support for deep sleep wakeup using touch sensor
- And deep sleep example illustrating various wakeup modes
Storage
New features
- Add support for nested mount points in VFS
- Add wear_levelling component, which presents an interface similar to the interface of spi_flash. Inside, it stores data inside a partition to in a way that reduces worst case number of erase cycles for any given sector.
- enable support for multiple FATFS drives
Bug fixes
- nvs: check value size before writing, document limitations
- nvs: remove search cache at page level (#365)
- nvs: improve error handling during initialization
- fix inconsistent definition of PATH_MAX and ARG_MAX (#289)
- fat/sdmmc: unmount FATFS object on error
SPI flash library
- Fix large writes, unaligned writes, and writes from flash
- Fix race condition in s_flash_op_complete access
- Move some parts of ROM SPI flash driver into ESP-IDF to fix a bug in Wait_SPI_Idle() function
- SPI flash operations lock for shorter periods
- Fix partition iteration order in esp_partition APIs
- Add a workaround for stale...
ESP-IDF Release 2.0
Changes since v1.0.
Build system and tools
- Updated toolchain to use to GCC 5.2.0, which includes a fix for FP division bug (#96)
- C++ and STL support in the build system and RTOS
- Add IDF_VER environment variable and preprocessor define, esp_get_idf_version function
- Simplifed WiFi, Bluetooth, Ethernet config options
- Removed KEEP from RAM-resident sections of linker script, which saves some RAM
- Removed FLAGS_XXX variable option in the build system, replace with per-target overrides
- New 'make size' build target
- New 'make monitor' build target
- Dependency make rules are generated for assembler source files as well
- Support for default sdkconfig values via sdkconfig.defaults file
- Esptool updated to 2.0-rc
Bootloader, FreeRTOS, and SoC functions
- Bootloader sets CPU frequency to 80MHz
- Bootloader checks if DRAM segments are going to collide with stack
- Dual core mode is enabled by default
- Replaced backwards-compatible portTICK_RATE_MS with FreeRTOS v8+ portTICK_PERIOD_MS
- Interrupt allocation APIs with interrupt sharing support
- Support for interrupt handlers outside of IRAM
- Support for allocation of memory from IRAM pool
- APIs for deep sleep wake up using ULP, EXT0, EXT1 sources
- API to control power down of RTC peripherals in deep sleep
- Improved stack overflow detection and reporting
- Panic handler prints backtrace
- On abort(), panic handler prints the PC address where abort() was called
- Support for generation of core dumps and core dump analysis tools
- Fix crash if cross-core interrupt sent with flash cache disabled
- Fix issue where lower priority task can preempt other core
- New xPortInIsrContext() function to check if CPU is in ISR
- FreeRTOS timer task stack size increased to 2048 bytes
- Fix location of ISR stack for CPU1
WiFi and BT
- Correctly enable/disable PHY when WiFi and/or BT are enabled/disabled
- New menuconfig options to set WiFi, BT and Ethernet MAC addresses
- Support Long Range Rate mode along with bgn mode to support long range WiFi communication.
- Set DTIM sleep mode as default
- WiFi throughput optimization
- WiFi buffer size configurable
- Support full packet receive in sniffer mode
- phy_init no longer re-writes already valid calibration data
- BLE Host support
- BLE Host BQB qualified
- Add BLE BLUFI profile with security for WiFi configuration
- Add BLE APIs to use table to create GATT server service
- Enable BLE advertising channel 39
- Enable AP A-MPDU RX interface
- Ethernet support Flow control
- New WPA2 APIs to set/clear identity
- WiFi RX performance improvements
- Fix bugs in WiFi connection
- Fix bugs in DTIM Sleep mode
- Fix WiFi sniffer behaviour
- Fix Esptouch exceptions
- Fix bugs in BLE mode:
- Advertising in ADV_TYPE_DIRECT_IND_LOW mode doesn't work
- Advertising stop doesn't work sometimes
- Bluedroid init/deinit/enable/disable memory leak
- GATT client can not receive notify or indicate
- Errors caused by calling bluedroid APIs before init/enable
- GATT server can not be connected in sometimes
- BT/BTLE RF power unstable
- BLE advertising data no longer truncated after 31st octet
- Allow Blufi to work with small MTU size
- Blufi correctly resets security mode on state reset
- HCI task stack overflow bug fixed
- Multiple BLE GATT and GATT table fixes
- other minor bugs
Ethernet
- Disable flow control in L2 to L3 copy mode
- Example documentation, add GPIO for PHY power control to example
New drivers
- I2C
- I2S
- SPI master
- Sigma-delta Modulation
- RTC peripherals: touch pad, ADC, DAC, RTC IO
- SDMMC host
C standard library
- Optional (opt-out) support for 64-bit integer and C99 formats in newlib stdio functions
- Support for console redirection to other UART
- Support for non-blocking reading from UART via stdin
Network
- New LwIP menuconfig options to set SO_RCVBUF, TCP_MAXRTX, TCP_SYNMAXRTX, IP_FRAGMENT, IP_REASSEMBLY
- DHCP client reliability improvements
- OpenSSL layer fixes for large writes, debugging output
- Allow to set different hostname for each interface in tcpip_adapter
- mDNS library added
- libcoap library added
ULP coprocessor
- Initial support for generation of ULP coprocessor code
Storage
- Support for flash encryption and secure boot
- Option for app & partition table signing to happen outside build system
- Honour "encrypted" flag in partition table
- Fix issue with stale cache reads when flash encryption is enabled
- fopen() works in append mode
- Fix spi_flash operation crashes in single core mode
- Fix MMAP for SPI_FLASH_MMAP_INST
- sdmmc: Can set slot width when configuring slot
- Add directory APIs to VFS layer and corresponding POSIX functions
- Add FATFS library with SDMMC and VFS support
- Removed alignment requirements from spi_flash_{read,write}
OTA
- Fix OTA when flash encryption is enabled
- OTA falls back to factory if the ota data partition is invalid
- OTA verifies new app image before switching sources
Encoding/decoding
- Floating point format support in cJSON
Documentation and examples
- Moved examples to new folders / categories
- READMEs for examples which did not have them
- OTA example
- WPA2 enterprise example
- mDNS example
- I2C example
- I2S example
- LEDC example
- GPIO example
- UART example
- SPI master example
- Sigma-delta modulation example
- SD card / FATFS example
- Unit testing documentation
Important changes
-
Toolchain version has been updated to use GCC 5.2.0. Building projects with GCC 4.8.5 is no longer supported, and will trigger a warning in the build system.
-
Interrupt numbers are now assigned using interrupt allocation API. Applications should not use hardcoded interrupt numbers.
-
GPIO driver
-
Modify the parameter of gpio_isr_register function.
esp_err_t gpio_isr_register(void (*fn)(void*), void * arg, int intr_alloc_flags, gpio_isr_handle_t *handle);
-
Add GPIO interrupt service, so that we can hook different isr handler to each GPIO.
esp_err_t gpio_isr_handler_add(gpio_num_t gpio_num, gpio_isr_t isr_handler, void* args); esp_err_t gpio_isr_handler_remove(gpio_num_t gpio_num); esp_err_t gpio_install_isr_service(int intr_alloc_flags); void gpio_uninstall_isr_service();
-
Fix GPIO pull-up/down function, old macros should not be used any more. Use
gpio_{pullup,pulldown}_{en,dis}
functions instead.PIN_PULLUP_EN(GPIO_PIN_MUX_REG[x]) -> gpio_pullup_en(x) PIN_PULLUP_DIS(GPIO_PIN_MUX_REG[x]) -> gpio_pullup_dis(x) PIN_PULLDWN_EN(GPIO_PIN_MUX_REG[x]) -> gpio_pulldown_en(x) PIN_PULLDWN_DIS(GPIO_PIN_MUX_REG[x]) -> gpio_pulldown_dis(x)
-
-
UART driver
-
Modify the parameters of uart_driver_install and uart_isr_register
esp_err_t uart_driver_install(uart_port_t uart_num, int rx_buffer_size, int tx_buffer_size, int queue_size, QueueHandle_t *uart_queue, int intr_alloc_flags); esp_err_t uart_isr_register(uart_port_t uart_num, void (*fn)(void*), void * arg, int intr_alloc_flags, uart_isr_handle_t *handle);
-
Add API to get received data length in buffer.
esp_err_t uart_get_buffered_data_len(uart_port_t uart_num, size_t* size);
-
Add pattern detect feature.
esp_err_t uart_disable_pattern_det_intr(uart_port_t uart_num); esp_err_t uart_enable_pattern_det_intr(uart_port_t uart_num, char pattern_chr, uint8_t chr_num, int chr_tout, int post_idle, int pre_idle);
-
-
LEDC driver
-
Modify the parameters for ISR register APIs:
esp_err_t ledc_isr_register(void (*fn)(void*), void * arg, int intr_alloc_flags, ledc_isr_handle_t *handle);
-
Add fade functions for LEDC:
esp_err_t ledc_set_fade_with_step(ledc_mode_t speed_mode, ledc_channel_t channel, int target_duty, int scale, int cycle_num); esp_err_t ledc_set_fade_with_time(ledc_mode_t speed_mode, ledc_channel_t channel, int target_duty, int max_fade_time_ms); esp_err_t ledc_fade_func_install(int intr_alloc_flags); void ledc_fade_func_uninstall(); esp_err_t ledc_fade_start(ledc_channel_t channel, ledc_fade_mode_t wait_done);
-
-
Modify parameters for ISR register API in PCNT driver
esp_err_t pcnt_isr_register(void (*fun)(void*), void * arg, int intr_alloc_flags, pcnt_isr_handle_t *handle);
-
Modify parameters for ISR register API in RMT driver
esp_err_t rmt_driver_install(rmt_channel_t channel, size_t rx_buf_size, int intr_alloc_flags); esp_err_t rmt_isr_register(void (*fn)(void*), void * arg, int intr_alloc_flags, rmt_isr_handle_t *handle);
-
Modify parameters for ISR register API in timer group driver
esp_err_t timer_isr_register(timer_group_t group_num, timer_idx_t timer_num, void (*fn)(void*), void * arg, int intr_alloc_flags, timer_isr_handle_t *handle);
-
Bluetooth APIs
-
Add/modify API prefix for the following functions and types:
bt_controller_init -> esp_bt_controller_init vhci_host_callback -> esp_vhci_host_callback API_vhci_host_check_send_available -> esp_vhci_host_check_send_available API_vhci_host_send_packet -> esp_vhci_host_send_packet API_vhci_host_register_callback -> esp_vhci_host_register_callback
-
Modify function names of Bluetooth enable/disable APIs:
esp_enable_bluetooth -> esp_bluedroid_enable esp_disable_bluetooth -> esp_bluedroid_disable esp_init_bluetooth -> esp_bluedroid_init esp_deinit_bluetooth -> esp_bluedroid_deinit
-
Modify callback type of GAP API:
esp_err_t esp_ble_gap_register_callback(esp_gap_ble...
-
ESP-IDF v2.0 Release Candidate 2
Changes since v2.0-rc1
Security
- Fix bug where hardware RNG could be disabled following a soft reset
- Fix stack overflows in mDNS component
Wifi and BT
- phy_init no longer re-writes already valid calibration data
- Correctly enable/disable PHY when WiFi and/or BT are enabled/disabled
- New menuconfig options to set WiFi, BT and Ethernet MAC addresses
- Enable BLE advertising channel 39
- BLE advertising data no longer truncated after 31st octet
- Multiple BLE GATT and GATT table fixes
- Allow BT Blufi to work with small MTU size
- BT Blufi correctly resets security mode on state reset
- DHCP client reliability improvements
- WiFi RX performance
- Fix WiFi sniffer behaviour
- Enable AP A-MPDU RX interface
- General WiFi layer fixes & optimisations
- OpenSSL layer fixes for large writes, debugging output
FreeRTOS
- Fix crash if cross-core interrupt sent with flash cache disabled
- Fix issue where lower priority task can preempt other core
- New xPortInIsrContext() function to check if CPU is in ISR
Ethernet
- Disable flow control in L2 to L3 copy mode
- Example documentation, add GPIO for PHY power control to example
Deep Sleep
- Restore correct deep sleep consumption, fix power regression in v2.0-rc1
Storage
- Honour "encrypted" flag in partition table
- Fix OTA when flash encryption is enabled
- OTA falls back to factory if the ota data partition is invalid
- OTA verifies new app image before switching sources
- Fix issue with stale cache reads when flash encryption is enabled
- fopen() works in append mode
- Fix spi_flash operation crashes in single core mode
- Fix MMAP for SPI_FLASH_MMAP_INST
- sdmmc: Can set slot width when configuring slot
Tools
- Partition table CSV can be an absolute path
- Core dump documentation expanded, reliability fixes
- menuconfig now works with gperf 3.1
- Correct incremental builds when components added/removed
Obtaining v2.0-rc2
The source files attached to this release will not work due to our use of git submodules. To get this release, use the following commands:
git clone https://github.com/espressif/esp-idf.git esp-idf-v2.0-rc2
cd esp-idf-v2.0-rc2/
git checkout v2.0-rc2
git submodule update --init
ESP-IDF v2.0 Release Candidate 1
Build system and tools
- Updated toolchain to use to GCC 5.2.0, which includes a fix for FP division bug (#96)
- C++ and STL support in the build system and RTOS
- Add IDF_VER environment variable and preprocessor define, esp_get_idf_version function
- Simplifed WiFi, Bluetooth, Ethernet config options
- Removed KEEP from RAM-resident sections of linker script, which saves some RAM
- Removed FLAGS_XXX variable option in the build system, replace with per-target overrides
- New 'make size' build target
- New 'make monitor' build target
- Dependency make rules are generated for assembler source files as well
- Support for default sdkconfig values via sdkconfig.defaults file
- Esptool updated to 2.0-rc
Bootloader, FreeRTOS, and SoC functions
- Bootloader sets CPU frequency to 80MHz
- Bootloader checks if DRAM segments are going to collide with stack
- Dual core mode is enabled by default
- Replaced backwards-compatible portTICK_RATE_MS with FreeRTOS v8+ portTICK_PERIOD_MS
- Interrupt allocation APIs with interrupt sharing support
- Support for interrupt handlers outside of IRAM
- Support for allocation of memory from IRAM pool
- APIs for deep sleep wake up using ULP, EXT0, EXT1 sources
- API to control power down of RTC peripherals in deep sleep
- Improved stack overflow detection and reporting
- Panic handler prints backtrace
- On abort(), panic handler prints the PC address where abort() was called
- Support for generation of core dumps and core dump analysis tools
WiFi and BT
- Support Long Range Rate mode along with bgn mode to support long range WiFi communication.
- Set DTIM sleep mode as default
- WiFi throughput optimization
- WiFi buffer size configurable
- Support full packet receive in sniffer mode
- BLE Host support
- BLE Host BQB qualified
- Add BLE BLUFI profile with security for WiFi configuration
- Add BLE APIs to use table to create GATT server service
- Ethernet support Flow control
- New WPA2 APIs to set/clear identity
- Fix bugs in WiFi connection
- Fix bugs in DTIM Sleep mode
- Fix bugs in BLE mode:
- Advertising in ADV_TYPE_DIRECT_IND_LOW mode doesn't work
- Advertising stop doesn't work sometimes
- Bluedroid init/deinit/enable/disable memory leak
- GATT client can not receive notify or indicate
- Errors caused by calling bluedroid APIs before init/enable
- GATT server can not be connected in sometimes
- BT/BTLE RF power unstable
- other minor bugs
New drivers
- I2C
- I2S
- SPI master
- Sigma-delta Modulation
- RTC peripherals: touch pad, ADC, DAC, RTC IO
- SDMMC host
Other components
- Optional (opt-out) support for 64-bit integer and C99 formats in newlib stdio functions
- Support for console redirection to other UART
- Support for non-blocking reading from UART via stdin
- Initial support for generation of ULP coprocessor code
- Initial support for flash encryption and secure boot
- Option for app & partition table signing to happen outside build system
- New LwIP menuconfig options to set SO_RCVBUF, TCP_MAXRTX, TCP_SYNMAXRTX, IP_FRAGMENT, IP_REASSEMBLY
- Allow to set different hostname for each interface in tcpip_adapter
- mDNS library added
- libcoap library added
- Add directory APIs to VFS layer and corresponding POSIX functions
- Add FATFS library with SDMMC and VFS support
- Removed alignment requirements from spi_flash_{read,write}
- Floating point format support in cJSON
Documentation and examples
- Moved examples to new folders / categories
- READMEs for examples which did not have them
- OTA example
- WPA2 enterprise example
- mDNS example
- I2C example
- I2S example
- LEDC example
- GPIO example
- UART example
- SPI master example
- Sigma-delta modulation example
- SD card / FATFS example
- Unit testing documentation
Important changes
-
Toolchain version has been updated to use GCC 5.2.0. Building projects with GCC 4.8.5 is no longer supported, and will trigger a warning in the build system.
-
Interrupt numbers are now assigned using interrupt allocation API. Applications should not use hardcoded interrupt numbers.
-
GPIO driver
-
Modify the parameter of gpio_isr_register function.
esp_err_t gpio_isr_register(void (*fn)(void*), void * arg, int intr_alloc_flags, gpio_isr_handle_t *handle);
-
Add GPIO interrupt service, so that we can hook different isr handler to each GPIO.
esp_err_t gpio_isr_handler_add(gpio_num_t gpio_num, gpio_isr_t isr_handler, void* args); esp_err_t gpio_isr_handler_remove(gpio_num_t gpio_num); esp_err_t gpio_install_isr_service(int intr_alloc_flags); void gpio_uninstall_isr_service();
-
Fix GPIO pull-up/down function, old macros should not be used any more. Use
gpio_{pullup,pulldown}_{en,dis}
functions instead.PIN_PULLUP_EN(GPIO_PIN_MUX_REG[x]) -> gpio_pullup_en(x) PIN_PULLUP_DIS(GPIO_PIN_MUX_REG[x]) -> gpio_pullup_dis(x) PIN_PULLDWN_EN(GPIO_PIN_MUX_REG[x]) -> gpio_pulldown_en(x) PIN_PULLDWN_DIS(GPIO_PIN_MUX_REG[x]) -> gpio_pulldown_dis(x)
-
-
UART driver
-
Modify the parameters of uart_driver_install and uart_isr_register
esp_err_t uart_driver_install(uart_port_t uart_num, int rx_buffer_size, int tx_buffer_size, int queue_size, QueueHandle_t *uart_queue, int intr_alloc_flags); esp_err_t uart_isr_register(uart_port_t uart_num, void (*fn)(void*), void * arg, int intr_alloc_flags, uart_isr_handle_t *handle);
-
Add API to get received data length in buffer.
esp_err_t uart_get_buffered_data_len(uart_port_t uart_num, size_t* size);
-
Add pattern detect feature.
esp_err_t uart_disable_pattern_det_intr(uart_port_t uart_num); esp_err_t uart_enable_pattern_det_intr(uart_port_t uart_num, char pattern_chr, uint8_t chr_num, int chr_tout, int post_idle, int pre_idle);
-
-
LEDC driver
-
Modify the parameters for ISR register APIs:
esp_err_t ledc_isr_register(void (*fn)(void*), void * arg, int intr_alloc_flags, ledc_isr_handle_t *handle);
-
Add fade functions for LEDC:
esp_err_t ledc_set_fade_with_step(ledc_mode_t speed_mode, ledc_channel_t channel, int target_duty, int scale, int cycle_num); esp_err_t ledc_set_fade_with_time(ledc_mode_t speed_mode, ledc_channel_t channel, int target_duty, int max_fade_time_ms); esp_err_t ledc_fade_func_install(int intr_alloc_flags); void ledc_fade_func_uninstall(); esp_err_t ledc_fade_start(ledc_channel_t channel, ledc_fade_mode_t wait_done);
-
-
Modify parameters for ISR register API in PCNT driver
esp_err_t pcnt_isr_register(void (*fun)(void*), void * arg, int intr_alloc_flags, pcnt_isr_handle_t *handle);
-
Modify parameters for ISR register API in RMT driver
esp_err_t rmt_driver_install(rmt_channel_t channel, size_t rx_buf_size, int intr_alloc_flags); esp_err_t rmt_isr_register(void (*fn)(void*), void * arg, int intr_alloc_flags, rmt_isr_handle_t *handle);
-
Modify parameters for ISR register API in timer group driver
esp_err_t timer_isr_register(timer_group_t group_num, timer_idx_t timer_num, void (*fn)(void*), void * arg, int intr_alloc_flags, timer_isr_handle_t *handle);
-
Bluetooth APIs
-
Add/modify API prefix for the following functions and types:
bt_controller_init -> esp_bt_controller_init vhci_host_callback -> esp_vhci_host_callback API_vhci_host_check_send_available -> esp_vhci_host_check_send_available API_vhci_host_send_packet -> esp_vhci_host_send_packet API_vhci_host_register_callback -> esp_vhci_host_register_callback
-
Modify function names of Bluetooth enable/disable APIs:
esp_enable_bluetooth -> esp_bluedroid_enable esp_disable_bluetooth -> esp_bluedroid_disable esp_init_bluetooth -> esp_bluedroid_init esp_deinit_bluetooth -> esp_bluedroid_deinit
-
Modify callback type of GAP API:
esp_err_t esp_ble_gap_register_callback(esp_gap_ble_cb_t callback);
-
Separate gattc_if from conn_id in GATT client and server APIs, changed callback type in the following functions:
esp_ble_gattc_register_callback esp_ble_gattc_close esp_ble_gattc_config_mtu esp_ble_gattc_search_service esp_ble_gattc_get_characteristic esp_ble_gattc_get_descriptor esp_ble_gattc_get_included_service esp_ble_gattc_read_char esp_ble_gattc_read_char_descr esp_ble_gattc_write_char esp_ble_gattc_write_char_descr esp_ble_gattc_execute_write esp_ble_gattc_register_for_notify esp_ble_gattc_unregister_for_notify esp_ble_gatts_register_callback esp_ble_gatts_create_service esp_ble_gatts_add_char esp_ble_gatts_add_char_descr esp_ble_gatts_send_indicate esp_ble_gatts_send_response esp_ble_gatts_set_attr_value esp_ble_gatts_open esp_ble_gatts_close
-
Known issues and missing features
WiFi and BT
- Some bugs when WiFi Stack is used in dual-core FreeRTOS system
- WiFi DTIM sleep is not supported in WiFi/BLE coexistence mode
- WiFi DTIM sleep doesn't reduce the CPU Frequency
- WiFi throughput need more optimization
- ESP-NOW is not supported
- Classic BT host is not supported
- Need more documents for WiFi and BT
Other resolved issues
Issues reported on GitHub and resolved in this release.
Obtaining v2.0-rc1
The source files attached to this release will not work due to our use of git submodules. To get this release, use the following commands:
git clone https://github.com/espressif/esp-idf.git esp-idf-v2.0-rc1
cd esp-idf-v2.0-rc1/
git checkout v2.0-rc1
git submodule update --init
ESP-IDF Release 1.0
Release notes
v1.0
New features and components
This release contains many new components and improved functionality:
- Improved partition APIs, allowing read/write/erase/mmap on a partition
- Drivers:
- RMT driver
- UART driver
- PulseCounter driver
- Ethernet driver (beta)
- Timer Group driver
- Added in-tree examples for various esp-idf features
- FreeRTOS: Backported the static allocation feature from v9.0
- FreeRTOS: Task unblocking on other CPU now happens instantaneously
- BLE/WiFi coexistence support
- Support for deep sleep wakeup stub
- Added task and interrupt watchdogs
- Virtual filesystem APIs
- OTA core APIs
- Secure Boot support (developer testing mode)
- WPS support
- WPA2 Enterprise support
- DTIM Sleep support
- Pass WFA 11n\WPS\WPA2 Enterprise certification
- BLE Host support (beta)
- Ethernet support LwIP
- OpenSSL API for MbedTLS
- Doxygen and ReadTheDocs-style documentation
Known issues and missing features
Build system and tools
- ESP-IDF can only be used when cloned as git repository. Downloaded .zip archive is not functional because it doesn't contain submodule dependencies.
- On Windows, Eclipse may not be able to index the project correctly.
- Windows installation package (MSYS + toolchain) doesn't provide pre-built OpenOCD.
Bootloader, FreeRTOS, and SoC functions
- System configuration defaults to single core mode. Dual core mode is supported, but is set in the configurartion menu under "Components -> FreeRTOS -> Run FreeRTOS Only On First Core".
- CPU frequency can only be set at compile time. Changing CPU frequency at runtime requires some changes in FreeRTOS, which are not done yet.
- All of the following libraries are now placed into IRAM: FreeRTOS, libphy, librtc, libpp, libhal. This causes excessive usage of IRAM. Parts of these libraries may be safely moved into flash.
- 2nd stage bootloader does not verify MD5 signature of loaded application.
- Not all flash chips which support QIO can currently be used in QIO mode. This will be fixed either by adding extra logic to the 2nd stage bootloader, or by adding extra flash configuration commands using esptool. As a workaround, select DIO mode in menuconfig.
- Not all flash chips which support 80M clock can currently be used in 80M clock mode. This will be fixed by adding extra information to 2nd stage bootloader binary and changing SPI Flash library. As a workaround, select 40M clock mode in menuconfig.
- GDB stub works only in post-mortem mode
- Using floating point calculations is not compatible with tasks that have no affinity. Tasks without affinity that use the FPU will be automatically pinned to one of the two CPUs.
- Using floating point calculations in an interrupt handler can lead to a double exception.
WiFi and BT
- WiFi DTIM sleep is not supported in WiFi/BLE coexistence mode
- WiFi DTIM sleep doesn't reduce the CPU Frequency
- WiFi throughput is not optimized yet
- BT host stack is not supported yet
Other components
- SPI flash APIs work only with the main flash chip, and can not work with flash chips connected to other SPI buses.
- C library functions which read from stdin are not connected to UART yet.
- LwIP stack uses task local storage to store an extra per-task mutex.
- Although LwIP does support IPv6, DHCP server and DHCP client don't support IPv6 yet. System_event events related to DHCP also don't support IPv6 yet.
Obtaining the v1.0 release
As mentioned before, the source files attached to this release wil not work due to our use of git submodules. To get this release, use the following commands:
git clone https://github.com/espressif/esp-idf.git esp-idf-v1.0
cd esp-idf-v1.0/
git checkout v1.0
git submodule init
git submodule update
ESP-IDF Release 0.9
Release notes
v0.9
New features and components
This release contains initial versions of the following components:
- ESP-IDF makefile system, described in docs/build_system.rst.
- FreeRTOS 8.2 with SMP support added. Also per-task local storage APIs have been backported. SMP port is described in components/freertos/readme_smp.txt.
- Second stage bootloader
- Newlib 2.2.0, parts of which are in ESP32 ROM
- SPI Flash read/write/erase APIs
- Partition table generation tool
- Binary image generation and flashing tool, esptool.py
- Expat XML parse library, version 2.2.0
- cJSON library
- logging library
- LwIP stack, version 1.5.0(bf7fc41e)
- mbedTLS library, version 2.3.0
- nghttp library, version 1.14.0(a3d22b6d)
- Non-volatile storage (NVS) library
- WiFi stack
- ESP-TOUCH supported
- QoS supported
- TX AMPDU supported
- RX AMPDU supported
- HT40 supported
- Bluetooth controller
- Bluetooth dual mode
- Virtual HCI
- BQB qualified
- Deep sleep flow
Known issues and missing features
Build system and tools
- ESP-IDF can only be used when cloned as git repository. Downloaded .zip archive is not functional because it doesn't contain submodule dependencies.
- On macOS, menuconfig build system may not be able to detect location of ncurses and gettext.
- On Windows, Eclipse may not be able to index the project correctly.
- Windows installation package (MSYS + toolchain) doesn't provide pre-built OpenOCD.
- Configuration of OTP bits using host tools is not implemented.
Bootloader, FreeRTOS, and SoC functions
- CPU frequency can only be set at compile time. Changing CPU frequency at runtime requires some changes in FreeRTOS, which are not done yet.
- No mechanism exists to automatically allocate CPU interrupt numbers. Developers should assign CPU interrupt numbers manually based on the table in soc/soc.h.
- All of the following libraries are now placed into IRAM: FreeRTOS, libphy, librtc, libpp, libhal. This causes excessive usage of IRAM. Parts of these libraries may be safely moved into flash.
- 2nd stage bootloader does not verify MD5 signature of loaded application.
- Not all flash chips which support QIO can currently be used in QIO mode. This will be fixed either by adding extra logic to the 2nd stage bootloader, or by adding extra flash configuration commands using esptool. As a workaround, select DIO mode in menuconfig.
- Not all flash chips which support 80M clock can currently be used in 80M clock mode. This will be fixed by adding extra information to 2nd stage bootloader binary and changing SPI Flash library. As a workaround, select 40M clock mode in menuconfig.
- GDB stub works only in post-mortem mode
- Using floating point calculations is not compatible with tasks that have no affinity. Tasks without affinity that use the FPU will be automatically pinned to one of the two CPUs.
- FreeRTOS is pre-emptive, but not across CPUs yet. If a task on one core wakes up a task on the other CPU (eg by pushing something into an empty queue that the other process is receiving from), it will take until the next FreeRTOS tick until the other process wakes up. (In the default configuration, this means a delay of at max 1ms.) Processes running on the same core will not have this problem.
WiFi and BT
- WiFi DTIM sleep is not supported yet
- WiFi throughput is not optimized yet
- WiFi WPA2-Enterprise and WPS are not supported yet
- WiFi and BT stacks do not coexist yet
- BT/BLE host stack is not supported yet
Other components
- SPI flash APIs work only with the main flash chip, and can not work with flash chips connected to other SPI buses.
- Partition table APIs are missing.
- OTA update APIs are missing.
- C library functions which read from stdin are not connected to UART yet.
- API layer for integrating filesystem support into C library is missing.
- For each FreeRTOS task which uses
printf/fprintf
family of functions, three FILE structures are created (stdin, stdout, stderr). This causes excessive memory usage. - LwIP stack uses task local storage to store an extra per-task mutex.
- Although LwIP does support IPv6, DHCP server and DHCP client don't support IPv6 yet. System_event events related to DHCP also don't support IPv6 yet.
- BIGINT locking functions (
esp_mpi_acquire_hardware
,esp_mpi_release_hardware
) are not exposed publicly yet. - Drivers (GPIO, LEDC) use custom logging macros instead of log library.
- Non-volatile storage library (NVS) doesn't get its layout configuration from partition table, instead it uses fixed layout.
- NVS can not use encrypted flash yet.
- Secure boot and flash encrypt are not supported yet.
- OpenSSL APIs upon mbedTLS are missing.
Obtaining the v0.9 release
As mentioned before, the source files attached to this release wil not work due to our use of git submodules. To get this release, use the following commands:
git clone https://github.com/espressif/esp-idf.git esp-idf-v0.9
cd esp-idf-v0.9/
git checkout v0.9
git submodule init
git submodule update