¿Estrategia de baja potencia para lidiar con cambios de bits espontáneos durante el sueño en AVR de 8 bits?

Estoy diseñando un circuito basado en ATTINY que está diseñado para funcionar sin supervisión durante largos períodos de tiempo con una batería muy pequeña. El dispositivo pasa casi todo el tiempo en reposo profundo y solo se activa brevemente en respuesta a una rara interrupción de cambio de pin.

Estoy programando a la defensiva para asegurarme de que el programa siempre vuelva a un estado conocido, incluso frente a cambios de bit espontáneos en casi cualquier registro (aunque no puedo obtener una lectura de la probabilidad de que esto sea realmente ).

Hay un caso que no puedo entender cómo mitigar: un pequeño cambio a un registro de control de interrupción que ocurre mientras duerme.

Los bits relevantes parecen ser...

PCMSKn - Máscara de activación de cambio de PIN. Debe tener un 1 para el pin correspondiente para generar una interrupción.

PCIEn - Habilitación de interrupción de cambio de pin. Debe tener un 1 para cualquiera de los pines habilitados para generar una interrupción.

GIE. Habilitación de interrupción global. Debe tener un 1 para que ocurra cualquier interrupción.

Si alguno de estos bits cambia a 0 mientras estoy dormido, entonces el próximo cambio de pin aparentemente no activará el procesador y estoy muerto en el agua sin forma de recuperarme.

Una forma de lidiar con esto sería configurar un WatchDog de nivel de seguridad 2 para reiniciar periódicamente el procesador mientras duermo y escribir 1 en todos los bits de control de interrupción en cada reinicio. Esto funcionaría muy bien en teoría y parecería ser a prueba de balas, excepto que en la práctica permitir que WatchDog aumente el consumo de energía en suspensión en varios órdenes de magnitud (de ~0.01uA a ~5uA @ 3V @25C) y, por lo tanto, reduciría la vida útil proyectada de mi dispositivo de décadas a meses .

¿Cuáles son algunas estrategias de eficiencia energética para abordar este problema de manera sólida?

Respuestas (2)

¿Puedes usar dos pines para la interrupción? De esa manera, podría tener dos bits PCMSK configurados. También puede configurar ambas interrupciones de cambio de pin, lo que cubre PCIEn. Eso deja solo a GIE. No creo que haya nada que puedas hacer al respecto.

Mi entendimiento (ciertamente vago) es que los cambios de bits inducidos por rayos cósmicos son más un problema para SRAM y DRAM, que tienen una retroalimentación más débil en su almacenamiento de datos. No he oído tanta preocupación por los registros. Personalmente, estaría más preocupado por su pila y variables globales ya que no tiene RAM ECC.

Independientemente, para obtener un verdadero sistema de alta confiabilidad, necesita una MCU diseñada para ello. Hay productos disponibles con hardware redundante y memoria ECC. Desafortunadamente, no son ni baratos ni de bajo consumo. Este tipo de MCU se utilizan normalmente para aplicaciones peligrosas como bolsas de aire y dispositivos médicos.

Mi sugerencia es programar tan a la defensiva como pueda, pero acepte que no puede eliminar todos los riesgos a menos que esté dispuesto a pagar por ellos. Las probabilidades de que su bit GIE cambie aleatoriamente son muy pequeñas. A menos que una falla vaya a lastimar o matar a alguien, no vale la pena preocuparse por ese nivel de riesgo.

¡Gran estrategia para usar un segundo pin de respaldo para mitigar los cambios en la máscara de cambio de pin y habilitar bits! ¡Gracias! Desearía que hubiera alguna forma a prueba de balas de evitar la exposición del bit GIE, pero creo que tiene razón en que es un riesgo extremadamente pequeño. ¡Gracias!

Interesante seguimiento oficial de ATMEL:

Hola Josh, entiendo que te preocupa que los bits de control de interrupción se cambien al azar. Esto no podría suceder a menos que se modifique de alguna manera en el firmware o que el dispositivo se mantenga en un entorno ruidoso que podría causar daños en la memoria flash. Para evitar la posibilidad de daños en la memoria flash, consulte la sección 18.7 de la hoja de datos del dispositivo, Prevención de daños en la memoria flash. Siempre que el diseño se ajuste a las consideraciones mencionadas para evitar la corrupción de flash, no hay posibilidad de que los bits de control de interrupción se dañen en el dispositivo. Espero que esto aclare. Por favor, póngase en contacto con nosotros en caso de más consultas.

Saludos cordiales, Equipo de soporte de Ineyaa N Atmel

He tenido muchos miles de AVR en funcionamiento durante muchos años y no creo haber visto nunca un cambio de bit espontáneo, por lo que al menos no puedo refutar esta afirmación.

¡Me encantaría saber si alguien más ha visto alguna vez un bit flip espontáneo en un AVR de 8 bits en la naturaleza!