Forum: Mikrocontroller und Digitale Elektronik STM32F4 falsche DMA-Werte zu Beginn des Transfers


von Kristian (Gast)


Lesenswert?

Hi,

ich lese mit dem STM32F4 Discovery Werte von einem Port ein. Das Ganze 
passiert getaktet auf 14 MHz und damit das so schnell auch funktioniert 
benutze ich DMA um die Daten von der Peripherie in einen Buffer zu 
übertragen.

Im Großen und Ganzen funktioniert das alles recht zuverlässig und 
stabil, nur eine Sache kann ich mir nicht so recht erklären.

Ich gehe folgendermaßen vor: Ich generiere mir ein Testsignal, das ich 
genau kenne und lese dieses per DMA ein. Anschließend sehe ich im 
Debugger nach, ob alles passt. Und von den ca. 8000 Werten sind auch 
7990 ok. Nur die ersten 5-10 Werte am Anfang des DMA-Transfers sind 
nicht zuverlässig richtig, die ersten drei sind sogar so ziemlich immer 
falsch. Nur eben nie gleich falsch. Eher sowas wie ein Wert taucht 
dreimal auf. Wenn ich z.B. Zahlen 1-8000 übertrage kommt sowas raus: 
1,2,2,2,5,6,7,8,9,10... oder 8,1,1,1,3,6,7,8,9,10... danach ist dann 
alles gut.

Der DMA-Stream ist schon lange "enabled", bevor das eigentliche Signal 
ankommmt. Das Einzige, was mit dem ersten DMA-Wert gestartet wird, ist 
ein Timer, der an den Daten-Clock-Pin gekoppelt ist, um die Anzahl der 
eingelesenen Werte hochzuzählen und den DMA-Transfer immer bei einer 
steigenden Clock-Flanke auszulösen. Könnte es sein, dass dieser Timer 
den Transfer der ersten paar DMA-Werte behindert?

Ich stecke nicht tief genug in der Thematik drin um das beurteilen zu 
können und wäre daher für Ideen dankbar :-)

von Ich (Gast)


Lesenswert?

Moin,

wie wird die dma den getriggert? Wenn die schon viel früher gestartet 
wird, liegen vllt. noch gar nicht deine Daten am port an? Bin aber grade 
nicht so mit der Thematik vertraut. Verwendest du Pull Ups/Downs?

von Stefan1234 (Gast)


Lesenswert?

Hi!

nur mal ins Blaue geraten: Hängt DMA und die Ports an unterschiedlichen 
Clocks? Stichwort APB und AHB. Eventuell kommt es da um ein paar Takte 
Versatz.

Liest du einen 8 Bit Port ein? Das würde bedeuten, der könnte den 
FIFO-Mode verwenden, der unter Umständen zu fehlerhaften Daten führt.
Den kannst du testweise ausschalten:
"In direct mode (when the DMDIS value in the DMA_SxFCR register is ‘0’), 
the threshold level of the FIFO is not used: after each single data 
transfer from the peripheral to the FIFO, the corresponding data are 
immediately drained and stored into the destination."

Im Reference Manual RM0090 sind in Kapitel 10.3.10 mehr Hinweise.

Gruß
Stefan

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.