Übertragungsverzögerung beim SPI

OP #5992772
Lesenswert?

Hallo zusammen,

ich habe eine Frage zur Übertragung beim SPI Bus. Im angehängten Bild 
ist der CS (gelb) und der SCL (blau) abgebildet. Es werden zyklisch zwei 
mal 12 Byte übertragen. DIe frage ist: Warum dauert es ~500µs zwischen 
den beiden Übertragungen? Der Code ist auf das Minimum heruntergebrochen 
und sollte daher eigentlich keine Limitierungen liefern. Gleichzeitig 
ist aber auch die übertragungsdauer nicht konstant, sondern schwankt. 
Hat jemand eine Ahnung woran das liegen kann?

Grüße Ihreismaen
Angehängte Dateien:
#5992846
Lesenswert?

Seb E. schrieb:
> ich habe eine Frage zur Übertragung beim SPI Bus. Im angehängten Bild
> ist der CS (gelb) und der SCL (blau) abgebildet. Es werden zyklisch zwei
> mal 12 Byte übertragen.

Ich nehme an, jeweils zwei dicht benachbarte blaue Gezappel sind die 
zwei Übertragungen von je 12 Bytes? Und dann wiederholt sich das?

> DIe frage ist: Warum dauert es ~500µs zwischen
> den beiden Übertragungen?

Das darfst du uns nicht fragen. Du hast den Code geschrieben. Wie 
sieht der aus?

Aber selbst beim minimalistischen
1
while (1) {
2
  spi_send1();
3
  spi_send2();
4
}

kann man nicht erwarten, daß die Pause zwischen spi_send1() und 
spi_send2() exakt genauso lang sein wird wie die andere Pause zwischen 
spi_send2() undspi_send1(). Weil es das eine Mal linear im Code 
weitergeht und das andere Mal ein Rücksprung zum Schleifenanfang 
dazwischen liegt. Wieviel das ausmacht, hängt von Details ab, die du 
nicht preisgibst.


> Gleichzeitig
> ist aber auch die übertragungsdauer nicht konstant, sondern schwankt.

Das kann ich da nicht herauslesen.

> Hat jemand eine Ahnung woran das liegen kann?

Am Code? Am SPI (Hardware, Software, DMA, Puffergröße?)?
Wir kennen ja wirklich gar keine Details. Du schon.
Gast #5992855
Lesenswert?

Axel S. schrieb:
>> Hat jemand eine Ahnung woran das liegen kann?
>
> Am Code? Am SPI (Hardware, Software, DMA, Puffergröße?)?
> Wir kennen ja wirklich gar keine Details. Du schon.

Wahrscheinlich liegt es auch am Betriebssystem, dessen Echtzeitfähigkeit 
nicht die Erwartungen erfüllt und so zu nicht erwarteten Schwankungen in 
der Ausführung vom Python Code führt.
Gast #5992858
Lesenswert?

Solange am Raspberry ein Display hängt (oder auch nur wenn
die Software des Raspberry meint ein Display antreiben zu
müssen) und dieses Display so klein ist dass es noch über
SPI gesteuert ist dann wird wohl dauernd ein zyklischer
Display-Update dazwischenfunken. Denn externes SPI gibt's
nur einmal.
Beitrag #5992941 wurde von einem Moderator gelöscht.
OP #5992945
Lesenswert?

Nebel Stocherer schrieb:
> Solange am Raspberry ein Display hängt (oder auch nur wenn
> die Software des Raspberry meint ein Display antreiben zu
> müssen) und dieses Display so klein ist dass es noch über
> SPI gesteuert ist dann wird wohl dauernd ein zyklischer
> Display-Update dazwischenfunken. Denn externes SPI gibt's
> nur einmal.

Der Raspi wird mit SSH ferngesteuert, der SPI Bus sitzt an den GPIOs. 
Sollte in dem Fall doch kein Porblem sein oder?
Gast #5992970
Lesenswert?

Seb E. schrieb:
> Das Oszi ist so alt, dass es USB-Sticks mit maximal 1GB nimmt. Und die
> sind hier leider rar.

Ich habe eins, dass laut Anleitung maximal 2GB nimmt. Aber ich konnte 
einen 8GB Stick benutzen, nachdem ich die FAT Partition auf 2GB 
verkleinerte (6GB bleiben ungenutzt).
Gast #5992995
Lesenswert?

Seb E. schrieb:
> Nebel Stocherer schrieb:
>> Solange am Raspberry ein Display hängt (oder auch nur wenn
>> die Software des Raspberry meint ein Display antreiben zu
>> müssen) und dieses Display so klein ist dass es noch über
>> SPI gesteuert ist dann wird wohl dauernd ein zyklischer
>> Display-Update dazwischenfunken. Denn externes SPI gibt's
>> nur einmal.
>
> Der Raspi wird mit SSH ferngesteuert, der SPI Bus sitzt an den GPIOs.
> Sollte in dem Fall doch kein Porblem sein oder?

