Forum: Mikrocontroller und Digitale Elektronik Esp32 s3: woher kommen aussetzer im i2s daten


von Dirk (Gast)


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

von Norbert (Gast)


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«.

von Dirk (Gast)


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.

von jo mei (Gast)


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.

von Olaf (Gast)


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

von Dirk (Gast)


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?

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.