DÍA 343 DE 365

Fase 5: Diseño Industrial y Hardware

📖 Teoría a Estudiar

Partición de Memoria para FOTA (Firmware Over-The-Air)

Una máquina aislada en el campo no puede depender de un puerto USB para ser actualizada. Requiere FOTA. Pero si la actualización falla a la mitad, la máquina se "brickea" (muere). Para evitar esto académicamente, documentaremos la partición de la memoria Flash en 3 bloques: el Bootloader Inmutable, la App Activa (Slot 0), y la App Descargada (Slot 1). Explicaremos el uso del registro SCB->VTOR del Cortex-M4 para reubicar la Tabla de Vectores de Interrupción en tiempo de ejecución.

El Controlador de Interrupciones (NVIC) y el Determinismo

El código secuencial (Super Loop) es lento. Cuando la turbina de gas envía un pulso, el procesador debe registrarlo inmediatamente, aunque esté a la mitad de dibujar un pixel en la LCD. Aquí demostraremos el uso del NVIC (Nested Vectored Interrupt Controller) y la asignación de Prioridades de Hardware (Preemption Priorities) para asegurar que el sensor volumétrico monopolice la CPU y logre un determinismo temporal estricto (Jitter casi nulo).

ARQUITECTURA DE SOFTWARE: MEMORIA FLASH FOTA E INTERRUPCIONES MAPA DE MEMORIA FLASH (512 KB) BOOTLOADER (32 KB) Inmutable (Solo Lectura) 0x0800_0000 APP ACTIVA (SLOT 0) VTOR Reubicado 0x0800_8000 OTA CACHE (SLOT 1) Binario Descargado (ESP32) 0x0804_0000 El Bootloader valida HMAC y hace SWAP DETERMINISMO HARDWARE (NVIC) Tiempo (t) Main Loop (Prioridad Baja) UART IRQ (Nivel 2) PVD / EXTI NIVEL 0 (MAX) PREEMPTION La señal del caudalímetro interrumpe incluso al UART. Jitter Metrológico: < 1 microsegundo

⚙️ Procedimiento Práctico: Estructuración del Capítulo

Paso 1: Fundamentar el FOTA Segregado.
En la tesis, defenderás que conectar un ESP32 directo a los puertos JTAG/SWD es un riesgo de seguridad. La arquitectura propuesta (Slot 0 y Slot 1) permite que el ESP32 descargue el archivo a la memoria secundaria tranquilamente. El STM32, en su entorno Bare-Metal asilado (Bootloader), audita el archivo mediante un hash SHA-256. Si es legítimo, él mismo copia los bits al Slot 0 e inicia. Esta arquitectura se denomina Dual-Bank Fallback.

Paso 2: Justificar el Vector Relocation (`VTOR`).
Cuando saltas del Bootloader (0x0800_0000) a la aplicación (0x0800_8000), las interrupciones apuntan al código viejo. Debes documentar por qué y cómo modificas el registro del sistema SCB->VTOR = 0x08008000; antes de invocar la aplicación principal.

💻 LaTeX: Documentación de la Arquitectura de Software

Aquí tienes el bloque .tex de tu tesis (Capítulo 3.2), escrito con la formalidad implacable de un Arquitecto de Software Crítico, justificando el diseño del vector de interrupciones y el Watchdog.


% =========================================================================
% Archivo: capitulo3_software_architecture.tex
% Sección: Arquitectura de Firmware (Bootloader, FOTA, IRQ y WDT)
% =========================================================================

\section{Arquitectura de Software y Lógica Crítica}

La estabilidad de un sistema de despacho de hidrocarburos no puede depender 
exclusivamente de ciclos de procesamiento lineal. El firmware propuesto se 
diseñó bajo un paradigma orientado a eventos y protegido por mecanismos de 
supervivencia en silicio.

