Frage

Es ist das erste Mal, dass ich versuche, das SPI-Protokoll zu verwenden.Ich versuche, einen Beispielcode zu verstehen, der mit meinem Entwicklungskit kam (der einen STM32F207VCT6-Mikrocontroller hat).Dieser Code implementiert die Kommunikation (Lesen und Schreiben) mit einem AT45DB041D-Flash-Speicher.

Jedes Mal, wenn dieser Beispielcode den Speicher lesen lässt, sendet es nicht nur Informationen darüber, was zu lesend ist, sondern bittet auch, dass der Datenrigh entfernt ist.Diese empfangenen Daten werden für jeden Zweck (anscheinend) nicht verwendet.Die realen Daten, die zu lesen sind, werden vom Empfangsbefehl später erneut gestellt, indem er zuerst ein 0x00 Byte sendet.Der folgende Code zeigt an, dass:

generasacodicetagpre.

Definitionen:

generasacodicetagpre.


generasacodicetagpre.

Wie Sie sehen, dass der SPIX_SEND_BYTE-Code nicht nur gesendet wird, was nicht lesbar ist, sondern auch Informationen empfängt, die nicht verwendet werden.

Kann mir jemand helfen, zu verstehen, warum das getan werden muss und warum es erforderlich ist, das 0x00 Byte zu senden, um die Daten tatsächlich zu erhalten?

danke!

War es hilfreich?

Lösung

SPI ist ein Vollduplex, bidirektionaler Bus, wo Daten beide an den Slave gesendet und gleichzeitig vom Slave empfangen werden. Ihr SPI-Controller weiß nicht, ob ein gegebenes Byte von dem Master oder vom Slave oder beides ungerichtet ist. Wenn Sie also ein Byte senden, müssen Sie auch ein Byte lesen, wenn Sie es nur wegwerfen. Mit demselben Token können Sie kein Byte erhalten, ohne ein Byte zu senden, selbst wenn der Sklave es wegwirft.

Schauen Sie sich einen Blick auf Wikipedia .

also, was Sie tun, ist

    .
  1. Senden von Read_ID an den Slave.
  2. das Lesen und das Abwerfen des Bytes gleichzeitig aus dem Sklaven ausgelesen.
  3. Schreiben Sie 0 auf den Slave, um den Slave ein Datenbyte zu senden.
  4. Lesen Sie das Datenbyte, das gleichzeitig aus dem Slave gelesen wurde.
  5. Schleife zurück zu # 3.
  6. Übrigens sind solche Fragen besser für der EE-Stack-Austausch , da er mehr als das Hardware-Protokoll im Gegensatz dazu ist Programmierung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top