From f0b4e174d738c94703c373e425afd561da089aeb Mon Sep 17 00:00:00 2001 From: Leandro Pereira Date: Tue, 13 Jun 2017 11:27:16 -0700 Subject: [PATCH] esp32: Use esptool.py to flash with 'make flash' This flashes Zephyr at 0x1000: that's where the first stage bootloader, part of the ESP32 ROM, expects to find an "image header". The second-stage bootloader, part of ESP-IDF, isn't used by the Zephyr port. However, the bootloader can be used if desired; please refer to the ESP-IDF documentation on how to set up partitions tables and use the bootloader. The following environment variables will affect the ESP32 flashing process: Variable Default value ESP_DEVICE /dev/ttyUSB0 ESP_BAUD_RATE 921600 ESP_FLASH_SIZE detect ESP_FLASH_FREQ 40m ESP_FLASH_MODE dio ESP_TOOL espidf It's impossible to determine which serial port the ESP32 board is connected to, as it uses a generic RS232-USB converter. The default of /dev/ttyUSB0 is provided as that's often the assigned name on a Linux machine without any other such converters. The baud rate of 921600bps is recommended. If experiencing issues when flashing, try halving the value a few times (460800, 230400, 115200, etc). It might be necessary to change the flash frequency or the flash mode; please refer to the esptool documentation for guidance on these settings. If ${ESP_TOOL} is set to "espidf", the esptool.py script found within ESP-IDF will be used. Otherwise, this variable is handled as a path to the tool. Signed-off-by: Leandro Pereira --- boards/xtensa/esp32/Makefile.board | 1 + scripts/support/esp32.sh | 50 ++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100755 scripts/support/esp32.sh diff --git a/boards/xtensa/esp32/Makefile.board b/boards/xtensa/esp32/Makefile.board index 8fb989ebec7..1cc4f839bd1 100644 --- a/boards/xtensa/esp32/Makefile.board +++ b/boards/xtensa/esp32/Makefile.board @@ -1,2 +1,3 @@ EMU_PLATFORM ?= DEBUG_SCRIPT := +FLASH_SCRIPT := esp32.sh diff --git a/scripts/support/esp32.sh b/scripts/support/esp32.sh new file mode 100755 index 00000000000..f6b37e1fb78 --- /dev/null +++ b/scripts/support/esp32.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +ESP_DEVICE=${ESP_DEVICE:-/dev/ttyUSB0} +ESP_BAUD_RATE=${ESP_BAUD_RATE:-921600} +ESP_FLASH_SIZE=${ESP_FLASH_SIZE:-detect} +ESP_FLASH_FREQ=${ESP_FLASH_FREQ:-40m} +ESP_FLASH_MODE=${ESP_FLASH_MODE:-dio} +ESP_TOOL=${ESP_TOOL:-espidf} + +cmd_flash() { + local esptool + local elf_name=${O}/${KERNEL_ELF_NAME} + + if [ "x${ESP_TOOL}" = "xespidf" ]; then + esptool=${ESP_IDF_PATH}/components/esptool_py/esptool/esptool.py + else + esptool=${ESP_TOOL} + fi + if [ ! -x ${esptool} ]; then + echo "esptool could not be found at ${esptool}" + exit 1 + fi + + echo "Converting ELF to BIN" + ${esptool} --chip esp32 elf2image ${elf_name} + + echo "Flashing ESP32 on ${ESP_DEVICE} (${ESP_BAUD_RATE}bps)" + ${esptool} --chip esp32 \ + --port ${ESP_DEVICE} \ + --baud ${ESP_BAUD_RATE} \ + --before default_reset \ + --after hard_reset \ + write_flash \ + -u \ + --flash_mode ${ESP_FLASH_MODE} \ + --flash_freq ${ESP_FLASH_FREQ} \ + --flash_size ${ESP_FLASH_SIZE} \ + 0x1000 ${elf_name/.elf/.bin} +} + +CMD="$1"; shift +case "${CMD}" in + flash) + cmd_flash "$@" + ;; + *) + echo "${CMD} not supported" + exit 1 + ;; +esac