\subsection{Gestión de Memoria y Bootloader Seguro (FOTA)}
Para aislar la lógica de actualización del entorno de despacho, la memoria 
Flash no volátil ($512\text{ KB}$) del MCU STM32 se particionó en tres sectores 
independientes. El \textit{Bootloader} inmutable se sitúa en la base física 
(\texttt{0x0800 0000}), ocupando $32\text{ KB}$. 

Las imágenes de aplicación se administran mediante un esquema de \textit{Dual-Slot 
A/B Swap}. Cuando el co-procesador IoT descarga un firmware nuevo, lo almacena 
en el \textit{Slot 1} (\texttt{0x0804 0000}). Al reiniciar, el Bootloader valida 
la firma criptográfica (HMAC) del Slot 1; si es válida, transfiere la imagen 
al \textit{Slot 0} (\texttt{0x0800 8000}) y reubica dinámicamente la tabla de 
vectores mediante el registro \texttt{VTOR} del procesador Cortex-M4:

\begin{verbatim}
// Reubicación de la Vector Table Offset Register
SCB->VTOR = FLASH_BASE | 0x8000;
\end{verbatim}

\subsection{Determinismo Temporal y Manejo de Interrupciones (NVIC)}
La exactitud metrológica requiere un \textit{Jitter} (variación de retardo) 
cercano a cero. Si el procesador ejecutara el conteo de la turbina Hall mediante 
\textit{Polling} dentro del bucle infinito, la actualización de un píxel en 
la pantalla LCD causaría la pérdida de pulsos financieros.

Se implementó el Controlador de Interrupciones Vectorizadas Anidadas (\textit{NVIC}) 
asignando prioridades de \textit{Preemption} estrictas. El pin conectado al caudalímetro 
opera en la línea EXTI con Prioridad 0 (Máxima). Esto garantiza que, a nivel de 
hardware, la señal volumétrica detendrá (Preempt) cualquier comunicación UART, I2C o SPI, 
alcanzando una latencia de atención inferior a $1.2 \mu s$.

\subsection{Supervivencia Autónoma: Independent Watchdog (IWDG)}
Para mitigar bloqueos lógicos (\textit{Deadlocks}) inducidos por fluctuaciones 
electromagnéticas (EMI), se implementó un Perro Guardián Independiente (IWDG). 
A diferencia del Watchdog de ventana (WWDG) que comparte el reloj del bus principal, 
el IWDG opera mediante un oscilador RC interno de baja velocidad ($32\text{ kHz}$) 
completamente aislado.

Si el bucle principal (\textit{Super Loop}) no refresca el contador en una 
ventana de $2000\text{ ms}$, el hardware fuerza un restablecimiento absoluto (Hard Reset). 
Durante el siguiente ciclo de arranque, la rutina forense evalúa la bandera 
\texttt{IWDGRSTF} en el registro \texttt{RCC\_CSR}. Si la bandera es positiva, 
la máquina de estados omite la secuencia de inicialización en frío y restaura 
instantáneamente la transacción guardada en la memoria SRAM de respaldo (BKP), 
ocultando la falla técnica al usuario final.
        

🚀 Avance del Proyecto Tesis: Despachador de Gas LP

Objetivo del día: Validación Académica de la Tolerancia a Fallos y Concurrencia Hardware.

Escribir el código para que un Watchdog funcione te toma 15 minutos en C. Explicar por qué el Watchdog Independiente de 32kHz sobrevive a un fallo catastrófico del reloj principal de 84MHz (HSE), y cómo esto protege el dinero del cliente, es lo que te otorga el título de Ingeniería. Al redactar esta sección de la tesis, has estructurado el conocimiento. Has dejado de ser alguien que "une bloques de código" para convertirte en alguien que diseña arquitecturas de memoria y gestiona el flujo del tiempo en nanosegundos (Preemption NVIC).

Cualquier sinodal universitario o auditor técnico que lea tu documento entenderá de inmediato que tu Despachador no es un juguete de laboratorio, sino un sistema Mission-Critical capaz de autodiagnosticarse, auto-repararse y actualizarse por aire de forma encriptada, demostrando la madurez final de tu diseño Bare-Metal de la Fase 5.

📝 Resumen del Día