Wie speichern SPI und I2C Daten?

Ich habe Fragen zum Funktionsmechanismus und zur Messmethode der SPI- und I2C-Schnittstelle. Für SPI gibt es mehrere Modi. Meine Frage ist, wie werden die Daten gespeichert? Nehmen wir zum Beispiel CPOL=1 und CPHA=0, das Bit wird an der fallenden Taktflanke zwischengespeichert. Aber warum ist das bei MISO und MOSI gleich? Ich meine, MISO und MOSI stammen von verschiedenen Geräten (das erstere vom Gerät und das spätere vom Master). Aber die Uhr kommt immer vom Meister. Wie wäre es also möglich, sowohl MOSI als auch MISO durch die fallende Taktflanke zu verriegeln? Für MOSI vielleicht ja, da der Takt und der MOSI-Ausgang zusammen von Master und Gerät zur gleichen Zeit ankommen (vielleicht sollte ich sagen, halbe Uhr später). MOSI kann also dem Zeitdiagramm folgen. Aber für MISO, wie lassen wir das MISO in der Mitte seines Bits verriegeln, da es ' Reisen Sie eine ungewisse Flugzeit vom Gerät zum Master? Und für die Oszilloskopmessung, welchen Punkt sollten wir untersuchen? MOSI auf Geräteseite und MISO auf Masterseite?

Ich habe die gleiche Frage auf I2C. Wie kann sichergestellt werden, dass die SDA-Daten hoch gehalten werden, wenn sie von Master zu Slave und von Slave zu Master gehen, da die Uhr immer von Master zu Slave geht?

Danke für jedes Feedback! :)Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Finden Sie Probleme bei der Verwendung von SPI/I2C in Ihrem Projekt oder fragen Sie dies zu Lernzwecken?
Hi Raj, nur Lernzweck..... :)

Antworten (2)

Wie wäre es also möglich, sowohl MOSI als auch MISO durch die fallende Taktflanke zu verriegeln?

Das Diagramm dient nur der Veranschaulichung, nicht einem detaillierten im Chip. Nehmen wir an, die Daten werden bei einer fallenden Flanke erfasst, nehmen wir an, der Slave überträgt Daten, jetzt gibt der Slave bei der fallenden Flanke der Uhr das Bit aus (z MSB beim ersten Takt), der Ausgang wird vom Slave bis zur steigenden Flanke des CLK-Eingangs gehalten, der Master kann die Slave-Daten bis zur steigenden Flanke des CLK zulassen und dann das Bit nach rechts verschieben, die gleiche Wiederholung, bis alle Datenbits vorhanden sind empfangen, gleiches gilt für MOSI vom Master.

Eine weitere Erklärung unter Verwendung von SS (Slave Select, auch Frame Synchronization I/O Pulse genannt), wenn das SS-Bit niedrig wird (siehe Bild), gibt der Slave die Daten aus, bei einer fallenden Flanke werden die Daten erfasst, was ungefähr in der Mitte des Datenpulses liegt Bei steigender Flanke werden die nächsten Daten zum Ausgang verschoben, sodass wir die CLK-Impulsbreitenzeit haben, damit sich die Daten in den Ausgangspins niederlassen und der Master die Daten vom Slave erfasst

Das SPI-Peripheriemodul verfügt über alle erforderlichen Timing- und Schaltschaltungen, damit es im schlimmsten Fall funktionsfähig ist.

