Hallo, Ich portieren gerade ein Projekt von einem stm32f4 auf einen esp32-s3. Ein Teil davon sendet von sd Mp3 über i2s raus. Jetzt habe ich das Problem das öfter gut 20ms die i2s Schnittstelle nichts mehr sendet. Ich habe, um Probleme der sd Karte auszuschließen, mir eine kleine Mp3 ins Flash gelegt und spiele die Datei im loop ab. Erst wenn ich brutal Daten in die i2s Schnittstelle schiebe habe ich die aussetzer nicht. Ich habe beim init 8 buffer a 1024k angegeben. Die Mp3 und das brutale senden arbeitet mit 44.1 16/16 bit Beim reinschieben der Daten sehe ich das 4092 Byte dann einige male 0 dann eine Anzahl x angenommen werden. Ich habe da irgendwie noch keinen Zusammenhang zwischen rein schreiben und raus senden bzw aussetzer gesehen. Timing habe ich mit port pins und Logikanalysator geprüft und wie gesagt sehe ich da nichts was mir auffällt. Hat jemand eine Idee was ich verbessern muss oder was man noch so alles beachten sollte. Viele Grüße, Dirk
Dirk schrieb: > Jetzt habe ich das Problem das öfter gut 20ms die i2s Schnittstelle > nichts mehr sendet. > Erst wenn ich brutal Daten in die i2s Schnittstelle schiebe habe ich die > aussetzer nicht. > Die Mp3 und das brutale senden arbeitet mit 44.1 16/16 bit Nun ja, die Lösung liegt auf der Hand. Du solltest halt nicht nur »Brutal«, sondern so oft es geht »Ultra-Brutal« senden. Erst dann ist der Datendurchsatz im »Über-Maximal Optimalsten Bereich«.
Technisch gesehen habe ich aber recht viel Zeit wenn mal Daten drin sind. Nicht umsonst wird wohl ständig nichts mehr angenommen. Wie das ganze Speicher Management funktioniert würde mich mal interessieren, dazu habe ich aber nichts gefunden.
Dirk schrieb: > Jetzt habe ich das Problem das öfter gut 20ms die i2s Schnittstelle > nichts mehr sendet. Da wird wohl dein ESP32 doch mal kurz an anderer Stelle etwas zu tun haben, nicht wahr? Was es ist wird ja aufgrund der Geheimhaltung deines Programmes im Dunklen bleiben. Dirk schrieb: > Hat jemand eine Idee was ich verbessern muss oder was man noch so alles > beachten sollte. Vielleicht mal andeuten was Dirk schrieb: > brutal Daten in die i2s Schnittstelle schieben bedeuten soll. Ich bin übrigens gestern brutal Auto gefahren.
> Hat jemand eine Idee was ich verbessern muss oder was man noch so alles > beachten sollte. Die Erklaerung deines Programms/Problems ist absurd. Das versteht nur jemand der es bereits verstanden hat. Klugerweise loesst man I2S so: 1. DMA sendet 512Bytes aus einem Datenbuffer. 2. CPU fuellt in der Zeit zweiten Datenbuffer. 3. DMA ist fertig und macht IRQ 4. Im IRQ auf den anderen Datenbuffer umschalten 5. CPU fuellt nun den ersten Datenbuffer. Man sorgt dafuer das der DMA-Irq die hoechste Prioritaet hat. Olaf
Auf den stm32f4 kümmere ich mich um den dma selber, nur der esp32 hat ja fertig Routinen die ich benutze. Wer hier mein Programm braucht kennt den esp nicht und kann somit auch nicht helfen. Das sind 3 Funktionen die aufgerufen werden! Init, Start und daten. Einfacher geht es nicht. Nur irgendwie fehlt eine Information auf was man achten muss damit das sauber geht. Weil im 1ms tack die Datenroutine aufzurufen kann ja nicht die Lösung sein. Nein es gibt keine Zeitlichen Verzögerungen, nichts was von mir eingebaut wurde. Ob der esp32 selbst mal eine Pause macht kann ich nicht erkennen, weil die Pins sauber wackeln. Parallel läuft nur ein task der eine LED blinken lässt (1sec). Hat jemand ein Projekt mit eigenem dma und IRQ?
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.