Carte-fille MIDI-ITO-HAT pour Raspberry Pi

Explorons la conception de carte-fille MIDI/HAT (Hardware Attached on Top) pour les Raspberry Pi 3/4/400 et leur utilisation avec des applications de MAO installées sur ceux-ci

◊ Sommaire

  • Introduction au projet MIDI-ITO-HAT, à la MAO et au MIDI
  • Spécifications électriques du MIDI-DIN v.1.0 [1985] et v.1.1 [2014]
  • Spécifications électriques GPIO / UART des Raspberry Pi
  • Projet MIDI-ITO-HAT — 1ère Étape : Schéma électrique préliminaire
  • 2ème Étape : Réalisation des prototypes
  • 3ème Étape : Configuration et test UART des RPi
  • 4ème Étape : Mise en action des prototypes
  • Et ainsi de suite jusqu’au projet final…

♦ Introduction

• C’est quoi mon projet de carte-fille « MIDI-ITO-HAT » ?

  • MIDI = Musical Instrument Digital Interface
  • ITO = Input / Throughput / Output (MIDI)
  • HAT = Hardware Attached on Top (Raspberry Pi)

Ce projet libre permettra de connecter des équipements MIDI (de musique et aussi d’éclairage, de lumière ou autres) au travers de câbles/prises DIN 5 broches (à 180°) au port GPIO (Header 40 broches) des nano-cartes et mini-ordinateurs Raspberry Pi. Il supportera tous les messages MIDI incluant les System Exclusive (SysEx). Ce projet est un mix de matériel et de logiciel. Une fois l’équipement MIDI connecté au RPi au travers de la carte-fille MIDI-ITO-HAT configurée, il sera en mesure de dialoguer avec toutes les applications et utilitaires utilisant le MIDI (ALSA et JACK).

Faisons maintenant un petit rappel concernant la musique électronique, ses champs d’application et les moyens de les mettre en œuvre.

MAO – Musique assistée par ordinateur

La MAO regroupe l’ensemble des utilisations de l’informatique comme outil associé à la chaîne de création musicale depuis la composition musicale jusqu’à la diffusion des œuvres, en passant par la formation pédagogique au solfège et la pratique d’instruments.

MIDI – Musical Instrument Digital Interface

Le MIDI est un protocole de communication -et- un format de fichier dédiés à la musique, et utilisés pour la communication entre instruments électroniques, contrôleurs, séquenceurs, et logiciels de musique.
Il est apparu dans les années 1980, issu d’une volonté de l’industrie de normaliser les échanges entre différents instruments de différentes marques. Ce protocole est devenu aujourd’hui un standard très répandu dans le matériel électronique de musique et dans d’autres domaines.

• The MIDI Association

La MIDI Manufacturers Association (Association de constructeurs MIDI) ou MMA est une organisation professionnelle sans but lucratif, composée principalement de développeurs de solutions matérielles et logicielles, et travaillant sur les standards liés à la norme MIDI. Elle a été fondée en 1985 aux États-Unis par Jeff Rona, deux ans après l’apparition de la norme MIDI 1.0, en 1983.

♦ MIDI-DIN Electrical Specification

• Original Electrical Specification 1.0 [1985]

La description de la spécification électrique MIDI 1.0 et l’exemple de circuit (ci-dessous) donnés dans le document 1.0 original (1983) utilisaient une électronique 5 volts comme c’était courant à l’époque.

MMA – MIDI-DIN Electrical Circuit as of 1985

Electrical Specification Update 1.1 [2014]

La spécification 1.0 a été mise à jour en 2014 en version 1.1 pour refléter les exigences de conception actuelles tels que les circuits électroniques 3,3 volts et la réduction des interférences RF (Radio Frequency).
Cette mise à jour ajoute des filtres RF à billes de ferrite en option aux broches de signal et des dispositions de mise à la terre en option pour les connecteurs de blindage de mise à la terre sur les prises MIDI.

• Les recommandations v.1.1 de la MIDI Association [2014]

– MIDI-OUT

Comme nous pouvons le constater, cette version 1.1 n’est pas fondamentalement différente de la v.1.0 mais elle introduit la compatibilité avec la logique CMOS à 3,3V pour les équipement MIDI les plus récents. De plus, un soin particulier doit être maintenant porté aux interférences électromagnétiques. Elles sont également appelées interférences de radiofréquences et elles sont des perturbations générées par une source externe qui affectent un circuit électrique par induction électromagnétique, couplage électrostatique ou conduction.

