Forum: Mikrocontroller und Digitale Elektronik Raspberry durch einen µC überwachen?


von Horstmann (Gast)


Lesenswert?

Ein Raspberry Zero soll über seine serielle Schnittstelle mit einem µC 
(ATtiny o. ä.) verbunden werden. Der µC soll den Raspberry überwachen 
und im Fehlerfall neu starten.

Wie kann der µC sicher erkennen, ob der Raspberry einwandfrei arbeitet?

von Udo Neist (Gast)


Lesenswert?

Ich würde einfach einen GPIO togglen lassen und das mit dem ATtiny 
detektieren. Fehlen n Signale über ein bestimmten Zeitraum, einfach 
einen Reset auslösen.

von MaWin (Gast)


Lesenswert?

Horstmann schrieb:
> ob der Raspberry einwandfrei arbeitet

Das musst du erst einmal definieren.

von Programmierer (Gast)


Lesenswert?

Horstmann schrieb:
> Wie kann der µC sicher erkennen, ob der Raspberry einwandfrei arbeitet?

Das ist unmöglich. Stell dir vor durch kosmische Strahlung verheddert 
sich etwas im NEON-Block des Prozessors, wodurch unter einer Millionen 
Float-Multiplikationen eine ein falsches Ergebnis liefert. Wie soll der 
ATtiny mit seiner winzigen Rechenleistung eine solche Menge an Daten 
prüfen?

Ähnliches gilt für alle anderen High Performance / Multimedia-Funktionen 
des Raspberry PI, wie die Grafikkarte, Schnittstellen für HDMI, USB, 
Ethernet, WLAN und natürlich der große RAM - dort sind solche 
Datenmengen involviert, die kann kein Mikrocontroller in Echtzeit 
prüfen.

von Alexander S. (alex998)


Lesenswert?

Udo Neist schrieb:
> Ich würde einfach einen GPIO togglen lassen und das mit dem ATtiny
> detektieren. Fehlen n Signale über ein bestimmten Zeitraum, einfach
> einen Reset auslösen.

Genau so. Auf dem RPi läuft ein Python-Skript oÄ. das regelmäßig einen 
GPIO triggert.
Bei Power_On schaltet der Tiny den Raspberry an (vllt. mit nem kleinen 
Delay), wartet dann eine gewisse Zeitspanne (3-4min, kann wegen fsck 
auch mal länger dauern) auf ein Signal am GPIO. Sobald da einmal 
getriggert wurde (bzw. der initiale Timeout erreicht wurde) wird im Tiny 
auf Watchdog-Betrieb umgeschaltet, der regelmäßige Impuls resettet den 
Watchdogtimer. Bleibt der aus geht der Tiny in Reset und damit auch der 
RPi. Und dann fängt der Zyklus von vorne an...

: Bearbeitet durch User
von Daniel F. (foxi_the_daywalker)


Lesenswert?

Typische Aufgabe für einen Window-Watchdog.
Es darf nicht zu häufig getriggert werden und auch nicht zu selten.

Ich würde noch einen weiteren GPIO einplanen, damit man den Watchdog 
erst aktivieren kann, wenn der RPi komplett gestartet ist.
Sonst löst du ein Reset aus während der RPi gerade normal bootet.

Gruß
Daniel

Nebenbei, externe Watchdogs werden bei einer Sicherheitsbewertung immer 
gerne gesehen :-)

von Jörg R. (solar77)


Lesenswert?

Horstmann schrieb:
> Wie kann der µC sicher erkennen, ob der Raspberry einwandfrei arbeitet?

Und wer überwacht den Tiny?

Den Watchdog kannst du auch mit einem retriggerbaren Monoflop umsetzen.

von Programmierer (Gast)


Lesenswert?

Alexander S. schrieb:
> Genau so. Auf dem RPi läuft ein Python-Skript oÄ. das regelmäßig einen
> GPIO triggert.

So prüfst du aber nur ob das Python-Skript und der GPIO funktioniert. Es 
kann aber halt auch alles mögliche andere kaputt sein.

von Alexander S. (alex998)


Lesenswert?

Programmierer schrieb:
> So prüfst du aber nur ob das Python-Skript und der GPIO funktioniert.

