Forum: Mikrocontroller und Digitale Elektronik STM32F765 & SPI-Overrun


von Pepe (Gast)


Lesenswert?

Hallo.
Ich verwende einen STM32F765VIH6 und empfange über SPI als Slave einen 
"Stream" von 15 x 16Bit mit einer Baudrate von ca. 3MHz. Diese 15 Words 
werden alle 230us wiederholt. Die Words hole ich per Interrupt ab. Das 
Abholen des Words im Interrupts benötigt ca. 300ns.

Leider gehen mir immer wieder mal einzelne Words verloren. Von 10Mio. 
Words gehen 10-15 Words verloren.

Wenn ich es richtig sehe, wird dann das OVR Flag gesetzt. Dies würde 
zwar Erklären, dass die Hardware den Buffer verwirft. Allerdings 
verstehe ich nicht warum OVR auftritt.

Der INT hat die höchste Priorität, hab die Baudrate von 5MHz bis auf 
2.5MHz runtergesetzt und die Wartezeit zwischen den Words so angepasst, 
dass die Words (fast) gleichmäßig innerhalb der 230us verteilt sind.
Hat alles nichts an der Häufigkeit des Fehlers geändert.

Die Signale (MOSI,SCK,NSS) sehen per Oszi auch korrekt aus. Wenigstens 
in den Augenblicken, in denen ich messe. Auf Grund der geringen 
Fehlerhäufigkeit kann ich natürlich nicht sagen, ob dies auch im 
Fehlerfall so ist.

Mir gehen gerade die Ideen aus, was es sein könnte.

Kann mir jemand einen Tipp geben?

Vielen Dank, Pepe.

von Jim M. (turboj)


Lesenswert?

Wie schnell wird der STM32F765VIH6 getaktet? Gibt es noch andere 
Interrupts auf Prio 0?

von Pepe (Gast)


Lesenswert?

Takt ist 168MHz. Und hab sogar die System Interrupts der HAL testweise 
auf Prio 1 gelegt.

von MarioE (Gast)


Lesenswert?

Ich kenne die ST32 nicht, aber aus dem Bauch heraus:

überholen sich Interrupts ?

Könnte hinter einem OverRun das Problem stecken, daß
du eigentlich 2 davon hast.

Paßt die Anzahl der ggf auch impliziten Disable Irq
mit der Anzahl der Enable Irq überein.

Muß man zu Beginn einer IRQ Prozedur die Flags sichern ?

Kannst du genau ermitteln, wieviel Zeichen du verlierst
und wieviel OVR du bekommst ? Müßte exakt übereinstimmen.

Mario

von Bedenken Träger (Gast)


Lesenswert?

Pepe schrieb:
> Mir gehen gerade die Ideen aus, was es sein könnte.
>
> Kann mir jemand einen Tipp geben?

Der Hardware Aufbau ist scheisse. Davon kommen Overruns,
Underruns und ähnliche Schönheiten.

von Pepe (Gast)


Lesenswert?

Natürlich könnten es auch die Signale sein. Nur kann ich bisher nichts 
sehen, was darauf hindeutet. Aber bei dieser Häufigkeit tue ich mich 
auch hart zum richtigen Augenblick was zu messen.

von Gerd E. (robberknight)


Lesenswert?

Pepe schrieb:
> Aber bei dieser Häufigkeit tue ich mich
> auch hart zum richtigen Augenblick was zu messen.

warum?

Setze einen GPIO auf High sobald Du das OVR-Flag siehst. Das Oszi dann 
mit diesem GPIO triggern. Den Triggerpunkt im Oszi ganz nach rechts 
setzen, dann siehst Du alles was vor dem Trigger auftritt.

> Die Words hole ich per Interrupt ab.

Was spricht gegen DMA? Dann bist Du von der IRQ-Geschwindigkeit und 
-Priorität unabhängig.

von gdfgsdgsg (Gast)


Lesenswert?

Gerd E. schrieb:
>> Die Words hole ich per Interrupt ab.
>
> Was spricht gegen DMA? Dann bist Du von der IRQ-Geschwindigkeit und
> -Priorität unabhängig.

das ist bei diesen geschwindigkeiten das beste

DMA interrupt nach 15 empfangenen werten reduziert deine
ISR - Rate im System massiv

von Pepe (Gast)


Lesenswert?

Wieso wird dadurch die ISR Rate reduziert?

von Gerd E. (robberknight)


Lesenswert?

Pepe schrieb:
> Wieso wird dadurch die ISR Rate reduziert?

Weil Du jetzt nicht mehr bei jedem der 15 Words einen ISR bekommst, 
sondern nur noch einen, am Schluss wenn alle 15 Words vom DMA 
transferiert wurden.

von Pepe (Gast)


Lesenswert?

@Gerd
Hab Dich falsch verstanden. Sorry.
Hatte es so verstanden, dass die Ausführung des DMA Interrupts nach 15 
Werten
langsamer wird. Und das hat für mich keinen Sinn ergeben ;-)

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.