update flash script

This commit is contained in:
proddy
2026-10-08 17:34:14 +02:00
parent 7e96c1ea0a
commit ec6184333e
+101 -24
View File
@@ -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"