Wenn eine Taktflanke mit einer Datenausgangsflanke übereinstimmt, was sollte SPI lesen?

Ich habe einen Analog-Digital-Wandler, der Daten bei fallenden Flanken einliest und sendet. Ich habe auch zwei MCUs, die FEZ Hydra und die FEZ Cobra. Ich habe mit dem Oszilloskop festgestellt, dass die Daten in den ADC und die Daten aus dem ADC genau gleich sind, aber beim Lesen der Daten auf dem Computer, die die MCUs gespeichert haben, erhalte ich unterschiedliche Werte.

Da der ADC nur bei fallenden Taktflanken Ausgänge sendet, liest Hydra immer dann eine 1 ein, wenn sich die Datenausgangsbits von 0 auf 1 ändern, während die Cobra immer noch eine 0 einliest; und immer wenn sich die Datenausgangsbits von 1 auf 0 ändern, liest die Hydra eine 0 ein und die Cobra liest immer noch eine 1. Es scheint, als würde die Cobra nicht genug Zeit zwischen der negativen Taktflanke und dem Lesen des Eingangs geben, um dies zu ermöglichen damit das Update stattfindet.

Ich verwende die Spi-Bibliothek von Microsoft. Meine Frage ist: Kann ich die SPI-Lesefunktion irgendwie verzögern? Was soll mir in dieser Situation die vernünftige Ausgabe sein?

Hinweis: Es gibt eine Verzögerung von 60 ns bei der Datenzugriffszeit auf dem ADC.

Geben Sie hier die Bildbeschreibung ein

Antworten (2)

SPI-Peripheriegeräte können die Taktpolarität und -phase in Bezug auf die Daten auswählen, sodass Sie sicherstellen müssen, dass die Daten an der richtigen Flanke gelesen werden. Es sieht so aus, als ob die beiden uCs unterschiedliche Phasen haben. Die SPI-Wiki-Seite (und jedes andere halbwegs anständige SPI-Tutorial) enthält Details:

SPI

Ich bin mir nicht sicher, wie Sie die Dinge mit Ihrer Hardware einrichten, aber die relevanten Einstellungen sollten nicht zu schwer zu finden sein.

Der ADC liest UND sendet Daten bei jeder fallenden Flanke, wie kann ich eines dieser Schemata verwenden, da Daten auf derselben Flanke erfasst und weitergegeben werden. Derzeit verwende ich einen Leerlaufzustand mit hohem Takt CPOL = 1 und mein Zeitdiagramm stimmt mit der roten Linie von CPHA 1 überein, obwohl die rote Linie zu CPHA 0 gehört.
@ user1084113 Ich bin vielleicht dumm, aber warum nicht einen Inverter zum Taktsignal hinzufügen, das zum ADC geht. Die Kobra und die Hydra werden immer noch unterschiedlich gelesen (jetzt umgekehrt), aber ohne auf die Besonderheiten von Kobra und Hydra einzugehen, um herauszufinden, warum der eine oder andere Daten auf der "gegenüberliegenden" Kante liest, haben Sie möglicherweise keine Wahl.

Ich würde der vorherigen Antwort zustimmen. SPI-Peripheriegeräte haben im Allgemeinen zwei Bits irgendwo in den Steuerregistern. Diese werden Taktphase (wie bereits erwähnt) und Taktpolarität genannt . Die Taktphase bestimmt, ob Daten auf der steigenden oder fallenden Flanke von SCK abgetastet werden . Die Taktpolarität bestimmt nur den Zustand von SCK zwischen Byte-Übertragungen (einige Geräte interessieren sich nicht für diese Option).

Aus Ihrer Erklärung bin ich mir nicht ganz sicher, ob Sie Ihre Daten auf der fallenden oder steigenden Flanke einrichten ODER abtasten . Da Sie ein Bild mit Linien an abfallenden Flanken des Signals gezeichnet haben, möchten Sie vermutlich, dass Ihre Geräte den Wert genau an dieser Flanke abtasten (lesen). Das ist eher unkonventionell. Außerdem widerspricht es deinem Bild.

Der Bus funktioniert so.

  • Richten Sie den Wert an einer Kante von SCK ein
  • probieren Sie es auf der anderen Seite

Normalerweise erfolgt die Einrichtung beim Fallen und die Abtastung beim Steigen.


Am Ende wird das Korrigieren Ihrer Taktpolarität und / oder Taktphase Ihr Problem sehr wahrscheinlich beheben.

Normalerweise wird das Setup beim Abfallen und das Abtasten beim Steigen durchgeführt. Dies ist das Problem, das dieser ADC beim Abfallen einrichtet und auch Daten bei der fallenden Flanke sendet