Quel est le gros problème avec I2S, dites-vous? Connectez le câblage aux broches souhaitées et tout fonctionne.

Je le pensais aussi, mais avec le mini-ordinateur Omega2, il s'est avéré que ce n'était pas si simple. J'ai donc décidé d'écrire cet article.
Commençons par ce que j'ai réalisé à la fin. J'ai connecté la puce TDA1543 (DAC stéréo I2S avec une résolution de 16 bits en amplitude) au micro-ordinateur Omega 2. Le son est bon, j'aime écouter les stations de radio Internet (il devrait y avoir une blague sur l'audiophile et le son des tubes chauds). Cependant, je ne comprenais toujours pas la raison de la surcharge audio, mais j'ai seulement appris à la contourner avec la méthode de béquille. Et j'aimerais beaucoup entendre vos idées sur cette question.
Peut-être que quelqu'un ne sait pas ce qu'est l'Omega2. Il s'agit du mini-ordinateur sur lequel Linux est basé sur LEDE, qui est essentiellement une branche d'OpenWRT. Processeur MT7688, 64 Mo de RAM et 16 Mo de mémoire Flash. En général, vous pouvez en savoir plus sur
Wikipedia ,
ici et
ici .
Il est également important de noter que toutes les actions sont effectuées sur la version d'origine du firmware 0.2.0Et maintenant, parlons un peu de la
douleur quand j'y suis arrivée.
Pour commencer, tout est transparent, nous connectons toutes les lignes de I2S TDA'shki et Omega. Il s'agit respectivement de la ligne d'horloge CLK, de la ligne de synchronisation de canal WS, de la ligne de données DATA et de la masse GND. De plus, nous ajoutons quelques résistances et condensateurs, mais l'essentiel est la résistance de réglage sur la 7e étape du TDA1543. Un décalage nul doit être appliqué à cette jambe, sur ce je me suis d'abord endormi. Le fait est que la puce TDA1543, unique en son temps, fonctionne sur unipolaire. Eh bien, le signal sonore est des oscillations par rapport à 0 de haut en bas, vous devez donc déplacer ce zéro au milieu de la plage de tension d'alimentation et obtenir les oscillations par rapport à ce point. Tout est écrit dans la fiche technique, mais au départ j'ai assemblé un circuit avec une résistance conventionnelle (de celles de votre Internet) et reçu des distorsions que je ne comprenais pas depuis longtemps. Mettez une résistance variable et obtenez une polarisation nulle en l'absence de signal à l'entrée (mode veille) 1,3-1,5 V (avec alimentation 3,3 V). Il s'avère que le schéma suivant.

De plus, en suivant les étapes du
site officiel de
l'oignon, nous sommes mis à jour pour développer la version du firmware, qui a ajouté le support pour I2S (je voulais écrire moins d'un an, mais non ... passé). Nous mettons à jour et installons les packages nécessaires pour le son:
opkg update opkg install alsa-utils mpg123
Basculez GPIO en mode I2S avec la commande:
omega2-ctrl gpiomux set i2s i2s
Nous copions le fichier wav de test, j'ai utilisé le classique Suzanne Vega - Tom's Diner. Et essayez de jouer en utilisant aplay:
aplay za_sebya_i_za_sashky.wav
Et nous entendons de la distorsion. Juste beaucoup de surcharge. Tellement que cela pourrait vous sembler être de retour en 2007. Mais le motif de choc de la chanson peut être retracé, donc quelque chose fonctionne là-bas, non?
J'ai essayé de baisser le volume dans le mélangeur alsa - en vain, car le pilote est affiné par la puce MAX98090, qui est contrôlée par I2C et, par conséquent, tous les paramètres sont simplement envoyés à I2C, et les données I2S elles-mêmes ne changent pas.
Ok, ouvrez la fiche technique du MAX98090. Et nous commençons à nous allumer. Le microcircuit prend en charge de nombreux formats de données d'entrée: I2S / LJ / RJ / TDM et il peut digérer un peu. Et le processeur MT7688 lui-même peut également être plus grand et plus rapide que le TDDA. Peut-être des problèmes de données dans I2S?
Je suis progressivement allé bricoler l'oscilloscope.
Bit 16 bits? Oui J'ai accroché la ligne WS sur un canal de l'autre canal, la ligne CLK. Et j'étais convaincu de la longueur d'impulsion WS-16 mesures.
Mauvaises fréquences de fonctionnement? Non. Les fréquences correspondent toutes aux travailleurs. WS - 44100 Hz, CLK - 1411200 Hz.
Formater les numéros de type dans les données? Le format de caractère correct est utilisé (oui, je pensais que non signé était nécessaire). Il a vérifié en créant des sinus artificiels et en les déplaçant de haut en bas par rapport à 0 en audace et a changé l'amplitude. Il n'y a aucun changement qualitatif.
Y a-t-il quand même I2S? très probablement oui. Premièrement, parce que tout a fonctionné pour moi (enfin, ou il me semble comme ça), et deuxièmement, j'ai essayé de vérifier avec un oscilloscope, bien que sans analyseur logique, cela soit bien sûr difficile. Il peut être utile d'effectuer un test plus précis et d'apporter votre Beaglebone ici.
Il semble que tout soit vrai, et pour les gars du forum oignon tout fonctionne, mais la vérité est sur d'autres puces: MAX98357A et PCM5102. En général, j'abandonne l'idée de jouer à wav'ki et de faire en sorte que mpg123 joue des mp3. Je le coupe avec le drapeau -C et commence à baisser le volume. Et ici je me suis assis. Lorsque je règle le volume dans le programme mpg123 à environ 1%, j'obtiens un son exceptionnel. La puce oscille à pleine amplitude. Je démarre la radio avec le drapeau -f 128:
mpg123 -f 128 http://us2.internet-radio.com:8443/
Et les sons d'un blues américain relaxant me rencontrent. Par ailleurs, le lien vers la radio peut ne pas fonctionner, a pris
d'ici .

Je lance un signal en dents de scie et augmente progressivement l'amplitude. En conséquence, j'ai vu que les distorsions sont des sauts chaotiques de 0 à la tension d'alimentation et plus le niveau est élevé, plus ces sauts sont importants. Il m'a fallu plusieurs semaines pour faire parler Omega. J'étais très fatigué et donc, en ce moment j'ai décidé d'arrêter - ça marche!
Cependant, je comprends que cela est impossible, donc je serai heureux d'entendre vos idées et suggestions. Eh bien, pour ceux qui essaient de faire parler les oméga à l'agonie, j'espère que je vous ai aidé!
Merci à tous!