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 ?
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 ;)
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.
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
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.
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
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?
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.ä.
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. :)
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 ?
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.