ajout BLE
This commit is contained in:
1 parent
66bb319423
commit
3757975e51
48 files changed
+293826
-284536
No files matched your search
Executable
+123
@@ -0,0 +1,123 @@
|
||||
#!/usr/bin/env bash
|
||||
# Met a jour le firmware du module ST67W611M1 de la X-NUCLEO-67W61M1 depuis la STM32H7S78-DK.
|
||||
#
|
||||
# Les scripts de X-CUBE-ST67W61 ne supportent que quelques cartes NUCLEO. Ici la DK joue le role
|
||||
# de passerelle : gcc/ncp_loader recopie le port serie virtuel du ST-LINK vers l'UART du module
|
||||
# (et le met en mode telechargement), puis l'outil QConn_Flash du pack ecrit le firmware.
|
||||
#
|
||||
# Usage: gcc/ncp_update.sh [version] [--yes]
|
||||
# version version du firmware "mission profile T01" (defaut : la plus recente du pack)
|
||||
# --yes ne pas demander de confirmation
|
||||
#
|
||||
# ATTENTION : le binaire du module est signe ; son chargement VERROUILLE le module s'il ne l'est
|
||||
# pas deja. Operation irreversible.
|
||||
#
|
||||
# Deroulement : compile la passerelle -> la charge dans la flash interne de la DK (a la place du Boot)
|
||||
# -> flashe le module -> RESTAURE le Boot (gcc/flash.sh boot). L'Appli en flash externe n'est pas touchee.
|
||||
# Prerequis : la X-NUCLEO montee sur l'Arduino, DK branchee en USB (CN7), aucun debug ouvert.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
cd "$ROOT"
|
||||
# shellcheck source=toolchain-env.sh
|
||||
source "$ROOT/gcc/toolchain-env.sh"
|
||||
|
||||
RED=$'\033[0;31m'; NC=$'\033[0m'
|
||||
VERSION=""
|
||||
ASSUME_YES=0
|
||||
for arg in "$@"; do
|
||||
case "$arg" in
|
||||
--yes|-y) ASSUME_YES=1 ;;
|
||||
*) VERSION="$arg" ;;
|
||||
esac
|
||||
done
|
||||
|
||||
die() { echo "${RED}erreur: $*${NC}" >&2; exit 1; }
|
||||
|
||||
# --- outils -----------------------------------------------------------------------------------
|
||||
PACK="$(ls -d "$HOME"/STM32Cube/Repository/Packs/STMicroelectronics/X-CUBE-ST67W61/* 2>/dev/null | tail -1)"
|
||||
[[ -n "$PACK" ]] || die "pack X-CUBE-ST67W61 introuvable (~/STM32Cube/Repository/Packs/STMicroelectronics)"
|
||||
BIN_DIR="$PACK/Projects/ST67W6X_Scripts/Binaries"
|
||||
NCP_DIR="$BIN_DIR/NCP_Binaries"
|
||||
QCONN="$BIN_DIR/QConn_Flash/QConn_Flash_Cmd-ubuntu"
|
||||
CLI="${ST_PROGRAMMER_BIN:-}/STM32_Programmer_CLI"
|
||||
|
||||
[[ -x "$CLI" ]] || die "STM32_Programmer_CLI introuvable (STM32CubeIDE dans ~/st ?)"
|
||||
[[ -f "$QCONN" ]] || die "outil QConn_Flash introuvable : $QCONN"
|
||||
if [[ ! -x "$QCONN" ]]; then
|
||||
echo "QConn_Flash n'est pas executable : chmod +x $QCONN"
|
||||
chmod +x "$QCONN"
|
||||
fi
|
||||
|
||||
# --- version du firmware ----------------------------------------------------------------------
|
||||
PREFIX="st67w611m_mission_t01"
|
||||
if [[ -z "$VERSION" ]]; then
|
||||
VERSION="$(ls "$NCP_DIR"/${PREFIX}_v*.bin 2>/dev/null | sed -n "s#^.*/${PREFIX}_v\([0-9][0-9.]*\)\.bin\$#\1#p" | sort -V | tail -n 1)"
|
||||
fi
|
||||
FW="${PREFIX}_v${VERSION}.bin"
|
||||
[[ -f "$NCP_DIR/$FW" ]] || die "firmware introuvable : $NCP_DIR/$FW"
|
||||
|
||||
echo "Firmware du module : $FW"
|
||||
echo "Pack : $PACK"
|
||||
|
||||
# --- confirmation -----------------------------------------------------------------------------
|
||||
echo "${RED}##########################################################${NC}"
|
||||
echo "${RED}# Un binaire SIGNE va etre charge dans le module ST67W611M. #${NC}"
|
||||
echo "${RED}# Il sera VERROUILLE s'il ne l'est pas deja (irreversible). #${NC}"
|
||||
echo "${RED}##########################################################${NC}"
|
||||
if [[ "$ASSUME_YES" -ne 1 ]]; then
|
||||
read -r -p "Continuer ? (Y/N) " answer
|
||||
[[ "$answer" == "Y" || "$answer" == "y" ]] || { echo "Abandon."; exit 1; }
|
||||
fi
|
||||
|
||||
# --- 1. passerelle ----------------------------------------------------------------------------
|
||||
echo ">>> Compilation de la passerelle"
|
||||
make -f gcc/makefile_ncp_loader
|
||||
LOADER_HEX="$ROOT/gcc/ncp_loader/build/ncp_loader.hex"
|
||||
|
||||
# Quoi qu'il arrive ensuite, la DK ne doit pas rester avec la passerelle a la place du Boot.
|
||||
restore_boot() {
|
||||
echo ">>> Restauration du Boot de la DK"
|
||||
if [[ -f "$ROOT/Boot/TouchGFX/build/bin/target.hex" ]]; then
|
||||
"$ROOT/gcc/flash.sh" boot || echo "${RED}Boot non restaure : lance 'gcc/flash.sh boot' a la main${NC}"
|
||||
else
|
||||
echo "${RED}Boot non compile : lance 'make -C gcc -f makefile_boot all' puis 'gcc/flash.sh boot'${NC}"
|
||||
fi
|
||||
}
|
||||
GENERATED_CFG=""
|
||||
cleanup() {
|
||||
[[ -n "$GENERATED_CFG" && -f "$GENERATED_CFG" ]] && rm -f "$GENERATED_CFG"
|
||||
restore_boot
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
echo ">>> Chargement de la passerelle dans la DK"
|
||||
"$CLI" -c port=SWD ap=1 mode=UR -d "$LOADER_HEX" -v -hardRst
|
||||
|
||||
# --- 2. port serie virtuel du ST-LINK ---------------------------------------------------------
|
||||
sleep 1
|
||||
COMNAME="$(ls /dev/serial/by-id/ 2>/dev/null | grep -i "STLINK-V3" | head -n 1 || true)"
|
||||
[[ -n "$COMNAME" ]] || die "port serie du ST-LINK non detecte (/dev/serial/by-id)"
|
||||
COMPORT="$(readlink -f "/dev/serial/by-id/$COMNAME")"
|
||||
echo "Port serie : $COMPORT"
|
||||
stty -F "$COMPORT" 2000000 cs8 -cstopb -parenb || die "port serie deja utilise (ferme tout terminal ou debug)"
|
||||
sleep 1
|
||||
stty -F "$COMPORT" 2000000 cs8 -cstopb -parenb
|
||||
|
||||
# --- 3. configuration de flash (meme principe que le script ST) -------------------------------
|
||||
GENERATED_CFG="$NCP_DIR/mission_t01_flash_prog_cfg_auto.ini"
|
||||
sed "s#^filedir[[:space:]]*=[[:space:]]*\./${PREFIX}_v.*\.bin[[:space:]]*\$#filedir = ./${FW}#" \
|
||||
"$NCP_DIR/mission_t01_flash_prog_cfg.ini" > "$GENERATED_CFG"
|
||||
|
||||
# --- 4. flash du module -----------------------------------------------------------------------
|
||||
echo ">>> Flash du module en cours ..."
|
||||
attempt=0
|
||||
until "$QCONN" --port "$COMPORT" --config "$GENERATED_CFG" --efuse="$NCP_DIR/efusedata.bin"; do
|
||||
attempt=$((attempt + 1))
|
||||
[[ "$attempt" -lt 2 ]] || die "echec du flash du module"
|
||||
echo "QConn_Flash a echoue, nouvel essai ..."
|
||||
sleep 1
|
||||
done
|
||||
|
||||
echo "${NC}>>> Firmware $FW installe."
|
||||
Reference in new issue
Block a user