Perro guardián de AURIX TC397 SCU

Conceptos básicos del perro guardián

Para la documentación, consulte la sección 9.4 del Manual del usuario de TC3XX, Watchdog Timers (WDT) es uno de los seis módulos de las Unidades de control del sistema (SCU).

TC3xx incluye los siguientes temporizadores de vigilancia:

  • 1 temporizador de vigilancia de seguridad (temporizador de vigilancia de seguridad) para evitar escrituras accidentales en los registros y la memoria clave del sistema. Si no responde a su temporizador dentro de un cierto período de tiempo, se activará una solicitud de alarma SMU.
  • Cada CPU tiene un temporizador de vigilancia (CPU Watchdogs Timer), que proporciona protección para los registros de la CPU y los registros específicos del sistema, y ​​monitorea una CPU separada. Si no se actualiza durante un cierto período de tiempo, activará un reinicio del dispositivo.

Cada temporizador de vigilancia tiene las siguientes funciones básicas:

  • Base de tiempo programable y valor de recarga
  • Protección de contraseña programable y secuencia de contraseña automática configurable (secuencia de contraseña automática)
  • Verificación de sello de tiempo programable con ventana programable
  • La secuencia de actualización del temporizador no válida o faltante provocará una alarma de seguridad (alarma de seguridad)
  • La operación de vigilancia se puede suspender durante la depuración
  • Los registros de claves están protegidos contra escritura y solo se pueden desbloquear dentro de un breve período de tiempo de espera

Los cambios más importantes entre AURIX TC2xx SCU WDT y AURIX TM TC3xx SCU WDT son:

  • Registrar cambio de dirección
  • El aumento de la respuesta de la CPU aumenta el temporizador de vigilancia correspondiente
  • ENDINIT se puede desbloquear mediante el nuevo contador de tiempo de espera ENDINIT (fin de inicialización) (registro EICON) sin afectar ningún temporizador de vigilancia de la CPU
  • La seguridad ENDINIT se puede desbloquear mediante el nuevo contador de tiempo de espera de seguridad ENDINIT (registro SEICON) sin afectar el temporizador de vigilancia de seguridad.
  • Rango de protección ACCEN separado del temporizador de vigilancia de seguridad
  • Se ha eliminado la función de indicación de "latido activo" del WDT externo

WDT proporciona un método altamente confiable y seguro para detectar y recuperarse de fallas de software o hardware. WDT ayuda a detener fallas inesperadas de la CPU o del sistema dentro del período de tiempo especificado por el usuario.

Diagrama de bloques WDT:

Inserte la descripción de la imagen aquí

Además de esta función estándar de "perro guardián", cada WDT tiene una función de fin de inicialización (ENDINIT, fin de inicialización), que puede proteger los registros de teclas de escritura accidental.

Mantener el perro guardián y modificar el bit ENDINIT son funciones vitales, si el sistema falla, esto no está permitido. Para proteger estas funciones, se implementó un esquema complejo que requiere una contraseña y bits de protección durante el acceso al registro de control WDT. Cualquier acceso de escritura que no proporcione la contraseña correcta o el valor correcto del bit de protección se considera un fallo del sistema y provoca una alarma de vigilancia. Además, incluso después de que se realiza un acceso válido y se borra el bit ENDINIT para proporcionar acceso a los registros de claves, el perro guardián impone un límite de tiempo en la ventana de acceso. Si el bit ENDINIT no se vuelve a establecer correctamente antes de que expire el límite, se considera que el sistema no funciona correctamente. Aunque estos estrictos requisitos no se pueden garantizar, aún proporcionan un alto grado de garantía para la solidez del funcionamiento del sistema.

Las opciones de configuración disponibles permiten al servicio de vigilancia verificar adicionalmente la secuencia de ejecución del código y el tiempo de ejecución del código intermedio. Si estas verificaciones están habilitadas, cualquier secuencia incorrecta o tiempo de ejecución excedido también provocará solicitudes de alarma SMU.

