SPI - Richtig verstanden?

Gast #577942
Lesenswert?
• ▲
▼
Hallo,

habe ich das Prinzip von SPI so richtig verstanden (wenn z.B ein Atmega 
Master ist):

Wenn der Master ein Byte an den Slave sendet, wird immer gleichzeitig 
auch ein Byte vom Slave in den Master geschoben. Meistens wird aber 
dieses Byte vom Master ignoriert, weil er erst mehrere Bytes senden will 
bevor er eine Antwort erwartet.

Wenn der Master nun ein Byte vom Slave empfangen will ohne ein 
bestimmtes zu senden schickt er das berühmte Dummy-Byte. Dieses Byte 
wird aber nun vom Slave ignoriert.

Ciao
Chris
Gast #577949
Lesenswert?
• ▲
▼
Da bekommt man ja Kopfschmerzen...

(1) SPI ist eine FullDuplex Schnittstelle (also gleichzeitig Senden und 
Empfangen) mit dediziertem MasterClock.

(2) SPI ist eine synchrone serielle Schnittstelle (also mit 
Clock-Signal).

(3) Puffer gibt es bei manchen Implementationen (keine Pflicht).




Also sag einfach: Die SPI ist eine voll-duplex-fähige synchrone serielle 
Schnittestelle mit Buffer-Support und dediziertem MasterClock.

Das schließt dann Deine obige "Geschichte" mit ein und noch viele andere 
Szenarien...
Gast #578124
Lesenswert?
• ▲
▼
Danke für die Antwort Null!

Ich versuche zu verstehen warum man ein Dummy-Byte an den Slave sendet, 
wenn man doch ein Byte vom Slave empfangen will. Ich verstehe, dass das 
notwendig ist um den Slave mit einem Takt zu versorgen.

Das würde aber doch auch bedeuten, dass der Slave immer auch ein Byte 
sendet wenn er eins empfängt...

Ciao
Chris



Gast #578127
Lesenswert?
• ▲
▼
Hallo,

richtig. Das Ganze sind 2 8Bit-Schieberigister, die zu einem Ring 
zusammengeschaltet sind. Mit jedem Master-Clock wird der Kram um 1Bit im 
Kreis geschoben. Nach 8 Takten ist der Inhalt vom Master im Slave und 
der vom Slave im Master. Ob und wie die jeweiligen Inhalte dann 
interpretiert werden, hängt ja vom Programm in Master und Slave ab.
Wenn ich Daten vom Master zum Slave sende, interessiert mich 
normalerweise nicht, was dabei vom Slave kommt, wenn ich Daten vom Slave 
bestellt habe, interessiert der sich nicht für das dabei empfangene 
Byte.

Prinzipiell kann ich so natürlich auch gleichzeitig dem Slave ein Byte 
senden und ein Byte vom Slave empfangen, nur muß es die Software in 
beiden dann auch so handhaben können...

Gruß aus Berlin
Michael

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.