Skip to content

ESP-IDF v2.0 Release Candidate 1

Pre-release
Pre-release
Compare
Choose a tag to compare
@igrr igrr released this 21 Jan 08:20
· 39951 commits to master since this release

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

    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:

      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