Gast
#5173219
Hallo ich versuche einen STM32F030 im SPI slave mode mit DMA zu betreiben, stoße dabei auf merkwürdiges Verhalten des Controllers, welches ich mir nicht erklären kann. Das habe ich vor: Geht CS high wird eine neue Übertragung vorbereitet, SPI und DMA neu gestartet. Der SPI soll dann so lange einen circulären Buffer senden bis CS wieder high geht. Die fallende Flanke von CS soll ignoriert werden. Ein erster Test mit der DMA im normalen Modus verläuft wie erwartet, schalte ich die DMA allerdings in den Circulären modus, resetten sich die Daten stattdessen bei der fallenden Flanke (!). Ich verwende ein Software NSS, der hardware NSS pin wird nicht verwendet. Die beiden Bilder illustrieren diesen Sachverhalt. In beiden Fällen zieht der Master CS high, wartet eine bisschen und sendet dann 24 clocks. (Der slave sendet hier 3 bytes) Dann geht CS auf Low und der slave sendet weiter (in diesem Fall 10 Byte). Wie man sieht werden die Daten im normalen Modus korrekt bei der steigenden Flanke zurückgesetzt, beim Circulären modus allerdings bei der Fallenden Flanke. Hier ein bisschen code:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
SPI und DMA werden im Byte Modus betrieben, Half-word Modus ändert aber nichts am Verhalten.. Ich poste gerne auch den Code für die Initialisierung, etc, falls das hilft Danke