Hallo @Raj: Danke für deine Erklärung! Können wir zum Beispiel das letzte Diagramm verwenden, das ich angehängt habe? Es ist ein Zeitdiagramm von einem Gerät (eigentlich ein SPI-Flash-Chip). 9,7 ist das "Lese"-Timing und 9,8 ist das Schreib-Timing. Für das Lesen ist das spezifizierte Timing tCLQX und tCLQV, was die fallende Taktflanke zu Datengültigkeit (oder Haltezeit) ist. Für das Schreiben ist das spezifizierte Timing tDVCH und tCHDX, das die ansteigende Taktflanke als Beurteilung der Setup/Hold-Zeit verwendet. Gibt es einen Grund, warum die Chipspezifikation einen solchen Parameter definiert?
Da sich die Daten von außerhalb des Chips bewegen / eintreffen, sollte der Eingang dieses Timing einhalten, da sonst die Datenübertragung fehleranfällig ist. Die normale Entfernung des Kabels sollte zwischen 10 und 15 Metern liegen. Wenn Sie die Kabellänge verlängern, kann dies die Taktung der Uhr und der Daten beeinflussen, solange das Taktsignal innerhalb der angegebenen Anstiegs- und Abfallzeit liegt, funktioniert das Gerät wie erwartet
Hallo @Raj, ich denke, meine Frage wäre, warum Lesen und Schreiben unterschiedliche Taktflanken zu Daten definieren? Kann ich beim Master-Lesen Folgendes verstehen: Das Gerät garantiert nur, dass die Daten in einer bestimmten Zeit nach der fallenden Flanke des Takts ausgegeben werden, und der Master sollte sich selbst darum kümmern, diese Daten zurückzuspeichern? und für das Master-Schreiben garantiert das Gerät nur, dass, wenn die Eingangsdaten die Setup / Hold-Zeit basierend auf dem steigenden Takt erfüllen, und die Daten korrekt im Gerät zwischengespeichert werden? Danke! :)
Aber es kommt eine andere Frage, für das Master-Lesen, die an den Master zurückgelesenen Daten, sieht so aus, als sollten sie mit der steigenden Flanke im Master zwischengespeichert werden, aber es gibt keine Timing-Spezifikation, um die Setup-/Haltezeit des Master-Lesens anzugeben. Weißt du, warum?
@david, siehe das Timing des seriellen Eingangs von Diagramm 2, das CS (SS / Synchronous) -Signal wird niedrig gehalten, um mit dem Slave-Timing synchron zu sein. Beachten Sie, dass die Uhr vor CS hoch bewegt und nach der tCHSL-Zeit an der fallenden Flanke auf niedrig gesetzt wird der Slave gibt die Daten in MISO aus, die Daten werden an der steigenden Flanke im Master-Schieberegister zwischengespeichert (das Zeitsignal ist für die steigende Flanke CLK bestimmt)

SPI und I2C sind relativ langsame Schnittstellen, die für die Arbeit mit dummen Slaves und einem einzelnen aktiven Master ausgelegt sind. Das bedeutet, dass Sie eine Taktrate auswählen müssen, die mit den Pfadlängen und der beteiligten Schaltung kompatibel ist.

Die Takt-zu-Daten-Umlaufzeit muss berücksichtigt werden, wenn die Schaltung für die Schnittstelle entworfen wird. Wenn die Schnittstelle eine optische Isolierung beinhaltet und billige langsam sein können (es ist schwierig, selbst 100-kHz-I2C mit CNY17 im Pfad zu treffen), müssen diese ebenfalls berücksichtigt werden. Lesen Sie die Datenblätter für alle Puffer, die Sie verwenden, berechnen Sie die RC-Zeitkonstanten, machen Sie Ihre Hausaufgaben und rechnen Sie auch 5 nS pro Meter für Verzögerungen bei Übertragungsleitungen ein. Addieren Sie alle Laufzeiten, subtrahieren Sie von einem halben Taktzyklus und sehen Sie, ob es der Schnittstellen-Setup-Zeit entspricht ( T S u , steht auf dem Datenblatt), wenn >0, Ergebnis Glück.

Hochgeschwindigkeitsschnittstellen neigen dazu, aus diesem Grund quellensynchron zu sein , alle Signale werden von der Sendeseite gesendet.

Very High Speed ​​Schnittstellen wie SATA, HDMI etc. machen die Synchronisation jeglicher Signale komplett überflüssig und senden Daten selbstgetaktet seriell.

Hallo @Neil_UK, danke für dein Feedback! Sie meinen also, dass, wie das Bild, das ich jetzt angehängt habe, die Setup-Zeit und die Haltezeit für 1 und 2 gleichzeitig erfüllt werden sollten, indem Sie eine geeignete Taktrate wählen, ist das richtig? Danke! :)
Eine andere Frage ist, dass, wie ich das Spezifikations-Zeitdiagramm angehängt habe, es den Ausgang mit fallender Taktflanke angibt, aber steigende Taktflanke für die serielle Eingabe verwendet. Es scheint nicht dasselbe wie der CPHA-Modus zu sein. Wissen Sie, warum das Datenblatt das definiert?
Ich habe mir nicht alle Modi angesehen, nur detaillierte Summen für die, die ich benutze. Aber die Antwort ist die gleiche, Schnallen Sie sich an und RTFM.