🛠 Mise à jour OTA par bascule de banque sur le STM32H743ZI : 2 Mo de flash double banque

STM32H7 Nucleo-144 (modèle phare : NUCLEO-H743ZI) · avance · Schéma : IMG-stm32h7-nucleo-avance-2-stm32h743zi-dual-bank-ota.svg — flash 2 Mo du STM32H743ZI divisée en banque 1 (firmware actif) et banque 2 (image en cours d'écriture), flèche de bascule de banque (bank swap) et petit bloc « backup SRAM 4 Ko » avec le jumper SB156, flat vector style, étiquettes en français, fond blanc.

Qué vas a construir

Los 2 MB de flash de doble banco del STM32H743ZI son una característica destacada que la hoja de especificaciones de la placa menciona como actualización OTA mediante intercambio de bancos. Este tutorial diseña el esquema de actualización: ejecutar desde el banco 1, descargar una nueva imagen en el banco 2, verificar, intercambiar y mantener una ruta de reversión (rollback), además de usar los 4 KB de SRAM de respaldo (con su jumper de prueba SB156) como lugar para mantener la decisión de arranque ante una pérdida de alimentación.

Arquitectura

Paso 1 — Escribir en el banco de preparación

/* Erase + program the new image into bank 2 (HAL, STM32H7). */
FLASH_EraseInitTypeDef er = {
  .TypeErase    = FLASH_TYPEERASE_SECTORS,
  .Banks        = FLASH_BANK_2,
  .Sector       = 0,
  .NbSectors    = 9,          /* cover the image area - size for YOUR layout */
  .VoltageRange = FLASH_VOLTAGE_RANGE_3
};
uint32_t sec_err;
HAL_FLASHEx_Erase(&er, &sec_err);

/* Program in 256-bit (32-byte) flash words as required by the H7 family. */
HAL_FLASH_Program(FLASH_TYPEPROGRAM_FLASHWORD, bank2_dst, (uint32_t)chunk, chunk_len);

Paso 2 — Verificar y luego intercambiar

  1. Calcula el hash o CRC del contenido escrito en el banco 2 y compáralo con el manifiesto enviado junto con la imagen.
  2. Arma el intercambio: escribe la bandera de arranque en la SRAM de respaldo *antes* de tocar la configuración de bancos, para que un corte de energía a mitad de la actualización deje un estado definido.
  3. Reconfigura el mapeo de bancos (bytes de opción / intercambio de bancos) para que el banco 2 se convierta en la base de ejecución, y luego reinicia.

> NO VERIFICADO: las llamadas HAL exactas y los nombres de los bytes de opción para el intercambio de bancos en el H743 (por ejemplo, OB_BANK_SWAP_*) — el PDF del manual de referencia (DM00314099) no pudo ser extraído por los buscadores de investigación; sigue el capítulo del manual de referencia sobre la operación de doble banco y los ejemplos de EEPROM/Flash de CubeH7.

Paso 3 — Política de reversión (rollback)

Al arrancar: si la bandera de "imagen válida" en la SRAM de respaldo no está presente después de N intentos, intercambia de vuelta al banco anterior. Dado que ambos bancos contienen imágenes completas, la reversión es un remapeo, no una reescritura.

Resultado esperado

Puedes enviar un nuevo firmware a través de tu transporte (el Ethernet del tutorial de LwIP es el portador obvio), ver cómo la placa se reinicia en la nueva imagen y desenchufar la alimentación a mitad de la transferencia sin inutilizar el dispositivo: el banco anterior permanece arrancable hasta que se arma el intercambio.

Errores comunes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales