Esp32 s3: woher kommen aussetzer im i2s daten

Gast #7167237
Lesenswert?
• ▲
▼
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
Gast #7167257
Lesenswert?
• ▲
▼
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«.
Gast #7167270
Lesenswert?
• ▲
▼
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.
Gast #7167391
Lesenswert?
• ▲
▼
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.
Gast #7167396
Lesenswert?
• ▲
▼
> 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
Gast #7167538
Lesenswert?
• ▲
▼
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?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.