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


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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
4 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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. (souleye) Benutzerseite


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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 vom Autor gelöscht.
von Alex (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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

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.