Forum: Mikrocontroller und Digitale Elektronik Display Chip_ST7789V sporadische Abstürze wenn SPI>10MHz


von Dirk F. (dirkf)


Lesenswert?

Hallo,
ich habe ein Display mit o.g. Chip per SPI an meine MCU PIC32MZ 
angeschlossen.
MISO  ist nicht angeschlossen, es kann also nur ins Display geschrieben 
werden.
Wenn ich das Datenblatt richtig verstanden habe, kann der Chip maximal 
15 MHz SPI Takt.
Größere Datenmengen werden per DMA-SPI zum Display geschaufelt.
Kleine Steuerbefehle via normal SPI.

Bei 10 MHz läuft alles sauber.
Wenn ich 20 MHz SPI Frequenz oder größer einstelle, kommt es sporadisch 
nach Sekunden/Minuten zum Reset der MCU.
Warum ist das so ?
Ich hätte erwartet, dass das Display eben nicht mehr funktioniert, aber 
warum schmiert die MCU ab ?
Es kommen ja keine Daten vom Display zurück, die falsch sein könnten.

von Dirk F. (dirkf)


Angehängte Dateien:

Lesenswert?

Auszug aus dem Datenblatt.

von Sebastian W. (wangnick)


Lesenswert?

Dirk F. schrieb:
> Auszug aus dem Datenblatt.

Fehlende Abblockkondensatoren vielleicht? Gibt der PIC einen Grund für 
den Reset an?

LG, Sebastian

von Dirk F. (dirkf)


Lesenswert?

Sebastian W. schrieb:
> Fehlende Abblockkondensatoren vielleicht?
Sind an der MCU vorhanden. 100nF || 10nF  pro Versorgungspaar.

> Gibt der PIC einen Grund für den Reset an?
Ja, WDT Reset.  Ist auf 2 Sekunden eingestellt.

von Harald K. (kirnbichler)


Lesenswert?

Dirk F. schrieb:
> Ja, WDT Reset.  Ist auf 2 Sekunden eingestellt.

Nun, dann wird die Funktion, die Du verwendest, um den WD 
ruhigzustellen, wohl nicht mehr aufgerufen.

Ich denke, der Fehler liegt in der Schleif in Zeile 42.

von Peter D. (peda)


Lesenswert?

Dirk F. schrieb:
> Ich hätte erwartet, dass das Display eben nicht mehr funktioniert, aber
> warum schmiert die MCU ab ?

Eine CPU schmiert nicht einfach so ab. Sie führt eine Exception oder ein 
Reset aus. Der Grund läßt sich dann in den entsprechenden Registern 
auslesen. Am einfachsten setzt man dazu entsprechende Breakpoints und 
läßt sich die Register im Debugger anzeigen.

von Dirk F. (dirkf)


Lesenswert?

Peter D. schrieb:
> Eine CPU schmiert nicht einfach so ab. Sie führt eine Exception oder ein
> Reset aus. Der Grund läßt sich dann in den entsprechenden Registern
> auslesen. Am einfachsten setzt man dazu entsprechende Breakpoints und
> läßt sich die Register im Debugger anzeigen.

Er zeigt nach dem Reset 7 an:
1
//... perform application specific startup tasks
2
// next, check the cause of the Reset
3
debug[4] = 1;
4
    
5
if(RCON & 0x0003)
6
 {
7
// execute a Power-on Reset handler
8
   debug[4] = 2;
9
 }
10
 if(RCON & 0x0002)
11
 {
12
// execute a Brown-out Reset handler
13
    debug[4] = 3;
14
 }
15
if(RCON & 0x0080)
16
 {
17
// execute a Master Clear Reset handler
18
    debug[4] = 4;
19
 }
20
 if(RCON & 0x0040)
21
 {
22
 // execute a Software Reset handler
23
    debug[4] = 5;
24
 }
25
 if (RCON & 0x0200)
26
 {
27
// execute a Configuration Mismatch Reset handler
28
   debug[4] = 6;
29
 }
30
 if (RCON & 0x0010)
31
 {
32
// execute Watchdog Time-out Reset handler
33
    debug[4] = 7;
34
 }

von Peter D. (peda)


Lesenswert?

Dirk F. schrieb:
> Ja, WDT Reset.  Ist auf 2 Sekunden eingestellt.

Na dann hängst Du in einer Schleife fest.

von Dirk F. (dirkf)


Lesenswert?

Peter D. schrieb:
> Na dann hängst Du in einer Schleife fest.

Ja bestimmt.
Aber warum geht es bei 10 MHz ?

von Peter D. (peda)


Lesenswert?

Dirk F. schrieb:
> Aber warum geht es bei 10 MHz ?

Irgendwas ist zu schnell fertig und Du machst irgendwas zu spät. Oftmals 
ist ein Fehler in der Reihenfolge von Zugriffen die Ursache.

Du kannst ein Timeout aufsetzen, das kürzer als der Watchdog ist und mit 
dem Watchdog rücksetzen. Im Timerinterupt gibst Du dann die Adresse auf 
dem Stack aus, d.h. die von ihm unterbrochen wurde.

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.