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
- 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/fprintffamily 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_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