Forum: Mikrocontroller und Digitale Elektronik STM32F: SPI "Halbduplex"


von ARM-Neuling (Gast)


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 :-)

von (prx) A. K. (prx)


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.

von ARM-Neuling (Gast)


Lesenswert?

Klasse Antwort !
Super, vielen Dank, das hilft mir erstmal weiter.

von Michael B. (bubi)


Lesenswert?

Es gab mal ein super PDF Dokument zur V2.0... leider finde ich die 
nichtmehr.. hat die Doku zur Lib noch irgendwer gesichert? Soweit ich 
bisser drübergestolpert bin, hat sich die Bibilothek nicht großartig 
verändert (ausgenommen CMSIS Kram)

Michael

von (prx) A. K. (prx)


Lesenswert?

Fragt sich nur ob da mehr drin stand, oder ob das der gleiche Kram nur 
mit anderem Fileformat war.

von ARM-Neuling (Gast)


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 :-)

von (prx) A. K. (prx)


Lesenswert?

ARM-Neuling schrieb:

> 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.

Willkommen im Club!

von Michael B. (bubi)


Lesenswert?

in dem V2.0 PDF war es eigentlich wirklich gut beschrieben, was welches 
Flag macht.. sogar mit kurz erläuterten Beispielen... ärgert mich gerade 
das ich das ncihtmehr finde

von Michael B. (bubi)


Angehängte Dateien:

Lesenswert?

Habs gefunden :)
Im Firmwarearchive von 2.0.. :) Warum es so eine Doku nicht auch für 3.0 
gibt :( Glaub aber die ist zum großteil kompatibel

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.