STM32 SPI DMA nur Empfang

Gast #4022475
Lesenswert?

Hallo,

Ich weiß das SPI Empfang auch das Senden eines oder mehrerer Bytes 
erforderlich macht um den CLK zu bewegen.

Das ist normalerweise auch nicht das Problem.

In einer anderen Anwendung möchte ich aber ein paar KiloBytes empfangen 
und das natürlich per DMA SPI.
Ich muss aber auch die CLK bereitstellen da der Slave dumm ist.

Gibt es einen Modus der bei DMA SPI Empfang auch die Clocksignale 
bedient?
Sinnlos DMA SPI senden ist ja auch nicht die Lösung bei so vielen Bytes.
Belastet ja den Hauptspeicher.
Finde da nicht wirklich etwas passendes außer Clk mit Timer generieren.

Ich verwende einen STM32F205
#4023027
Lesenswert?

Klaus schrieb:
> Sinnlos DMA SPI senden ist ja auch nicht die Lösung bei so vielen Bytes.
> Belastet ja den Hauptspeicher.

Belastet wird der nicht ernsthaft, SPI hat IIRC einen minimalen Teiler 
von 2, also ein Byte alle 16 Takte lesen + schreiben. Außerdem kann man 
IMO den Sende-Kanal so einstellen, das er die Adresse nicht hochzählt 
und so immer dasselbe Dummy Byte (oder Wort) versendet.

Es könnte allerdings sein dass das in der Peripherial Lib nicht 
vorgesehen ist und man die DMA Register zu Fuß programmieren muss.
Gast #4023264
Lesenswert?

>Ist zwar möglich aber eben nicht sehr sinnvoll.

Bahnhof?

> Wenn man aus der Assembler Ära kommt will man ja Ressourcen sparen wo es geht.

Ein Sende-DMA spart Resourcen.

>Ich dachte es gibt eine Art Abholmodus.

Den gibt es beim einfachen SPI auch nicht.

>Auch immer das selbe Byte lesen heißt ja jedes man Speicherzugriff.

Scheiß doch drauf. Jim hat dir die optimale Lösung gezeigt.
Du erkennst es nur nicht.
#4024747
Lesenswert?

...auf den EINEN Speicherzugriff pro Byte per DMA kommt es nun wirklich 
nicht an. Das ist Größenordnungen effizienter als alles was Du "zu Fuß" 
programmieren würdest.

Die Lösung (wie schon angedeutet) dürfte sein, den DMA so zu 
programmieren, dass er kontinuierlich immer wieder das selbe Dummy-Byte 
von der gleichen Speicherstelle sendet (also das Hochzählen der Adresse 
im DMA deaktivieren).

Effizienter geht es nun wirklich nicht mehr.
Gast #4025528
Lesenswert?

Zunächst. Es geht!!

Konfiguriert man den SPI als Master und den 2Lines RX only Modus, und 
dann eben noch den DMA passiert genau das was ich erfragt hatte. Es 
werden CLKs ausgegeben und alles an Miso eingelesen. Speicherplatz und 
Zugriffe extra gibt es nicht. Man muss lediglich im DMA Fertig Interrupt 
die SPI oder den Pin Abschalten wenn man synchronisieren will (muss). 
Geht super.

Ich wollte NICHTS zu Fuss programmieren, die Frage war das Gegenteil, 
wie man es am elegantesten löst. SPI war mir schon bekannt.
________________

Allgemein: Ich finde es einerseits lustig anderseits erstaund es mich 
immer wieder hier bei Mikrocontroller.net als Vollidiot dargestellt zu 
werden und blöde Antworten zu bekommen. Natürlich ist hier nur einer 
damit gemeint.
10 Sekunden deines kostbaren Lebens zu opfern muss echt schlimm sein.
Wenn man nicht Antworten will LÄSST man es.
Habs ja jetzt selber herausgefunden, wäre aber schön gewesen das etwas 
früher haben zu können. Danke an alle anderen.
Beitrag #5647319 wurde von einem Moderator gelöscht.

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