Forum: Mikrocontroller und Digitale Elektronik AVR / AT90USB - Alterungseffekt? Rest - Anlauf - Reset durch FW?


von Kay I. (imperator)


Lesenswert?

Moin zusammen!

Ich habe bei einem AT90USB gerade ein sehr seltsames Verhalten ...

Der Controller (AT90USB1287) läuft nun seit ca. 6 Monaten mit einer 
Firmware, die das CDC-Beispiel (virtueller Comport über USB) von Atmel 
integriert hat. An dem Beispiel-Code hab ich auch nicht viel geändert - 
nur die PLL auf meine externen 16MHz angepasst (natürlich auch in Fuses 
berücksichtigt).

Nach 6 Monaten quittiert der Controller plötzlich seinen Dienst und 
generiert ein Reset ... läuft an ... 0.5 - 1s ... wieder Reset.

Sehr komisch ... also spiele ich mal eine Firmware drauf, in der die 
App-Note von Atmel auskommentiert ist. Und siehe da ... kein Reset mehr, 
sondern läuft normal an und führt seine Aufgaben durch.

Die Frage ist jetzt: Was kann sich mit der Zeit verändern, sodass der 
USB-Teil der Firmware bzw. die Nutzung der USB-Hardware solche Resets 
verursachen kann?
Dabei ist es auch egal, ob ein Host-PC angesteckt ist oder nicht.

Die Watchdog-Fuse ist deaktiviert.
An den Wachtog timings des CDC-Codes habe ich auch schon herumgespielt, 
ohne dass sie davon das Reset .. Anlauf-Verhalten geändert hätte.

Übrigens habe ich auch einige Geräte, die bereits 12Monate mit der 
gleichen Firmware laufen - keine Probleme.

von Marius W. (mw1987)


Lesenswert?

Vielleicht ein defekter Kondensator? Möglicherweise bricht einfach die 
Spannungsversorgung zusammen und BOD schlägt an. Lass dir mal den 
Reset-Grund ausgeben. Dazu gibts nen paar Flags im MCUCSR.

MfG
Marius

von Kay I. (imperator)


Lesenswert?

Hm, is ne Idee, den MCUCSR zu nutzen!

Kondensatoren glaub ich aber nicht - die Spannung sieht absolut sauber 
aus am Oszi.

von Kay I. (imperator)


Lesenswert?

Hab das Verhalten nochmals untersucht ...

In die Firmware ist ja ein Teil der CDC - App Note (Virtual COM Port) 
von Atmel eingeflossen.
Nun scheint es so zu sein, dass diese den ID-Pin abfragt, ob er sich 
mitten im Betriebgeändert hat (und damit die Rolle unseres USB-Gerätes).
Wenn dem so ist, wird wohl bewusst der Watchdog angeschaltet, und mit 
einer while(1); wird ein Reset provoziert.

In der Beispiel-Datei "usb_task.c" aus dem Atmel-Beispiel sieht das dann 
so aus:
1
(...)
2
   if( g_old_usb_mode != g_usb_mode )
3
   {
4
      // ID pin hot state change
5
#if ( ID_PIN_CHANGE_GENERATE_RESET == ENABLE)
6
      // Hot ID transition generates wdt reset
7
      wdtdrv_enable(WDTO_500MS);
8
      while(1);
9
(...)

Jetzt ist die Frage, warum lief dass dann eine Weile und dann schlägt 
plötzlich immer wieder dieser Mechanismus zu?

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.