From ec6184333e78687c83b73500ac7ad0b8ae0e6dfc Mon Sep 17 00:00:00 2001 From: proddy Date: Thu, 8 Oct 2026 17:34:14 +0200 Subject: [PATCH] update flash script --- scripts/do_fresh_install.sh | 125 +++++++++++++++++++++++++++++------- 1 file changed, 101 insertions(+), 24 deletions(-) diff --git a/scripts/do_fresh_install.sh b/scripts/do_fresh_install.sh index 35b27cbc0..27e053600 100755 --- a/scripts/do_fresh_install.sh +++ b/scripts/do_fresh_install.sh @@ -1,8 +1,9 @@ #!/usr/bin/env bash -# Full fresh install of EMS-ESP on an ESP32 16MB board (s_16M_P). + +# Run like: +# ./scripts/do_fresh_install.sh # -# Run from the scripts folder: -# ./do_fresh_install.sh +# Full fresh install of EMS-ESP on an ESP32 16MB board (s_16M_P). # # Flash map (partitions/esp32_partition_16M.csv): # 0x1000 bootloader @@ -13,44 +14,120 @@ # 0xdf0000 LittleFS # # Because otadata points at app0, the device boots EMS-ESP. Recovery stays -# installed in factory for fallback. Do not write recovery at 0x1000 — that +# installed in factory for fallback. Do not write recovery at 0x1000 - that # is the bootloader, and the image overlaps the partition table at 0x8000. set -euo pipefail +cd "$(dirname "$0")" + +# Bold ANSI: 36 cyan, 33 yellow, 35 magenta, 32 green, 31 red. +step() { + local color=$1 + shift + printf '\n\033[1;%sm▶ %s\033[0m\n' "$color" "$*" +} +note() { + printf ' \033[2m%s\033[0m\n' "$*" +} + ESPTOOL=~/.platformio/penv/bin/esptool +PYTHON=~/.platformio/penv/bin/python + PORT=/dev/ttyUSB0 BAUD=${BAUD:-2000000} +# Fast is the installer's default: NVS, otadata, and the first 4 KB of every +# app partition, so nothing old can boot. About a second. ERASE=full still +# wipes the whole chip. +ERASE=${ERASE:-fast} -BUILD_BIN=../.pio/build/s_16M_P -RECOVERY_BIN=../.pio/build/recovery_s_16M_P -BOOT_APP0=~/.platformio/packages/framework-arduinoespressif32/tools/partitions/boot_app0.bin +BUILD_DIR=../.pio/build/s_16M_P +RECOVERY_DIR=../.pio/build/recovery_s_16M_P +FIRMWARE_DIR=../build/firmware +# bin files +BOOT_APP0_BIN=~/.platformio/packages/framework-arduinoespressif32/tools/partitions/boot_app0.bin +FIRMWARE_BIN=$BUILD_DIR/firmware.bin +RECOVERY_BIN=$RECOVERY_DIR/firmware.bin +BOOTLOADER_BIN=$BUILD_DIR/bootloader.bin +PARTITIONS_BIN=$BUILD_DIR/partitions.bin +LITTLEFS_BIN=$FIRMWARE_DIR/emsesp_settings_v39.bin + +# welcome message +step 33 "Welcome to the EMS-ESP fresh install" +note "This will install the latest EMS-ESP firmware and LittleFS" + +# check if platformio is installed +if [[ ! -f $PYTHON ]]; then + printf '\033[1;31mPlatformIO is not installed - please install it first\033[0m\n' >&2 + exit 1 +fi + +# check if esptool is installed +if [[ ! -f $ESPTOOL ]]; then + printf '\033[1;31mESPTool is not installed - please install it first\033[0m\n' >&2 + exit 1 +fi + +# Build LittleFS from data folder +step 33 "Building LittleFS from data folder" +note "packs data/pre_load.json -> $LITTLEFS_BIN" +$PYTHON build_littlefs.py data $LITTLEFS_BIN + +# Check if all files are present +step 33 "Checking images..." for f in \ - "$BUILD_BIN/bootloader.bin" \ - "$BUILD_BIN/partitions.bin" \ - "$BUILD_BIN/firmware.bin" \ - "$RECOVERY_BIN/firmware.bin" \ - "$BOOT_APP0"; do + "$BOOTLOADER_BIN" \ + "$PARTITIONS_BIN" \ + "$FIRMWARE_BIN" \ + "$RECOVERY_BIN" \ + "$BOOT_APP0_BIN" \ + "$LITTLEFS_BIN"; do if [[ ! -f $f ]]; then - echo "Missing $f — build s_16M_P and recovery_s_16M_P first" >&2 + printf '\033[1;31mMissing %s - build s_16M_P and recovery_s_16M_P first\033[0m\n' "$f" >&2 exit 1 fi + note "ok $f" done -# full erase, stay in download mode -$ESPTOOL --chip esp32 --port $PORT --after no-reset erase-flash +# show port, erase and baud rate +step 33 "Port: $PORT, Erase: $ERASE, Baud: $BAUD" -# create the filesystem, in case it's needed -~/.platformio/penv/bin/python build_littlefs.py data $BUILD_BIN/littlefs.bin +# Fast erase on the 16 MB table: nvs, otadata, nvs1, and the starts of boot, +# app0 and app1. Stay in the bootloader for the write that follows. +if [[ $ERASE == full ]]; then + step 33 "Full erase - wiping the whole chip" + $ESPTOOL --chip esp32 --port $PORT --after no-reset erase-flash +else + step 33 "Fast erase - NVS, otadata, and the first 4 KB of every app" + note "nothing old can boot; takes about a second" + before=default-reset + for spec in \ + "0x9000 0x5000 nvs" \ + "0xe000 0x2000 otadata" \ + "0x10000 0x1000 boot" \ + "0x490000 0x1000 app0" \ + "0x920000 0x1000 app1" \ + "0xdb0000 0x40000 nvs1"; do + set -- $spec + printf ' \033[33merase-region %s %s (%s)\033[0m\n' "$1" "$2" "$3" + $ESPTOOL --chip esp32 --port $PORT --before $before --after no-reset \ + erase-region "$1" "$2" + before=no-reset + done +fi -# bootloader, partitions, otadata, recovery, app, filesystem; then boot +step 33 "Writing flash, then hard-reset into EMS-ESP" +note "0x1000 bootloader 0x8000 partitions 0xe000 otadata" +note "0x10000 recovery 0x490000 firmware 0xdf0000 LittleFS" $ESPTOOL --chip esp32 --port $PORT --baud $BAUD \ --before default-reset --after hard-reset \ write-flash -z --flash-mode dio --flash-freq 80m --flash-size detect \ - 0x1000 $BUILD_BIN/bootloader.bin \ - 0x8000 $BUILD_BIN/partitions.bin \ - 0xe000 $BOOT_APP0 \ - 0x10000 $RECOVERY_BIN/firmware.bin \ - 0x490000 $BUILD_BIN/firmware.bin \ - 0xdf0000 $BUILD_BIN/littlefs.bin + 0x1000 $BOOTLOADER_BIN \ + 0x8000 $PARTITIONS_BIN \ + 0xe000 $BOOT_APP0_BIN \ + 0x10000 $RECOVERY_BIN \ + 0x490000 $FIRMWARE_BIN \ + 0xdf0000 $LITTLEFS_BIN + +step 32 "Done - gateway should boot EMS-ESP from app0"