Generación de señales de reloj i2s

Estoy tratando de diseñar un Pi Hat para integrar mi Raspberry Pi 3 para usar como unidad principal automotriz. Tengo un Texas Instruments TAS6424 y algunos componentes de soporte, y estoy tratando de diseñar un PCB DAC para controlar los altavoces.

Ignorando los problemas de energía, etc., el problema con el que me he encontrado es que Raspberry Pi no puede emitir la señal mlk requerida por la interfaz de audio en serie digital del chip TAS6424. El DAC funciona exclusivamente en modo esclavo, mientras que Pi puede funcionar en modo maestro o esclavo en las señales LRCLK y BCLK.

He encontrado los siguientes dispositivos que pueden generar una señal adecuada.

¿Funcionará esto para generar un reloj externo? ¿Puede el Pi generar una señal BCLK desde un LRCLK? ¿Viceversa? ¿Cuánta modificación del kernel se necesitará para controlar adecuadamente los dispositivos anteriores para cambiar las frecuencias de muestreo en el tiempo de ejecución y crear un dispositivo ASoC que funcione?

Desarrollar algo como esto permitiría conectar el Pi con DAC que requieren una señal de reloj maestro, como la mayoría de los equipos i2s de alta fidelidad.

Respuestas (2)

Para un convertidor delta sigma, MCLK es en realidad el crítico (alimenta al modulador), con los otros dos derivados de él.

Las opciones comunes son usar un PLL para derivar esto de LRCLK o (mejor) BCLK, o derivar los tres de una cadena de roca y divisor (esto generalmente brinda la mejor calidad, pero necesitará dos rocas para acomodar el derivado de 44.1 y 48kHz). tasas a menos que use un PLL como el 1708), en este caso ejecuta ambas interfaces en modo esclavo.

El PLL1708 más una roca le dará un MCLK para las tres velocidades posibles, pero luego deberá dividirlo para generar los relojes de cuadro y serie, y deberá ejecutar ambos lados de la interfaz en modo esclavo. ¡Tenga en cuenta que el LS294 es una pieza de 5V!

Cuando dices roca, te refieres a cristal, ¿verdad?
Sí, la jerga de la oficina... Resonador de cristal o cerámica o lo que sea.
Está bien, solo me estaba asegurando. Encontré un componente que tiene un voltaje mínimo de 3v, pero no estoy seguro de si necesitaré dos, uno para el word clock y otro para el bit clock, o si necesitaré uno y la Raspberry Pi puede manejar el otro. .

Piénselo: MCLK es un reloj que se usa internamente para el DAC; le da el período de muestreo. Ahora, si MCLK y SCLK se separan, terminará en una situación en la que su DAC podría ser más lento para convertir muestras a analógicas que su Pi para enviarlas, ¿y luego qué? ¿Dejar muestras? O, por el contrario, es más rápido y luego, en algún momento, los FIFO internos se vacían y luego ¿qué? ¿Añadir 0 muestras? repetir las últimas muestras?

Por lo tanto, el MCLK continuo debe tener una relación racional con el SCLK "puede detenerse en el medio", en promedio durante la duración de un cuadro.

Sin embargo, no estoy del todo convencido de que tenga razón sobre la imposibilidad de usar el hardware de Pi para controlar MCLK; ese es un reloj máximo de 25 MHz, y las unidades PWM de Pi deberían poder generar eso. Use otro temporizador para activar el envío de N bits cada N ciclos de MCLK. De esa manera, en el momento en que el DAC convierte un cuadro, está seguro de que siempre está enviando un cuadro de datos.

Pero: la raspberry pi viene con hardware I²S, por lo que todo esto podría ser más fácil de lo que piensa. Simplemente cargue el módulo Kernel apropiado (probablemente ya esté allí si está usando una de las principales distribuciones de Linux) y simplemente use su DAC como tarjeta de sonido. Hecho.

Ahora, ese hardware I2S en el SoC de Pi (¡lea la hoja de datos!) No le dará un MCLK. ¡Ni siquiera sé si el TAS6242 realmente lo necesita!

Si realmente necesita eso (y realmente está decidido a tener un DAC que necesita un MCLK), entonces está bien, por supuesto, use un generador de reloj externo para generar tanto MCLK como SCLK; configure el Pi en modo esclavo I2S y alimente la señal SCLK a través de algún pin GPIO (18, supongo).

No he revisado los controladores i2s personalmente, pero la falta de un mclock out a menudo se menciona como una restricción del Pi, por lo que me resulta difícil creer que pueda ser manejado por el mismo Pi. Probablemente agregaré algunos puentes de soldadura o algo así para poder probar el método de temporizador PWM que mencionaste. Sin embargo, creo que no lo aclaré, pero el enfoque de mi pregunta era si estos componentes en particular son adecuados para este diseño y si el Pi puede bloquear una de las señales del reloj y generar la otra. Sin embargo, esto definitivamente ayudó a aclarar las cosas.
Y la hoja de datos de los amplificadores implica fuertemente que se requiere una señal mlk para que el chip funcione.