Reicht doch. Das Skript muss halt auf dem RPi schauen ob die gewünschte 
Funktionalität (zB. das ein Server/Service läuft) gegeben ist. Wie genau 
das überlass ich mal dem TO.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Horstmann schrieb:
> Ein Raspberry Zero soll über seine serielle Schnittstelle mit einem µC
> (ATtiny o. ä.) verbunden werden. Der µC soll den Raspberry überwachen
> und im Fehlerfall neu starten.

Dann laß doch den ATtiny zyklisch etwas schicken und der RP muß eine 
Antwort dazu basteln. Stimmt die Antwort nicht -> Reset.
9600 Baud sollte reichen, das schafft ein ATtiny25 mit Bitwackeln (Quarz 
= 7.3728MHz).

von Erich (Gast)


Lesenswert?

Oder du nimmst einen 2. Raspberry.

Ich habe mein smart Home zeug darauf laufen und die beiden prüfen sich 
in mehreren Faktoren wie Ping, Mqtt und ob die Software noch läuft. Wenn 
was nicht passt übernimmt der 2. Raspberry und startet den ersten neu 
welcher dann wieder als Reserve dient. Das musst du aber nach deiner 
Anwendung individuell prüfen ob das geht und ob sich das lohnt.
Stichwort high availability cluster

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Programmierer schrieb:
> Es kann aber halt auch alles mögliche andere kaputt sein.
Es kann auch ein Flugzeug drauf gefallen sein...

Programmierer schrieb:
> Stell dir vor durch kosmische Strahlung verheddert sich etwas im NEON-Block
> des Prozessors
In sehr viel mehr als 99,999% aller ko(s)mischen Fehlerfälle hat sich da 
erfahrungsgemäß einfach deshalb was verheddert, weil der Programmierer 
einen Fehler in der Software hat.

von Programmierer (Gast)


Lesenswert?

Lothar M. schrieb:
> In sehr viel mehr als 99,999% aller ko(s)mischen Fehlerfälle hat sich da
> erfahrungsgemäß einfach deshalb was verheddert, weil der Programmierer
> einen Fehler in der Software hat.

Umso schlimmer. Dann gibt das Programm fröhlich den Watchdog-Puls aus, 
aber berechnet aufgrund eines Programmierfehlers irgendeinen Regler 
falsch und grillt die Regelstrecke...

von B e r n d W. (smiley46)


Lesenswert?

> alle ko(s)mischen Fehlerfälle

Für wirklich sicherheitskritische Aufgaben nimmt man deshalb kein 
Raspberry, sondern zwei möglichst einfach gestrickte RISC Controller wie 
2 ATtinys oder 2 PICs. Das Projekt (der Regler) wird compiliert und alle 
verwendeten Assemblerbefehle aufgelistet. Der ATtiny stellt sich dann 
selber eine Aufgabe, welche genau jeden dieser Befehle mindestens ein 
mal verwendet. Nun kann das Rechenergebnis mit dem erwarteten Ergebnis 
verglichen werden. Tritt eine Abweichung ein, stellt dieser Controller 
die Kommunikation ein und geht in Störung. Duch das fehlende 
Lebenszeichen geht der andere Controller auch in Störung.

von Chr. M. (snowfly)


Lesenswert?


von Axel S. (a-za-z0-9)


Lesenswert?

Alexander S. schrieb:
> Udo Neist schrieb:
>> Ich würde einfach einen GPIO togglen lassen und das mit dem ATtiny
>> detektieren. Fehlen n Signale über ein bestimmten Zeitraum, einfach
>> einen Reset auslösen.
>
> Genau so. Auf dem RPi läuft ein Python-Skript oÄ. das regelmäßig einen
> GPIO triggert.

Das erfüllt aber nicht die Anforderung des TO:

Horstmann schrieb:
> sicher erkennen, ob der Raspberry einwandfrei arbeitet

Es erkennt nur ob das Python Skript noch funktioniert. Und unter 
Umständen noch nicht mal das (wenn jemand anderes am Pin wackelt).

Und damit ist klar, was am Anfang stehen muß: eine möglichst exakte 
Definition, was "einwandfrei arbeitet" überhaupt bedeuten soll.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Axel S. schrieb:
> Horstmann schrieb:
>> sicher erkennen, ob der Raspberry einwandfrei arbeitet
> Es erkennt nur ob das Python Skript noch funktioniert. Und unter
> Umständen noch nicht mal das (wenn jemand anderes am Pin wackelt).
Einer unserer Softies hatte mal die gloriose Idee, für das Rücksetzen 
des externen Watchdogs einen eigenen Timerinterrupt zu verwenden. Und 
dem hat er dann noch die höchste Priorität gegeben. Der Grund: "Sonst 
gibt es immer wieder diese Timeout-Fehler und das Ding läuft in einen 
Reset!"  ;-)