MIDI-OUT Circuit as recommanded by the MIDI Association (MIDI Specification Rev.1.1 as of 2014)

Le schéma ci-dessus résume ces nouvelles recommandations v.1.1 de la MIDI Association pour le circuit MIDI-OUT.

– MIDI-IN / MIDI-THRU

Il en va des MIDI-IN et MIDI-THRU en version 1.1 comme du MIDI-OUT en v.1.1 : ajout de la compatibilité CMOS 3,3V et des protections contre les RFI / EMI (interférences électromagnétiques).

MIDI-IN-THRU Circuit as recommanded by the MIDI Association (MIDI Specification Rev.1.1 as of 2014)

Le schéma ci-dessus résume ces nouvelles recommandations v.1.1 de la MIDI Association pour les circuits MIDI-IN et MIDI-THRU.

– MIDI-Cable

Rien de vraiment nouveau mis à part un rappel que le câble MIDI doit être blindé. Voir plus haut pour la connexion à la masse des broches n°2 des prises DIN 5 broches à 180° et du blindage des câbles.

MIDI-Cable as recommanded by the MIDI Association (MIDI Specification Rev.1.1 as of 2014)

Si vous voulez utiliser le Power-over-MIDI, le câble devra être à 4+1 fils (au lieu de 2+1) afin de pouvoir faire passer le courant entre les broches n°1 et 3. En fonction du courant électrique à fournir à l’équipement MIDI, il sera peut-être nécessaire d’utiliser une alimentation électrique additionnelle. Je reviendrai sur ce sujet plus loin dans l’article.

♦ Spécifications électriques GPIO / UART des RPis

Une caractéristique puissante des Raspberry Pi est l’ouverture sur le monde physique avec la rangée de broches GPIO (General Purpose Input/Output ou entrée/sortie à usage général) le long du bord supérieur des nano-cartes RPi et à l’arrière des mini-ordinateur RPi 400. Une en-tête (header) GPIO à 40 broches se trouve sur toutes les nano-cartes Raspberry Pi actuelles (mais pas sur les Pi Zero et Pi Zero W). Avant le RPi 1 Model B+ (2014), les cartes comprenaient une en-tête plus courte à 26 broches.

Les broches du GPIO peuvent être configurées comme entrée à usage général, sortie à usage général ou comme l’un des six autres paramètres spéciaux, dont les fonctions dépendent des broches.
En plus d’être de simples périphériques d’entrée et de sortie, les broches du GPIO peuvent être utilisées avec une variété de fonctions intégrées alternatives, certaines sont disponibles sur toutes les broches, d’autres sur des broches spécifiques telles que PWM (SW or HW Pulse-Width Modulation), SPI (Serial Peripheral Interface), I2C (Inter-Integrated Circuit) et Serial (UART). Voir l’article sur le GPIO Usage.

Pour mon projet de carte-fille MIDI-ITO-HAT, je vais utiliser la fonction Serial (TX et RX), c’est à dire les UART (Universal Asynchronous Receiver/Transmitter) du RPi. Un UART est un émetteur-récepteur asynchrone universel cadencé à une certaine vitesse de transmission, ici pour le MIDI v.1.0 et v.1.1 c’est du 31.250 baud (1 baud = +/- 1 bit/s !), voir les spécifications de la norme MIDI-DIN.

Raspberry Pi Hardware
GPIO / UART – Universal Asynchronous Receiver/Transmitter
  • UART pins in BCM mode are: #14 & #15
  • UART pins in WiringPi are: #15 & #16
  • UART configuration

Mais comme nous le verrons plus loin dans les tests, l’utilisation de l’UART avec un baud rate « fixe » (obligatoire) peut nous amener à désactiver certaines fonctions (non essentielles ?) du Raspberry Pi !

♦ 1ère Étape : Schéma électrique préliminaire du MIDI-ITO-HAT

Ce schéma électronique a été conçu, avec la suite libre KiCad EDA sous GNU/Linux, pour être en conformité avec les Spécifications électriques MIDI-DIN v.1.1 de 2014 ainsi que celles du port GPIO des Raspberry Pi 3/4/400. Il est pour l’instant compatible qu’avec les équipements MIDI « vintage » 5V (« legacy »). Dans une future version il sera configurable 5V ou 3,3V pour être compatible avec les nouveaux équipements MIDI et pourrait aussi supporter le Power-over-MIDI (DIN).

MIDI-ITO-HAT I/F for Raspberry Pi | Preliminary schematic – Rev. A-1

Ce schéma préliminaire sera certainement appelé à +/- évoluer au fur et à mesure de l’avancement du projet.

