@igrr igrr released this Apr 6, 2017 · 4811 commits to master since this release

Assets 2

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


  • 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


  • 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


  • 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
  • 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}


  • 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


  • 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

    1. 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);
    2. 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();
    3. 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

    1. 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);
    2. 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);
    3. 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

    1. 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);
    2. 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

    1. 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
    2. 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

    3. Modify callback type of GAP API:

      esp_err_t esp_ble_gap_register_callback(esp_gap_ble_cb_t callback);
    4. Separate gattc_if from conn_id in GATT client and server APIs, changed callback type in the following functions:


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

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
cd esp-idf-v2.0/
git checkout v2.0
git submodule update --init