Al escribir firmware para un sistema integrado , la programación con reconocimiento de inmunidad se refiere a técnicas de programación que mejoran la tolerancia de errores transitorios en el contador del programa u otros módulos de un programa que de otro modo conducirían a fallas. Los errores transitorios suelen ser causados por alteraciones de un solo evento , energía insuficiente o por fuertes señales electromagnéticas transmitidas por algún otro dispositivo de "fuente".
La programación con reconocimiento de inmunidad es un ejemplo de programación defensiva y programación con reconocimiento de EMC . Aunque la mayoría de estas técnicas se aplican al software en el dispositivo "víctima" para hacerlo más confiable, algunas de estas técnicas se aplican al software en el dispositivo "fuente" para que emita menos ruido no deseado.
Tarea y objetivos
El firmware de los microcontroladores puede mejorar de forma económica la compatibilidad electromagnética de un sistema integrado .
El firmware de los sistemas integrados generalmente no se considera una fuente de interferencia de radiofrecuencia . Las emisiones de radio a menudo son causadas por frecuencias armónicas del reloj del sistema y corrientes de conmutación. Los pulsos de estos cables pueden tener tiempos de subida y bajada rápidos, lo que hace que sus cables actúen como transmisores de radio. Este efecto se ve incrementado por placas de circuito impreso mal diseñadas . Estos efectos se reducen mediante el uso de controladores de salida de microcontroladores con tiempos de subida más lentos o al apagar los componentes del sistema.
El microcontrolador es fácil de controlar. También es susceptible a fallas por interferencia de radiofrecuencia. Por lo tanto, hacer que el software del microcontrolador resista tales errores puede mejorar de manera económica la tolerancia del sistema a la interferencia electromagnética al reducir la necesidad de alteraciones de hardware.
Posibles interferencias de sistemas basados en microcontroladores
Los microcontroladores CMOS tienen puntos débiles específicos que pueden fortalecerse con un software que trabaja contra la interferencia electromagnética. A menudo se requiere el análisis del modo de falla y los efectos de un sistema y sus requisitos. Los problemas de compatibilidad electromagnética se pueden agregar fácilmente a dicho análisis.
Fuente de alimentación
Los cambios lentos de voltaje de la fuente de alimentación no causan perturbaciones significativas, pero los cambios rápidos pueden generar problemas impredecibles. Si un voltaje excede los parámetros en la hoja de datos del controlador en un 150 por ciento, puede hacer que el puerto de entrada o el puerto de salida se cuelgue en un estado, conocido como bloqueo CMOS . [1] Sin control de corriente interno, el enganche hace que el microcontrolador se queme. La solución estándar es una combinación de cambios de software y hardware. La mayoría de los sistemas integrados tienen un temporizador de vigilancia . Este perro guardián debe ser externo al microcontrolador para que sea inmune a cualquier interferencia electromagnética plausible. Debería reiniciar la fuente de alimentación, apagándola brevemente. El período de vigilancia debe ser la mitad o menos del tiempo y la energía necesarios para quemar el microcontrolador. El diseño de la fuente de alimentación debe estar bien conectado a tierra y desacoplado utilizando condensadores e inductores cerca del microcontrolador; algunos valores típicos son 100uF y 0.1uF en paralelo.
La baja potencia puede provocar graves averías en la mayoría de los microcontroladores. Para que la CPU decodifique y ejecute correctamente las instrucciones, el voltaje suministrado no debe caer por debajo del nivel mínimo de voltaje. Cuando el voltaje suministrado cae por debajo de este nivel, la CPU puede comenzar a ejecutar algunas instrucciones incorrectamente. El resultado es una actividad inesperada en las líneas de control y datos internos. Esta actividad puede causar:
- Corrupción del registro de la CPU
- Corrupción del registro de E / S
- Conmutación aleatoria de pines de E / S
- Corrupción SRAM
- Corrupción EEPROM
La detección de apagones resuelve la mayoría de esos problemas en la mayoría de los sistemas al hacer que el sistema se apague cuando la energía principal no es confiable. Un sistema típico vuelve a disparar un temporizador cada vez que el voltaje principal de CA excede el 90% de su voltaje nominal. Si el temporizador expira, interrumpe el microcontrolador, que luego apaga su sistema. Muchos sistemas también miden los voltajes de la fuente de alimentación para evitar una degradación lenta de la fuente de alimentación.
El oscilador
Los puertos de entrada de los osciladores CMOS tienen altas impedancias y, por lo tanto, son muy susceptibles a perturbaciones transitorias. Según la ley de Ohm , la alta impedancia provoca grandes diferencias de voltaje. También son muy sensibles a los cortocircuitos provocados por la humedad o el polvo.
Una falla típica es cuando la estabilidad de los osciladores se ve afectada. Esto puede hacer que se detenga o cambie su período. Las coberturas normales del sistema deben tener un oscilador auxiliar que utilice algún esquema económico y robusto, como un anillo de inversores o un temporizador de un solo paso resistor-condensador. Después de un reinicio (quizás causado por un temporizador de vigilancia), el sistema puede usar estos valores predeterminados, solo activando el oscilador de cristal sensible una vez que las mediciones de tiempo hayan demostrado que es estable. También es común en los sistemas de alta confiabilidad medir la frecuencia del reloj comparándola con un estándar externo, generalmente un reloj de comunicaciones, la línea eléctrica o un temporizador resistor-capacitor.
Las ráfagas de interferencia electromagnética pueden acortar los períodos de reloj o causar pulsos de ejecución que conducen a un acceso incorrecto a los datos o a la ejecución de comandos. El resultado es un contenido de memoria incorrecto o punteros de programa. El método estándar para superar esto en hardware es utilizar un bucle de bloqueo de fase en el chip para generar la señal de reloj real del microcontrolador. El software puede verificar periódicamente las estructuras de datos y leer los puertos críticos mediante la votación, distribuyendo las lecturas en el tiempo o el espacio.
Puertos de entrada / salida
Los puertos de entrada / salida, incluidas las líneas de direcciones y las líneas de datos, conectados por líneas largas o periféricos externos son las antenas que permiten que las perturbaciones tengan efectos. La interferencia electromagnética puede dar lugar a datos y direcciones incorrectos en estas líneas. Las fuertes fluctuaciones pueden hacer que la computadora lea mal los registros de E / S o incluso detenga la comunicación con estos puertos. Las descargas electrostáticas pueden destruir los puertos o provocar fallos de funcionamiento.
La mayoría de los pines de los microcontroladores son entradas de alta impedancia o entradas y salidas mixtas. Los pines de entrada de alta impedancia son sensibles al ruido y pueden registrar niveles falsos si no se terminan correctamente. Los pines que no terminan dentro de un circuito integrado necesitan resistencias conectadas. Estos deben estar conectados a tierra o suministro, asegurando un estado lógico conocido.
![](http://wikiimg.tojsiabtv.com/wikipedia/commons/thumb/7/75/Misra_EMC_Error_Analysis_Chart.png/350px-Misra_EMC_Error_Analysis_Chart.png)
Acciones correctivas
Un análisis de posibles errores antes de la corrección es muy importante. La causa debe determinarse para poder solucionar el problema.
La Asociación de confiabilidad del software de la industria del motor identifica los pasos necesarios en caso de error de la siguiente manera: [2]
- Información / advertencia al usuario
- Almacene los datos defectuosos hasta que se pueda realizar un reinicio definido
- Mantenga el sistema en un estado definido hasta que se pueda corregir el error
Básicamente, se usa la redundancia para contrarrestar las fallas. Esto incluye ejecutar código adicional (redundancia en el tiempo) y mantener bits adicionales (redundancia en el espacio).
Gestión de errores de puntero de instrucción (IP)
Un puntero de instrucción alterado puede provocar errores graves, como un salto indefinido a un punto arbitrario de la memoria, donde se leen instrucciones ilegales. El estado del sistema no estará definido. Los errores de IP se pueden manejar mediante el uso de soluciones basadas en software, como tokens de función y diapositivas NOP .
Muchos procesadores, como el Motorola 680x0, cuentan con una trampa de hardware al encontrar una instrucción ilegal. Se ejecuta una instrucción correcta, definida en el vector de trampa, en lugar de la aleatoria. Las trampas pueden manejar errores de rango mayor que los tokens de función y las diapositivas NOP. Como complemento a las instrucciones ilegales, las trampas de hardware manejan de forma segura violaciones de acceso a la memoria, desbordamientos o una división por cero.
Transferencia de token (token de función)
![](http://wikiimg.tojsiabtv.com/wikipedia/commons/thumb/f/f3/Token_Passing.png/300px-Token_Passing.png)
![](http://wikiimg.tojsiabtv.com/wikipedia/commons/thumb/0/06/Token_Passing_with_Globals_Function_ID.png/300px-Token_Passing_with_Globals_Function_ID.png)
Se puede lograr una inmunidad mejorada al ruido mediante el control de flujo de ejecución conocido como paso de token. La figura de la derecha muestra el principio funcional de forma esquemática. Este método se ocupa de los errores de flujo del programa causados por los punteros de instrucción.
La implementación es simple y eficiente. Cada función está etiquetada con un ID de función único. Cuando se llama a la función, el ID de la función se guarda en una variable global. La función solo se ejecuta si el ID de la función en la variable global y el ID de la función coinciden. Si los ID no coinciden, se ha producido un error de puntero de instrucción y se pueden tomar acciones correctivas específicas. En la siguiente lista de fuentes se indica una implementación de muestra del paso de tokens utilizando una variable global programada en C.
Esto es esencialmente una secuencia de "armar / disparar", para cada llamada de función. Requerir tal secuencia es parte de técnicas de programación seguras, ya que genera tolerancia para fallas de un solo bit (o en este caso, puntero de instrucción perdida).
La implementación de tokens de función aumenta el tamaño del código del programa entre un 10 y un 20% y ralentiza el rendimiento. Para mejorar la implementación, en lugar de las variables globales como las anteriores, el ID de la función se puede pasar como un argumento dentro del encabezado de las funciones, como se muestra en el ejemplo de código a continuación.
![](http://wikiimg.tojsiabtv.com/wikipedia/en/thumb/9/97/Token_Passing_with_Function_Parameters.png/300px-Token_Passing_with_Function_Parameters.png)
Diapositiva NOP
Con NOP-Fills, la confiabilidad de un sistema en caso de un puntero de instrucción perturbado se puede mejorar en algunos casos. Toda la memoria del programa que no es utilizada por el código del programa se llena con instrucciones No-Operation ( NOP ). En el código de máquina, una instrucción NOP a menudo se representa mediante 0x00 (por ejemplo, Intel 8051, ATmega16, etc.). El sistema se mantiene en un estado definido. Al final de la memoria física del programa, se debe implementar un manejo de errores de puntero de instrucción (IPEH IP-Error-Handler). En algunos casos, esto puede ser un simple reinicio.
Si se produce un error de puntero de instrucción durante la ejecución y un programa apunta a un segmento de memoria lleno de instrucciones NOP, inevitablemente se produce un error y se reconoce.
Son aplicables tres métodos de implementación de NOP-Fills:
- En el primer método, la memoria física no utilizada se establece en 0x00 manualmente mediante la búsqueda y reemplazo en el archivo de programa (HEX) . El inconveniente de este método es que debe hacerse después de cada compilación.
![](http://wikiimg.tojsiabtv.com/wikipedia/en/thumb/d/d3/Error_Handler_after_NOP_Fill.png/500px-Error_Handler_after_NOP_Fill.png)
- El segundo método usa la opción de relleno del enlazador, que llena las regiones de memoria no utilizadas con una constante predefinida (en este caso 0x00).
- La tercera forma es incluir un número correspondiente de directivas de ensamblador NOP directamente en el código del programa.
Cuando se utiliza el compilador CodevisionAVR C , los rellenos NOP se pueden implementar fácilmente. El programador de chips ofrece la función de editar el programa flash y EEPROM para llenarlo con un valor específico. Con un Atmel ATmega16, no es necesario implementar ningún salto para restablecer la dirección 0x00, ya que el desbordamiento del puntero de instrucción establece automáticamente su valor en 0x00. Desafortunadamente, los reinicios por desbordamiento no son equivalentes a reinicios intencionales. Durante el reinicio previsto, todos los registros MC necesarios se reinician por hardware, lo que no se realiza mediante un salto a 0x00. Por tanto, este método no se aplicará en las siguientes pruebas.
![](http://wikiimg.tojsiabtv.com/wikipedia/commons/thumb/2/2f/Memory_Function_Token_and_NOP.png/350px-Memory_Function_Token_and_NOP.png)
Errores de registro de E / S
La arquitectura del microcontrolador requiere que los cables de E / S se coloquen en el borde exterior de la matriz de silicio. Por lo tanto, los contactos de E / S se ven fuertemente afectados por perturbaciones transitorias en su camino hacia el núcleo de silicio, y los registros de E / S son una de las partes más vulnerables del microcontrolador. Los registros de E / S mal leídos pueden dar lugar a un estado incorrecto del sistema. Los errores más graves pueden ocurrir en el puerto de reinicio e interrumpir los puertos de entrada. Los registros de dirección de datos perturbados (DDR) pueden inhibir la escritura en el bus.
Estas alteraciones se pueden prevenir de la siguiente manera:
1. Actualización cíclica de los registros más importantes
- Mediante la actualización cíclica del registro más importante y los datos en los registros de dirección de datos en los intervalos más cortos posibles, se pueden reducir los errores. Por lo tanto, un bit configurado incorrectamente puede corregirse antes de que pueda tener efectos negativos.
2. Lectura múltiple de registros de entrada
- Otro método para filtrar perturbaciones es la lectura múltiple de registros de entrada. A continuación, se comprueba la coherencia de los valores leídos. Si los valores son consistentes, pueden considerarse válidos. Una definición de un rango de valores y / o el cálculo de un valor medio pueden mejorar los resultados para algunas aplicaciones.
- Efecto secundario : mayor actividad
- Un inconveniente es el aumento de la actividad debido a las actualizaciones y lecturas permanentes de los periféricos. Esta actividad puede agregar emisiones y fallas adicionales.
- Puertos de interrupción externos; desbordamiento de pila
- Las interrupciones externas se activan por flancos descendentes / ascendentes o potencial alto / bajo en el puerto de interrupción, lo que genera una solicitud de interrupción (IRQ) en el controlador. Las interrupciones de hardware se dividen en interrupciones enmascarables e interrupciones no enmascarables (NMI). La activación de interrupciones enmascarables se puede detener en algunas funciones de tiempo crítico. Si se llama a una interrupción, el puntero de instrucción actual (IP) se guarda en la pila y el puntero de pila (SP) se reduce. La dirección de la rutina de servicio de interrupciones (ISR) se lee de la tabla de vectores de interrupciones y se carga en el registro IP, y como consecuencia se ejecuta la ISR.
- Si las interrupciones, debidas a perturbaciones, se generan más rápido que el procesamiento, la pila crece hasta que se usa toda la memoria. Es posible que se sobrescriban los datos de la pila u otros datos. Se puede aplicar una estrategia de software defensiva. Se puede observar el puntero de pila (SP). Entonces se puede detener el crecimiento de la pila más allá de una dirección definida. El valor del puntero de la pila se puede verificar al comienzo de la rutina del servicio de interrupción. Si el SP apunta a una dirección fuera de los límites de pila definidos, se puede ejecutar un reinicio.
Redundancia de datos
En sistemas sin unidades de detección y corrección de errores, la confiabilidad del sistema se puede mejorar proporcionando protección a través de software. La protección de toda la memoria (código y datos) puede no ser práctica en software, ya que causa una sobrecarga inaceptable, pero es una solución de bajo costo implementada por software para segmentos de código.
Otro requisito elemental de los sistemas digitales es la transmisión impecable de datos. La comunicación con otros componentes puede ser el punto débil y una fuente de errores de un sistema. Un protocolo de transmisión bien pensado es muy importante. Las técnicas que se describen a continuación también se pueden aplicar a los datos transmitidos, aumentando así la fiabilidad de la transmisión.
Comprobación de redundancia cíclica y paridad
Una verificación de redundancia cíclica es un tipo de función hash que se utiliza para producir una suma de verificación , que es un pequeño entero de un gran bloque de datos, como el tráfico de red o archivos de computadora. Los CRC se calculan antes y después de la transmisión o duplicación y se comparan para confirmar que son iguales. Un CRC detecta todos los errores de uno o dos bits, todos los errores impares, todos los errores de ráfaga si la ráfaga es menor que el CRC y la mayoría de los errores de ráfaga amplia. Las verificaciones de paridad se pueden aplicar a caracteres individuales (VRC: verificación de redundancia vertical ), lo que da como resultado un bit de paridad adicional o a un bloque de datos (LRC: verificación de redundancia longitudinal ), emitiendo un carácter de verificación de bloque. Ambos métodos se pueden implementar con bastante facilidad mediante una operación XOR. Una compensación es que se pueden detectar menos errores que con el CRC. Las comprobaciones de paridad solo detectan números impares de bits invertidos. Los números pares de errores de bits no se detectan. Una posible mejora es el uso de VRC y LRC, llamado doble paridad o código rectangular óptimo (ORC).
Algunos microcontroladores cuentan con una unidad CRC de hardware.
Diferentes tipos de duplicaciones
Un método específico de redundancia de datos es la duplicación, que se puede aplicar de varias formas, como se describe a continuación:
- Duplicación de datos
- Para hacer frente a la corrupción de datos, se pueden almacenar múltiples copias de registros y variables importantes. A continuación, se pueden realizar comprobaciones de coherencia entre ubicaciones de memoria que almacenan los mismos valores o técnicas de votación al acceder a los datos.
- Es necesario implementar dos modificaciones diferentes al código fuente.
- El primero corresponde a duplicar algunas o todas las variables del programa para introducir redundancia de datos y modificar todos los operadores para gestionar la réplica introducida de las variables.
- La segunda modificación introduce comprobaciones de coherencia en el flujo de control, de modo que se verifica la coherencia entre las dos copias de cada variable.
Cuando se leen los datos, se comparan los dos conjuntos de datos. Se detecta una perturbación si los dos conjuntos de datos no son iguales. Se puede informar de un error. Si ambos conjuntos de datos están dañados, se puede informar de un error significativo y el sistema puede reaccionar en consecuencia.
En la mayoría de los casos, las aplicaciones críticas para la seguridad tienen restricciones estrictas en términos de ocupación de memoria y rendimiento del sistema. La duplicación de todo el conjunto de variables y la introducción de una verificación de coherencia antes de cada operación de lectura representan la elección óptima desde el punto de vista de la cobertura de fallas. La duplicación de todo el conjunto de variables permite cubrir un porcentaje extremadamente alto de fallas con esta técnica de redundancia de software. Por otro lado, al duplicar un porcentaje menor de variables, se puede compensar la cobertura de fallas obtenida con la sobrecarga de tiempo de la CPU.
![](http://wikiimg.tojsiabtv.com/wikipedia/en/thumb/c/c3/Time_Overhead.png/500px-Time_Overhead.png)
El resultado experimental muestra que duplicar solo el 50% de las variables es suficiente para cubrir el 85% de las fallas con una sobrecarga de tiempo de CPU de solo el 28%.
También se debe prestar atención a la implementación de la verificación de consistencia, ya que generalmente se lleva a cabo después de cada operación de lectura o al final del período de vida de cada variable. La implementación cuidadosa de esta verificación puede minimizar el tiempo de CPU y el tamaño del código para esta aplicación.
![](http://wikiimg.tojsiabtv.com/wikipedia/en/thumb/c/c0/Function_Parameter_Duplication.png/300px-Function_Parameter_Duplication.png)
![](http://wikiimg.tojsiabtv.com/wikipedia/en/thumb/3/31/Test_Condition_Duplication.png/300px-Test_Condition_Duplication.png)
- Duplicación de parámetros de función
Dado que la detección de errores en los datos se logra mediante la duplicación de todas las variables y la adición de controles de coherencia después de cada operación de lectura, se deben aplicar consideraciones especiales de acuerdo con las interfaces del procedimiento. Los parámetros que se pasan a los procedimientos, así como los valores de retorno, se consideran variables. Por lo tanto, todos los parámetros del procedimiento se duplican, así como los valores de retorno. Un procedimiento todavía se llama solo una vez, pero devuelve dos resultados, que deben tener el mismo valor. La lista de fuentes a la derecha muestra una implementación de muestra de la duplicación de parámetros de función.
- Prueba de duplicación
Duplicar una prueba es uno de los métodos más robustos que existen para la detección de errores de software genéricos. Un inconveniente es que no se pueden realizar suposiciones estrictas sobre la causa de los errores (EMI, ESD, etc.) ni sobre el tipo de errores que se pueden esperar (errores que afecten al flujo de control, errores que afecten a los datos, etc.). Se conocen cambios de bits erróneos en bytes de datos mientras se almacenan en la memoria, caché, registro o se transmiten en un bus. Estos bytes de datos pueden ser códigos de operación (instrucciones), direcciones de memoria o datos. Por lo tanto, este método puede detectar una amplia gama de fallas y no se limita a un modelo de falla específico. Con este método, la memoria aumenta aproximadamente cuatro veces y el tiempo de ejecución es aproximadamente 2,5 veces más largo que el mismo programa sin duplicación de prueba. La lista de fuentes a la derecha muestra una implementación de muestra de la duplicación de condiciones de prueba.
- Duplicación de ramificación
![](http://wikiimg.tojsiabtv.com/wikipedia/commons/thumb/5/51/Brunch_Duplication.png/500px-Brunch_Duplication.png)
En comparación con la duplicación de prueba, donde una condición se verifica de forma cruzada, con la duplicación ramificada, la condición se duplica.
Para cada prueba condicional en el programa, la condición y el salto resultante deben reevaluarse, como se muestra en la figura. Solo si se vuelve a cumplir la condición, se ejecuta el salto; de lo contrario, se ha producido un error.
- Duplicación de instrucciones y diversidad en la implementación
¿Cuál es el beneficio de cuando los datos, las pruebas y las ramas se duplican cuando el resultado calculado es incorrecto? Una solución es duplicar una instrucción por completo, pero implementarlas de manera diferente. Entonces se ejecutan dos programas diferentes con la misma funcionalidad, pero con diferentes conjuntos de datos y diferentes implementaciones. Sus salidas se comparan y deben ser iguales. Este método cubre no solo cambios de bits o fallas del procesador, sino también errores de programación (errores). Si está destinado a manejar especialmente fallas de hardware (CPU), el software se puede implementar utilizando diferentes partes del hardware; por ejemplo, una implementación usa una multiplicación de hardware y la otra implementación se multiplica cambiando o agregando. Esto provoca una sobrecarga significativa (más de un factor de dos para el tamaño del código). Por otro lado, los resultados son extraordinariamente precisos.
Puertos
Restablecer puertos e interrumpir puertos
Los puertos de reinicio y las interrupciones son muy importantes, ya que pueden activarse por flancos ascendentes / descendentes o potencial alto / bajo en el puerto de interrupción. Las perturbaciones transitorias pueden provocar reinicios no deseados o activar interrupciones y, por lo tanto, hacer que todo el sistema se bloquee. Por cada interrupción activada, el puntero de instrucción se guarda en la pila y el puntero de pila se reduce.
Intente reducir la cantidad de interrupciones activadas por flancos . Si las interrupciones se pueden activar solo con un nivel, esto ayuda a garantizar que el ruido en un pin de interrupción no cause una operación no deseada. Debe tenerse en cuenta que las interrupciones activadas por nivel pueden provocar interrupciones repetidas siempre que el nivel se mantenga alto. En la implementación, esta característica debe ser considerada; Las interrupciones repetidas no deseadas deben desactivarse en el ISR. Si esto no es posible, entonces en la entrada inmediata de una interrupción activada por flanco, una verificación de software en el pin para determinar si el nivel es correcto debería ser suficiente.
Para todas las interrupciones no utilizadas, se debe implementar una rutina de manejo de errores para mantener el sistema en un estado definido después de una interrupción involuntaria.
Los restablecimientos involuntarios perturban la ejecución correcta del programa y no son aceptables para aplicaciones extensas o sistemas críticos para la seguridad.
Restablecer la diferenciación (arranque en frío / en caliente)
Un requisito frecuente del sistema es la reanudación automática del trabajo después de una alteración o interrupción. Puede ser útil registrar el estado de un sistema al apagarlo y guardar los datos en una memoria no volátil. Al inicio, el sistema puede evaluar si el sistema se reinicia debido a una perturbación o falla (inicio en caliente), y el estado del sistema se puede restaurar o se puede indicar un error. En caso de un arranque en frío, los datos guardados en la memoria pueden considerarse válidos.
Medida de consumo de corriente externa
![](http://wikiimg.tojsiabtv.com/wikipedia/en/thumb/9/95/Detection_Power_Supply_Fluctuation.png/350px-Detection_Power_Supply_Fluctuation.png)
Este método es una combinación de implementaciones de hardware y software. Propone un circuito simple para detectar una interferencia electromagnética utilizando los propios recursos del dispositivo. La mayoría de los microcontroladores, como el ATmega16, integran convertidores analógicos a digitales (ADC), que podrían usarse para detectar fluctuaciones inusuales de la fuente de alimentación causadas por interferencias.
Cuando el software detecta una interferencia, el microcontrolador puede entrar en un estado seguro mientras espera que pase la agresión. Durante este estado seguro, no se permiten ejecuciones críticas. El gráfico presenta cómo se puede realizar la detección de interferencias. Esta técnica se puede utilizar fácilmente con cualquier microcontrolador que cuente con un convertidor AD.
Perro guardián
Un temporizador de vigilancia es un temporizador electrónico que detecta el funcionamiento anormal de otros componentes e inicia una acción correctiva para restaurar el funcionamiento normal. Especialmente asegura que los dispositivos controlados por microcontroladores no fallan por completo si ocurre un error de software o un error momentáneo de hardware. Los temporizadores de vigilancia se basan normalmente en un temporizador monoestable o en un contador digital. El circuito temporizador puede estar integrado en el chip del microcontrolador o implementarse como un circuito externo. Los temporizadores de vigilancia pueden mejorar significativamente la confiabilidad de un microcontrolador en un entorno influenciado electromagnéticamente.
El software informa al perro guardián a intervalos regulares que todavía está funcionando correctamente. Si no se informa al perro guardián, significa que el software ya no funciona como se especifica. Luego, el perro guardián restablece el sistema a un estado definido. Durante el reinicio, el dispositivo no puede procesar datos y no reacciona a las llamadas.
Como la estrategia para restablecer el temporizador de vigilancia es muy importante, se deben cumplir dos requisitos:
- El perro guardián solo se puede restablecer si todas las rutinas funcionan correctamente.
- El reinicio debe ejecutarse lo más rápido posible.
La simple activación del perro guardián y los reinicios regulares del temporizador no hacen un uso óptimo de un perro guardián. Para obtener los mejores resultados, el ciclo de actualización del temporizador debe configurarse lo más corto posible y llamarse desde la función principal, de modo que se pueda realizar un reinicio antes de que se produzca un daño o se produzca un error. Si un microcontrolador no tiene un perro guardián interno, se puede implementar una funcionalidad similar mediante el uso de una interrupción del temporizador o un dispositivo externo.
Apagón
A brown-out monitores de circuito, el nivel VCC durante el funcionamiento por comparación con un nivel de disparo fijo. Cuando VCC cae por debajo del nivel de activación, el reinicio de bajada se activa inmediatamente. Cuando VCC sube de nuevo, la MCU se reinicia después de un cierto retraso.
Ver también
- Compatibilidad electromagnética
- Programación compatible con EMC
- Programación consciente de emisiones
- Sistema informático tolerante a fallas
- Software tolerante a fallas
- Lista de directivas EMC
- Tolerancia a fallas de software
Notas
- ^ Latch-up, también conocido como Single Event Latch-up (SEL), es un cortocircuito de VDD ( fuente de alimentación positiva ) y VSS ( fuente de alimentación negativa ). El enganche es causado por transistores parásitos (transistores que no se pueden activar durante las condiciones normales de funcionamiento) de los circuitos CMOS . Las perturbaciones transitorias fuertes pueden activar transistores y destruir térmicamente el dispositivo.
- ^ [1]
enlaces externos
- ST AN5833: técnicas de software para mejorar el rendimiento de EMC
- El impacto de EMC del software integrado
- Nota de aplicación de Freescale: mejora del rendimiento de inmunidad transitoria de aplicaciones basadas en microcontroladores