SPI Verständnisfrage - Bitte um Hilfe

Gast #5015724
Lesenswert?

Hallo, ich hab nun sehr viel über SPI gelesen, jedoch habe ich bei einer 
Sache ein Verständnisproblem und finde nirgends eine Erklärung. Vllt 
benötigt man dazu auch keine Erklärung weil es nicht relevant ist ?!

Folgendes: Bei SPI findet doch eine Duplex Datenübertragen statt, w.h. 
ich schicke ein Byte z.B. zum Slave und bekomme gleichzeitig ein Byte 
vom Slave zurück ?! Was mache ich dann mit dem Byte was der Slave mir 
geschickt hat wenn ich es doch eigentlich vllt gar nicht brauche ?

Oder liegt hier mein Verständnisproblem und man bekommt nur etwas zurück 
vom Slave wenn man es anfordert. Aber ich dachte die Schieberegister 
schieben doch im jedenfall nicht nur hin (MOSI) sonder gezwungenermassen 
auch etwas zurück (MISO).

Angenommen folgendes: "ich will einen EEPROM mit der Adresse 0x0010 mit 
0xAA programmieren. Dafür wird zunächst der Befehl gesendet um das 
EEPROM zu schreiben (0xC0). Dann werden zwei Bytes gesendet, welche die 
zu schreibende Adresse im EEPROM beschreiben (0x00 und 0x10). Als 
letztes wird dann das zu schreibende Datenbyte gesendet (0xAA)"
jetzt habe ich doch ständig was zum Slave (EEPROM) geschickt ohne bisher 
etwas von ihm an Daten "zu wollen" ? aber es kommt doch gezwungenermaßen 
was vom Slave zurück (Duplex) oder sind das nur NULLEN weil der Slave 
dessen Shiftregister immer wieder leert ?
#5015736
Lesenswert?

Hallo,
das mit dem Schieberegister hast Du völlig richtig erkannt.
Wenn Du ein Byte reinschiebst wird gleichzeitg der Inhalt des 
Slave-Senderegisters rausgeschoben.

Was da drinsteht sollte das Datenblatt des IC sagen. Es können Nullen 
sein, es kann das davor empfangene Byte sein, es kann der Wert sein, der 
vorher vom Master angefordert wurde.

Was Du nicht brauchst ignorierst Du eben. Niemand zwingt Dich, das 
Empfangsregister des Master zu lesen, wenn Du keine Daten erwartest.

Umgekehrt mußt ja genauso ein Dummybyte zum Slave schicken, wenn Du 
Daten angefordert hast. Ob das Nullen, Einsen oder zufällige Werte sein 
können, sagt auch das Datenblatt des Slave. Der wirft das 
(üblicherweise) sowieso weg, weil nur der Takt zum rausschieben 
gebraucht wird.

Gruß aus Berlin
Michael
Gast #5015766
Lesenswert?

Sven B. schrieb:
> Ja, SPI ist immer Full Duplex, also wenn du ein Byte lesen willst, musst
> du auch eins hinschicken. Der Inhalt dieses Bytes ist oft "don't care",
> d.h. es ist egal was da drin steht und man kann sich auch nicht auf den
> Inhalt verlassen.

er ist meist duplex aber nicht immer
es gibt auch simplex Betrieb aber nicht bei einem EEPROM.


Manche ICs schicken der Antwort zur ersten Frage während sie die zweite 
Frage empfangen. Das muss der Master halt berücksichtigen und evtl. am 
ende eine Dummyfrage stellen oder wiederholen oder...

Bei SPI gibt es wenig festgelegtes und viel Freiheit
Gast #5015774
Lesenswert?

Vielen Dank für euer vielen Anworten ! Das macht meine Aufgabenstellung 
um so schwieriger:

ich mache Reverse Engineering an einem Cap.Touchpanel und habe jede 
Menge an RAW Daten welche hier zwischen Master und Slave auf meinem 
Oszilloskope via SPI Decoder ausgelesen werden. Es sind 64 Bytes pro 
Touch !

Ich habe die X und Y Kooridinaten aus dem ganzen RAW Datensalat nun 
herausfinden können dazu habe ich nur  die MISO Leitung gesnifft und 
dachte, jetzt habe ich doch alles was vom Touchpanel (slave) kommt.

