Skip to main content
Volver
LRI-AEM-60DC8 · Firmware

Historial de releases

Seguimiento de versiones de firmware del AEM-60DC8 — notas de release públicas, binarios disponibles bajo solicitud.

  • v1.23
    07 jun 2026Estable
    • Contador de errores de CRC honesto en bus multidrop: el panel MODBUS del LCD y los registros 40074/40075 mostraban ~6–8% de error en un bus sano — eran, en realidad, las respuestas de los OTROS esclavos contadas como error de línea.
    • En un bus con varios esclavos, cada nodo recibe físicamente las respuestas de los demás; el parser valida el CRC antes del filtro de dirección, así que la respuesta del vecino (malinterpretada como petición) fallaba el CRC e inflaba el contador.
    • Ahora solo se cuentan errores de CRC en frames dirigidos a este esclavo (o broadcast): en un bus limpio el valor baja a ≈0. La visibilidad total (incl. tráfico ajeno) se conserva en el histograma de diagnóstico.
    • Cambio solo de visualización/diagnóstico — sin ruta de control, sin cambio en el protocolo Modbus (C-001 sin cambios). Revisado por device-qa (aprobado para EVT, sin P0).

    Binario disponible bajo solicitud ([email protected])

  • v1.22
    07 jun 2026Estable
    • Nuevo registro de RESET de diagnóstico (Modbus W-only 40034, magic 0xD1A6): pone a cero de una vez los totales de frames RX/TX, el contador agregado de CRC y los contadores de error UART (FE/NE/PE/TX) y de diagnóstico de TX, dando una línea base "desde el reset".
    • Corrige el falso alarma de "~5% de errores" en la interfaz: ese porcentaje es un acumulado-desde-el-arranque (stock histórico de una ventana de contención pasada), no la tasa en vivo — el bus actual está limpio (delta de CRC en 4 s = 0).
    • Escritura protegida por magic (FC16 qty=1): cualquier valor distinto de 0xD1A6 se rechaza (`ILLEGAL_DATA_VALUE`), evitando que un barrido de registros borre la evidencia; la lectura de 40034 devuelve 0.
    • Los contadores son solo de diagnóstico (sin dependencia de watchdog/heartbeat) — el reset no tiene efectos colaterales. Contrato C-001 rotado; requiere espejo en la Utility.

    Binario disponible bajo solicitud ([email protected])

  • v1.21
    06 jun 2026Estable
    • TX RS-485 no bloqueante (corrige RR-005): la transmisión Modbus ahora es por interrupción/DMA, liberando la CPU durante el envío. Elimina el reset por IWDG que ocurría bajo lecturas sostenidas de bloques grandes (96 registros consecutivos a 9600 bps).
    • Liberación determinista del bus: la línea DE se baja dentro de la ISR de TX-complete (USART TC), a escala de interrupción y no del planificador, para un turnaround RS-485 consistente.
    • Nuevo bloque de diagnóstico de TX (Modbus R/O 40226–40233): contadores TX_STARTED, TX_TC_CB, timeouts y abortos, para comprobar en campo que la transmisión no deja estado pendiente.
    • Diagnóstico de heartbeat del watchdog (Modbus R/O 40220–40225): ventanas de heartbeat ausente por tarea y margen al timeout del IWDG, haciendo la corrección verificable en silicio.
    • Contrato C-001 rotado (nuevos bloques 40220–40225 y 40226–40233); requiere espejo en la Utility.

    Binario disponible bajo solicitud ([email protected])

  • v1.20
    05 jun 2026Estable
    • Contadores de error de RX UART en Modbus (R/O 40030–40033): expone framing (FE), ruido (NE), paridad (PE) y error de TX por separado del contador agregado de CRC, para diagnóstico de campo sin SWD.
    • Nueva página 2 del dashboard DIAG_HEALTH en LCD ("UART RX"): refleja FE/NE/PE/TxE + CRC; el panel ahora cicla 3 páginas (utilización / presión RTOS / errores UART).
    • Flush determinista de RX en arranque/reconfiguración: descarta bytes capturados durante la estabilización de la línea UART, evitando que un frame parcial de encendido se lea como error de CRC en la primera lectura.
    • Aditivo, sin cambio en el camino crítico de RX/TX. Contrato C-001 rotado (nuevo bloque 40030–40033); requiere espejo en la Utility.

    Binario disponible bajo solicitud ([email protected])

  • v1.19
    05 jun 2026Estable
    • Auto-repetición con aceleración en los botones UP/DOWN: mantener pulsado ahora repite con una curva controlada (500 ms → 250 → 100 → 50 ms) en vez de emitir un único evento largo.
    • Aceleración de paso (1 → 5 → 10) en los editores de punto flotante (umbrales V/NTC, calibración, debounce de DI), siempre con clamp de mín/máx — sin wrap silencioso.
    • Perfiles por contexto: editores numéricos rápidos, navegación de menú (200 ms fijo) y entrada de contraseña (400 ms fijo); las páginas principales/confirmaciones preservan las acciones deliberadas de mantener pulsado (2 s).
    • Sin cambio en la capa Modbus — C-001 sin cambios.

    Binario disponible bajo solicitud ([email protected])

  • v1.18
    05 jun 2026Estable
    • Nuevo registro Modbus de idioma de la interfaz `MBMAP_USER_LANGUAGE` (40067, R/W): valores {0=EN, 1=PT, 2=ES}, por defecto PT. Un master puede cambiar el idioma del dispositivo de forma remota, sin usar el menú del LCD.
    • Escritura validada (FC16 qty=1): valores fuera de rango se rechazan (`ILLEGAL_DATA_VALUE`), se aplican en vivo a la i18n del LCD y se persisten en EEPROM.
    • El bootloader lee el mismo byte en el arranque, localizando también sus propias pantallas — idioma consistente entre app y BL.
    • Contrato C-001 rotado (b9cea6a0 → c3b0c3b5); la Utility debe añadir el registro 40067.

    Binario disponible bajo solicitud ([email protected])

  • v1.17
    05 jun 2026Estable
    • Primer build released que sustituye a la v1.16: incorpora toda la remediación de alarma de la v1.16 y cierra el gate de banco M1/M2 sobre el candidato firmado v1.17.
    • Corrección i18n (ES): etiqueta de entrada de contraseña `STR_PWD_VALUE` de "Pwd:" a "Contr:", alineándola con las demás pantallas de contraseña en español (solo LCD, sin cambio de comportamiento).
    • Sin cambio en la capa Modbus — C-001 no rotado.

    Binario disponible bajo solicitud ([email protected])

  • v1.16
    04 jun 2026Estable
    • Motor de alarma por canal unificado: el relé ahora respeta los delays UV/OV y la histéresis configurados por canal (Modbus 40400–40423), en lugar del delay/histéresis globales usados antes.
    • Precedencia de fallo de sensor: en una muestra no finita o congelada (Fase-4), la causa publicada en 40300 + LED + ALARM_SUMMARY pasa a ser SENSOR_FAULT (antes se reportaba erróneamente UV), sin contaminar los contadores UV/OV.
    • Validación Modbus más estricta: bandas con v_min ≥ v_max se rechazan (`ILLEGAL_DATA_VALUE 0x03`) tanto en escritura simple como en FC16 whole-frame.
    • Reset determinístico tras reconfiguración: al escribir un nuevo threshold/delay, la cuenta PENDING en curso se cancela y el canal reevalúa desde NORMAL con la nueva configuración.
    • Snapshot atómico de la configuración: el evaluador a 10 Hz lee toda la configuración del canal dentro de una única sección crítica, eliminando frames partidos durante FC16.

    Binario disponible bajo solicitud ([email protected])

  • v1.15
    04 jun 2026Estable
    • Nuevo bloque R/O `RELAY_OVERRIDE_TELEM` (Modbus 40210–40219): expone el estado de override del relé (operador VINCULADO/DESVINCULADO) sin inflar la superficie de autenticación Modbus.
    • Contadores separados de desactivación: distingue OPERATOR_RELEASE (liberación manual vía escritura 0) de LEASE_EXPIRY (lease vencido cuando el maestro deja de refrescar) — antes era un único contador agregado.
    • Duración activa acumulada en uint32 segundos saturante (~136 años, nunca desborda); lectura coherente en un único FC03 qty=10.
    • Hardening del crash: `Error_Handler()` ya no queda en loop muerto; escribe breadcrumb `.noinit` (archivo/línea/PC) y entra en panic blinker de LED, con IWDG reciclando la placa para que el evento quede en reset_log.
    • Build guard `BKP2R`: previene compilación accidental con forensics activo que pisaría contadores de seguridad.

    Binario disponible bajo solicitud ([email protected])

  • v1.14
    04 jun 2026Estable
    • Validación de RTC con conciencia de calendario vía FC16 (40131–40135): fechas inválidas como 2026-02-29, 2028-02-30, día 0/32 o mes 0/13 ahora se rechazan con `ILLEGAL_DATA_VALUE 0x03` sin alterar el RTC.
    • Validación leap-year unificada entre LCD y Modbus: ambos usan el mismo helper `rtc_driver_days_in_month`, eliminando divergencia de validación entre interfaces.
    • Rangos aceptados: año 2025..2099; mes 1..12; día según el largo real del mes (28/29/30/31).

    Binario disponible bajo solicitud ([email protected])

  • v1.13
    03 jun 2026Estable
    • Nueva configuración de debounce por canal de entrada digital (DI), expuesta en Modbus 40180–40187, unidad decisegundos (1..255 ds = 100 ms a 25.5 s).
    • Bloque canónico R/W de configuración DI en 40174–40176 (modo, polaridad, alarm enable) — sustituye el camino R/O anterior; espejos R/O en 40169–40171 siguen disponibles para lectura.
    • Atomicidad FC16 whole-frame extendida a los bloques DI: configuración completa de DI puede escribirse en una única transacción Modbus; frames que cruzan registros reservados se rechazan limpiamente.
    • Persistencia vía CRC CCITT-16 sobre el bloque primario: un corte de energía durante la escritura se detecta en el arranque y dispara recovery a defaults (en vez de basura parcial).

    Binario disponible bajo solicitud ([email protected])

  • v1.10
    02 jun 2026Estable
    • Watchdog Fase 3 activo: el IWDG se refresca solo cuando las 3 tareas supervisadas (SAMPLE | MODBUS | UI) marcan su heartbeat dentro de la ventana de 200 ms; una tarea colgada ahora se resetea y la causa queda en `MBMAP_RESET_REASON_WATCHDOG`.
    • Pulso de prueba del relé es no-bloqueante: la tarea UI ya no queda bloqueada vía `HAL_Delay` durante una prueba, manteniendo el heartbeat batiendo. Precedencia del relé: pulso de prueba > override > alarma.
    • Barrera de registro en el startup: el IWDG se refresca incondicionalmente hasta que cada tarea supervisada haya hecho check-in al menos una vez (o hasta `WDT_REG_BARRIER_MS` = 4000 ms), evitando resets falsos durante un boot lento pero sano.

    Binario disponible bajo solicitud ([email protected])

  • v1.09
    02 jun 2026Estable
    • Override del relé vía Modbus (40172–40173): el operador puede forzar el relé OFF (modo 1) o ON (modo 2) con lease monotónico de 3 s, o liberar al automático (modo 0 = VINCULADO/AUTO).
    • Fail-to-safe: cualquier camino de incertidumbre (lease vencido, reboot, watchdog, power-cycle) resuelve a AUTO — no existe estado pegado en DESVINCULADO.
    • Status R/O empaquetado en 40173 (bit0 relé físico, bit1 override activo, bits 8..11 motivo) leído coherentemente con 40172 en una única FC03 qty=2.
    • Capability gate por SKU: el override está DISABLED por defecto y solo se provisiona en builds aprobados (`-DAEM_RELAY_OVERRIDE_CAPABLE=1`); SKUs no capaces NACKean con reason=cap-disabled.

    Binario disponible bajo solicitud ([email protected])

  • v1.08
    01 jun 2026Estable
    • Telemetría autoritativa de alarma en 40164–40171: `SYS_HEAP_FREE` (heap libre live en uint32), `ALARM_SUMMARY` (estado canónico del LED rojo/relé), `NTC_ALARM_STATE`, `DI_ALARM_BITMAP`, y mirrors un-shadowed de la config DI.
    • Clientes Modbus dejan de re-derivar (y equivocar) el estado de alarma: leer `ALARM_SUMMARY` (40166) basta para tener el estado canónico que mueve el relé.

    Binario disponible bajo solicitud ([email protected])

  • v1.06
    31 may 2026Estable
    • Gating de canal activo/inactivo (Fase 7): máscaras por canal `v_alarm_enabled_mask` (40424) para los 6 canales analógicos y `di_active_mask` (40425) para los DIs. Canales inactivos se excluyen de la evaluación de alarma y del LCD.
    • Nuevo bitmap DI enmascarado live en 40426: `digital_io_read_di_bitmap() & di_active_mask` en dirección no contestada (el mirror legacy en 40140 queda shadowed por C-013 en builds ≥272).
    • LCD compactado: solo renderiza canales analógicos/DI activos, con hint de estado vacío ("No active chan." / "Enable in Setup") cuando un grupo no tiene ninguno habilitado.
    • Corrección de colisión BL-unlock: diagnósticos R/O `AEMUP_REJ_BUFFER` y `TELEM_BOOT_FAIL_REASON` reubicados de 40098/40099 a 40148/40149, liberando el bloque challenge/response del bootloader.

    Binario disponible bajo solicitud ([email protected])

  • v1.05
    30 may 2026Estable
    • Corrección crítica L1: config de alarma por canal Fase 6 reubicada del bloque EEPROM secundario (0x200+) a la cola del bloque primario (0x0F1, 0x0F8–0x0FF) — antes el bloque secundario aliasaba el primario en el chip CAT24C02 256 B y cualquier escritura en 0x200+ corrompía silenciosamente la config primaria.
    • Delays UV/OV por canal empaquetados como nibbles de 4 bits (0–15 s) en el tail primario; nueva versión de layout EEPROM 0x03 con migración automática desde 0x02.
    • Breadcrumbs L2 en `.noinit` SRAM: estructura `save_all_breadcrumb_t` preserva phase marker, PC, LR, xPSR a través de soft resets. HardFault handler graba crash_pc/lr/xpsr; logueado en el siguiente boot.
    • Escrituras FC16 Fase 6 (40400–40415) clamped 0–15; histéresis (40416–40423) retorna `ILLEGAL_DATA_ADDRESS` (persistencia pendiente del upgrade al chip CAT24C16).

    Binario disponible bajo solicitud ([email protected])

  • v1.1.0
    10 may 2026Obsoleto
    • Mapa Modbus consolidado en 29 holding registers (8 voltajes, NTC + 16 umbrales, baud index, slave ID).
    • Auto-rotación del LCD entre SCREEN_VOLTAGE / SCREEN_DI_FAULT / SCREEN_TEMP_FAULT / SCREEN_VOLTAGE_FAULT cada 5 s.
    • Contraseña de calibración reducida a 4 dígitos (por defecto 1000).
    • Persistencia de umbrales y baudrate en EEPROM CAT24C02.
    • Soporte de baud rates 4800 / 9600 / 19200 / 38400 / 57600 / 115200 vía index en HR 40028.

    Binario disponible bajo solicitud ([email protected])

  • v1.0.0
    17 mar 2026Obsoleto
    • Versión inicial: 8 canales DC, RS-485 Modbus RTU, LCD 16×4, 3 teclas, NTC.
    • Limitación conocida: los umbrales no persistían tras el ciclo de energía (corregido en 1.1.0).

    Binario disponible bajo solicitud ([email protected])

Para acceso a betas y canales privados, contacte al ingeniero de aplicación asignado a su cuenta.