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
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.
Nachtrag: Für SPI Experimente empfehle ich ein gutes Oszi oder einen Logic Analyzer.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.