¿Una estrategia de baja potencia para tratar con giros de bit espontainious durante la suspensión en AVR de 8 bits?

4

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 su tiempo en el sueño profundo, y solo se despierta brevemente en respuesta a una rara interrupción por cambio de pin.

Estoy programando a la defensiva para garantizar que el programa siempre regrese a un estado conocido, incluso en el caso de cambios de bits espontáneos en casi cualquier registro (aunque no puedo obtener una lectura en cómo es probable que estos sean ).

Hay un caso en el que no puedo descubrir cómo mitigar: un giro de un bit 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 que el pin correspondiente genere una interrupción.

PCIEn - Activación de interrupción de cambio de pin. Debe tener un 1 para que cualquiera de los pin habilitados genere una interrupción.

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

Si cualquiera de estos bits se pone a 0 cuando estoy dormido, el siguiente cambio de pin aparentemente no despertará al procesador y estoy muerto en el agua sin posibilidad de recuperación.

Una forma de lidiar con esto sería configurar un WatchDog de nivel de seguridad 2 para reiniciar periódicamente el procesador mientras estoy durmiendo, 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 en la práctica, al habilitar WatchDog aumenta el consumo de energía durante el sueño en varios órdenes de magnitud (desde ~ 0.01uA a ~ 5uA @ 3V @ 25C) y, por lo tanto, reduciría la vida útil proyectada de mi dispositivo desde décadas a months .

¿Cuáles son algunas estrategias de eficiencia de energía para enfrentar este problema de manera robusta?

    
pregunta bigjosh

2 respuestas

3

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

Mi (aunque vaga) comprensión 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 escuchado tanta preocupación por los registros. Personalmente, me preocuparía más su pila y sus variables globales ya que no tiene ECC RAM.

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 baratos ni de bajo poder. Este tipo de MCU se usa normalmente para aplicaciones peligrosas como bolsas de aire y dispositivos médicos.

Mi sugerencia es programar lo más defensivamente que puedas, pero acepta que no puedes eliminar todos los riesgos a menos que estés dispuesto a pagar por ello. Las probabilidades de que gire un poco GIE aleatoriamente son muy pequeñas. A menos que una falla dañe o mate a alguien, no vale la pena preocuparse por ese nivel de riesgo.

    
respondido por el Adam Haun
1

Seguimiento oficial interesante desde ATMEL:

  

Hola Josh, entiendo que te preocupa la interrupción.   Los bits de control se voltean al azar. Esto no podría suceder a menos que   se modifican de alguna manera en el firmware o el dispositivo se mantiene en un   Ambiente ruidoso que podría causar corrupción de flash. Para prevenir la   Posibilidad de corrupción de flash, consulte la hoja de datos del dispositivo   sección 18.7 Prevención de corrupción de flash. Siempre y cuando el diseño   Se ajusta a las consideraciones mencionadas para prevenir el flash.   corrupción, no hay posibilidad de los bits de control de interrupción   corromperse en el dispositivo. Espero que esto aclare. Por favor vuelve   a nosotros en caso de nuevas consultas.

     

Saludos cordiales,   Ineyaa n   Equipo de soporte de Atmel

He tenido muchos miles de AVRs en funcionamiento durante muchos años y no creo que haya visto un giro espontáneo, por lo menos no puedo refutar esta afirmación.

¡Me encantaría saber si alguien más ha visto un giro espontáneo de bits en un AVR de 8 bits en estado salvaje!

    
respondido por el bigjosh

Lea otras preguntas en las etiquetas