EFM32WG SPI (sync USART) Slave auslesen

OP (Firma: mumu) #3442697
Lesenswert?
• ▲
▼
Hallo,

ich habe Probleme mittels synchron USART (EFM32 ist Master) einen SPI 
Slave (SST25VF) auszulesen.

Ich mache folgendes:

ClearCS();
USART_Tx(uart,0x9F); // holt die id: 0xBF,0x25,0x4A
USART_Rx(uart); // lese 0xBF
USART_Rx(uart); // lese 0x25
USART_Rx(uart); // gibt irgendwas 0xFF, 0x00...
SetCS();

Leider stimmt das letzte Byte nie. Wenn ich einen Befehl mit einem Byte 
als Antwort wähle, erhalte ich ebenso nicht das Richtige.

Mit dem Oszilloscope sieht alles richtig aus. Der Clock sowie CS laufen 
für die Länge von 4 Bytes durch, genau so wie es sein soll. Ich habe 
auch schon verschiedene Clocks versucht, immer das gleiche Ergebnis.

Kann mir jemand helfen?
#3442766
Lesenswert?
• ▲
▼
> Der Clock sowie CS laufen für die Länge von 4 Bytes durch

Das würden sie bei dem abgebildeten Code aber genau nicht machen, es sei 
denn Du hast AUTOTX gesetzt. Im SPI Master Modus muss der EFM32 nämlich 
immer auch senden, d.h. es muss ein Dummy Byte auf das TXDATA 
geschrieben werden. Außerdem muss Du beim Kommando Byte i.d.R. das 
gleichzeitig empfangene Dummy Byte vom Slave wegwerfen.

Disclaimer: Ich gehen von der emlib im Spimplicity Studio aus.
OP (Firma: mumu) #3442787
Lesenswert?
• ▲
▼
Hey Jim,

AUTOTX ist gesetzt. Muss ich auch hier noch ein dummy byte per TXDATA 
schreiben?

Würde ich AUTOTX nun deaktivieren, wie kann ich die Daten auslesen?

ClearCS();
USART_Tx(uart,0x9F); // holt die id: 0xBF,0x25,0x4A
USART_Tx(uart,0x00); // schreibe dummy
USART_Tx(uart,0x00); // schreibe dummy
USART_Tx(uart,0x00); // schreibe dummy
USART_Rx(uart); // lese geschriebenes byte
USART_Rx(uart); // lese 0xBF
USART_Rx(uart); // lese 0x25
USART_Rx(uart); // lese 0x4A
SetCS();

Sollte dies dann so funktionieren? Eventuell könntest du mir ein 
Beispiel für AUTOTX=1 und AUTOTX=0 geben damit ich es endlich verstehe?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.