How To use ESP-IDF on ESP32-S2 Beta chip

  • from
    Espressif is distributing a small number of ESP32-S2 Beta-DevKitC V1.1 to customers and community members. This gives people a chance to begin exploring the features of the forthcoming ESP32-S2.

    Read the ESP32-S2 announcement


    The ESP32-S2 Beta chip is not the same as the final ESP32-S2, the Beta chip is an engineering sample and as a result not all features are available. Software support is still being developed ahead of the final ESP32-S2 release (see the "Limitations" section below).

    Set up for CMake

    CMake will become the default build system in IDF V4.0 and is the only build system with multiple chip target support.

    The setup process for ESP-IDF with CMake is here:

    Follow the same Getting Started process before starting to work with the new ESP32-S2 Beta chip.

    If you were previously using GNU Make build system, you will need to install additional software as described in the Getting Started guide.

    Get the ESP32-S2 toolchain

    The ESP32-S2 toolchain version may be updated again before the final release, but you can get a pre-release toolchain here:

    Linux 64-bit x86
    Linux 32-bit x86
    The toolchain tuple is xtensa-esp32s2-elf-, for example gcc for this target is named xtensa-esp32s2-elf-gcc.

    Unpack the toolchain archive somewhere and add the bin subdirectory to your PATH, same as described in Getting Started guide for ESP32.

    Check out feature/esp32s2beta branch

    ESP32-S2 Beta support is not yet merged into the IDF master branch. Instead it is in the feature/esp32s2beta branch.

    For an existing ESP-IDF installation:

    cd $IDF_PATH
    git fetch
    git checkout feature/esp32s2beta
    git submodule update --init --recursive

    For a new ESP-IDF installation:

    git clone --recursive -b feature/esp32s2beta

    (Before continuing, please make sure to have followed the remaining Get Started steps for CMake build system such as installing host tools, setting PATH and IDF_PATH environment variables, etc.)

    Building a project for ESP32-S2 Beta target

    Important: Support for ESP32-S2 Beta is a work in progress. Not all drivers, examples, etc. are supported in ESP-IDF yet. For our initial example we will use the HTTP request "protocol" example.

    Linux/macOS users:

    cd $IDF_PATH/examples/protocols/http_request
    rm -rf sdkconfig build -D IDF_TARGET=esp32s2beta menuconfig build

    Windows Command Prompt users:

    Note: There are currently some issues building under Windows. This post will be updated when they are resolved.

    cd %IDF_PATH%\examples\protocols/http_request
    del sdkconfig build -D IDF_TARGET=esp32s2beta menuconfig build

    To flash and watch output from the new board: -p port-name flash monitor

    (Replace port-name with COM4 or /dev/ttyUSB0 or similar name of the serial port connected to the ESP32-S2beta chip.)

    You should see output similar to the following: v2.7-dev
    Executing action: flash
    Choosing default port /dev/ttyUSB0 (use '-p PORT' option to set a specific serial port)
    Running in directory /builds/esp/32/idf/examples/protocols/http_request/build
    Executing "/builds/esp/env/bin/python /builds/esp/32/idf/components/esptool_py/esptool/ -p /dev/ttyUSB0 -b 921600 --after hard_reset write_flash @flash_project_args"... -p /dev/ttyUSB0 -b 921600 --after hard_reset write_flash --flash_mode dio --flash_freq 40m --flash_size 2MB 0x8000 partition_table/partition-table.bin 0x10000 http-request.bin 0x1000 bootloader/bootloader.bin v2.7-dev
    Serial port /dev/ttyUSB0
    Detecting chip type... ESP32S2beta
    Chip is ESP32S2 Beta
    Features: Prerelease Silicon
    Crystal is 40MHz
    MAC: 18:fe:34:71:a4:b0
    Uploading stub...
    Running stub...
    Stub running...
    Changing baud rate to 921600
    Configuring flash size...
    Compressed 3072 bytes to 82...
    Wrote 3072 bytes (82 compressed) at 0x00008000 in 0.0 seconds (effective 7121.2 kbit/s)...
    Hash of data verified.
    Compressed 617744 bytes to 349616...
    Wrote 617744 bytes (349616 compressed) at 0x00010000 in 6.0 seconds (effective 819.4 kbit/s)...
    Hash of data verified.
    Compressed 19040 bytes to 11419...
    Wrote 19040 bytes (11419 compressed) at 0x00001000 in 0.1 seconds (effective 1165.4 kbit/s)...
    Hash of data verified.
    Hard resetting via RTS pin...
    Executing action: monitor
    Running idf_monitor in directory /builds/esp/32/idf/examples/protocols/http_request
    Executing "/builds/esp/env/bin/python /builds/esp/32/idf/tools/ -p /dev/ttyUSB0 -b 115200 --toolchain-prefix xtensa-esp32s2-elf- /builds/esp/32/idf/examples/protocols/http_request/build/http-request.elf -m '/builds/esp/env/bin/python' '/builds/esp/32/idf/tools/' '-D' 'IDF_TARGET=esp32s2beta'"...
    --- idf_monitor on /dev/ttyUSB0 115200 ---
    --- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
    ESP-ROM ver:v1.0.1
    Build:Nov 22 2018 17:03:19
    rst:0x1 (POWERON_RESET),boot:0x8 (SPI_FAST_FLASH_BOOT)
    configspi: 0x00000000, SPIWP:0xee
    mode:DIO, clock div:2
    entry 0x40024340
    I (33) boot: ESP-IDF v4.0-dev-839-g8805b25ef-dirty 2nd stage bootloader
    I (33) boot: compile time 15:34:56
    I (35) boot: Enabling RNG early entropy source...
    I (40) boot: SPI Speed      : 40MHz
    I (44) boot: SPI Mode       : DIO
    I (48) boot: SPI Flash Size : 2MB
    I (52) boot: Partition Table:
    I (56) boot: ## Label            Usage          Type ST Offset   Length
    I (63) boot:  0 nvs              WiFi data        01 02 00009000 00006000
    I (71) boot:  1 phy_init         RF data          01 01 0000f000 00001000
    I (78) boot:  2 factory          factory app      00 00 00010000 00100000
    I (86) boot: End of partition table
    I (90) esp_image: segment 0: paddr=0x00010020 vaddr=0x3ffd0000 size=0x024a4 (  9380) load
    I (101) esp_image: segment 1: paddr=0x000124cc vaddr=0x40028000 size=0x00400 (  1024) load
    0x40028000: _WindowOverflow4 at /builds/esp/32/idf/components/freertos/xtensa_vectors.S:1778
    I (108) esp_image: segment 2: paddr=0x000128d4 vaddr=0x40028400 size=0x0c8c0 ( 51392) load
    I (133) esp_image: segment 3: paddr=0x0001f19c vaddr=0x00000000 size=0x00e74 (  3700) 
    I (135) esp_image: segment 4: paddr=0x00020018 vaddr=0x3f000018 size=0x11750 ( 71504) map
    I (159) esp_image: segment 5: paddr=0x00031770 vaddr=0x00000000 size=0x0e8a0 ( 59552) 
    I (175) esp_image: segment 6: paddr=0x00040018 vaddr=0x40080018 size=0x66cc8 (421064) map
    0x40080018: _stext at ??:?
    I (297) boot: Loaded app from partition at offset 0x10000
    I (297) boot: Disabling RNG early entropy source...
    I (297) spiflash: Instruction cache 	: size 8KB, 8Ways, cache line size 64Byte
    I (305) cpu_start: Pro cpu up.
    I (309) cpu_start: Single core mode
    I (313) heap_init: Initializing. RAM available for dynamic allocation:
    I (320) heap_init: At 3FFB4000 len 00004000 (16 KiB): DRAM
    I (326) heap_init: At 3FFD8290 len 0001FD70 (127 KiB): DRAM
    I (333) heap_init: At 3FFFCDA0 len 00003260 (12 KiB): DRAM
    I (339) cpu_start: Pro cpu start user code
    I (21) cpu_start: Starting scheduler on PRO CPU.
    I (62) wifi: wifi driver task: 3ffdbbbc, prio:23, stack:3584, core=0
    I (62) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE
    I (62) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE
    I (82) wifi: wifi firmware version: 0fca7cf
    I (82) wifi: config NVS flash: enabled
    I (82) wifi: config nano formating: disabled
    I (82) wifi: Init dynamic tx buffer num: 32
    I (92) wifi: Init data frame dynamic rx buffer num: 32
    I (92) wifi: Init management frame dynamic rx buffer num: 32
    I (102) wifi: Init management short buffer num: 32
    I (102) wifi: Init static rx buffer size: 1600
    I (102) wifi: Init static rx buffer num: 10
    I (112) wifi: Init dynamic rx buffer num: 32
    I (112) example_connect: Connecting to MySSID...
    I (252) phy: phy_version: 10, 6afee14, Jun 14 2019, 20:56:06, 0, 2
    I (252) wifi: enable tsf
    I (252) wifi: mode : sta (18:fe:34:71:a4:b0)
    I (382) wifi: new:<1,0>, old:<1,0>, ap:<255,255>, sta:<1,0>, prof:1
    I (1362) wifi: state: init -> auth (b0)
    I (1412) wifi: state: auth -> assoc (0)
    I (1412) wifi: state: assoc -> run (10)
    I (1462) wifi: connected with MySSID, channel 1, bssid = 5c:93:a2:e3:7c:95
    I (1462) wifi: pm start, type: 1
    I (2082) tcpip_adapter: sta ip:, mask:, gw:
    I (2082) example_connect: Connected to MySSID
    I (2092) example_connect: IPv4 address:
    I (2112) example: DNS lookup succeeded. IP=
    I (2112) example: ... allocated socket
    I (2502) example: ... connected
    I (2502) example: ... socket send success
    I (2502) example: ... set socket receiving timeout success
    HTTP/1.0 200 OK
    Cache-Control: max-age=604800
    Content-Type: text/html; charset=UTF-8
    Date: Mon, 01 Jul 2019 05:44:39 GMT
    Etag: "1541025663+ident"
    Expires: Mon, 08 Jul 2019 05:44:39 GMT
    Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT
    Server: ECS (oxr/8314)
    Vary: Accept-Encoding
    X-Cache: HIT
    Content-Length: 1270
    Connection: close
    <!doctype html>
        <title>Example Domain</title>

    Deleting sdkconfig

    When changing the chip target between ESP32 and ESP32-S2 Beta it is necessary to delete any existing sdkconfig and then run at least once with the -D IDF_TARGET=esp32s2beta argument.

    This is because a single sdkconfig can only be generated with support for a single target. If no target name is given, it will default to ESP32.

    When changing target chips, it is recommended to also delete the build directory. This is not a strict requirement, but it is recommended while the ESP-IDF multiple target support is still maturing.


    Currently released ESP32-S2 Beta support in ESP-IDF only supports basic features. Espressif firmware developers are working hard on the remaining support, so check the feature/esp32s2beta branch regularly for updates.
    Full speed USB OTG peripheral is not supported
    Peripheral drivers are a work in progress
    No power saving modes
    No hardware security features or cryptographic accelerator support
    Time-of-Flight (TOF) measurements with normal Wi-Fi packets is not supported

    If you find issues which are not mentioned above, please open an issue on GitHub.

    Please make sure to mention that you are using the ESP32-S2 Beta chip.

Log in to reply