Forum: Mikrocontroller und Digitale Elektronik Senden von Daten via SPI (PIC18F)


von Christian Carl (Gast)


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

von Christian Carl (Gast)


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

von DirkF (Gast)


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

von PICC (Gast)


Lesenswert?

> Hi, leider sind wir PICler hier in der Minderheit.

http://www.fernando-heitor.de/, da sitzen die PIC-Cracks

von heinzhorst (Gast)


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

von heinzhorst (Gast)


Lesenswert?

Der PIC18F87J11 hat zwei MSSP-Schittstellen. Dann heißen die Register 
natürlich etwas anders:

SSP1BUF
SSP1IF

bzw.

SSP2BUF
SSP2IF

Hast du die Initialisierung für SPI schon?

von Klaus (Gast)


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

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
Noch kein Account? Hier anmelden.