Senden von Daten via SPI (PIC18F)

Gast #2207353
Lesenswert?

Hi!
ich beschäftige mich momentan mit meiner Projektarbeit, bei der es u.a. 
die Aufgabe ist, eine SPI-Verbindung zwischen einem PIC18F87J11 und 
einer SDKarte einzurichten.
Jetzt die Frage:
Wie muss ich mir die Übertragung von Daten/eines Bytes vorstellen?

Sind das zwei miteinanderverbundene Register für empfangen und senden, 
derren Inhalte mit dem Clocksignal in das jeweils andere Register 
weitergetaktet werden?

Konkreteres Problem:
Ich sende ein Byte (Kommando CMD0 zum Reset der Karte), also eine 0, an 
die Karte. Mein Oszilloskop bestätigt mir auch, dass dieser Sendevorgang 
statt gefunden hat und dass er sogar nach dem gewählten Modus 
(CPHA=0,CPOL=0) statt gefunden hat.
Es scheint also schon einmal etwas zu funktionieren.

Nach dem senden dieses Bytes sollte ich doch eine Antwort erhalten?!
Erhalte ich aber nicht!
Müsste ich jetzt erst noch eine Art Dummy schicken, um die Antwort auf 
das vorherige zu erhalten?

Sprich, wie muss ich mir dieses Senden/Empfangen Spiel vorstellen?

Vielen Dank im Voraus
Bin für jeden Tipp dankbar!

MfG
Christian Carl
Gast #2213956
Lesenswert?

Kennt sich den wirklich keiner mit SPI aus?
Kann mir vielleicht jemand eine gute Lektüre zu diesem Thema zur Hand 
geben?

Find hierzu aus dem doch schmalen Wikipedia eintrag nicht besonders viel 
hilfreiches.

Besten Dank
Christian
Gast #2214691
Lesenswert?

Hi, leider sind wir PICler hier in der Minderheit.
Kämpfe zur Zeitch auch noch mit SPI.
Zu Deinem Problem:  Ja,, erst Befehl senden, etwas warten, dann Dummy 
Byte senden und Ergebnis empfangen.
Habe gerade meinen ADS1211 ADC per SPI ams laufen gebracht. War so 
ziemlich das schwierigste, was ich bisher gemacht habe.......
Gruß Dirk
Gast #2215247
Lesenswert?

1
unsigned char txdata;
2
undigned char rxdata;
3

4
txdata = 0x5A;   // oder von mir aus auch etwas anderes
5

6
SSPBUF = txdata; // byte in buffer schreiben
7
while(!SSPIF);   // warten bis byte gesendet
8
rxdata = SSPBUF; // byte aus buffer lesen
Gast #2215272
Lesenswert?

Christian Carl schrieb:
> Nach dem senden dieses Bytes sollte ich doch eine Antwort erhalten?!
> Erhalte ich aber nicht!
> Müsste ich jetzt erst noch eine Art Dummy schicken, um die Antwort auf
> das vorherige zu erhalten?
>
> Sprich, wie muss ich mir dieses Senden/Empfangen Spiel vorstellen?

Die Clockquelle ist immer der Master. Wenn du etwas empfangen willst, 
mußt du eine Clock liefern. Am einfachsten geht das, indem man selbst 
etwas sendet. Was man sendet hängt vom Device ab. Manche behandeln jedes 
empfangene Byte als Kommando, da gibts dann häufig ein NOP, das man 
schicken kann. Die Abfolgen sind aber normalerweise dokumentiert.

MfG Klaus

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren