Forum: Mikrocontroller und Digitale Elektronik SPI Verständnisfrage - Bitte um Hilfe


von Alex (Gast)


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 ?

von M. W. (rallini94)


Lesenswert?

du kannst auch das, was du bekommst, einfach ignorieren.

Machen manche Menschen doch auch so: Man kann ihnen noch so viel sagen, 
ob sie mit dem Gesagten etwas anfangen oder es einfach ignorieren liegt 
in ihrem Ermessen ;)

von Sven B. (scummos)


Lesenswert?

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.

von Michael U. (amiga)


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

von Soul E. (Gast)


Lesenswert?

Michael U. schrieb:

> Umgekehrt mußt ja genauso ein Dummybyte zum Slave schicken,

Du musst Leergut abgeben, damit der Controller wieder was reintun kann. 
Sonst gehen dem irgendwann die Bits aus. Wie bei Gasflaschen.

von Volle (Gast)


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

von Alex (Gast)


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?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Alex schrieb:
> 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 ?
Das steht im Datenblatt unter Abschnitt "Protokoll" o.ä.

von Rupert (Gast)


Lesenswert?

Alex schrieb:
> ich mache Reverse Engineering an einem Cap.Touchpanel

Lothar M. schrieb:
> Das steht im Datenblatt unter Abschnitt "Protokoll" o.ä.

Manche Antworten sind echt einfach heldenhaft. :)

von Alex (Gast)


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 ?

von A. B. (Gast)


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.
von Alex (Gast)


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.

von c-hater (Gast)


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...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.