Was ist mit diesen SPI-Übertragungen los?

Ich habe gerade einen Logikanalysator von Saleae bekommen und verwende ihn, um ein Drumset von Guitar Hero zu hacken . Die Hauptplatine im Schlagzeug kommuniziert über SPI mit einer anderen Unterplatine. Wenn ich mich in die Konversation einwähle, sehe ich Folgendes:

Geben Sie hier die Bildbeschreibung ein

Schwarz ist MOSI, Braun ist MISO, Rot ist CLOCK und Orange ist ENABLE/Slave-Auswahl.

Mir fallen hier zwei seltsame Dinge auf:

  1. Die Uhr „läuft“ nicht immer. Es hat sicherlich ein Muster: Es läuft, wenn ENABLE niedrig ist (alle 100 Hz).
  2. Selbst wenn ENABLE hoch ist (was meiner Meinung nach bedeutet, dass der Slave nicht ausgewählt ist), findet eine Konversation zwischen Master und Slave statt.

Hat jemand eine Vermutung, was hier los ist? Sind die Board-Designer zu faul geworden oder habe ich beim Erfassen der Daten etwas falsch gemacht?

Einzelheiten:

  • Aufgenommen bei 4 MHz
  • Die Uhr läuft mit 2 MHz, wenn sie tatsächlich läuft

Hier noch eine Ansicht, vergrößert:

Geben Sie hier die Bildbeschreibung ein

Offensichtlich gibt keines dieser Bilder viel Auskunft darüber, was tatsächlich "gesagt" wird, da ich nicht weit genug hineingezoomt habe. Aber ich denke, dass sie ausreichen, um meinen Standpunkt klar zu machen. Wenn Sie ein anderes Bild wünschen, fragen Sie einfach.

BEARBEITEN

Kris schlug vor, dass die Aktivierungsleitung verwendet wird, um die Slave-Platine zum Abtasten abzufragen. Das macht Sinn. Sehen Sie sich diesen Screenshot an:

Die kleinen schwarzen Blasen mit roten Umrandungen sind Fälle, in denen die Software eine SPI-Übertragung dekodieren konnte. Diese treten nur auf, wenn die Aktivierungsleitung niedrig ist, was dem entspricht, was Kris vorgeschlagen hat.

Geben Sie hier die Bildbeschreibung ein

Enable-Leitungen werden nicht immer als CS-Leitung im herkömmlichen Sinne verwendet. Bei einigen ADC-Geräten soll die "Enable"-Leitung dem Gerät mitteilen, dass es eine Konvertierung durchführen soll, dann taktet der Host nach Abschluss der Konvertierung einfach Daten vom Slave ein. Ich bin mir sicher, dass dies schon oft gemacht wurde. Ich würde mich im Internet umsehen und sehen, was andere Leute über das hier verwendete Protokoll zu sagen haben.
Das ist das Einzige, was ich darauf finden konnte: members.home.nl/mathijs .
Ich habe noch einen Screenshot hinzugefügt. Wie Sie vorgeschlagen haben, sieht es so aus, als würden die tatsächlichen Daten nur übertragen, wenn die Freigabeleitung niedrig ist. Die anderen Male würde ich vermuten, dass es nur Mülldaten sind?
Haben Sie die Möglichkeit in Betracht gezogen, dass es andere Sklaven in diesem Bus gibt? Sie würden unterschiedliche Slave-Select-Leitungen verwenden, aber die gleichen MISO, MOSI und CLK, also würde man ziemlich genau das sehen, was man sieht. Ihre Wellenformen sehen aus, als würden mehrere Slaves periodisch nacheinander abgefragt.
@ Thorn, das solltest du als Antwort angeben. Ich persönlich gebe dir recht.
@ JonL: Antwort hinzugefügt.

Antworten (3)

