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?
> 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.
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?
mimi momo schrieb: > Sollte dies dann so funktionieren? Natürlich nicht. Du musst nach jedem TX auch das RX Register auslesen, sonst gibt es lustige Probleme mit dem FIFO. Oder man verwendet einfach USART_SpiTransfer()...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.