Hallo Leute,
erstmal vielen Dank an alle Forenmitglieder. Zwar habe ich mich jetzt
gerade angemeldet, aber ich nutze das Forum seit Jahren immer wieder und
habe zahlreiche Probleme schon dank der Beiträge hier lösen können.
Ich stehe gerade ein wenig auf dem Schlauch. Folgendes Problem:
Ich baue eine Kamera in deren Kern der TMS320DM368 von TI arbeitet. Da
es sich um eine sicherheitsrelevante Anwendung handelt, möchte ich einen
externen Watchdog einbauen, der den Prozessor überwacht. Soweit so gut,
Watchdogs habe ich schon verwendet und habe z.B. mit dem MAX6749 gute
Erfahrungen. Allerdings nur bei eher einfachen Mikrocontrollern wie
ATmega oder AT90CAN.
Auf dem Ding jetzt läuft ein Linux, welches eine bestimmte Zeit zum
booten braucht. Gehen wir hier mal von 15 Sekunden aus. Der Watchdog ist
aber nur sinnvoll einsetzbar, wenn er z.B. jede Sekunde ein Signal haben
möchte. Wir brauchen also eine Einschaltverzögerung.
Kein Problem: Einfach ein Paar Transistoren und ein Verzögerungsglied,
schon haben wir den Watchdog erst in Betrieb wenn Linux gebootet hat.
Was passiert aber bei einem Reset?
Beim Reset bleiben die Versorgungsspannungen bestehen, und lediglich der
DM368 bootet neu. Das dauert wieder 15 Sekunden. Der Kondensator in
meinem Verzögerungsglied wird in dieser Zeit aber nicht entladen, weil
ja die Versorgungsspannung noch da ist. Die Verzögerung ist somit bei
einem Reset nicht vorhanden, bzw. deutlich kürzer. Lösungsansatz ist
folgender:
Wir nehmen zwei Transistoren und schalten sie über die Reset Leitung so,
dass der Eine beim Reset den Kondensator von der Versorgung trennt, und
der andere ihn über einen Widerstand nach GND schatet. Danach schließen
wir den Kondensator wieder an und haben auch nach einem Reset 15
Sekunden Verzögerung.
Ich habe sehr sehr wenig Platz auf meiner Platine. Die oben beschriebene
Schaltung ist zu groß. Außerdem erhöht sich das Ausfallrisiko durch
viele zusätzliche Teile. Ich habe mich kaputtgesucht und finde einfach
keinen Watchdog, der die Funktionalität die ich brauche von Haus aus
mitbringt. Dabei kann ich mir einfach nicht vorstellen dass ich der
erste Mensch mit diesem Problem bin. Gut, bei einem kleinen Controller
mag das nicht von Belangen sein, und bei einem Großen kann man den WD ja
auch über einen Controller-Pin per Software einschalten und ausschalten.
Das ist von der Philosophie her aber ein falscher Ansatz.
Hat vllt einer von euch eine Idee oder kann einen Chip empfehlen?
Gruß
Vladi
Hallo Ralph,
Es stimmt, der hat einen internen Watchdog. Ich fühle mich aber besser,
wenn der Prozessor von einer Baugruppe überwacht wird, die physikalisch
getrennt ist.
Man muss hier auch Software und Hardware trennen. Wenn der
Softwareentwickler den inernen Watchdog verwenden möchte, soll er das
tun. Wer weiß, wie so ein Reset dann aussieht, und wo alles Ströme
fließen usw., welche Chipteile richtig ausgemacht werden und welche
nicht. Wenn der Chip aber z.B. einen Latch-Up o.Ä. hat, muss er zügig
stromlos gemacht werden, sonst ist Hopfen und Malz verloren. Das geht am
effektivsten mit einem externen Bauteil, welches dann einfach die
Chipversorgung kappt.
...gerade auf ein Bauteil gestoßen, das genau das macht was ich brauche:
der TPS3808 von TI. Allerdings ist die maximal einstellbare Verzögerung
hier 10s. Auch bei allen anderen Watchdogs die da angeboten werden. Ich
brauche aber mindestens 15.
Moin,
ich verstehe deine Abneigung gegen einen internen Watchdog. Aber selbst
wenn du einen externen benutzt, hast du keine 100%ige Sicherheit.
Grundsätzlich ist es möglich, dass deine Applikation abstürzt, die
Timerroutine den Watchtdog aber fleißig bedient.
Würdest du den MAX6749 verwenden, kannst du doch während der Bootphase
des OS den Watchdog über die Pins SET0/1 deaktivieren. Dazu brauchst du
keine Transistoren, nur Widerstände und zwei Portpins, die später dein
Ratio einstellen.
Hallo Ralph,
ja, an sowas dachte ich auch schon. Allerdings wären wir da wieder an
einem Punkt, wo der Controller den Watchdog direkt beeinflussen kann. Es
sollte aber dabei bleiben, dass das einzige Signal was vom Controller
zum Watchdog übertragen wird, das Triggern ist. Ich denke ich werde
zunächst einen TI Watchdog mit 10s Delay nehmen und versuchen die
Bootphase so weit zu optimieren dass ich unter 10 Sekunden bleibe.
In den Datenblättern der WDs von TI steht zusätzlich oft, dass der Delay
nur von der Kapazität des angeschlossenen Kondensators abhängt. Ich
werde das mal auf einem Breadboard aufbauen und schauen ob ich vllt.
über 10s komme. Man müsste sich hier aber auch einen fetten Low-Leakage
Kondensator suchen, was auch ein Problem sein dürfte da wir hier von
einer Größenordnung von 500 Mikrofarad sprechen. Danke soweit für die
Anregungen.