Forum: Mikrocontroller und Digitale Elektronik STM32F4 USB Audio Synchronisation


von M. Н. (Gast)


Lesenswert?

Hallo und frohe Weihnachten euch,

ich beschäftige mich gegenwärtig mit USB und habe die letzten freien 
Tage genutzt, um das USB Modul in meinem STM32F407 zu bespaßen.

Momentan schaue ich mir USB Audio an. Das Ganze aktuell theoretisch. Es 
ist keine aktuelle Anwendung geplant.

Bei USB Audio hat man ja das Problem, dass man die Samplefrequenz des 
DACs mit dem Datenstream vom Host synchronisieren muss, da sonst der 
Samplebuffer über oder unterläuft.

Soweit ich es verstanden habe, gibt es mehrere MEthoden das zu 
synchronisieren.

1) Asynchrone Endpoints.
2) Adaptive Endpoints
3) Synchrone Endpoints.

Ich interessiere mich jetzt gerade für die Möglichkeit einen snychronen 
Audio-Endpoint zu bauen. Soweit ich es verstehe, wird in diesem Fall das 
periodische SOF Signal des USB zur Frequenzgeneration/Einstellung 
verwendet, um die Samplerate im Gerät auf den Host abzugleichen.

Konkret geht es mir um die Umsetzungsmöglichkeiten in einem STM32F4xx
Wie kann ich bspw. eine I2S Clock mit diesem SOF-Puls snychronisieren?
Ist das beim STM überhaupt möglich?

Ich weiß, dass ich den SOF Puls sowohl in einen Timer geben kann, als 
auch das Signal ausgeben kann. Ist es irgendwie möglich die interne I2S 
PLL so fein zu tunen?

Eine andere Alternative wäre natürlich, die I2S Clock extern zu 
generieren und einen externen Chip die PLL übernehem zu laseen.

Welche Möglichekiten gibt es hier beim STM32F4? Ist es überhaupt 
möglich?

Soweit ich das in beispielen sehe wird meist ein asyncrhoner endpoint 
mit feedback endpoint zum Host verwendent.

Vielen Dank

von Clemens L. (c_l)


Lesenswert?

M. H. schrieb:
> 1) Asynchrone Endpoints.
> 2) Adaptive Endpoints
> 3) Synchrone Endpoints.

4) Implicit Feedback: der Capture-Endpoint liefert Samples mit der 
korrekten Geschwindigkeit, und der Host muss dann die Samples auf dem 
Playback-Endpoint genauso schreiben.

> Wie kann ich bspw. eine I2S Clock mit diesem SOF-Puls snychronisieren?
> Ist das beim STM überhaupt möglich?

Ein Fullspeed-USB-Gerät braucht eine 12-MHz-Clock (intern meist 24 oder 
48 MHz), um überhaupt über USB kommunizieren zu können. Manche 
Mikrocontroller brauchen dafür einen Quarz, manche können die 12 MHz per 
PLL aus den 1-kHz-SOF generieren. Im zweiten Fall kannst du diese Clock 
einfach auch für I2S benutzen.

Das F407 Reference Manual sagt in 34.3.2:
> The USB OTG FS receives the 48 MHz ±0.25% clock from the reset and clock
> controller (RCC), via an external quartz. The USB clock is used for
> driving the 48 MHz domain at full-speed (12 Mbit/s) and must be enabled
> prior to configuring the OTG FS core.

Du musst den I2S-PLL also selber programmieren.

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.