• Notices techniques (datasheets) des 2 Circuits intégrés (IC)

  • 6N138M : Single-Channel Darlington Optocoupler, 8-Pin DIP, Low Input Current High Gain Split.
  • 74HCT245N : Octal Bus Transceiver with 3-state outputs, 20-Pin DIP, is designed for asynchronous 2-way communication between data buses. The control-function implementation minimizes external timing requirements. This device allows data transmission from the A-bus to the B-bus or from the B-bus to the A-bus depending upon the logic level at the direction-control (DIR) input. The output-enable (OE)\ input can be used to disable the device so that the buses are effectively isolated.

♦ 2ème Étape : Réalisation des prototypes

Cette platine d’essai (2x cartes d’expérimentation MB102 de 830 points chacune sans soudure) a été facilement réalisée sous GNU/Linux avec Fritzing, un logiciel libre de conception de circuit imprimé qui permet de concevoir de façon entièrement graphique le circuit d’essai.

MIDI-ITO-HAT I/F for Raspberry Pi | Preliminary Test Breadboard – v.1.1

Puis, toujours avec Fritzing, d’en imprimer le typon. Pour un résultat sans aucune erreur, il faudra obligatoirement passer par le Routage manuel car son Autoroutage n’est vraiment pas satisfaisant, même comme ici pour un circuit relativement simple !

Pour gagner de la place sur la version finale de la carte-fille MIDI-ITO-HAT I/F, le J1 – GPIO Breakout 40 pin sera remplacé par un connecteur simple à 40 broches (2×20), Mâle si utilisation avec une nappe ou Femelle si directement branchée au Raspberry Pi. Il faudra aussi tenir compte des différences physiques (positionnement et orientation) entre les Headers GPIO des RPi 3/4 et RPi 400.

MIDI-ITO-HAT I/F for Raspberry Pi | Preliminary Test Daughter Board – Model 1.1

Je préfère utiliser KiCad EDA qui est beaucoup plus performant que Fritzing pour la réalisation de schémas électriques avec Eeschema et de circuits imprimés avec Pcbnew. Mais Fritzing est une très bonne solution pour effectuer les premières étapes d’un projet voire la totalité pour des circuits qui ne sont pas trop complexes.

• 31/07/2021

Tous mes composants électroniques n’étant pas encore arrivés avec des livraisons maintenant prévues durant la 2ème quinzaine d’août, j’ai continué à avancer sur mon projet.

Pour la réalisation de mes prototypes, j’ai décidé de sauter l’étape de la Platine d’essai sans soudure MB102 avec l’Adaptateur T-Cobbler Plus et de passer directement à la conception des circuits imprimés d’essai en simple face.
Dans un premier temps ceux-ci seront réalisés en utilisant des circuit imprimés standards de prototypage double-face de 6×8 cm (taille approximative d’un RPi 4) – épaisseur 1,6 mm avec environ 600 trous + pastilles pré-étamées (espacement horizontal / vertical de 2,54 mm).

RPi-ITO-HAT Interface — Modèle 2

Cette carte-fille MIDI-ITO-HAT — Modèle 2 pourra être branchée au port GPIO (mâle à 40 broches) des Raspberry Pi 3/4/400 de 3 manières différentes en utilisant un Header J1 adapté (image ci-dessous).

MIDI-ITO-HAT I/F for Raspberry Pi | Preliminary Test Daughter Board – Model 2.0b

Raspberry Pi 3/4 et 400
  • J1 = Male Shrouded Header – Straight 2×20 pins (écartement 2,54 mm)
    + Câble plat IDC avec 2 embouts femelles à 40 broches et détrompeur.
  • Remarque : En l’état, il est possible d’utiliser ce MIDI-ITO-HAT Modèle 2 directement (c’est-à-dire sans le câble plat) avec les RPi 3/4 en changeant le Header J1 pour un Female Header Socket Strip – Straight 2×20 pin (comme sur un HAT classique) positionné sur la face inférieure de cette carte-fille. L’inconvénient de cette solution est le très grand débordement et l’effet levier de celle-ci sur le RPi.
Raspberry Pi 400 uniquement
  • J1 = Female Header Socket Strip – RIGHT Angle 2×20 pins (écartement 2,54 mm)
    pour une connexion directe au port GPIO à l’arrière du RPi 400.

RPi-ITO-HAT Interface — Modèle 3

