Descodificador de audio extendido MAX98357A basado en NXP iMX6ULL
¿Colibri iMX6ULL? ¿Qué pasa? ¿Toradex? ¿Para equipos de bajo costo? ¿brazo? Módulo informático. Este producto no tiene un códec de audio, por lo que no puede emitir directamente señales de audio analógicas. Este artículo presentará cómo utilizar el módulo de audio digital I2S. Extensión de interfaz MAX98357A, que incluye cómo configurar el árbol de dispositivos. Y el reloj.
¿Estás en línea? ¿Colibri iMX6ULL? ¿I.MX 6ULL SoC en el módulo? ¿A través de la interfaz de audio de sincronización? (SAI) proporciona una interfaz de audio digital, ¿admite AC97? ¿O I2S? Conecte un códec de audio externo. MAX98357A? es un códec de audio fácil de usar. ¿d? Amplificador de potencia clase A. ¿innecesario? ¿I2C? ¿Configuración y externa? ¿MCLK? reloj, simplificando aún más el diseño del circuito. ¿A continuación utilizamos Colibri iMX6ULL? ¿fósforo? ¿Placa de evaluación Colibri, instalada? ¿Linux BSP 5.4? Tome esto como ejemplo.
¿Colibri iMX6ULL? ¿Siempre hay tres cosas que decir? Interfaz, ¿usa SAI2 aquí? ¿conectar? MAX98357A.
De acuerdo con la relación de conexión anterior, ¿realizar las modificaciones correspondientes? Árbol de dispositivos. ¿Estás en línea? ¿Imx6ull-colibri-eval-v3.dtsi primero agrega un codec_ext? nodo.
-
códec _ text:max 98357 a @ 0 { compatible = " maxim, max 98357 a " # sonido-Dai-cells = <0>} ;
-
¿Y luego agregar una simple tarjeta de sonido? ¿nodo? Sonido. Sonido - ¿Dai? ¿Citando la definición anterior? codec_ext.
-
sonido { compatible = "tarjeta-de-sonido-simple"; estado = "ok"; tarjeta-de-sonido-simple, nombre = "max98357a-tarjeta-de-audio simple , format = "i2s"; tarjeta de sonido simple, bitclock-master = <&dailink_master_cpu>tarjeta de sonido simple, frame-master=<&dailink_master_cpu>tarjeta de sonido simple, ed. ; }; dailink_master_cpu: tarjeta de sonido simple, CPU { sound-Dai = & lt; & ampsai2 & gt;
-
¿Cómo se usa Sai2? en el nodo, por lo que el siguiente paso es verificar la inicialización de Sai2
-
& ampsai 2 { pinctrl-names = "default" pinctrl-0 = <amppinctrl_sai2>reloj asignado. =<&clks imx 6 ul_CLK_sai 2_SEL>,?&clks imx 6 ul_CLK_PLL 4_AUDIO_DIV> reloj-padre asignado = < & ampclks imx 6 ul_CLK_PLL 4_AUDIO_DIV > >;fsl,sai-async;/* fsl,sai-mclk-direction-output;*/status = "ok";};
-
Hay varios parámetros de claves.
pinctrl_sai2? La relación de multiplexación de pines está configurada. ¿Para MAX98357A? De hecho, sólo se requieren los primeros tres pines, como las conexiones enumeradas en la tabla anterior. ¿MX6UL_PAD_JTAG_TMS__SAI2_MCLK? ¿Y mx6ul_pad_JTAG_TMS_CCM_clko 1? Para facilitar las pruebas de señales de reloj relevantes. Estos dos pines son en realidad el mismo pin, pero tienen diferentes funciones de multiplexación. ¿sonido? Fsl, sai-mclk-dirección-salida en el nodo;? ¿Los parámetros también se utilizan para probar SAI? ¿MCLK? salida, con mx6ul_pad_JTAG_TMS_sai2_mclk? ¿Se emite SAI MCLK, pero esta señal no se utiliza? MAX98357A .
-
pinctrl_sai2: sai2grp {fsl,pins=<MX6UL_PAD_JTAG_TDI__sai2_TX_BCLK 0x 1f 089 MX6UL_PAD_JTAG_ TDO _ _ TX _ TX _ SYNC 0x 17088 MX6UL _ PAD _ JTAG _ TRST _ B _ _ TX 2 _ TX _ DATA 0x 11088/* MX6UL _ PAD _ JTAG _ TMS _ _ SYNC 2 _ MCLK 0x 17088 */MX6UL _ DATA0x 17088>;};};
-
¿Sonido? ¿Hay tres atributos importantes en el nodo: reloj de asignación y nodo principal del reloj de asignación? Entonces qué. Especifique la frecuencia del reloj. Antes de presentar estas propiedades, comprendamos brevemente el iMX6ULL. Módulo Controlador de Reloj (CCM).
¿MCC? ¿Responsable de producción y control? iMX6ULL? ¿Las señales de reloj necesarias para que funcione cada módulo, incluidas las de? ¿Armar CPU? ¿Núcleo para varios periféricos, como? USB, audio, red, etc. Porque cada módulo requiere un reloj diferente, desde alta frecuencia hasta baja frecuencia, ¿y qué? ¿MCC? ¿Cuántas personas hay dentro? ¿PLL? Los divisores de frecuencia proporcionan señales de reloj en múltiples frecuencias. ¿Qué pasa con la EFS utilizada esta vez? módulo, según iMX6ULL? Manual del chip Figura 18-2. ClockTree-Parte 1, su relación de reloj es la siguiente.
¿Raíz sai 2 CLK? ¿A través de MUX? Hay tres fuentes de señal para elegir: PLL3, PLL4 y PLL5. Habrá varios divisores con diferentes dígitos en el medio. ¿Cuál será? ¿PLL? Los relojes con salidas más altas se reducen gradualmente a frecuencias más bajas. Estos crossovers no requieren configuración manual, ¿CCM? El controlador calcula automáticamente la relación de división de frecuencia adecuada en función de la frecuencia de salida esperada. sai 2 CLK raíz? ¿Finalmente para SAI2? Este módulo proporciona la señal del reloj de funcionamiento. ¿Jugando? Internamente, ¿la señal del reloj pasa a través de un divisor de frecuencia interno para generar I2S? ¿Bloques de bits? ¿Y la señal de sincronización de cuadros? Sincronización.
Para archivos de audio, ¿puede calcular el requerido? Reloj de bits Por ejemplo, para un archivo de audio de doble canal con una frecuencia de muestreo de 16 bits y 48 K, reloj de bits = 16x2x 48000 = 1536000. Este valor es el reloj objetivo final que necesitamos. Según la imagen de arriba,? ¿Reloj de bits? ¿De? PLL4. ¿Basado en iMX6ULL? Manual del chip 18.5.1.3.4 ¿PLL de audio/vídeo? Capítulo, PLL? ¿El rango de frecuencia es de 650 MHz? ¿llegar? 1,3 GHz. ¿Qué usar? 1536000? es el número base, tome su número entero. 512 veces, ¿entiendes? 786432000. Ahora mismo. 786432000?Total * *último? 512? ¿Se puede generar después de la división de frecuencia? ¿Reloj de 1.536.000 bits? Señal. ¿Entonces revisamos de nuevo? sai2? Algunas propiedades del reloj en el nodo.
-
Reloj asignado = <&clks imx 6 ul_CLK_sai 2_SEL>,<& ampclks imx 6 ul_CLK_PLL 4_AUDIO_ DIV > reloj-parent asignado = < p>
¿IMX6UL_CLK_SAI2_SEL? ¿Configuración? ¿CCM_CSCMR1? ¿En la caja registradora? ¿Número CLK Saier? Más o menos. ¿Está configurado en ? 2,?Elegir? PLL4? como fuente de reloj. imx 6 ul_CLK_PLL 4_Audio_DIV? ¿para qué? PLL4? ¿El reloj dividido está configurado? 19660800, ¿cuál es este valor? 1536000? ¿Qué pasó? 24? Revista Hora. ¿Y qué pasa con PLL4? Antes de la división de frecuencia, es 786432000, ¿cuál es IMX6UL_CLK_PLL4_AUDIO_DIV? 4? veces a sus 650 MHz? a 1,3GHz? dentro del rango de frecuencia.
¿Completar el árbol de dispositivos de arriba? ¿Recompilar y actualizar después de la modificación? Colibri iMX6ULL. ¿Puede el siguiente comando sobrescribir directamente el dtb original en el módulo? documento.
-
root @ coli bri-imx 6 ull:~ # ubi updatevol/dev/ubi 0 _ 1 imx 6 ull-coli bri-eval-v3
-
¿Puedo ver max98357a después de reiniciar? Equipos de audio.
-
root @ colibri-imx 6 ull:~ # a play-l ****Reproducir lista de dispositivos de hardware* * * *Tarjeta 0: max98357a [max98357a], dispositivo 0: 202c000.sai-HiFi HiFi-0 []? Subdispositivo:1/1? Subdispositivo #0: Subdispositivo #0
-
¿Al mismo tiempo en el árbol del reloj? ¿Puedes ver también a sai2 en? Relojes relacionados. PLL4? Salida 786432000,4? ¿Salida de división de frecuencia 196608000Hz? ¿Qué pasa? pll4_audio_div.MUX? ¿Entonces pasa pred 4? ¿Salida de división de frecuencia 49152000Hz y luego a través del podf 2? ¿Salida de división de frecuencia 24576000Hz? ¿Raíz CLK, SAI2? Se proporciona una señal de reloj para el funcionamiento del módulo.
-
root @ colibri-imx 6 ull:~ # cat/sys/kernel/debug/clk/clk _ resumen PLL 4?0 0 0 ?786432000 ?0 0 ? 50000pll4_bypass 0 0 0?786432000 ?0 0 ?50000?pll4_audio? 0 0 0 ?786432000 ?0 0 ?50000?pll4_post_div 0 0 ?196608000 ?0 0 ?50000pll4_audio_div 0 0 0 ?196608000 ?0 0 ?50000sai2_sel? 0 0 0 ?196608000 ?0 0 ?50000?sai2_pred? 0 0 0 49152000 ?0 0 ?50000?sai2_podf? 0 0 0 24576000 ?0 0 ?50000sai2?0 0 0 24576000 ?0 0 ?50000
-
CCM? ¿Proporcionar dos pines? CCM_CLKO1? Entonces qué.
CCM_CLKO2? El reloj relevante se puede generar para realizar pruebas. ¿Está SAI2 en la parte superior del árbol de dispositivos? ¿También habilitamos este pin en la configuración del pin del nodo? MX6UL_PAD_JTAG_TMS__CCM_clko 1 0x 17088.
¿Según CCM_CCOSR? ¿Registrar CLKO2_SEL? Poco, sai2_clk_root? ¿CCM_CLKO2 en exportación CLK? ¿El bit permite CCM_CLKO1? ¿En la salida CCM_CLKO1? ¿aún? CCM_CLKO2 Entonces, ¿puedes enviar un mensaje a CCM_CCOSR? ¿El registro escribe 0x001130180, en? ¿Módulo SODIMM 71? ¿Habilitar CCM_CLKO1 en el pin? , genera sai2_clk_root? Señal. ¿Estás en línea? ¿Colibri iMX6ULL? Ejecute el siguiente comando en .
-
root @ colibri-imx 6 ull:~ # dev mem 2 0x 020 c 4060 w 0x 01130180
-
¿Estás en línea? ¿Colibri iMX6ULL? Utilice el siguiente comando para reproducir un archivo de audio de doble canal con una frecuencia de muestreo de 16 bits y 48 K. ¿Cuál es la medida en este momento? SODIMM 71? La salida de forma de onda del pin.
-
root @ colibri-imx 6 ull:~ # a play-D sys default:CARD = max 98357 a lrmonophase 4 . -
Como puedes ver en la imagen de arriba, ¿cuál es la frecuencia de la forma de onda? 24,5 MHz.es decir. PLL4? Un reloj generado después de múltiples divisiones de frecuencia. ¿Reproducir el archivo de audio anterior nuevamente y probar SODIMM 31? ¿Reloj de bits? ¿Y qué pasa con sodim23? ¿Sincronización de fotogramas? ¿Señal?
¿Reloj de bits? ¿La frecuencia es de 1,53 MHz y la sincronización se utiliza para la sincronización de cuadros? ¿para qué? 48 kHz ¿Es este también el audio de doble canal, 16 bits y frecuencia de muestreo de 48K calculado anteriormente? ¿Reloj de bits? valor numérico. La salida real de estas señales es la esperada. ¿Y si se abre? ¿Juego? Función de salida del registro de depuración del controlador; después de reproducir el archivo de audio, también puede encontrar otra información. ¿Estás en línea? ¿Juego? ¿Agregar #define DEBUG a la primera línea del código fuente del controlador y luego volver a compilar? zimag.
-
[?49.838293]fsl-sai 202 c000.sai:clk_rate 0hz,? mlk_clk identificación 0[? 49.838316]fsl-sai 202 c000 .sai:clk_rate 24576000Hz,? mlk_clk identificación 1[? 49.838328] fsl-sai 202c000.sai: Relación 16 de frecuencia 1536000Hz basada en reloj 24576000Hz [? 49.838351] fsl-sai 202 c000 sai: mejor ajuste: id de reloj = 1, relación = 16, polarización = 0
-
1536000Hz. ¿Reloj de bits? ¿Es a través de 24576000Hz? ¿Continuar con 16? División de frecuencia. ¿Esto se debe a la EFS? ¿También hay un divisor en el interior que se puede usar para sai2_clk_root? ¿Es apropiada la salida por división de frecuencia? bitclock.I2S2_TCR2? ¿Los últimos 7 bits del registro (dirección 0x0202c008)? ¿Bit DIV? El divisor es configurable. ¿Cuál es el valor de la división de frecuencia? (DIV + 1)x2. Leer este registro, ¿DIV? ¿Cuál es el valor? 7. ¿Continuar? 16? división de frecuencia. ¿Corresponde a la EFS anterior? ¿El que controla el registro de depuración? Basado en un reloj de 24576000 Hz, la frecuencia de 1536000 Hz da una relación de 16.
-
root @ colibri-imx 6 ull:~ # dev mem 2 0x 0202 c 008 w/dev/mem está abierto. La memoria está asignada en la dirección 0x76f4b000.
¿Leer por dirección? 0x 0202 c 008 (0x 76 F4 b 008):0x 07000007
-
¿Finalmente conectado? MAX98357A? Luego podrá escuchar el archivo de audio reproducido a través de los parlantes.
/v_show/id_XNTgzMjUxMTg2NA==. Lenguaje de marcado de hipertexto
Resumen
¿Por extensión? MAX98357A? ¿Qué presentamos? ¿Fútbol iMX6 ULL? ¿Conductor de audio? ¿Juego? Cómo funciona y cómo configurarlo. ¿Árbol de dispositivos? y métodos de prueba. Basándose en este método, los usuarios también pueden utilizarlo según? ¿I2S? Códec de audio basado.