Ich glaube, der Bus, den Sie sehen, hat einfach mehrere Sklaven. Sie teilen sich MISO, MOSI und CLK, haben aber für jeden von ihnen dedizierte Slave-Select-Leitungen. Das ENABLE-Signal in Ihren Wellenformen ist eine dieser Slave-Auswahlen. Sie können nach anderen Slave-Selects auf den Master-Chip-Pins suchen, wenn Sie diese Hypothese testen möchten.

Beachten Sie, wie die Signale die Polarität von einem Slave zum anderen zu ändern scheinen (am deutlichsten in der Uhr). Möglicherweise verwenden verschiedene Slaves unterschiedliche SPI-Modi .

Die Wellenformen scheinen sich mit einer bestimmten Periode zu wiederholen, was darauf hindeuten würde, dass der Master die Slaves nacheinander in einer Schleife abfragt.

Ich glaube nicht, dass dies der Fall ist. Wenn Sie sich den Link ansehen, den ich gepostet habe ( members.home.nl/mathijs ), gibt es ein Bild des Boards etwas weiter unten. Es gibt nur ein Flachbandkabel, das die beiden Platinen mit 6 Drähten (VCC, GND und 4 Leitungen für SPI) verbindet. Ich bin mir ziemlich sicher, dass es nur einen SPI-Slave gibt.
@SimpleCoder: Was ist mit der Hauptplatine? Es kann auch Sklaven haben.
Sie haben sehr recht. Ich hatte den Sender auf der Hauptplatine vergessen (das Schlagzeug ist drahtlos). Ich habe mindestens einen weiteren CS gefunden, der für den Rest der Übertragungen verantwortlich ist. Vielen Dank für Ihre Hilfe!

Dorn hat vollkommen recht. Was Sie sehen, ist ganz normal.

Erstens können mehrere Peripheriegeräte an einen SPI-Bus angeschlossen werden. Sie alle teilen sich die MOSI-, MISO- und CLK-Linien. Aber jeder bekommt seine eigene CS-Linie. (Nur der Einfachheit halber habe ich hier die MISO-Linie nicht gezeigt)

SPI-Verbindungen

Wenn die MCU ein Byte an ADC1 senden möchte, senkt sie zuerst CS1. Dann sendet er 8 Taktimpulse auf der CLK-Leitung, während er die Datenbits auf die MOSI-Leitung schreibt. Während dies geschieht, bleiben CS2 und CS3 hoch.

Um ein Byte an jeden ADC zu senden, sieht man möglicherweise eine Wellenform wie die folgende:

SPI-Wellenformen

Siehe meinen Kommentar zu Thorns Antwort.

Du hast es selbst gesagt:

Einzelheiten:

Erfasst mit 4 MHz Die Uhr läuft mit 2 MHz, wenn sie tatsächlich läuft

Es gibt auch eine sogenannte Nyquist-Frequenz oder Nyquist-Grenze. Im Grunde besagt es, dass die höchste Frequenz, die Sie sehen können, weniger als die Hälfte der Abtastrate beträgt. Wenn Ihre Abtastrate also 4 MHz beträgt, können Sie nur Frequenzen von weniger als 2 MHz sehen. Hier gibt es etwas Wichtiges, das die meisten Menschen falsch machen. Sie können Frequenzen bis zur Hälfte der Abtastrate sehen, aber nicht einschließlich . Bei 4 MHz können Sie also 2-MHz-Frequenzen nicht richtig sehen.

Der Nebeneffekt wird auch als „Aliasing“ bezeichnet. Praktisch bedeutet dies, wenn Sie ein Signal betrachten, das nahe bei, aber nicht genau 2 MHz liegt, dann scheint es, als ob das Signal kommt und geht. Eine Zeit lang wird diese Uhr da sein, dann wird sie verschwinden. Das passiert meiner Meinung nach in Ihren Bildern, wo die Uhr manchmal nicht da ist, wenn ich denke, dass sie es sein sollte. Ähnliches kann auch mit Ihren Daten passieren.

Um zuverlässige Daten zum Debuggen zu erhalten, müssen Sie mindestens das 4-fache und manchmal das 16-fache Ihrer maximalen Frequenz erreichen. Bei einem Takt von 2 MHz sollten Sie also Daten bei 8 bis 32 MHz erfassen.

