🛠 Mise à jour OTA par bascule de banque sur le STM32H743ZI : 2 Mo de flash double banque
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
- Banco 1: aplicación en ejecución (región de dirección de arranque).
- Banco 2: área de preparación para la imagen entrante.
- Un pequeño bootloader (o un actualizador residente en la aplicación bien probado) decide el banco al iniciar.
- SRAM de respaldo (4 KB, dominio VBAT): contador de arranque / bandera de "imagen válida" — sobrevive a los reinicios y, con VBAT aplicado, a los ciclos de encendido/apagado. La placa incluso incluye un jumper de prueba de SRAM de respaldo (SB156) para experimentos con VBAT.
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
- Calcula el hash o CRC del contenido escrito en el banco 2 y compáralo con el manifiesto enviado junto con la imagen.
- 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.
- 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
- Borrar el banco desde el cual se está ejecutando: el banco 2 es el área de preparación precisamente para que el código en ejecución nunca se borre a sí mismo — mantén esta regla de forma absoluta.
- Olvidar la granularidad de programación FLASHWORD de 256 bits del H7 — los ayudantes de programación byte a byte portados desde la serie F no aplican.
- Mantener la bandera de arranque solo en SRAM regular: desaparece con la pérdida de alimentación; el dominio de SRAM de respaldo de 4 KB es el lugar adecuado.
- Omitir la hoja de erratas ES0392 antes de una interacción intensa entre flash/DMA — la hoja de especificaciones de la placa advierte explícitamente leerla para usos intensivos de DMA/caché.
Otros tutoriales para esta placa
- Premiers pas sur le Nucleo-144 STM32H743ZI : core STM32duino, ST-LINK et premier Blink
- GPIO, ADC 16 bits et DAC sur le Nucleo STM32H743ZI : bouton, LED et potentiomètre
- MicroPython sur le Nucleo STM32H743ZI : le REPL 480 MHz via le port série ST-LINK
- Zephyr RTOS sur le Nucleo STM32H743ZI : west build, flash et le piège des 96 MHz
- STM32Cube HAL à 480 MHz sur le STM32H743ZI : VOS0, latence flash et HSE bypass
- FreeRTOS sur le Nucleo STM32H743ZI : le projet officiel CubeH7, tâches et file d'attente