STM32F765 & SPI-Overrun

Gast #5779868
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.
Gast #5779922
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
Gast #5780160
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.
#5780216
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.
Gast #5780884
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
Gast #5781807
@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 ;-)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.