STM32F: SPI "Halbduplex"

Gast #1521324
Lesenswert?

Hallo Zusammen,

leider finde ich keine Doku zu Std-Library 3.1 von STM - die einzige 
"Doku" ist ein Doxygen-Schrott in Form einer Windows-Hilfedatei, die 
einzig aus einer "Auflistung" besteht - ohne erklärende Texte- was mir 
in diesem Fall nicht weiterhilft.

Meine Frage:
In den mitgelieferten Beispielen wird SPI nur "Simplex" oder Vollduplex 
benutzt.
Mir geht es darum, von einem SPI-Slave (ENC28j60) Daten zu empfangen.
Muss ich dafür für jedes zu empfangende Byte auch eines aussenden (z.b. 
"0"), damit am der CLK-Leitung "gewackelt" wird, oder geht das anders ?
Eigentlich soll das ganze via DMA laufen.

Muchas Gracias für erhellende Antworten :-)
#1521495
Lesenswert?

ARM-Neuling schrieb:

> Mir geht es darum, von einem SPI-Slave (ENC28j60) Daten zu empfangen.
> Muss ich dafür für jedes zu empfangende Byte auch eines aussenden (z.b.
> "0"), damit am der CLK-Leitung "gewackelt" wird, oder geht das anders ?

Was SPI angeht musst du das, so arbeitet SPI aus Sicht des Masters. Wie 
es die Lib dazu hält weiss ich nicht, da ich die nicht verwende. Deren 
Code ist die ultimative Doku.

Edit: Reingesehen: SendData und ReceiveData der Lib sind nur triviale 
Wrapper um die entsprechenden Registerzugriffe, d.h. im Master gehört zu 
jedem ReceiveData ein vorheriges SendData. Dessen Daten sind ggf. 
schnuppe.

> Eigentlich soll das ganze via DMA laufen.

Dann benötigst du 2 DMA Kanäle für die Transfers, einen raus und einen 
rein. Unabhängig davon wie herum die Daten fliessen. Allerdings kannst 
du für beide Kanäle den gleichen Puffer verwenden oder den jeweils 
unproduktiv mitlaufenden Kanal auf nicht-inkrementierend stellen.

Achtung Falle: Wenn der sendende DMA-Kanal durch ist, sind noch nicht 
alle Bytes empfangen. Das ist der Grund, weshalb auch bei 
ausschliesslichem Senden ein DMA für den Empfang sinnvoll ist: Der 
Transfer ist erst dann durch, wenn das Empfangs-DMA durch ist, erst dann 
darf SS abgeschaltet werden. Einen Automatismus für's Abschalten von SS 
gibt es beim STM32 leider nicht.
Gast #1521710
Lesenswert?

Das Problem ist, die Library ist ohne Doku eigentlich nahezu wertlos - 
Wenn man eh jedesmal in den Quelltext gucken muss, der auch noch etwas 
unübersichtlich aufgrund der vielen #ifdef ist, man dort aber auch keine 
sinnvollen Kommentare findet.

Also muss man als Einsteiger erforschen, was denn da passiert, dazu muss 
man dann die Registerbelegung kennen oder nachschlagen... Und dann kann 
mans auch gleich komlett selbst schreiben.
Dann ist wenigstens der Lernfaktor höher :-)

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