Cualquier vencimiento de WDT activará una alarma SMU. La SMU se puede programar para proporcionar interrupciones o trampas para proporcionar algo de tiempo para la recuperación o el registro de estado antes de que se tomen medidas adicionales (como restablecer el dispositivo o la CPU).

Temporizador de vigilancia de seguridad, temporizador de vigilancia de seguridad:

  • Se proporciona un mecanismo de vigilancia general a nivel del sistema independiente del temporizador de vigilancia de la CPU, y también se proporciona otra medida de protección para evitar escrituras accidentales en los registros del sistema críticos para la seguridad. Cuando el WDT seguro está habilitado, si no se alerta a la SMU dentro del período de tiempo programable por el usuario, se puede activar una solicitud de alarma de SMU. La CPU debe dar servicio al WDT seguro dentro de este intervalo de tiempo para evitar que esto suceda. La respuesta al tiempo de espera de seguridad WDT se puede configurar en la SMU. Por lo tanto, el mantenimiento regular del Safety WDT puede confirmar que el sistema está funcionando como se esperaba.
  • Por lo general, la protección contra escritura de la SCU (ACCEN) se configurará de modo que solo las CPU (s) "seguras" restringidas puedan configurar funciones críticas para la seguridad, incluida la capacidad de dar servicio a los controles de seguridad. Además, el temporizador de control de seguridad está desactivado / activado / La función de configuración requiere una contraseña ENDINIT segura

Temporizador de vigilancia de la CPU, temporizador de vigilancia de la CPU:

  • Un temporizador de vigilancia de CPU independiente proporciona la capacidad de monitorear subprocesos de ejecución de CPU individuales sin la necesidad de software para coordinar el uso compartido de una vigilancia común.
  • Cuando la CPU WDT está habilitada, si no se atiende correctamente dentro del período de tiempo programable por el usuario, puede causar la solicitud de alarma SMU. La CPU debe dar servicio a su CPU WDT dentro de este intervalo de tiempo para evitar esta situación. La SMU se puede configurar para responder a cada tiempo de espera de vigilancia de la CPU y, por lo tanto, el servicio periódico de la CPU WDT confirma que la CPU correspondiente está ejecutando la secuencia de software como se esperaba.
  • Después del reinicio, CPU0 se ejecuta y el temporizador de vigilancia de CPU0 se inicia automáticamente. Las otras CPU están inicialmente en el estado HALT, por lo que sus correspondientes temporizadores de vigilancia están deshabilitados. De forma predeterminada, otros temporizadores de vigilancia de la CPU no están configurados para generar un restablecimiento de tiempo de espera, pero se pueden habilitar. La vigilancia de la CPU solo puede configurarse, habilitarse o inhabilitarse mediante su CPU correspondiente.

Las principales funciones de WDT se resumen a continuación:

  • Temporizador de vigilancia de 16 bits
  • Frecuencia de entrada opcional: fSPB / 64, fSPB / 256 o fSPB / 16384
  • Valor de recarga de 16 bits definible por el usuario para el funcionamiento normal del temporizador de vigilancia, el modo de tiempo de espera es un valor de recarga fijo
  • Fusionar el bit ENDINIT correspondiente y monitorear su modificación
  • Mecanismo de acceso de contraseña complejo con campos de contraseña definibles por el usuario
  • Detección de error de acceso: contraseña no válida (durante el primer acceso) o bit de protección no válido (durante el segundo acceso) activa una solicitud de alarma a la SMU
  • Función de monitoreo de tiempo y lógica: verificación de secuencia de código opcional. La firma de secuencia de código incorrecta activará una solicitud de alarma a SMU; verificación de tiempo de ejecución de código opcional, el tiempo de ejecución de código que exceda el límite esperado activará una solicitud de alarma a SMU
  • Detección de error de desbordamiento: el desbordamiento del contador WDT activa una solicitud de alarma a la SMU
  • La función de vigilancia se puede deshabilitar; la protección de acceso y las funciones de monitoreo de bit ENDINIT permanecen habilitadas
  • Un mecanismo configurable para evitar que el perro guardián se recargue después de la alarma de advertencia de seguridad no utilizada para garantizar que la advertencia no utilizada hará que el hardware SMU responda