von Peter D. (peda)


Lesenswert?

Lothar M. schrieb:
> Einer unserer Softies hatte mal die gloriose Idee, für das Rücksetzen
> des externen Watchdogs einen eigenen Timerinterrupt zu verwenden.

Das ist durchaus keine schlechte Idee. Dieser Interrupt enthält dann 
mehrere Timeouts, die von den jeweiligen Tasks zurück gesetzt werden. 
Ist einer davon abgelaufen, geht der Handler in eine Endlosschleife.

Es gibt auch bessere externe Watchdogs, die ein Zeitfenster überwachen. 
D.h. der Resetimpuls darf weder zu langsam noch zu schnell erfolgen.

von svensson (Gast)


Lesenswert?

Alexander S. schrieb:
> Genau so. Auf dem RPi läuft ein Python-Skript oÄ. das regelmäßig einen
> GPIO triggert.

Würde ich auch so lösen, aber der Tiny sollte noch ein/zwei Byte des 
EEPROM nutzen, um einen Zähler einzubauen, den man abfragen kann. So 
läßt sich erkennen, ob der Watchdog zugeschlagen hat und wie oft.

von Stefan F. (Gast)


Lesenswert?

Gerade unter Linux kommt es äußerst selten vor, dass ein Rechner sich 
komplett aufhängt. Man kann sich fast immer noch einloggen und 
analysieren, warum eine bestimmte Funktion oder ein bestimmtes Programm 
gerade versagt.

Insofern sollte man das testen, was funktionieren soll. Also wenn der 
Sinn des Gerätes z.B. ist, eine Lampe blinken zu lassen, dann testet man 
ob die Lampe blinkt. Und wenn er Daten in eine DB speichern soll, dann 
tut man das und testet, ob sie auch wieder zurück gelesen werden können.

von Heinz (Gast)


Lesenswert?

Ich habe mich auch für die GPIO Lösung entschieden.

Grobes Konzept:
Es gibt bei mir auf dem pi ein python script, bei dem sich andere 
Scripte registrieren können. Sie müssen sich dann jedoch zyklisch 
melden. Wenn sie das machen, wird ein GPIO Pin getoggelt. Steigt also 
eins der Skripte aus, hört das Toggeln auf.

Der uC prüft, ob der pi den GPIO toggeln lässt. Er resettiert den pi, 
wenn der pi das Toggeln einstellt. Außerdem zählt der uC die Anzahl der 
Resets mit. Wenn mehr als 7 Resets in Folge auftreten oder in 30Min mehr 
als 7x resettiert wird, hält der uC den pi im Reset und stellt eine Art 
Notbetrieb sicher - er übernimmt dann die I2C-Masterrolle vom pi.

von Rainer V. (a_zip)


Lesenswert?

Stefan ⛄ F. schrieb:
> Man kann sich fast immer noch einloggen und
> analysieren, warum eine bestimmte Funktion oder ein bestimmtes Programm
> gerade versagt.

Kann der Attiny so natürlich nicht. Aber er kann zyklisch etwas vom RPI 
verlangen... kann beliebig komplex werden. Vorschläge gab es ja schon. 
Einfach ausgedrückt realisiert man eine "Tot-Mann/RPI-Sicherung". Und 
auch die Schlaumeier des ewigen Regress' könnten sich sinnvolle Gedanken 
zu diesem Szenario machen! Allerdings ist es müßig, das in einer 
allumfassenden Allgemeinheit aufzudröseln. Also wann muß Alarm kommen 
und von wem!?
Gruß Rainer

von Stefan F. (Gast)


Lesenswert?

Rainer V. schrieb:
>> Man kann sich fast immer noch einloggen
> Kann der Attiny so natürlich nicht

Doch kann er, über einen seriellen Port.

von Rainer V. (a_zip)


Lesenswert?

Stefan ⛄ F. schrieb:
> Doch kann er, über einen seriellen Port.

Ja und dann startest du vom Tiny ein Diagnoseprogramm??? Ich verstehe es 
wohl nicht. Ich dachte, du meinst die diversen Logfiles, die Python 
anlegt und die man sich "natürlich" am PC anschaut oder? Vielleicht 
liege ich aber auch komplett falsch.
Gruß Rainer

