Hallo zusammen, ich möchte mit einem STM32H7xxx einen 8-kanal DAC mit SPI-DMA ansteuern. Das besondere ist, dass die SPI ALLE Kanäle nacheinander mit einem Transfer beschreiben soll. Nun finde ich keinen DAC, der das mitmacht. Alle DACs wollen nach jedem Frame einen SYNC haben, der die Daten aus dem Input-Register in das entsprechende DAC Register schreibt. Die SPI-DMA kann das aber nicht. Hat jemand eine Empfehlung für einen 8 Channel DAC (12 oder 16 Bit) mit derartigem "sequential write"? Gruß, Markus
Markus M. schrieb: > Hat jemand eine Empfehlung für einen 8 > Channel DAC (12 oder 16 Bit) mit derartigem "sequential write"? Das nicht, aber z.B. TI hat einen Application Report zur Lösung (wenn ich das Problem richtig verstanden habe): https://www.ti.com/lit/an/snaa070a/snaa070a.pdf?ts=1754701476142
Markus M. schrieb: > Die SPI-DMA kann das aber nicht. Das halte ich für eine gewagte These. Mit dem H7 den du dir ausgesucht hast, hast du ein echtes DMA Monster 😄 Markus M. schrieb: > Alle DACs wollen nach jedem Frame einen SYNC haben, der die Daten aus > dem Input-Register in das entsprechende DAC Register schreibt. Daten übertragen und sync können doch 2 DMA Jobs sein. Genau dafür gibt es doch die DMA Streams beim H7 vermute ich. Mach mal genauere Angaben wie das genau aussehen soll und was für einen DAC du verwendet hättest.
:
Bearbeitet durch User
Rahul D. schrieb: > Markus M. schrieb: >> Hat jemand eine Empfehlung für einen 8 >> Channel DAC (12 oder 16 Bit) mit derartigem "sequential write"? > > Das nicht, aber z.B. TI hat einen Application Report zur Lösung (wenn > ich das Problem richtig verstanden habe): > https://www.ti.com/lit/an/snaa070a/snaa070a.pdf?ts=1754701476142 Da geht es um Daisy Chaining, also mehrere DACs in Serie. Die Option habe ich auch, anstatt einen 8-Kanal DAC 8 Einkanal-DACs zu nehmen. Ist aber momentan nicht so geplant. Gruß Markus
N. M. schrieb: > Markus M. schrieb: >> Die SPI-DMA kann das aber nicht. > > Das halte ich für eine gewagte These. Mit dem H7 den du dir ausgesucht > hast, hast du ein echtes DMA Monster 😄 > > Markus M. schrieb: >> Alle DACs wollen nach jedem Frame einen SYNC haben, der die Daten aus >> dem Input-Register in das entsprechende DAC Register schreibt. > > Daten übertragen und sync können doch 2 DMA Jobs sein. Genau dafür gibt > es doch die DMA Streams beim H7 vermute ich. > > Mach mal genauere Angaben wie das genau aussehen soll und was für einen > DAC du verwendet hättest. Ich habe diese Thema schon Stunden mit der KI diskutiert, die reimt sich aber anhand der Datenblätter die abenteuerlichsten Lösungen zusammen ;-). Fakt ist, dass es (anscheinend) keinen DAC git, der im Burst Mode alle DAC Register beschreiben kann. Eigentlich schade, da gerade DMA davon profitiert, ohne Unterbrechungen und damit zusätzliche CPU Last arbeiten zu können. Einen Versuch mit Hardware NSS der SPI habe ich noch. Mit der DMA-Linked-List muss ich mich erst noch beschäftigen. Vielleicht geht es damit, dass ein zweiter DMA-Kanal nach 24 (bzw 32) Clocks der SPI mit einem GPIO das SYNC-Signal kurz auf high toggelt, danach die SPI-DMA den folgenden Kanal sendet usw. Gruß Markus
Du wirst keinen Controller finden der ein 8x24 bzw. 8x32 Bit Ausgangsschieberegister hat. Der H7 kann 32bit in einen Frame packen und die DMA kann 8 32bit Frames hinter einander schicken. Das NSS Signal wird dabei automatisch von der SPI für jeden Frame generiert und die Speicheradresse, von der deine Daten kommen, wird nach jedem Frame von der DMA hoch gezählt. Wo ist jetzt dein Problem ?
Jeder versteht es irgendwie anders... Ich habe kein Problem mit dem Controller und der DMA uns weiß wie sie funktioniert. Mein aktuelles Thema sind Multichannel DACs. Bisher nutze ich sie, indem ich einen Frame sende, das Sync Signal per Software schalte, dann den nächsten Frame auf gleiche Art usw. Nun war mein Gedanke bzw der Wunsch, hier DMA einzusetzen. Aber eben nicht um nur einen Frame zu senden, sondern alle mit einem DMA Transfer so wie in unzähligen anderen Projekten, in denen jedoch noch kein Multichannel SPI-DAC das Ziel war. Die Frage hier bezog sich darauf, ob es einen DAC gibt, der 8 Frames _in_nur_einem_Sync_Zyklus empfangen kann, quasi seinen internen Adresspointer sequentiell selbst hochzählt. Da es den nun offensichtlich nicht gibt, werde ich mit den "Single-Frame-DAC" weiter arbeiten. Hier kam nun die Erkenntnis, das Sync Signal pro Frame von der SPI-Hardware erzeugen zu lassen. Aktueller Stand ist, dass im Versuchsaufbau nur der erste Frame berücksichtigt wird, die restlich ignoriert werden. Daran arbeite ich derzeit mit dem Logic Analyzer. Gruß Markus
Beispiel: LTC2656 Octal 16-/12-Bit Rail-to-Rail DAC. Das war der erste den ich bei Mouser gefunden habe. In Anhang das Timing. Und im Datenblatt auf Seite 19 steht: Normal operation resumes by executing any command which includes a DAC update, in software as shown in Table 1 or by taking the asynchronous LDAC pin low. Ich verstehe "or" so das der LDAC nicht unbedingt gebraucht wird, wenn du den als Sync meintest. Dazu gibt es die Commands (Table 1): Write to Input Register n, Update (Power Up) All und Write to and Update (Power Up) n Ich denke andere DAC werden ähnlich arbeiten.
Hans-Georg L. schrieb: > Normal operation resumes by executing any command > which includes a DAC update, in software as shown in > Table 1 or by taking the asynchronous LDAC pin low. > > Ich verstehe "or" so das der LDAC nicht unbedingt gebraucht wird, wenn > du den als Sync meintest. Vielleicht ist das ja beim Erstkontakt mit diesen Bausteinen etwas verwirrend, aber LDAC haut die Daten raus, SYNC schaufelt sie rein. Es ging von Anfang an um´s rein, nicht ums raus. Egal. Problem gelöst.: Der H7 hat einen Hardware SLAVE SELECT (NSS). Der ist recht flexibel konfigurierbar. Er macht das was SS eigentlich soll und er kann zwischen zwei SPI-Frames innerhalb eines DMA-Transfers "warten", wobei auch SCLK und MOSI stehen bleiben. Perfekt für das was ich wollte. Alles voll über DMA, kein Dazwischenfunken per Software.
:
Bearbeitet durch User
Markus M. schrieb: > Hans-Georg L. schrieb: >> Normal operation resumes by executing any command >> which includes a DAC update, in software as shown in >> Table 1 or by taking the asynchronous LDAC pin low. >> >> Ich verstehe "or" so das der LDAC nicht unbedingt gebraucht wird, wenn >> du den als Sync meintest. > > Vielleicht ist das ja beim Erstkontakt mit diesen Bausteinen etwas > verwirrend, aber LDAC haut die Daten raus, SYNC schaufelt sie rein. Es > ging von Anfang an um´s rein, nicht ums raus. > > Egal. > > Problem gelöst.: Der H7 hat einen Hardware SLAVE SELECT (NSS). Der ist > recht flexibel konfigurierbar. Er macht das was SS eigentlich soll _und_ > er kann zwischen zwei SPI-Frames innerhalb eines DMA-Transfers "warten", > wobei auch SCLK und MOSI stehen bleiben. Perfekt für das was ich wollte. > Alles voll über DMA, kein Dazwischenfunken per Software. Was habe ich anderes geschrieben als das der H7 mit DMA ohne Sync kann ? Du hast doch dauernd mit deinem SYNC angefangen. Hast du dir das Datenblatt überhaupt angeschaut? Da gibt es kein Sync und der LDAC Ist Asynchron Update Pin ... Hauptsache du bist der Könner und glücklich :-)
Hans-Georg L. schrieb: > Markus M. schrieb: ... ischen zwei SPI-Frames innerhalb eines DMA-Transfers "warten", >> wobei auch SCLK und MOSI stehen bleiben. Perfekt für das was ich wollte. >> Alles voll über DMA, kein Dazwischenfunken per Software. > > Was habe ich anderes geschrieben als das der H7 mit DMA ohne Sync kann ? > Du hast doch dauernd mit deinem SYNC angefangen. > Hast du dir das Datenblatt überhaupt angeschaut? > Da gibt es kein Sync und der LDAC Ist Asynchron Update Pin ... > > Hauptsache du bist der Könner und glücklich :-) Ja, da gibts kein Sync. Analog und TI nennen den Pin und das Signal "SYNC", bei deinem genannten Chip heißt das "/CS_LD", macht aber das gleiche wie Sync.... Ja, und der muss per Hardware kommen, LDAC kann der DAC selbst per entsprechenden Command.
:
Bearbeitet durch User
Hans-Georg L. schrieb: > Das NSS Signal wird dabei automatisch von der SPI für jeden Frame > generiert. Sorry das ich NSS anstelle von SYNC geschrieben habe, das war ein unverzeihlicher Anfängerfehler ;-)
Markus M. schrieb: > Der H7 hat einen Hardware SLAVE SELECT (NSS). Praktisch jeder STM32 (ich kenne nicht alle) hat einen Hardware Chip Select der von SPI aus gesteuert werden kann. Dass der nicht so flexibel gesteuert werden kann wie beim H7 mag sein, aber er existiert allermeistens.
Wastl schrieb: > Markus M. schrieb: >> Der H7 hat einen Hardware SLAVE SELECT (NSS). > > Praktisch jeder STM32 (ich kenne nicht alle) hat einen Hardware > Chip Select der von SPI aus gesteuert werden kann. Dass der > nicht so flexibel gesteuert werden kann wie beim H7 mag sein, > aber er existiert allermeistens. Im Anhang ist eine Übersichtstabelle: Das Dokument dazu gibt es hier: https://www.st.com/resource/en/application_note/an5543-guidelines-for-enhanced-spi-communication-on-stm32-mcus-and-mpus-stmicroelectronics.pdf
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.