Releases: espressif/esp-idf
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