von Stefan F. (Gast)


Lesenswert?

Rainer V. schrieb:
> Ja und dann startest du vom Tiny ein Diagnoseprogramm???

Grins. Das kann der Raspi dann auch selbst starten.

Die Frage ist, wie sieht eigentlich eine angemessene Reaktion auf einen 
Ausfall aus? Nicht immer ist ein simpler Neustart hilfreich. Und nicht 
immer funktioniert der Neustart ohne vorher die eigentliche 
Problemursache zu beheben. Ich stelle mir gerade vor, wie der Projektor 
im Kino alle 40 Minuten einen Reset macht und wieder von vorne beginnt 
:-)

von Dieter (Gast)


Lesenswert?

Programmierer schrieb:
> irgendeinen Regler falsch und grillt die Regelstrecke...

Oder eher der Pflanzentopf wird übergossen, bzw. geflutet.

von Rainer V. (a_zip)


Lesenswert?

Stefan ⛄ F. schrieb:
> Man kann sich fast immer noch einloggen und

Kannst du das als mein Problem akzeptieren? Mich treibt die Frage um, ob 
der Attiny das kann! If you see what I mean...
Gru0 Rainer

von Stefan F. (Gast)


Lesenswert?

Rainer V. schrieb:
> Kannst du das als mein Problem akzeptieren?
> Mich treibt die Frage um, ob der Attiny das kann!

Ich habe deine Frage bereits beantwortet. Der ATtiny kann sich über eine 
Serielle Verbindung auf das Linux einloggen. Das geht genau so, wie auf 
dem Bildschirm in einer Text-Konsole.

https://learn.adafruit.com/adafruits-raspberry-pi-lesson-5-using-a-console-cable/enabling-serial-console
https://www.embeddedpi.com/documentation/serial-console/mypi-industrial-raspberry-pi-raspbian-serial-console

Geht sogar ohne Passwort, wenn du willst:
https://blog.oddbit.com/post/2020-02-24-a-passwordless-serial-console/

von Vic Tron (Gast)


Lesenswert?

Warum nimmst du nicht den Watchdog den der Raspi schon an Bord hat?

von Rainer V. (a_zip)


Lesenswert?

Stefan ⛄ F. schrieb:
> Ich habe deine Frage bereits beantwortet.

Ja, aber ich kapiers nicht. Ich verstehe ja, dass der Tiny sich da über 
die ser. Schnittstelle einloggen kann, aber wie soll er denn die 
System/Errormeldungen von Python auswerten? Da braucht es doch entweder 
einen Menschen oder einen (mindestens) PC. Verstehst du mein Proble?? 
Aber wir sollten hier doch nicht in eine Privatdebatte ausarten. Die 
Vorstellung (meine), dass ein Programm auf einem Tiny das Python-System 
auf dem RPI analysiert und auch noch entsprechend komplex reaiert, halte 
ich für schlicht unmöglich...
Gru0 Rainer

von Stefan F. (Gast)


Lesenswert?

Rainer V. schrieb:
> aber wie soll er denn die
> System/Errormeldungen von Python auswerten?

Er kann Befehle als String senden und die Ergebnisse als String 
empfangen. So ein Befehl könnte z.B. lauten:

> tail -1000 /var/log/messages

In der Antwort kann er auf Schlüsselwörter reagieren, wie "ERROR".

Oder man kontrolliert, ob die gewünschten Prozesse noch laufen:

> ps -ef

Und dann schauen, ob da etwas mit "meinscript.py" vorkommnt.

Ich erkläre dir jetzt aber nicht, wie man Strings in C programmiert.

von Rainer V. (a_zip)


Lesenswert?

Ok, danke stefanus. Habs kapiert...und bin verblüfft...auch über mich 
natürlich. Und da ich kein "Hochsprachler" bin, würde ich meine Strings 
sowieso selbst machen :-)
Gruß Rainer

von Dieter (Gast)


Lesenswert?

Ein wichtiger Knackpunkt sind die Abfragen, die an das System gestellt 
werden. Zum Beispiel erkennen von viel zu langer Vollauslastung der CPU, 
der RAM überläuft, sich die SD-Karte abhängt oder voll ist, wenn das 
Netzwerk weg ist, usw.

von Der Opa aus der Muppet Show (Gast)


Lesenswert?

