Low-Power-Strategie für den Umgang mit spontanen Bit-Flips während des Ruhezustands auf AVR 8-Bit?

Ich entwerfe eine ATTINY-basierte Schaltung, die mit einer sehr kleinen Batterie über sehr lange Zeiträume unbeaufsichtigt laufen soll. Das Gerät verbringt fast die gesamte Zeit im Tiefschlaf und wacht nur kurz als Reaktion auf einen seltenen Pin-Wechsel-Interrupt auf.

Ich programmiere defensiv, um sicherzustellen, dass das Programm auch bei spontanen Bit-Flips in fast jedem Register immer in einen bekannten Zustand zurückkehrt (obwohl ich nicht ablesen kann, wie wahrscheinlich diese tatsächlich sind ) .

Es gibt einen Fall, bei dem ich nicht herausfinden kann, wie ich ihn entschärfen kann: ein bisschen Flip zu einem Interrupt-Steuerregister, das während des Schlafens passiert.

Die relevanten Bits scheinen ...

PCMSKn - PIN-Änderungs-Aktivierungsmaske. Muss eine 1 für den entsprechenden Pin haben, um einen Interrupt zu erzeugen.

PCIEn - Pin-Änderungs-Interrupt aktivieren. Muss eine 1 für einen der aktivierten Pins haben, um einen Interrupt zu erzeugen.

GIE. Globale Interrupt-Aktivierung. Muss eine 1 haben, damit ein Interrupt auftritt.

Wenn eines dieser Bits auf 0 gesetzt wird, während ich schlafe, wird der nächste Pin-Wechsel den Prozessor anscheinend nicht aufwecken, und ich bin tot im Wasser, ohne Möglichkeit, mich zu erholen.

Eine Möglichkeit, damit umzugehen, wäre, einen WatchDog der Sicherheitsstufe 2 einzurichten, um den Prozessor regelmäßig zurückzusetzen, während ich schlafe, und bei jedem Zurücksetzen 1 in alle Interrupt-Steuerbits zu schreiben. Dies würde theoretisch großartig funktionieren und scheint kugelsicher zu sein, außer in der Praxis erhöht die Aktivierung des WatchDog den Stromverbrauch im Ruhezustand um mehrere Größenordnungen (von ~ 0,01 uA auf ~ 5 uA bei 3 V bei 25 ° C) und würde somit die projizierte Lebensdauer verkürzen von mein Gerät von Jahrzehnten bis Monate .

Welche energieeffizienten Strategien gibt es, um mit diesem Problem robust umzugehen?

Antworten (2)

Können Sie zwei Pins für den Interrupt verwenden? Auf diese Weise könnten Sie zwei PCMSK-Bits setzen. Sie können auch beide Pin-Wechsel-Interrupts einrichten, was PCIEn abdeckt. Bleibt nur GIE. Ich glaube nicht, dass du da was machen kannst.

Mein (zugegebenermaßen vage) Verständnis ist, dass durch kosmische Strahlung verursachte Bit-Flips eher ein Problem für SRAM und DRAM sind, die eine schwächere Rückkopplung in ihrer Datenspeicherung haben. Ich habe nicht so viel Besorgnis über Register gehört. Persönlich würde ich mir mehr Sorgen um Ihren Stack und Ihre globalen Variablen machen, da Sie kein ECC-RAM haben.

Unabhängig davon benötigen Sie für ein wirklich hochzuverlässiges System eine MCU, die dafür ausgelegt ist. Es sind Produkte mit redundanter Hardware und ECC-Speicher erhältlich. Leider sind sie weder billig noch stromsparend. Diese Arten von MCUs werden normalerweise für gefährliche Anwendungen wie Airbags und medizinische Geräte verwendet.

Mein Vorschlag ist, so defensiv wie möglich zu programmieren, aber akzeptieren Sie, dass Sie nicht jedes Risiko eliminieren können, wenn Sie nicht bereit sind, dafür zu bezahlen. Die Wahrscheinlichkeit, dass Ihr GIE-Bit zufällig umkippt, ist sehr gering. Wenn ein Fehler nicht jemanden verletzen oder töten wird, lohnt es sich nicht, sich über dieses Risikoniveau Gedanken zu machen.

Eine großartige Strategie, um einen zweiten Backup-Pin zu verwenden, um Flips in der Pin-Wechselmaske zu mildern und Bits zu aktivieren! Danke! Ich wünschte, es gäbe einen kugelsicheren Weg, um die GIE-Bit-Exposition zu umgehen, aber ich denke, Sie haben Recht, dass es ein äußerst geringes Risiko ist. Danke!

Interessantes offizielles Follow-up von ATMEL:

Hallo Josh, ich verstehe, dass Sie besorgt sind, dass die Interrupt-Steuerbits zufällig umgedreht werden. Dies könnte nicht passieren, es sei denn, sie werden irgendwie in der Firmware geändert oder das Gerät wird in einer lauten Umgebung aufbewahrt, die zu einer Flash-Beschädigung führen könnte. Um die Möglichkeit einer Flash-Korruption zu vermeiden, lesen Sie bitte Abschnitt 18.7 Flash-Korruption verhindern im Datenblatt des Geräts. Solange das Design den erwähnten Überlegungen zum Verhindern von Flash-Korruption entspricht, besteht keine Möglichkeit, dass die Interrupt-Steuerbits im Gerät beschädigt werden. Hoffe das klärt auf. Bitte melden Sie sich bei weiteren Fragen bei uns.

Mit freundlichen Grüßen, Ineyaa N Atmel Support-Team

Ich habe seit vielen Jahren viele tausend AVRs am Laufen und glaube nicht, dass ich jemals einen spontanen kleinen Flip gesehen habe, also kann ich diese Behauptung zumindest nicht widerlegen.

Ich würde gerne hören, ob jemand jemals einen spontanen Bit-Flip in einem 8-Bit-AVR in freier Wildbahn gesehen hat!