Nyquist gilt für analoge Signale; wenn man ein Signal der Frequenz F auch mit der Rate S abtastet und es dann ausgibt, enthält das Ergebnis eine Mischung der Frequenzen kS+F und kS-F für alle ganzen Zahlen k; Wenn die Eingabe nichts außerhalb des Bereichs 0..S/2 enthält und man aus der Ausgabe alles außerhalb des Bereichs 0..S/2 entfernt, stimmt die resultierende Welle mit der Eingabe überein. "Digitale" (zweistufige) Wellenformen haben riesige Mengen an Harmonischen, die in den meisten praktischen Anwendungen deutlich über der Nyquist-Grenze liegen, sodass Nyquist nicht wirklich auf zweistufige Signale anwendbar ist. Stattdessen...
... worauf es ankommt, ist der durch das Sampling eingeführte Timing-Versatz. Wenn man bei 4 MHz abtastet, bedeutet dies, dass es eine Unsicherheit von 250 ns gibt, wann eine Signaländerung auftritt. Wenn zwei Flanken innerhalb von 250 ns voneinander auftreten, ist es möglicherweise nicht möglich festzustellen, welche zuerst kam oder ob zwischen ihnen Zeit lag. Ein 100-ns-Impuls an einem einzelnen Pin kann als 250-ns-Impuls oder als 0-ns-Impuls (dh kein Impuls) erscheinen.
@supercat Es gilt auch dafür. Angenommen, Sie haben einen 2,00001-MHz-Takt mit 50 % Arbeitszyklus und Sie tasten ihn mit 4 MHz ab. Dazu können wir zwei Dinge sagen: 1. Die Taktperiode ist etwas kürzer als das Abtastintervall. 2. Die Phase zwischen Takt und Abtastung wandert langsam. Wenn die Phase korrekt ausgerichtet ist, wird der Takt für mehrere Abtastungen hintereinander als immer niedrig abgetastet. Später wird es wie immer hoch für mehrere Proben hintereinander gesampelt. Über eine längere Zeit scheint die Uhr wegzugehen und dann wiederzukommen. Das ist Aliasing.
Wenn beim asynchronen Abtasten analoger Signale das Eingangssignal vollständig in den Bereich 0..S/2 (ohne die Endpunkte) passt, ist es möglich, es genau zu rekonstruieren. Nyquist sagt, dass das Abtasten bei etwas mehr als dem Doppelten der höchsten Frequenzkomponente ausreicht. Bei der asynchronen Abtastung von Zweipegelsignalen kann eine Abtastung mit viel höheren Raten erforderlich sein. Der Grund dafür ist, dass die analoge Filterung und Abtastung eines Bi-Level-Signals Impulsbreiten in Amplituden umwandelt, die dann präzise erfasst werden können. Die zweistufige Abtastung fügt den Impulsbreiten einfach Unsicherheit hinzu.
@supercat Sie können es so anzeigen, wenn Sie möchten, aber der Nettoeffekt ist derselbe: Wenn Ihre "Unsicherheit gegenüber Impulsbreiten" größer als Ihre tatsächliche Impulsbreite ist, haben Sie große Probleme mit der Wellenform, die Sie betrachten.
In jedem Fall werde ich die Daten später mit 8 MHz erneut abtasten. Danke,
@DavidKessner: Wenn das, was als Bi-Level-Eingangssignal bekannt ist, auf etwas unterhalb der Nyquist-Rate analog gefiltert und dann als analoge Pegel abgetastet würde, würde die in solchen Samples enthaltene Informationsmenge die in einem Bi- Ebene erfassen. Wenn man beispielsweise bei 10 kHz abtastet und die Breite von Impulsen messen möchte, die in Intervallen von ungefähr 1 ms ankommen, könnte man die Breiten mit einer viel besseren Auflösung als 100 us bestimmen, indem man die Energie in ihnen misst. Aber wenn sie zweistufig gesampelt wären, könnte man das nicht.