Bonjour à tous,
Me voici de retour avec un nouveau projet qui m'a pas mal occupé depuis un peu plus de 6 mois.
Après le boost en puissance / courant de mon UP avec l'UP-Grade, puis un design un peu plus avancé avec la réalisation de mes premiers PCB pour l’UGS Muse + gros boulot sur le développement du software de la carte de contrôle, je voulais passer à un nouveau challenge encore un peu plus difficile histoire de continuer à apprendre car c'est aussi là où je m'amuse le plus .
Ma source de référence est mon BDP-95 qui est toujours aussi bon mais je trouve à la longue que le fait de devoir allumer ma TV pour sélectionner les morceaux dématérialisés à jouer depuis mon NAS est peu pratique.
L'idée de créer un lecteur réseau digne de ce nom a donc tout doucement commencé à germer. Je me suis rapidement orienté vers une solution Volumio ou Runeaudio car je trouve top le fait de pouvoir avoir une solution réseau, compatible airplay, ... avec un écran déporté qui affiche la lecture en cours, les jaquettes, pilotable avec une tablette... J'ai choisi comme base hardware pour cela l'Odroid C2. Et vu que cette Odroid sera connectée au final à un DAC afin de jouer de la musique, ce lecteur réseau s’appelle OdroDAC (Odroid + DAC).
Si on veut obtenir quelque chose de bon en utilisant une C2 il faut obligatoirement prévoir de remettre en forme l'interface I2S qu'elle fournit via un domaine d'horloge très faible jitter car bien qu’elle ait une interface I2S dédiée, elle est master et issue d’horloges internes au MPU de la C2 avec potentiellement un jitter élevé qui est une des principales sources de distorsion dans le domaine digital.
Il me fallait prévoir donc de réaliser une carte digitale sur laquelle la C2 allait se connecter et s'occupant principalement de cela.
La topologie globale que j'ai implémentée est un étage à 3 entrées digitales, une FIFO pour isoler les domaines d'horloge, un étage d'isolation galvanique, un domaine d'horloge faible jitter et un étage de reclocking de course.
Cote entrées digitales, je suis parti au départ sur Amanero + Ordoid + une interface I2S externe en spare, au cas où. L'Amanero apportant l'avantage de pouvoir être slave sur l'I2S donc de ne pas avoir besoin immédiatement d’une FIFO fonctionnelle pour apprécier une écoute.
L'étage suivant est composé d'un FPGA + de la SRAM externe afin principalement d'implémenter la FIFO et pourquoi pas un futur éventuel traitement du signal / filtrage. Je suis fait plaisir et parti sur les derniers MAX10 + 2MB de SRAM comme ça on est large et j’ai de quoi m’amuser .
Derrière tout cela on attaque une série d'isolateurs silicon image que j'aime tant (déjà utilisés dans l’UGS Muse) afin de se trouver dans un domaine isolé et bien moins bruité que celui du FPGA.
La on arrive ensuite sur des bascules D réputées très faible jitter (Potato Flip-Flop) qui sont clockées par 2 oscillateurs super faible jitter aussi. J'utilise pour le moment des Crystek et j'ai ajouté la possibilité (si nécessaire) de mettre une carte oscillateur externe montée sur silent bloc afin de limiter encore plus le jitter lié aux vibrations.
Pour alimenter tout cela j'utilise les (fantastiques) derniers LDO de LT avec notamment LT3042 et LT3081.
Je me suis donc lancé dans la réalisation d'un nouveau PCB et cette fois je suis passé en 4 couches, ce n’est pas plus difficile, ce n’est pas plus cher et c'est bien mieux ! Si j'avais eu ce recul j’aurais probablement fait certains PCB du Muse en 4 couches aussi. Bref c'est ça le DIY, on apprend tous le temps !
Arrivée de ces premiers PCB, pas mal du tout (je testais un nouveau fabricant de PCB), assemblage du premier proto ok, mais un petit bug non critique sur l'interface Amanero m'ennuie un peu car j'aime les trucs parfaits. Bref c'est mon premier proto et tout le reste fonctionne parfaitement du coup cette carte me permet de commencer à implémenter le code du FPGA, car ça aussi c'est tout nouveau pour moi .
Le premier proto:
A ce moment-là je rencontre une autre personne (Emyeuoi) ayant assemblé un UGS Muse qui me met sur une piste super intéressante qui va faire prendre au projet une nouvelle dimension.
Il me parle du NMR qu’il possède, une carte OEM offrant une solution de renderer DLNA via Ethernet qui a beaucoup d'avantage notamment d'être I2S slave (un peu comme l'Amanero), de pouvoir extraire tout un tas d'informations super intéressantes des fichiers audio, pilotable avec un Smartphone,...
Je fais une copie des principales fonctionnalités de la bête, c'est assez alléchant...
- digital audio Media Renderer
- UPnP AV 2.0 / DLNA
- plays and decodes common audio formats from HTTP streams
- resolution up to 32-bit, sampling rate up to 384kHz
- support for DSD audio at 64xFS (2.8224MHz) and 128xFS (5.6448MHz)
- support for gapless playback
- embedded 32-bit digital level attenuator
- bit-perfect data transmission
- 2-channel asynchronous endpoint with external clocking for jitter-free stereo playback
- hardware and software modes for easy integration
- compact design, low EMI
Au début l’idée était de l’aider à développer le soft pour sa carte NMR via la carte de contrôle de l’UGS Muse et puis au final en regardant la datasheet du MR-MOD de plus près, je me suis dit, c’est bougrement bon ce module, je m’en achète un et le soft que je développe sera réutilisable au moins pour nous 2 .
Après coup je suis vraiment satisfait d’avoir fait ce choix tellement c’est bon et je remercie Emyeuoi pour avoir m’avoir mis sous le nez cette solution que je ne connaissais pas.
MR-MOD => https://www.engineered.ch/products/mr-mod/
Je me lance donc dans une v1.0 de ma carte digitale en supprimant l'Amanero (peu utile lorsqu'on a une solution Ethernet), j’ajoute le module MR-MOD (car ce qu'il y a sur la NMR sera implémenté dans mon FPGA), j’ajoute un WM8805 en mode software avec entrées SPDIF, RCA, BNC, AES, je garde bien évidemment la C2 tout en lui ajoutant le support de carte Raspberry Pi (I2S via le connecteurs 40pins) et enfin une entrée I2S externe supplémentaire multiplexée avec Odroid / RPi au cas où...
Au passage j'en profite pour changer un LDO vu la consommation du MR-MOD + monte les crystek sur supports afin de pouvoir changer les oscillateurs en 2 secondes pour faire des essais comparatifs entre divers modèles. Pour le LDO je passe au LT3083, toujours du top de chez LT avec beaucoup de courant.
Réception de mes nouveaux PCB, tout fonctionne parfaitement, je me focalise pour le moment sur le MR-MOD, les Odroid et WM8805 attendront un peu (notamment l’implémentation de la FIFO).
Le code complet de génération des horloges pour le MR-MOD est déjà implémenté dans le FPGA et tout fonctionne très bien pour des flux PCM ou DSD.
Voici a quoi ressemble cette nouvelle version:
L'Odroid sous la carte:
Le MR-MOD au premier plan:
Afin de piloter cette carte je réutilise la carte de contrôle de l’UGS Muse qui était déjà bien prévue pour faire autre chose que de contrôler le Muse .
J’ai déjà implémenté la partie soft de contrôle du MR-MOD et je commence à afficher des choses sympathiques:
Au passage j’aimerai aussi remercier Tazz avec qui j’ai partagé les détails de cette carte avant de partir en fab afin qu’il me confirme qu’elle soit la plus universelle possible et notamment compatible avec les dernières puces ESS PRO. J’ai de mon côté dans les tiroirs des TDA1541A ainsi que des PCM1794A, pour donner une idée de la direction que prend le DAC…
Et puis un grand merci aussi à Eric évidemment qui est toujours dans la confidence de mes projets et qui a un œil critique et des conseils que j’apprécie beaucoup.
Le DAC est terminé lui aussi, le chapitre 2 très bientôt, suivit des alimentation pour terminer ...