Forum: Mikrocontroller und Digitale Elektronik STM32 DMA Data Packing


von Paul G. (paul_g210) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo
Ich hätte mal eine Frage zu "Data packing/unpacking" eines 
STM32F4(69)...

Ein IC mit dem ich per SPI-DMA kommuniziere arbeitet mit 32bit 
Registern. Ich muss also ständig meine TX/RX Daten von einem uint32_t in 
zwei uint16_t umwandeln wenn ich was sende oder empfange weil der STM32 
ja nur max. 16bit per SPI kann...

Da sprang mir das Kapitel * "9.3.11 Programmable data width, 
packing/unpacking, endianness" * ins Gesicht. Leider verstehe ich das 
ganze nicht so recht.
Ist es also möglich das ich mein DMA TX/RX einen uint32_t buffer senden 
und empfangen lassen kann und er wandelt das ganze intern um so dass ich 
von außen nix weiter machen muss außer die NDTR anzupassen?

Wie sieht das mit der "Endianess" aus. Normalerweise erwarte ich oder 
sende Daten wie 0x07242424 von dem IC. Ist das korrekt das ich mit Data 
packing dann little endian zurück bekomme (0x24242407) (oder senden 
muss)?

: Bearbeitet durch User
von Jim M. (turboj)


Lesenswert?

Paul G. schrieb:
> Wie sieht das mit der "Endianess" aus.

SPI is i.d.R. big endian, d.h. man muss da fast immer Bytes oder Words 
drehen. Allerdings können das manche DMA Einheiten übernehmen.

Für Details muss man praktisch immer beide Datenblätter (µC und externe 
Peripherie) zur Hand nehmen.

von Jim M. (turboj)


Lesenswert?

Nachtrag: Für SPI Experimente empfehle ich ein gutes Oszi oder einen 
Logic Analyzer.

von Paul G. (paul_g210) Benutzerseite


Lesenswert?

Jim M. schrieb:
> SPI is i.d.R. big endian

Ja aber sobald ich DMA & FIFO verwende und PSIZE & MSIZE nicht mehr 
gleich sind verarbeitet der DMA Controller Ein- und Ausgänge nur noch 
als little endian.

Ich habe das auch gerade mal ausprobiert.
0x07242424 gesendet an den IC via DMA mit 16bit SPI Adressbreite. Mein 
Logic Analyser zeigt mir 0x24240724 angekommen...

Ich vermute die Instruktionen die ich zum korrigieren der endianess 
verwenden müsste nehmen sich nicht viel mehr als die Instruktionen die 
ich ohne Data Packing verwende um aus einer uint32_t Zahl zwei uint16_t 
Zahlen für SPI zu machen... Ich lasse das ganze erstmal und mache ohne 
Data Packing weiter. Es erschließt sich mir nicht wirklich ein Vorteil 
:)

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.