Audio I2S sur Jetson Nano : configurer Raspiaudio Audio+
Pour configurer Raspiaudio Audio+ sur un Jetson Nano, activez les broches I2S4 dans jetson-io, forcez leur passage en mode audio à chaque démarrage et reliez I2S4 au pilote audio. Le kit de développement Jetson Nano est conçu pour l'IA et la robotique, mais ne possède pas de sortie audio analogique. La carte Raspiaudio Audio+ est une carte son conçue pour le Raspberry Pi qui s'adapte aussi au connecteur à 40 broches du Nano.
Ce guide décrit toutes les étapes sur le Jetson Nano B02 (2019). À la fin, vous entendrez de l'audio par la prise casque d'Audio+.
Avant de commencer : modèle de Jetson Nano et compatibilité Audio+
Configurez d'abord votre Jetson Nano. Si ce n'est pas déjà fait, suivez le guide d'installation du Jetson Nano de NVIDIA. Vous devez pouvoir démarrer le Nano jusqu'au bureau avec un écran et un clavier.
Matériel nécessaire : un Jetson Nano B02 et une carte Raspiaudio Audio+. Le connecteur à 40 broches d'Audio+ s'enfiche directement sur celui du Nano. Enfoncez-le fermement pour que chaque broche fasse contact.
Ce guide a été testé sur le kit de développement Jetson Nano B02 (2019), aussi appelé P3450 (module P3448 sur une carte porteuse P3449). Le Jetson Nano se reconnaît à son dissipateur thermique passif (les modèles Jetson plus récents utilisent des ventilateurs). Le B02 possède aussi une rangée de broches qui dépasse comme une petite avancée, absente de l'ancien modèle A01.
Si vous avez l'ancien modèle A01 ou un Jetson plus récent, utilisez ce guide uniquement comme référence, car les étapes ne s'appliquent pas directement. Vous pouvez partager vos conseils dans la communauté Raspiaudio.
Autres cartes DAC I2S : Audio+ et les DAC Raspberry Pi similaires n'ont pas d'interface de contrôle, seulement une interface I2S. Comme l'explique ce sujet du forum NVIDIA sur les cartes son I2S Raspberry Pi pour le Jetson Nano, ces cartes devraient fonctionner une fois les broches configurées. Les étapes ci-dessous constituent donc un bon point de départ pour d'autres DAC I2S de ce type sur le Nano B02.
Merci tout particulièrement à jas-mx pour le message du forum NVIDIA sur l'activation de la sortie audio I2S du connecteur à 40 broches qui a inspiré ce guide.
Étape 1 : activer les broches audio I2S4 avec jetson-io
Par défaut, le Jetson Nano n'utilise pas ces broches du connecteur pour l'audio. Démarrez le Nano avec un écran et un clavier, ouvrez un terminal et lancez :
sudo /opt/nvidia/jetson-io/jetson-io.py
Un outil à menus s'ouvre :
- Utilisez les flèches haut et bas pour sélectionner "Configure Jetson 40pin Header", puis appuyez sur Enter
- Sélectionnez "Configure header pins manually" et appuyez sur Enter
- Dans la liste de cases à cocher, repérez "i2s4" (broches 12, 35, 38, 40) et "audio_mclk" (broche 7). Appuyez sur Space pour chacune afin de la marquer d'un astérisque [*].
- Sélectionnez "Back"
- Sélectionnez "Save pin changes"
- Sélectionnez "Save and reboot to reconfigure pins"
Le Jetson Nano redémarre. L'outil écrit un arbre de périphériques personnalisé (DTB) qui affecte ces broches à l'audio, enregistré sous /boot/kernel_tegra210-p3448-0000-p3449-0000-b00-user-custom.dtb.
Étape 2 : vérifier que les broches sont en mode I2S
Après le redémarrage, vérifiez le mode des broches :
sudo cat /sys/kernel/debug/tegra_gpio | grep "J:"
Vous devriez voir : J: 2:1 00 00 00 00 00 00 000000
Si vous voyez "f0" quelque part (comme "f0 00 00"), la correction ci-dessous est nécessaire.
"00" indique que les broches sont en mode de fonction spéciale (SFIO) pour l'audio I2S. "f0" indique qu'elles restent bloquées en mode GPIO.
Étape 3 : corriger les broches avec un service systemd si nécessaire
Sur de nombreuses cartes B02, les broches ne passent pas en mode audio. Cette commande corrige le problème :
sudo busybox devmem 0x6000d204 32 0
Elle force les broches dans le bon mode, mais elles reviennent en mode GPIO au redémarrage. Pour appliquer la correction à chaque démarrage, créez un service systemd :
sudo tee /etc/systemd/system/fix-i2s4-pins.service <<EOF
[Unit]
Description=Fix I2S4 Pinmux for Jetson Nano
After=local-fs.target
[Service]
Type=oneshot
ExecStart=/bin/busybox devmem 0x6000d204 32 0
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
Ce service de démarrage écrit dans le registre de configuration GPIO 0x6000d204, ce qui force les broches du port J en mode SFIO pour I2S4.
Activez et démarrez le service :
sudo systemctl enable fix-i2s4-pins
sudo systemctl start fix-i2s4-pins
Les deux commandes devraient se terminer sans erreur. Si vous voyez "Failed to start fix-i2s4-pins.service: Unit not found," le fichier du service n'a pas été créé correctement. Consultez les journaux :
sudo journalctl -u fix-i2s4-pins
Étape 4 : relier I2S4 au pilote audio
Connectez l'interface I2S4 au système audio :
amixer -c tegrasndt210ref cset name='I2S4 Mux' ADMAIF1
La sortie doit se terminer par values=1. Si vous obtenez l'erreur "Invalid card", le pilote audio n'est pas encore chargé. Redémarrez et réessayez.
Cela relie l'interface ADMAIF1 (où le pilote envoie l'audio) à I2S4, et connecte ainsi le pilote aux broches matérielles.
Étape 5 : jouer un signal de test
Cette commande envoie une onde sinusoïdale stéréo à 48 kHz en 16 bits par l'interface I2S4 :
speaker-test -D hw:tegrasndt210ref,0 -r 48000 -c 2 -F S16_LE -t sine
Vous devriez entendre un son continu dans votre casque ou vos enceintes. Appuyez sur Ctrl+C pour l'arrêter.
Vérifier que la carte Audio+ fonctionne
Si vous avez entendu le son, Raspiaudio Audio+ fonctionne sur votre Jetson Nano B02. La correction des broches reste active après les redémarrages grâce au service de l'étape 3.
Complément : flasher votre Jetson Nano avec le DTB personnalisé
La méthode ci-dessus convient à un appareil. Si vous devez flasher plusieurs cartes Jetson Nano pour la production, parcourir les menus de jetson-io sur chacune devient fastidieux. Flashez plutôt chaque carte avec le fichier DTB (Device Tree Blob) créé à l'étape 1 pour que les broches soient déjà configurées :
/boot/kernel_tegra210-p3448-0000-p3449-0000-b00-user-custom.dtb
Copiez ce fichier sur votre ordinateur. Lors du flashage suivant, recopiez-le dans le dossier /boot/ avant le premier démarrage.
Ce fichier DTB correspond uniquement à la révision de la carte porteuse sur laquelle il a été créé. La révision figure à la fin du nom de fichier (ici, b00). Flasher un DTB provenant d'une autre révision peut endommager la partition de démarrage, et vous devrez peut-être alors tout reflasher depuis un ordinateur hôte.
Le moyen le plus simple de flasher un Jetson Nano consiste à utiliser un ordinateur hôte Linux avec NVIDIA SDK Manager ou le NVIDIA Jetson Linux Driver Package (L4T). Je recommande L4T, car il fonctionne avec davantage de distributions Linux. La procédure complète figure dans ce sujet du forum NVIDIA sur le téléchargement et le flashage manuels de L4T. Voici la version courte.
Téléchargez L4T depuis les archives NVIDIA Jetson Linux. Pour le Jetson Nano, utilisez la série Jetson Linux 32.7.x, pas une branche JetPack plus récente. Sur la page de la version, téléchargez le Driver Package (BSP) et le Sample Root Filesystem. Extrayez le paquet de pilotes sans sudo, puis extrayez le système de fichiers racine d'exemple avec sudo dans Linux_for_Tegra/rootfs/.
Ensuite, depuis le dossier Linux_for_Tegra, appliquez les binaires NVIDIA :
sudo ./apply_binaries.sh
Connectez ensuite le Jetson Nano à votre ordinateur hôte par micro USB. Le Nano doit être alimenté par une alimentation 5 V séparée.
Voici un exemple de commande pour flasher le Jetson Nano avec votre fichier DTB personnalisé. Exécutez-la sur l'ordinateur hôte après y avoir copié le fichier DTB personnalisé du Nano. Remplacez le chemin par le vôtre.
sudo ./flash.sh -k DTB
-d /path/to/your/file/kernel_tegra210-p3448-0000-p3449-0000-b00-user-custom.dtb
jetson-nano-devkit mmcblk1p1
Pour flasher, vous devrez peut-être mettre le Jetson Nano en mode de récupération :
- Alimentez le Jetson Nano avec une alimentation 5 V (pas par micro USB).
- Reliez la broche "FC RCV" (récupération forcée) à une broche "GND" avec un fil de liaison, un trombone ou un petit tournevis.
- Reliez la broche "SYS_RST" (réinitialisation du système) à une broche "GND" pour redémarrer le Jetson Nano.
- Connectez le Nano à votre ordinateur hôte par micro USB.
Vérifiez la connexion sur votre ordinateur hôte avec :
lsusb | grep -i nvidia
Après le flashage, vous devez encore ajouter le service systemd de l'étape 3 pour que les broches soient correctement configurées à chaque démarrage.
Guides associés
Une fois que la carte joue du son, ces guides présentent des projets d'audio neuronal pour de petits ordinateurs monocartes :
- Le modèle RAVE d'IRCAM : sa configuration légère "raspberry" et l'objet externe nn~ visent les cartes embarquées pour des installations portables.
- Plugins de guitare neuronaux gratuits : ToobAmp et Stompbox exécutent des modèles d'amplis neuronaux sur des pédales construites autour d'un Raspberry Pi.
- DDSP de Google Magenta : comprend Open NSynth Super, un synthétiseur neuronal construit autour d'un Raspberry Pi.