Also, der ADAU1701 braucht an seinem I2S Eingang zwingend einen Master.
Von diesem Master erwartet er einen Masterclock und die zwei weitere Clocks für I2S. Liegt eines dieser Signale nicht an, funktioniert es nicht.
Das CSR Board kann sich zwar als Master verhalten, gibt hierbei aber nur die zwei I2S Clocks aus und eben keinen Masterclock. Zumindest wüsste ich nicht, wie. Steht auch nichts dazu im Datenblatt.
Da das CSR Board keinen Masterclock erzeugen kann sehe ich als einzige Lösung, ihn als Slave zu betreiben. Da der ADAU1701 am Eingang keinen Master darstellen kann, gibt es laut Datenblatt einen Trick: man konfiguriert den I2S Ausgang vom DSP als Master (das ist im Gegensatz zum Eingang beim Ausgang möglich) und verbindet die Clocks vom Ausgang vom ADAU1701 mit den Clocks vom Eingang. In dieser Konfiguration nutzt der ADAU1701 wohl seinen internen Masterclock und es funktioniert prinzipiell. Allerdings kommt es da eben zu diesem beschriebenen Knacksen und der komischen Wiedergabe.
Also habe ich weiter herumprobiert und einen USB-I2S Wandler, der ebenfalls ein Master ist und auch einen Masterclock ausgibt mit verwendet. Das CSR Board läuft dann als Slave und nutzt die Clocks vom USB-I2S Wandler, der DSP hat alle Clocks die er braucht und es funktioniert einwandfrei. Allerdings kann ich nicht einfach den USB-I2S Wandler mit als Master verbauen (und sonst gar nicht weiter nutzen), da dieser eine richtige USB Verbindung für die Takterzeugung benötigt, einfach nur 5 V dran funktioniert leider nicht.
Einfach einen Clock nehmen, den dann alle als Referenz nehmen - wie soll das gehen?
Wenn das CSR Board als Slave eingestellt ist erwartet er nicht nur einen Masterclock sondern auch noch die passenden I2S Clocks (wie sie eben z.B. der USB-I2S Umsetzer bereitstellt). Ist das CSR Board als Master eingestellt erzeugt er zwar die I2S Clocks, wie soll er sich dann aber auf den externen Masterclock synchronisieren?
Einfach das CSR Board als Master laufen zu lassen und den fehlenden Masterclock dem DSP mit irgendeinem Clock geben funktioniert natürlich nicht, das muss ja wieder mit den I2S Clocks zusammenpassen.
Das Einfachste wäre wohl, wenn man dem CSR Board noch einen Masterclock entlocken könnte, da sehe ich aber keine Möglichkeit.
Sonst wäre meine Lösung einen beliebigen I2S Master (zum Beispiel einen I2S ADC) mit zu verbauen, der die ganzen Clocks vorgibt, und das CSR Board als Slave zu verwenden. Dann hat man eine externe Taktquelle , die alle nötigen Takte erzeugt, und der DSP und das CSR Board synchronisieren sich darauf. Ist eben eine unschöne Lösung, da das CSR Board ja eigentlich selber als Master funktionieren kann - nur erzeugt er eben keinen Mastterclock, den der DSP zwingend braucht.
Ich hoffe, das ist halbwegs verständlich. Ist irgendwie komplizierter als ich dachte. Laut Wikipedia scheint für I2S auch nicht zwingend ein Masterclock erforderlich zu sein, der DSP will aber trotzdem nicht ohne. Unterbreche ich den Masterclock herrscht sofort Stille.
Von diesem Master erwartet er einen Masterclock und die zwei weitere Clocks für I2S. Liegt eines dieser Signale nicht an, funktioniert es nicht.
Das CSR Board kann sich zwar als Master verhalten, gibt hierbei aber nur die zwei I2S Clocks aus und eben keinen Masterclock. Zumindest wüsste ich nicht, wie. Steht auch nichts dazu im Datenblatt.
Da das CSR Board keinen Masterclock erzeugen kann sehe ich als einzige Lösung, ihn als Slave zu betreiben. Da der ADAU1701 am Eingang keinen Master darstellen kann, gibt es laut Datenblatt einen Trick: man konfiguriert den I2S Ausgang vom DSP als Master (das ist im Gegensatz zum Eingang beim Ausgang möglich) und verbindet die Clocks vom Ausgang vom ADAU1701 mit den Clocks vom Eingang. In dieser Konfiguration nutzt der ADAU1701 wohl seinen internen Masterclock und es funktioniert prinzipiell. Allerdings kommt es da eben zu diesem beschriebenen Knacksen und der komischen Wiedergabe.
Also habe ich weiter herumprobiert und einen USB-I2S Wandler, der ebenfalls ein Master ist und auch einen Masterclock ausgibt mit verwendet. Das CSR Board läuft dann als Slave und nutzt die Clocks vom USB-I2S Wandler, der DSP hat alle Clocks die er braucht und es funktioniert einwandfrei. Allerdings kann ich nicht einfach den USB-I2S Wandler mit als Master verbauen (und sonst gar nicht weiter nutzen), da dieser eine richtige USB Verbindung für die Takterzeugung benötigt, einfach nur 5 V dran funktioniert leider nicht.
Einfach einen Clock nehmen, den dann alle als Referenz nehmen - wie soll das gehen?
Wenn das CSR Board als Slave eingestellt ist erwartet er nicht nur einen Masterclock sondern auch noch die passenden I2S Clocks (wie sie eben z.B. der USB-I2S Umsetzer bereitstellt). Ist das CSR Board als Master eingestellt erzeugt er zwar die I2S Clocks, wie soll er sich dann aber auf den externen Masterclock synchronisieren?
Einfach das CSR Board als Master laufen zu lassen und den fehlenden Masterclock dem DSP mit irgendeinem Clock geben funktioniert natürlich nicht, das muss ja wieder mit den I2S Clocks zusammenpassen.
Das Einfachste wäre wohl, wenn man dem CSR Board noch einen Masterclock entlocken könnte, da sehe ich aber keine Möglichkeit.
Sonst wäre meine Lösung einen beliebigen I2S Master (zum Beispiel einen I2S ADC) mit zu verbauen, der die ganzen Clocks vorgibt, und das CSR Board als Slave zu verwenden. Dann hat man eine externe Taktquelle , die alle nötigen Takte erzeugt, und der DSP und das CSR Board synchronisieren sich darauf. Ist eben eine unschöne Lösung, da das CSR Board ja eigentlich selber als Master funktionieren kann - nur erzeugt er eben keinen Mastterclock, den der DSP zwingend braucht.
Ich hoffe, das ist halbwegs verständlich. Ist irgendwie komplizierter als ich dachte. Laut Wikipedia scheint für I2S auch nicht zwingend ein Masterclock erforderlich zu sein, der DSP will aber trotzdem nicht ohne. Unterbreche ich den Masterclock herrscht sofort Stille.