La carte-fille MIDI-ITO-HAT — Modèle 3 est conçue pour être branchée directement au port GPIO (mâle à 40 broches) des Raspberry Pi 3/4 (image ci-dessous). Ce Modèle 3 pour les RPi 3/4 s’utilise comme un « vrai » HAT (grand format), c’est-à-dire physiquement au dessus des RPi qu’elle recouvre complètement. Si, nécessaire on peut prévoir les découpes du circuit imprimé pour le passage des nappes plates Caméra et Écran.

Raspberry Pi 3/4 uniquement

MIDI-ITO-HAT I/F for Raspberry Pi | Preliminary Test Daughter Board – Model 3.0

♦ 3ème Étape : Configuration et test UART des RPi

Comme nous l’avons vu plus haut, les cartes-filles MIDI-ITO-HAT utilisent l’un des UART des Raspberry Pi 3/4/400. Avant de pouvoir utiliser MIDI-ITO-HAT, il faut convenablement configurer l’UART (Universal Asynchronous Receiver/Transmitter) choisi sur le Raspberry Pi puis le tester.

Il existe deux types d’UART disponibles sur les Raspberry Pi 3/4/400 : le PL011 et le mini-UART. Le PL011 est un UART performant et largement compatible avec le 16550 UART, tandis que le mini-UART a un ensemble de fonctionnalités réduit. Mon projet utilise le PL011 car c’est l’UART qui permet en particulier d’avoir un contrôle total sur la fréquence de son Baud Rate et cela indépendamment de celle du cœur du VPU.

Note : D’après les spécifications du MIDI-DIN v.1.0/1.1, nous devons paramétrer les transmissions avec un Baud Rate = 31.250 baud +/- 1% pour des trames UART constituées des bits suivants : 1x Start bit, 8x Data bits, No Parity, 1x Stop bit = 10 bits/trame. Il faudra régler la fréquence de l’horloge de l’UART0 en conséquence.

Tableau récapitulatif des UART
MODEL UART #1 #2 #3 #4 #5 #6
RPi3 Nom UART0 UART1
  Type PL011 mini-UART        
  Affectation 2ème (BT) 1er        
RPi OS Périphérique
Linux
/dev/ttyAMA0
/dev/serial1
/dev/ttyS0
/dev/serial0
       
RPi4B
RPi400
Nom UART0 UART1 UART2 UART3 UART4 UART5
  Type PL011 mini-UART PL011 PL011 PL011 PL011
  Affectation 2ème (BT) 1er 4xUART additionnels désactivés par défaut
RPi OS Périphérique
Linux
/dev/ttyAMA0
/devserial1
/dev/ttyS0
/dev/serial0
       

* Références officielles à consulter : RPi’s UART Configuration et RPi’s GPIO

IMPORTANT : Afin de pouvoir utiliser l’UART0 (PL011) sur les GPIO 14 (TXD) pin-8 et GPIO 15 (RXD) pin-10, il faut sous RPi OS (Raspberry Pi Operating System, précédemment Raspbian) désactiver la Console série Linux, le Bluetooth (BT) intégré et reconfigurer le Périphérique.

  • Désactiver la Console série Linux avec sudo raspi-config -> Interface Options – Serial Port.
  • Quelques modifications/ajouts à faire dans le fichier /boot/config.txt, par exemple en entrant dans un Terminal sudo nano /boot/config.txt :
    • dtoverlay=disable-bt désactive le périphérique Bluetooth et fait du premier PL011 (UART0) l’UART principal.
      Il faut également désactiver le service systemd qui initialise le modem, afin qu’il ne se connecte pas à l’UART, en utilisant sudo systemctl disable hciuart dans un Terminal.
    • En regardant dans /boot/overlays/README de la dernière version de Raspberry Pi OS Buster (Debian 10), je peux maintenant voir disable-bt et d’autres overlays documentés.
  • Après mes tests, je reviendra sur ces modifications à effectuer dans le fichier /boot/config.txt.

Avec le RPi complètement éteint, pour effectuer une boucle TXD/RXD on connecte une résistance d’~ 680 Ω (à enlever après les tests) entre les pin-8 et pin-10 du GPIO Header, jamais de liaison directe ! Après le redémarrage du RPi, on teste le bon fonctionnement de l’UART0 (PL011) : envoi TXD => réception RXD avec un petit script Python ou un utilitaire de communication série comme Minicom (un clone de Telix) ou Cutecom (similaire à Minicom mais avec une interface graphique). Ces 2 utilitaires sont installables depuis la Logithèque de RPi OS ou en ligne de commande dans un Terminal.

♦ 4ème Étape : Mise en action des prototypes

 

À suivre quand toutes mes commandes de composants électroniques seront arrivées…