Forum: Mikrocontroller und Digitale Elektronik SPI half-duplex


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Alex (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi

auf folgender Seite wird das Thema Half-duplex mittels SPI communication 
angesprochen. Im dazugehörigen Video auf Udemy wird der Datenweg 
gezeigt, wenn der Slave als Receiver eingestellt ist.
http://fastbitlab.com/spi-bus-configuration-discussion-full-duplex-half-duplex-simplex/

Was mich wundert:
Im Full Duplex geschieht der Datentransfer vom LSB zum MSB. Das heißt 
Master LSB Bit schiebt zum Slave MSB bei jedem Clock Cycle. Im 
angehängten Bild bei half duplex geschieht der Datentransfer allerdings 
umgekehrt, also vom MSB zum LSB.

Ist das richtig verstanden?

Gruß,

von pegel (Gast)


Bewertung
0 lesenswert
nicht lesenswert
In den Bildern wird immer aus MSB in LSB geschoben.

Die Richtung ist aber einstellbar, lies mal die nächsten Kapitel.

von Veit D. (devil-elec)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

es gibt bei SPI kein Half/Full Duplex. Man kann manche SPI Devices, auch 
dein Master / Code für den Master, so schreiben/konfigurieren das man 
zwischen LSB oder MSB First wählen kann. Das hat aber nichts mit 
Half/Full Duplex.

von Alex (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hi,

vielen Dank. Ich habe mir mal das Datenblatt angeschaut, und folgende 
Info gefunden:

"Programmable data order with MSB-first or LSB-first shifting"

Gruß,

von Wolfgang (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Alex schrieb:
> Thema Half-duplex mittels SPI

Wie schon gesagt, gibt es bei SPI kein Half-duplex. Hardwaremäßig wird 
immer gleichzeitig ein Byte über die MOSI-Leitung vom Master zum Slave 
übertragen und eines über MISO vom Slave zum Master. Ob die Software 
beide Bytes als Nutzdaten betrachten muss, hängt insbesondere von den 
Eigenschaften des Slave ab.

von Bernd (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Wolfgang schrieb:
> Wie schon gesagt, gibt es bei SPI kein Half-duplex.
Es gibt STM32 die SPI mit Halbduplex unterstützen. Dafür werden MISO und 
MOSI zusammengelegt. Im Empfangsfall wird MOSI hochohmig geschaltet.

Mir sind bisher noch keine Slaves untergekommen, die das benötigen bzw. 
unterstützen.

von Alex (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hi,

vielen Dank für eure Rückmeldungen. Im Datenblatt steht:

"The serial peripheral interface (SPI) allows half/ full-duplex, 
synchronous, serial communication with external devices"

Ist nun aber auch zweitrangig, weil ich im Datenblatt ebenfalls lesen 
konnte, dass man sowohl MSB->LSB als auch LSB->MSB schieben kann.

Gruß,

von Veit D. (devil-elec)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

irgendwie scheint dabei STM die Begriffe falsch zu verwenden. Was soll 
denn bei SPI Half/Full Duplex sein? Geht doch gar nicht. Wenn der Master 
etwas empfangen möchte muss dieser erst Takte rausschieben. Was hat das 
mit Half/Full Duplex zu tun?

von Wolfgang (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Alex schrieb:
> Im Datenblatt steht:
>
> "The serial peripheral interface (SPI) allows half/ full-duplex,
> synchronous, serial communication with external devices"

Ganz toll. Der allgemeine Sprachgebrauch ist, dass bei duplex, egal ob 
voll- oder halb-, zwei Teilnehmer gleichzeitig oder abwechselnd senden. 
Bei SPI ist es aber so, dass immer der Master für die Übertragung 
verantwortlich ist, indem er den Takt vorgibt. Selbst wenn nur in eine 
Richtung übertragen wird, schickt oder holt der Master Daten. Der Slave 
kann nicht aktiv senden.

von Bernd (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Mit der Half-Duplex-Übertragung des STM32, wird so eine Art I²C draus: 
Der Master gibt (wie immer) den Takt vor und vom Protokoll her wird 
bestimmt, ob die Daten vom Slave oder vom Master kommen.

von Bernd (Gast)


Bewertung
0 lesenswert
nicht lesenswert

von Veit D. (devil-elec)


Bewertung
-1 lesenswert
nicht lesenswert
Hallo,

das hat jedoch immer noch nichts mit Full/Half Duplex zu tun. Der Master 
kann nur entweder senden oder empfangen und das immer nur mit einem 
Slave zur gleichen Zeit. Bezeichne das meinetwegen als irreführendes 
Half-Duplex. Irreführend deswegen, weil der Master den Slave immer noch 
aktiv ansprechen muss.

Full-Duplex wäre theoretisch, wenn der SPI Master zur gleichen Zeit an 
eine Slave Daten senden und von einem zweiten Slave Daten empfangen 
könnte. Genau das geht aber nicht. Er muss ja mittels CS einen Slave 
gezielt auswählen. Das macht ja SPI so schön einfach.

Ich halte den Text von STM für groben Unsinn. Gröber gehts eigentlich 
nicht.

von Alex (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Analog devices verwendet ebenfalls Full-duplex:

https://www.analog.com/en/analog-dialogue/articles/introduction-to-spi-interface.html

> ...SPI is a full-duplex interface; both master and slave can send data at the
> same time via the MOSI and MISO lines respectively...

von Peter D. (peda)


Bewertung
1 lesenswert
nicht lesenswert
Bernd schrieb:
> Mir sind bisher noch keine Slaves untergekommen, die das benötigen bzw.
> unterstützen.

Recht bekannt ist der DS1302 (RTC), da ist ein Pin DIN/DOUT. Mit dem 
Kommando wird die Richtung umgeschaltet.
Auch viele EEPROM erlauben es, DI mit DO zu verbinden.

von Veit D. (devil-elec)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

der Master muss takten und dann kommen wegen dem 
Schieberegisterverfahren automatisch Daten vom Slave sofern er welche 
liefert und nicht nur empfängt. Ich halte die Begriffe in Bezug auf SPI 
weiterhin für Irreführend. Ob der Salve sendet oder nur empfängt hängt 
vom Slave ab was er kann und der Master muss immer aktiv eingreifen.

Auf der Seriellen im Full-Duplex können ungefragt Daten eintreffen. Oder 
bei Ethernet usw. Das ist ein Unterschied wie Tag und Nacht.

von Stefan (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Half/Full Duplex bezieht sich nur auf den Datenpfad. Ganz abstract, und 
so sollten die Begriffe verstanden werden, beschreibt Fulldiplex, dass 
zu einem Zeitpunkt Informationen in beide Richtungen gehen können. Ganz 
frei vom genauen Aufbau.
Bei Halfduplex können Daten zu einem Zeitpunkt nur in eine Richtung 
gehen.

Ethernet gibt es auch in Halfduplex

Deshalb ist ihre Definition einfach falsch Herr devil-elec

von foobar (Gast)


Bewertung
3 lesenswert
nicht lesenswert
Simplex: Kommunikation nur in eine Richtung - festgelegter 
Sender/Empfänger.
Duplex: Kommunikation in beide Richtungen möglich.
Full-Duplex: gleichzeitig in beide Richtungen.
Half-Duplex: zu einem Zeitpunkt immer nur in eine Richtung - in welche, 
müssen sich die Beteiligten einig sein.

Mit diesen Definitionen bin ich immer ohne Missverständnisse 
zurechtgekommen.  Ich sehe da auch keine Schwierigkeit, SPI in einem 
Half-Duplex-Modus zu betreiben (z.B. um einen Pin/einen Leiter zu 
sparen), solange sich beide Seiten über das Verfahren/den Ablauf einig 
sind.

von foobar (Gast)


Bewertung
2 lesenswert
nicht lesenswert
> Ethernet gibt es auch in Halfduplex

Full-Duplex Ethernet ist erst mit 10Base-T (Twisted Pair) eingeführt 
worden - das frühere 10Base5 und 10Base2 (mit Koax-Kabel) konnte nur 
Half-Duplex ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.