¿Cuál es el problema con I2S, dices? Conecte el cableado a los pines deseados y todo funciona.

Yo también lo pensé, pero con la minicomputadora Omega2 resultó no ser tan simple. Entonces decidí escribir este artículo.
Comencemos con lo que logré al final. Conecté el chip TDA1543 (DAC estéreo I2S con una resolución de 16 bits de amplitud) al microordenador Omega 2. El sonido es bueno, disfruto escuchando estaciones de radio por Internet (debería haber una broma sobre el sonido de los audiófilos y los tubos calientes). Sin embargo, todavía no entendía la razón de sobrecargar el audio, pero solo aprendí a evitarlo con el método de muleta. Y me gustaría mucho escuchar sus ideas sobre este tema.
Quizás alguien no sabe qué es Omega2. Este es el miniordenador en el que Linux se basa en LEDE, que es esencialmente una rama de OpenWRT. Procesador MT7688, 64 MB de RAM y 16 MB de Flash. En general, puede leer más en
Wikipedia ,
aquí y
aquí .
También es importante tener en cuenta que todas las acciones se realizan en la versión de firmware original 0.2.0Y ahora, hablemos un poco sobre el
dolor cuando llegué a esto.
Para empezar, todo es transparente, conectamos todas las líneas de I2S TDA'shki y Omega. Estas son la línea de reloj CLK, la línea de sincronización del canal WS, la línea de datos DATA y la tierra GND respectivamente. Además, agregamos un par de resistencias y condensadores, pero lo principal es la resistencia de sintonización en la 7ma pata del TDA1543. Se debe aplicar un desplazamiento cero a esta pierna, en esto me quedé dormido por primera vez. El hecho es que el chip TDA1543, único para su época, funciona con energía unipolar. Bueno, la señal de sonido son oscilaciones con respecto a 0 hacia abajo y hacia arriba, por lo que debe cambiar este cero al centro del rango de voltaje de suministro y obtener las oscilaciones relativas a este punto. Todo está escrito en la hoja de datos, pero inicialmente ensamblé un circuito con una resistencia convencional (de estos de su Internet) y recibí distorsiones que no entendí durante mucho tiempo. Coloque una resistencia variable y logre una polarización cero en ausencia de una señal en la entrada (modo de espera) 1.3-1.5 V (con fuente de alimentación de 3.3 V). Resulta el siguiente esquema.

Además, siguiendo los pasos del
sitio oficial de cebolla, estamos actualizados para desarrollar la versión de firmware, que agregó soporte para I2S (quería escribir menos de un año, pero no ... pasó). Actualizamos e instalamos los paquetes necesarios para el sonido:
opkg update opkg install alsa-utils mpg123
Cambie GPIO al modo I2S con el comando:
omega2-ctrl gpiomux set i2s i2s
Copiamos el archivo wav de prueba, utilicé el clásico Suzanne Vega - Tom's Diner. Y trata de jugar usando aplay:
aplay za_sebya_i_za_sashky.wav
Y escuchamos distorsiones. Solo mucha sobrecarga dura. Tanto que podría parecer que estuviste en 2007. Pero el motivo de la conmoción de la canción se puede rastrear en ella, así que algo funciona allí, ¿verdad?
Traté de bajar el volumen en el mezclador alsa, pero fue en vano, porque el chip MAX98090, controlado por I2C, afina el controlador y, en consecuencia, todas las configuraciones se envían simplemente a I2C, y los datos de I2S en sí no cambian.
Ok, abra la hoja de datos en el MAX98090. Y comenzamos a encender. El microcircuito admite muchos formatos de datos de entrada: I2S / LJ / RJ / TDM y puede digerir un gran bit. Y el procesador MT7688 en sí mismo también puede ser más grande y más rápido que el TDDA. ¿Quizás problemas de datos en I2S?
Poco a poco fui jugando con el osciloscopio.
Bit 16 bits? Si Colgué la línea WS en un canal en el otro canal, la línea CLK. Y estaba convencido de la longitud del pulso WS - 16 medidas.
¿Frecuencias de operación incorrectas? No Todas las frecuencias corresponden a los trabajadores. WS - 44100 Hz, CLK - 1411200 Hz.
Formato de números de tipo en los datos? Se utiliza el formato de caracteres correcto (sí, pensé que se necesitaba sin signo). Lo comprobó creando senos artificiales y moviéndolos hacia arriba y hacia abajo en relación con 0 en audacia y cambió la amplitud. No hay cambios cualitativos.
¿Hay de todos modos I2S? muy probablemente si. En primer lugar, porque entonces todo funcionó para mí (bueno, o eso me parece así), y en segundo lugar, traté de comprobarlo con un osciloscopio, aunque sin un analizador lógico, por supuesto, esto es difícil. Puede valer la pena realizar una prueba más precisa y traer su Beaglebone aquí.
Parece que todo es verdad, y para los chicos del foro de cebolla todo funciona, pero la verdad está en otros chips: MAX98357A y PCM5102. En general, renuncio a la idea de jugar wav'ki y obtener mpg123 para reproducir mp3. Lo corto con la bandera -C y empiezo a bajar el volumen. Y aquí me senté. Cuando configuro el nivel de volumen en el programa mpg123 en aproximadamente el 1 por ciento, obtengo un excelente sonido. El chip oscila a plena amplitud. Enciendo la radio con la bandera -f 128:
mpg123 -f 128 http://us2.internet-radio.com:8443/
Y los sonidos de un relajante blues estadounidense se encuentran conmigo. Por cierto, el enlace a la radio puede no estar funcionando, tomado
desde aquí .

Comienzo una señal de diente de sierra y gradualmente aumento la amplitud. Como resultado, vi que las distorsiones son saltos caóticos de 0 a la tensión de alimentación y cuanto mayor es el nivel, más saltos. Me tomó varias semanas hacer que Omega hablara. Estaba muy cansado y, por lo tanto, en este momento decidí parar, ¡funciona!
Sin embargo, entiendo que esto es imposible, por lo que me complacerá escuchar sus ideas y sugerencias. Bueno, para aquellos que están tratando de hacer que Omega hable en agonía, ¡espero haberte ayudado!
Gracias a todos!