Perro guardián TC397

Watchdog_1 de referencia para KIT_AURIX_TC397_TFT

Tome el temporizador de vigilancia de CPU0 como ejemplo, los pasos son los siguientes:

  • Proteja la oración predeterminada de apagar el perro guardián de la CPU: IfxScuWdt_disableCpuWatchdog(IfxScuWdt_getCpuWatchdogPassword());
  • Configure CPU0WDT, el IfxScuWdt_changeCpuWatchdogReloadvalor de recarga (REL, valor de recarga) predeterminado en 0xFFFC, cuenta hacia arriba y se desborda a 0xFFFF, este tiempo es demasiado corto, cambie a 0xE000, tiempo de espera ≈ (0xFFFF-REL) / (100MHz / 16384) ≈ 1.342s, el tiempo de espera no debe ser demasiado pequeño, puede causar problemas durante la descarga. El valor 16384 es una constante, definida por el IRx del registro WDTSCON1
  • Obtenga la contraseña para alimentar al perro: IfxScuWdt_serviceCpuWatchdog(IfxScuWdt_getCpuWatchdogPassword());

El código Cpu0_Main.c es el siguiente:

#include "Ifx_Types.h"
#include "IfxCpu.h"
#include "IfxScuWdt.h"

#include "Bsp.h"

IFX_ALIGN(4) IfxCpu_syncEvent g_cpuSyncEvent = 0;

#define LED         &MODULE_P13, 0

#define REL_VAL     0xE000       /* Reload value for extended timeout window */

void core0_main(void)
{
    
    
    IfxCpu_enableInterrupts();
    
    /* !!WATCHDOG0 AND SAFETY WATCHDOG ARE DISABLED HERE!!
     * Enable the watchdogs and service them periodically if it is required
     */
    //IfxScuWdt_disableCpuWatchdog(IfxScuWdt_getCpuWatchdogPassword());
    IfxScuWdt_disableSafetyWatchdog(IfxScuWdt_getSafetyWatchdogPassword());
    
    IfxScuWdt_changeCpuWatchdogReload(IfxScuWdt_getCpuWatchdogPassword(), REL_VAL); /* Set CPU0WD timer to ~1.3 sec */
    IfxScuWdt_serviceCpuWatchdog(IfxScuWdt_getCpuWatchdogPassword());               /* Service the CPU0WDT          */

    /* Wait for CPU sync event */
    IfxCpu_emitEvent(&g_cpuSyncEvent);
    IfxCpu_waitEvent(&g_cpuSyncEvent, 1);
    
    IfxPort_setPinMode(LED,  IfxPort_Mode_outputPushPullGeneral);
    IfxPort_setPinHigh(LED);

    initTime();

    while(1)
    {
    
    
        IfxScuWdt_serviceCpuWatchdog(IfxScuWdt_getCpuWatchdogPassword());           /* Continuously service CPU0WDT */
        wait(TimeConst_1s);                                                         /* Wait for one second          */
        IfxPort_togglePin(LED);
    }
}

Compile y ejecute, desde 1s <1.34s, no se reiniciará y el LED se encenderá normalmente.

El tiempo de espera cambia a 2 s: wait(TimeConst_1s*2);compila y ejecuta, la CPU se ha reiniciado y el LED no se enciende normalmente.

Cuenta pública de WeChat

Bienvenido a escanear y seguir mi cuenta pública de WeChat para obtener los últimos artículos a tiempo:
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weifengdq/article/details/109597048
Recomendado
Clasificación