> Warum nimmst du nicht den Watchdog den der Raspi schon an Bord hat?

Weil der dazu gehörende Watchdog Deamon nicht mit der Fake-Hwclock 
zusammen arbeitet. (Sobald der NTP die Uhrzeit setzt, gibt es einen 
Reset).

von Vic Tron (Gast)


Lesenswert?

Brauchst

Der Opa aus der Muppet Show schrieb:
>> Warum nimmst du nicht den Watchdog den der Raspi schon an Bord
> hat?
>
> Weil der dazu gehörende Watchdog Deamon nicht mit der Fake-Hwclock
> zusammen arbeitet. (Sobald der NTP die Uhrzeit setzt, gibt es einen
> Reset).

Wofür brauchst du den Watchdog-Daemon?
Einfach alle paar Sekunden auf /dev/watchdog schreiben, das wars.
Schreibst du für 15sek nichts, gibts nen Hardware-Reset.
Mach ich auch so und funktioniert prächtig.

von Der Opa aus der Muppet Show (Gast)


Lesenswert?

Na ja, die Entwickler des Watchdog-Daemon haben sich schon so einige 
Gedanken gemacht wie du konfiguriert, was für dich "Raspi läuft 
einwandfrei" bedeutet. Die ganzen Überprüfungen musst du ohne Daemon 
halt selbst schreiben.

Und die versuchen, ob man noch sauber runter fahren kann, bevor der 
Hardware Watchdog zuschlägt.

von Rainer V. (a_zip)


Lesenswert?

Im Grunde ist es doch die gleiche Frage (zumindest für mich naivem) 
warum hat mein PC Mist gemacht! Und das durch einen Controller machen zu 
lassen kommt mir schon blöd vor. Will ich tatsächlich nach einem Chrash 
noch genau wissen, was das XY-Logfile dazu zu sagen hat??? Ich will 
wissen, ob es einen Angriff gegeben hat---klar und ich will vielleicht 
wissen, ob die SC-Karte sich nicht mehr meldet...aber man sieht schon, 
dass da Einbildungskraft gefordert ist! Anders herum...der RPI muß eine 
LED blinken lassen und der Controller soll überwachen/kontrollieren, ob 
das läuft. Wenn's nicht mehr läuft, hängt alles von dem Folgeszenario 
ab. Im schlimmsten Fall, hätte der Controller nix mehr zu kontrollieren 
(Ich empfehle Degenhard, "In den guten alten Zeiten")
Gruß Rainer

von Axel S. (a-za-z0-9)


Lesenswert?

Rainer V. schrieb:
> Im Grunde ist es doch die gleiche Frage (zumindest für mich naivem)
> warum hat mein PC Mist gemacht! Und das durch einen Controller machen zu
> lassen kommt mir schon blöd vor. Will ich tatsächlich nach einem Chrash
> noch genau wissen, was das XY-Logfile dazu zu sagen hat?

Das ist gar nicht die Aufgabe des Watchdogs. Vollkommen egal, wie der 
realisiert ist. Der soll nur dafür sorgen, daß dein PC nicht hängen 
bleibt. Ob das das Resultat einer grottigen Software, ein Hardwarefehler 
oder ein Angriff war, ist dafür nebensächlich.

von Oliver S. (phetty)


Lesenswert?

Der Attiny wartet alle x Sekunden auf ein "ping" auf der GPIO-Leitung. 
Am Ende wird als einziges Skript aus dem Raspberry noch das Programm 
laufen was regelmäßig den GPIO hochzieht.
Sollte der Attiny dann doch was mitbekommen und den Raspberry resetten 
wird dabei die SD-Karte zerschossen.
Totmann-Schaltungen zur Überwachung sind komplizierter als man denkt.

von Peter D. (peda)


Lesenswert?

Die ARM-CPUs haben den Nachteil, daß man sie mit hoher Interruptlast 
anhalten kann, d.h. die Mainloop bleibt stehen, bis kein Interrupt mehr 
pending ist. Z.B. eine floatende Interruptleitung fängt sich eine 
hochfrequente Störung ein.
Im Gegensatz dazu führt z.B. ein 8051 oder AVR nach jedem RETI erst 
einen Befehl der Mainloop aus, bevor in den nächsten Handler gesprungen 
wird. Die Mainloop wird zwar langsam, kann aber noch auf Kommandos 
reagieren und z.B. eine Task mit hoher Interruptrate abschießen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.