ajout BLE
This commit is contained in:
1 parent
66bb319423
commit
3757975e51
48 files changed
+293826
-284536
No files matched your search
+30
-1
@@ -208,6 +208,9 @@ cpp_compiler_options += $(float_options) -mcpu=cortex-m7 -DCORE_CM7
|
||||
linker_options += $(float_options) -mcpu=cortex-m7
|
||||
|
||||
c_compiler_options += -DSTM32H7S7xx -DUSE_HAL_DRIVER
|
||||
# architecture du driver ST67W6X (T01 = pile TCP/IP interne du module, sans LwIP)
|
||||
c_compiler_options += -DST67_ARCH=W6X_ARCH_T01
|
||||
cpp_compiler_options += -DST67_ARCH=W6X_ARCH_T01
|
||||
cpp_compiler_options += -DSTM32H7S7xx -DUSE_HAL_DRIVER
|
||||
|
||||
# include everything + specific vendor folders
|
||||
@@ -339,6 +342,12 @@ board_include_paths := \
|
||||
Appli/Core/Inc \
|
||||
Appli/FATFS/App \
|
||||
Appli/FATFS/Target \
|
||||
Appli/ST67W6X_Network_Driver/Target \
|
||||
Middlewares/ST/ST67W6X_Network_Driver/Api \
|
||||
Middlewares/ST/ST67W6X_Network_Driver/Core \
|
||||
Middlewares/ST/ST67W6X_Network_Driver/Driver/W61_at \
|
||||
Middlewares/ST/ST67W6X_Network_Driver/Driver/W61_bus \
|
||||
Middlewares/ST/ST67W6X_Network_Driver/Utils/Misc \
|
||||
Middlewares/Third_Party/FatFs/source \
|
||||
Middlewares/Third_Party/FatFs/source/drivers/sd \
|
||||
$(gpu2d_path)/TouchGFXNema/include \
|
||||
@@ -364,7 +373,27 @@ board_c_files += \
|
||||
Middlewares/Third_Party/FatFs/source/ff_gen_drv.c \
|
||||
Middlewares/Third_Party/FatFs/source/diskio.c \
|
||||
Middlewares/Third_Party/FatFs/source/ffsystem_cmsis_os.c \
|
||||
Middlewares/Third_Party/FatFs/source/drivers/sd/sd_diskio_dma_rtos.c
|
||||
Middlewares/Third_Party/FatFs/source/drivers/sd/sd_diskio_dma_rtos.c \
|
||||
Appli/Core/Src/remote_params.c \
|
||||
Appli/Core/Src/remote_ble.c \
|
||||
Appli/Core/Src/st67_glue.c \
|
||||
Appli/ST67W6X_Network_Driver/Target/spi_port.c \
|
||||
Middlewares/ST/ST67W6X_Network_Driver/Core/w6x_sys.c \
|
||||
Middlewares/ST/ST67W6X_Network_Driver/Core/w6x_ble.c \
|
||||
Middlewares/ST/ST67W6X_Network_Driver/Core/w6x_wifi.c \
|
||||
Middlewares/ST/ST67W6X_Network_Driver/Core/w6x_net.c \
|
||||
Middlewares/ST/ST67W6X_Network_Driver/Core/w6x_http.c \
|
||||
Middlewares/ST/ST67W6X_Network_Driver/Core/w6x_mqtt.c \
|
||||
Middlewares/ST/ST67W6X_Network_Driver/Driver/W61_at/modem_cmd_handler.c \
|
||||
Middlewares/ST/ST67W6X_Network_Driver/Driver/W61_at/w61_at_ble.c \
|
||||
Middlewares/ST/ST67W6X_Network_Driver/Driver/W61_at/w61_at_common.c \
|
||||
Middlewares/ST/ST67W6X_Network_Driver/Driver/W61_at/w61_at_mqtt.c \
|
||||
Middlewares/ST/ST67W6X_Network_Driver/Driver/W61_at/w61_at_net.c \
|
||||
Middlewares/ST/ST67W6X_Network_Driver/Driver/W61_at/w61_at_sys.c \
|
||||
Middlewares/ST/ST67W6X_Network_Driver/Driver/W61_at/w61_at_wifi.c \
|
||||
Middlewares/ST/ST67W6X_Network_Driver/Driver/W61_bus/spi_iface.c \
|
||||
Middlewares/ST/ST67W6X_Network_Driver/Driver/W61_bus/w61_io.c \
|
||||
Middlewares/ST/ST67W6X_Network_Driver/Utils/Misc/common_parser.c
|
||||
|
||||
|
||||
asm_source_files := \
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
# Passerelle UART pour mettre a jour le firmware du module ST67W611M1 (voir gcc/ncp_loader/main.c).
|
||||
# Makefile autonome : lance depuis la racine avec make -f gcc/makefile_ncp_loader
|
||||
# Produit gcc/ncp_loader/build/ncp_loader.{elf,hex}.
|
||||
|
||||
CC := arm-none-eabi-gcc
|
||||
OBJCOPY := arm-none-eabi-objcopy
|
||||
SIZE := arm-none-eabi-size
|
||||
|
||||
OUT := gcc/ncp_loader/build
|
||||
HAL := Drivers/STM32H7RSxx_HAL_Driver
|
||||
|
||||
# Memes options que le Boot (gcc/makefile_boot) pour le coeur et les definitions de la puce.
|
||||
ARCH := -mcpu=cortex-m7 -mthumb -mfpu=fpv5-sp-d16 -mfloat-abi=hard
|
||||
DEFS := -DCORE_CM7 -DST -DSTM32H7S7xx -DUSE_HAL_DRIVER -DUSE_STM32H7S78_DK -DUSE_PWR_LDO_SUPPLY__N -DUSE_FLOATING_POINT
|
||||
INCS := -IBoot/Core/Inc \
|
||||
-I$(HAL)/Inc \
|
||||
-IDrivers/CMSIS/Include \
|
||||
-IDrivers/CMSIS/Device/ST/STM32H7RSxx/Include
|
||||
CFLAGS := $(ARCH) $(DEFS) $(INCS) -Os -g -Wall -std=gnu11 -ffunction-sections -fdata-sections -fno-exceptions
|
||||
LDFLAGS := $(ARCH) -Os -g --specs=nosys.specs --specs=nano.specs -Wl,--gc-sections -static \
|
||||
-T Boot/stm32h7s7xx_flash.ld -Wl,-Map=$(OUT)/ncp_loader.map
|
||||
|
||||
SRCS := gcc/ncp_loader/main.c \
|
||||
Boot/Core/Src/system_stm32h7rsxx.c \
|
||||
$(HAL)/Src/stm32h7rsxx_hal.c \
|
||||
$(HAL)/Src/stm32h7rsxx_hal_cortex.c \
|
||||
$(HAL)/Src/stm32h7rsxx_hal_gpio.c \
|
||||
$(HAL)/Src/stm32h7rsxx_hal_pwr.c \
|
||||
$(HAL)/Src/stm32h7rsxx_hal_pwr_ex.c \
|
||||
$(HAL)/Src/stm32h7rsxx_hal_rcc.c \
|
||||
$(HAL)/Src/stm32h7rsxx_hal_rcc_ex.c \
|
||||
$(HAL)/Src/stm32h7rsxx_hal_dma.c \
|
||||
$(HAL)/Src/stm32h7rsxx_hal_dma_ex.c \
|
||||
$(HAL)/Src/stm32h7rsxx_hal_exti.c \
|
||||
$(HAL)/Src/stm32h7rsxx_hal_flash.c \
|
||||
$(HAL)/Src/stm32h7rsxx_hal_flash_ex.c
|
||||
ASRC := gcc/startup_stm32h7s7l8hxh_boot.s
|
||||
|
||||
OBJS := $(SRCS:%.c=$(OUT)/%.o) $(ASRC:%.s=$(OUT)/%.o)
|
||||
|
||||
.PHONY: all clean
|
||||
all: $(OUT)/ncp_loader.hex
|
||||
@$(SIZE) $(OUT)/ncp_loader.elf
|
||||
|
||||
$(OUT)/%.o: %.c
|
||||
@echo Compiling $<
|
||||
@mkdir -p $(@D)
|
||||
@$(CC) $(CFLAGS) -MMD -MP -c $< -o $@
|
||||
|
||||
$(OUT)/%.o: %.s
|
||||
@echo Assembling $<
|
||||
@mkdir -p $(@D)
|
||||
@$(CC) $(ARCH) -g -x assembler-with-cpp -c $< -o $@
|
||||
|
||||
$(OUT)/ncp_loader.elf: $(OBJS)
|
||||
@echo Linking $@
|
||||
@$(CC) $(LDFLAGS) $(OBJS) -o $@
|
||||
|
||||
$(OUT)/ncp_loader.hex: $(OUT)/ncp_loader.elf
|
||||
@$(OBJCOPY) -O ihex $< $@
|
||||
|
||||
clean:
|
||||
rm -rf $(OUT)
|
||||
|
||||
-include $(OBJS:.o=.d)
|
||||
@@ -0,0 +1,182 @@
|
||||
/*
|
||||
* Passerelle de mise a jour du firmware du module ST67W611M1 (X-NUCLEO-67W61M1) pour la
|
||||
* STM32H7S78-DK. Adaptation du "NCP_Loader" de ST (fourni pour les NUCLEO uniquement).
|
||||
*
|
||||
* Elle met le module en mode telechargement (BOOT haut + impulsion sur CHIP_EN), puis recopie en
|
||||
* boucle l'etat des broches entre le port serie virtuel du ST-LINK (PC) et l'UART du module. Aucune
|
||||
* UART materielle : la recopie bit a bit supporte les 2 Mbauds de l'outil QConn_Flash.
|
||||
*
|
||||
* Usage : gcc/ncp_update.sh (compile, charge cette passerelle, flashe le module, restaure le Boot).
|
||||
* Ce programme remplace temporairement le Boot en flash interne : il ne lance jamais l'Appli.
|
||||
*
|
||||
* Broches (UM3289 / UM3449) :
|
||||
* PE7 <- module UART_TXD (Arduino D0) PE8 -> module UART_RXD (Arduino D1)
|
||||
* PD0 <- PC via ST-LINK (VCP UART4 RX) PD1 -> PC via ST-LINK (VCP UART4 TX)
|
||||
* PD13 -> CHIP_EN (Arduino D5) PD15 -> BOOT (Arduino D6)
|
||||
* PO1 -> LD1 verte (allumee : passerelle active)
|
||||
*/
|
||||
#include "stm32h7rsxx_hal.h"
|
||||
|
||||
#define MOD_TX_PORT GPIOE /* sortie du module, lue par le MCU */
|
||||
#define MOD_TX_PIN GPIO_PIN_7
|
||||
#define MOD_RX_PORT GPIOE /* entree du module, pilotee par le MCU */
|
||||
#define MOD_RX_PIN GPIO_PIN_8
|
||||
#define VCP_RX_PORT GPIOD /* venant du PC, lue par le MCU */
|
||||
#define VCP_RX_PIN GPIO_PIN_0
|
||||
#define VCP_TX_PORT GPIOD /* vers le PC, pilotee par le MCU */
|
||||
#define VCP_TX_PIN GPIO_PIN_1
|
||||
#define NCP_EN_PORT GPIOD
|
||||
#define NCP_EN_PIN GPIO_PIN_13
|
||||
#define NCP_BOOT_PORT GPIOD
|
||||
#define NCP_BOOT_PIN GPIO_PIN_15
|
||||
#define LED_PORT GPIOO
|
||||
#define LED_PIN GPIO_PIN_1
|
||||
|
||||
void Error_Handler(void)
|
||||
{
|
||||
__disable_irq();
|
||||
for (;;)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
void SysTick_Handler(void)
|
||||
{
|
||||
HAL_IncTick();
|
||||
}
|
||||
|
||||
/* Meme configuration que le Boot de la DK (HSE 24 MHz en bypass, PLL1 -> 600 MHz) : la boucle de
|
||||
* recopie doit etre bien plus rapide qu'un bit a 2 Mbauds (500 ns). */
|
||||
static void SystemClock_Config(void)
|
||||
{
|
||||
RCC_OscInitTypeDef osc = {0};
|
||||
RCC_ClkInitTypeDef clk = {0};
|
||||
|
||||
if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE0) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
HAL_PWR_EnableBkUpAccess();
|
||||
|
||||
osc.OscillatorType = RCC_OSCILLATORTYPE_HSE;
|
||||
osc.HSEState = RCC_HSE_BYPASS;
|
||||
osc.PLL1.PLLState = RCC_PLL_ON;
|
||||
osc.PLL1.PLLSource = RCC_PLLSOURCE_HSE;
|
||||
osc.PLL1.PLLM = 4;
|
||||
osc.PLL1.PLLN = 200;
|
||||
osc.PLL1.PLLP = 2;
|
||||
osc.PLL1.PLLQ = 2;
|
||||
osc.PLL1.PLLR = 2;
|
||||
osc.PLL1.PLLS = 2;
|
||||
osc.PLL1.PLLT = 2;
|
||||
osc.PLL1.PLLFractional = 0;
|
||||
osc.PLL2.PLLState = RCC_PLL_NONE;
|
||||
osc.PLL3.PLLState = RCC_PLL_NONE;
|
||||
if (HAL_RCC_OscConfig(&osc) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
clk.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 |
|
||||
RCC_CLOCKTYPE_PCLK2 | RCC_CLOCKTYPE_PCLK4 | RCC_CLOCKTYPE_PCLK5;
|
||||
clk.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
||||
clk.SYSCLKDivider = RCC_SYSCLK_DIV1;
|
||||
clk.AHBCLKDivider = RCC_HCLK_DIV2;
|
||||
clk.APB1CLKDivider = RCC_APB1_DIV2;
|
||||
clk.APB2CLKDivider = RCC_APB2_DIV2;
|
||||
clk.APB4CLKDivider = RCC_APB4_DIV2;
|
||||
clk.APB5CLKDivider = RCC_APB5_DIV2;
|
||||
if (HAL_RCC_ClockConfig(&clk, FLASH_LATENCY_7) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
}
|
||||
|
||||
static void gpio_init(void)
|
||||
{
|
||||
GPIO_InitTypeDef g = {0};
|
||||
|
||||
__HAL_RCC_GPIOD_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOE_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOO_CLK_ENABLE();
|
||||
|
||||
/* Lignes UART au repos a l'etat haut, BOOT et CHIP_EN bas, LED eteinte, avant de les configurer */
|
||||
HAL_GPIO_WritePin(MOD_RX_PORT, MOD_RX_PIN, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(VCP_TX_PORT, VCP_TX_PIN, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(NCP_EN_PORT, NCP_EN_PIN, GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin(NCP_BOOT_PORT, NCP_BOOT_PIN, GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_RESET);
|
||||
|
||||
g.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
g.Pull = GPIO_NOPULL;
|
||||
g.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||
g.Pin = MOD_RX_PIN; HAL_GPIO_Init(MOD_RX_PORT, &g);
|
||||
g.Pin = VCP_TX_PIN; HAL_GPIO_Init(VCP_TX_PORT, &g);
|
||||
g.Pin = NCP_EN_PIN; HAL_GPIO_Init(NCP_EN_PORT, &g);
|
||||
g.Pin = NCP_BOOT_PIN; HAL_GPIO_Init(NCP_BOOT_PORT, &g);
|
||||
g.Pin = LED_PIN; HAL_GPIO_Init(LED_PORT, &g);
|
||||
|
||||
g.Mode = GPIO_MODE_INPUT;
|
||||
g.Pull = GPIO_PULLUP; /* ligne UART au repos = haut, meme si l'autre cote est deconnecte */
|
||||
g.Pin = MOD_TX_PIN; HAL_GPIO_Init(MOD_TX_PORT, &g);
|
||||
g.Pin = VCP_RX_PIN; HAL_GPIO_Init(VCP_RX_PORT, &g);
|
||||
}
|
||||
|
||||
/* Recopie bit a bit, dans les deux sens, tant que la carte est alimentee. */
|
||||
static void uart_pass_through(void)
|
||||
{
|
||||
SysTick->CTRL = 0; /* pas d'interruption : la recopie ne doit jamais etre retardee */
|
||||
__disable_irq();
|
||||
|
||||
for (;;)
|
||||
{
|
||||
if ((MOD_TX_PORT->IDR & MOD_TX_PIN) != 0U)
|
||||
{
|
||||
VCP_TX_PORT->BSRR = VCP_TX_PIN;
|
||||
}
|
||||
else
|
||||
{
|
||||
VCP_TX_PORT->BSRR = (uint32_t)VCP_TX_PIN << 16;
|
||||
}
|
||||
|
||||
if ((VCP_RX_PORT->IDR & VCP_RX_PIN) != 0U)
|
||||
{
|
||||
MOD_RX_PORT->BSRR = MOD_RX_PIN;
|
||||
}
|
||||
else
|
||||
{
|
||||
MOD_RX_PORT->BSRR = (uint32_t)MOD_RX_PIN << 16;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
SCB_EnableICache();
|
||||
SCB_EnableDCache();
|
||||
HAL_Init();
|
||||
SystemClock_Config();
|
||||
gpio_init();
|
||||
|
||||
/* clignotement : la passerelle demarre */
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_SET);
|
||||
HAL_Delay(100);
|
||||
HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_RESET);
|
||||
HAL_Delay(100);
|
||||
}
|
||||
|
||||
/* Entree du module en mode telechargement : BOOT haut pendant le reset (CHIP_EN bas puis haut),
|
||||
* relache ensuite. Meme sequence que le NCP_Loader de ST. */
|
||||
HAL_GPIO_WritePin(NCP_BOOT_PORT, NCP_BOOT_PIN, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(NCP_EN_PORT, NCP_EN_PIN, GPIO_PIN_RESET);
|
||||
HAL_Delay(100);
|
||||
HAL_GPIO_WritePin(NCP_EN_PORT, NCP_EN_PIN, GPIO_PIN_SET);
|
||||
HAL_Delay(100);
|
||||
HAL_GPIO_WritePin(NCP_BOOT_PORT, NCP_BOOT_PIN, GPIO_PIN_RESET);
|
||||
|
||||
HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_SET); /* allumee : passerelle active */
|
||||
uart_pass_through();
|
||||
return 0;
|
||||
}
|
||||
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