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 <leandro.pereira@intel.com>
This commit is contained in:
Leandro Pereira 2017-06-13 11:27:16 -07:00 committed by Anas Nashif
commit f0b4e174d7
2 changed files with 51 additions and 0 deletions

View file

@ -1,2 +1,3 @@
EMU_PLATFORM ?=
DEBUG_SCRIPT :=
FLASH_SCRIPT := esp32.sh

50
scripts/support/esp32.sh Executable file
View file

@ -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