So wie du hier schreibst hast du nichts verstanden. Da bleibt
auch keine Lust übrig dir das nochmal auseinanderzudröseln.

Ausserdem mangelt es dir stark daran, klar verständlich und
umfassend deine Konfiguration darzustellen. Damit ist dir
nicht zu helfen.

Jim M. schrieb:
> Da meine Glaskugel in Reparatur ist, .....
Gast #5993009
Lesenswert?

> Der Code ist auf das Minimum heruntergebrochen
> und sollte daher eigentlich keine Limitierungen liefern.

> der Master ist ein Raspberry, der Code folglich
> in Python. Im Code werden wie erwähnt nur zwei Bytearrays übertragen.

Zeige mal den Code!

> Ratespiel accepted: Linux time-slicing 1ms?

Vermute ich auch, irgendwas in dieser Richtung.
Gast #5993040
Lesenswert?

Wolfgang schrieb:
> Wahrscheinlich liegt es auch am Betriebssystem, dessen Echtzeitfähigkeit
> nicht die Erwartungen erfüllt und so zu nicht erwarteten Schwankungen in
> der Ausführung vom Python Code führt.

An eine Linux-Distribution, in welcher der Kernel keine der 
Echtzeiterweiterungen eingebaut hat, hat man gar keine Erwartungen an 
die Echtzeitfähigkeit...
#5993166
Lesenswert?

Seb E. schrieb:
> Axel S. schrieb:
>> Du hast den Code geschrieben.
>
> Leider nein, da liegt ja das Problem. Aber ich muss dafür damit klar
> kommen. Deswegen besteht das Problem ja.

Ich kann ehrlich gesagt nicht erkennen, worin das Problem bestehen soll. 
Unter einem Nicht-Echtzeitbetriebssystem und dann auch noch mit einer 
Interpretersprache wie Python kannst du genau gar keine Anforderungen 
an den zeitlichen Ablauf deiner SPI-Übertragungen stellen.

Falls das irgendwie erwartet wurde, dann sind einfach die Erwartungen 
unrealistisch.
Gast #5993202
Lesenswert?

John Doe schrieb:
> An eine Linux-Distribution, in welcher der Kernel keine der
> Echtzeiterweiterungen eingebaut hat, hat man gar keine Erwartungen an
> die Echtzeitfähigkeit...

Unsinn, Echtzeitfähigkeit ohne quantitative Angabe ist ein Gummibegriff.
Von jedem Raspberry erwartet man, auch ohne Kernel mit expliziter 
Echtzeiterweiterung, dass er in absehbarer Zeit auf äußere Ereignisse 
(z.B. einen Tastendruck auf der Tastatur) reagiert.
#5993495
Lesenswert?

Joe F. schrieb:
> Wolfgang schrieb:
>> Von jedem Raspberry erwartet man, auch ohne Kernel mit expliziter
>> Echtzeiterweiterung, dass er in absehbarer Zeit auf äußere Ereignisse
>> (z.B. einen Tastendruck auf der Tastatur) reagiert.
>
> z.B. in 1ms? ;-)

"echtzeitfähig" ist einer der am häufigsten fehlverstandenen Begriffe. 
Ein Prof meiner Alma Mater pflegte es so auszudrücken: "echtzeitig ist 
rechtzeitig".

Insbesondere hat "Echtzeit" nichts mit "schnell" zu tun. Der springende 
Punkt ist, daß es ein Echzeitsystem garantierte maximale Reaktionszeit 
auf ein externes Ereignis hat. "Maximal" im Sinne von "es dauert nicht 
länger". Ob diese Reaktionszeit nun 1ms, 1s oder 10min ist, ist eine 
Frage der Anwendung. Aber für die Beurteilung, ob es ein Echtzeitsystem 
ist, zählt lediglich, daß die garantierte Reaktionszeit unter allen 
Umständen eingehalten wird.

Auch für das "Problem" des TE ist Echtzeit die falsche Kategorie. Er hat 
wohl erwartet, daß es a) schneller und b) gleichmäßiger geht. Leider 
sagt er nicht, warum oder in welchen Grenzen. Denn selbstverständlich 
kann auch ein stinknormaler Linux-Kernel IO in schnell und gleichmäßig. 
Man denke nur an Gigabit-Ethernet oder isochrone USB-Transfers. Nur 
implementiert man so etwas halt nicht im Userspace und nicht in Python.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren