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

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.