Generando señales de reloj i2s

1

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

Ignorando problemas de energía, etc., el problema que encontré es que la Raspberry Pi no puede emitir la señal mclk requerida por la interfaz de audio digital en serie del chip TAS6424. El DAC opera en modo esclavo exclusivamente, mientras que el Pi puede operar en modo maestro o esclavo en las señales LRCLK y BCLK.

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

¿Esto funcionará para generar un reloj externo? ¿Puede el Pi generar una señal BCLK desde un LRCLK? ¿Viceversa? ¿Cuánto se necesita para modificar el kernel para controlar adecuadamente los dispositivos anteriores con el fin de cambiar las frecuencias de muestreo en tiempo de ejecución y crear un dispositivo ASoC que funcione?

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

    

2 respuestas

1

Para un convertidor delta sigma, MCLK es en realidad el crítico (alimenta el 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 divisoria (Esto generalmente brinda la mejor calidad, pero necesitará dos piedras para acomodar la 44.1 y velocidades derivadas de 48 kHz a menos que use un PLL como el 1708), en este caso ejecuta ambas interfaces en modo esclavo.

El PLL1708 más un rock te dará un MCLK para las tres tasas posibles, pero luego debes dividirlo para generar los relojes de serie y de marco, y tendrás que ejecutar ambos lados de la interfaz en modo esclavo. Tenga en cuenta que el LS294 es una parte de 5V.

    
respondido por el Dan Mills
0

Piénsalo: MCLK es un reloj utilizado internamente para el DAC; te da el periodo de muestreo. Ahora, si MCLK y SCLK se alejan el uno del otro, terminará en una situación en la que su DAC podría ser más lento para convertir muestras analógicas que su Pi al enviarlas, ¿y luego qué? ¿Dejar caer muestras? O a la inversa, es más rápido, y luego, en algún punto, los FIFO internos se quedan vacíos, ¿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 "puede detenerse entre" SCLK, en un promedio sobre la duración de un cuadro.

Sin embargo, no estoy totalmente convencido de que tengas razón acerca de la imposibilidad de simplemente usar el hardware de Pi para manejar MCLK; eso es un reloj de 25 MHz como máximo, y las unidades PWM de los Pi deberían poder generar eso. Utilice otro temporizador para activar el envío de N bits cada N ciclos MCLK. De esa manera, en el momento en que el DAC convierte un marco, está seguro de que siempre está enviando un marco de datos.

Pero: la frambuesa pi viene con el hardware I²S, por lo que todo esto puede ser más fácil de lo que piensas. Simplemente cargue el módulo de Kernel apropiado (probablemente ya esté allí si está usando una de las principales distribuciones de Linux) y 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 necesita eso!

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

    
respondido por el Marcus Müller

Lea otras preguntas en las etiquetas