Doch muss das Touch auch vom Master angesprochen werden und so habe ich 
auch MOSI an einem 2. Decoder mit drangehängt und sehe nun, dass die 
Touchdaten/Koordinaten HEXbytes sogar auf dem MOSI sind welche ich auch 
auf dem MISO habe ?!?

woher weiss der Master nun was für ihn relevante Koordinaten Daten sind 
und welche er wie wohl hier in dem Beispiel, als dummybytes wieder 
verwenden kann ?
ist es richtig, dass man mit dummybytes aufpassen muss  , nicht dass das 
dann zufällig Befehle sind, welche dem Slave dann dummheiten machen 
lässt?
Gast #5017745
Lesenswert?

ist das hier richtig ?

ich will den Inhalt einer Adresse aus dem Slave lesen:

1. ich schicke die Adresse von der ich den Inhalt lesen möchte an den 
Slave

2. ich schicke als nächstes ein Dummybyte um den Inhalt zum Master zu 
taken


was passiert nun wenn das Dummybyte einem Befehl entspricht der 
eigentlich gar nicht ausgeführt werden soll ? Was ich meine ist:

ließt der Slave in jedem Fall den Inhalt den er zugetaktet bekommt und 
entscheidet dann ob Dummy oder Befehl ( nach seiner Specification) ?

gilt das für den Master auch, oder liesst er seinen Inhalt nur, wenn er 
etwas angefragt und somit etwas erwartet ?
Gast #5017778
Lesenswert?

Datenblatt lesen, z. B. W25Q256 oder so: Das erste(!) Byte, dass nach 
aktivieren von CS hineingeschoben wird, ist der Befehl, dann ggf. noch 
einige Parameter, alles danach wird ignoriert.

Man kann auch endlos lesen: Nach einem Byte 0x03 (READ), 3 oder 4 Bytes 
Adresse hineinschieben, alles danach wird ignoriert, gleichzeitig aber 
die gelesenen Bytes herausgeschoben (wobei die Adresse nach jedem Byte 
automatisch inkrementiert wird). Erst das deaktivieren von CS beendet 
den Befehl, und erst nach erneuter Aktivierung wird das erste neue Byte 
wieder als Befehl interpretiert.

So wie unserer Sprache der Punkt am Ende.
Beitrag #5017779 wurde von einem Moderator gelöscht.
Gast #5017817
Lesenswert?

A. B. schrieb:
> So wie unserer Sprache der Punkt am Ende.

vielen Dank !! das war sehr gut erklärt und jetzt erkenne ich die 
eigentliche Funktion des CS !! war mir bisher nie klar !!

deshalb sollte man CS nie dauerhaft auf Masse legen, auch wenn man nur 
einen Slave hat. Weil der CS ein Teil der korrekten Kommunikation 
zwischen M<>S ist.
Gast #5017911
Lesenswert?

Alex schrieb:

> deshalb sollte man CS nie dauerhaft auf Masse legen, auch wenn man nur
> einen Slave hat. Weil der CS ein Teil der korrekten Kommunikation
> zwischen M<>S ist.

Du hast es immer noch nicht kapiert: Es kommt darauf an, wie das 
konkrete Protokoll definiert ist. Bei manchen ist es halt möglich, CS 
fest auf aktives Potential zu legen, bei anderen nicht. Nur die Lektüre 
des Datenblattes gibt einem (hoffentlich) das nötige Wissen, um zu 
entscheiden, ob es bei dem konkreten Device möglich ist oder nicht.

Leider muss man aber auch sagen, dass viele diese 
Protokollbeschreibungen alles andere als erschöpfend sind. Und im 
Zweifel gilt natürlich: wenn man CS selber kontrolliert, ist man auf der 
sicheren Seite. Dann kann man nämlich sowohl die Auswirkungen 
unvollständiger oder gar fehlerhafter Protokollbeschreibungen als auch 
eines suboptimalen Schaltungsdesigns oder Layouts durch nachträgliche 
Softwareänderungen noch relativ leicht kompensieren...

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