F5UII – Station radioamateur française

Tutorial complet de l’installation du firmware MMDVM

Intro


Le logiciel MMDVM est un fabuleux développement réalisé par Jonathan G4KLX qui permet de construit un relais radioamateur numérique multimode. Effectivement, il sait gérer aussi bien le DSTAR que le DMR et le C4FM.

Le logiciel MMDVM est composé de deux parties.

  1. La partie de décodage encodage des modes numériques : MMDVM. Ce logiciel s’installe sur un Arduino Due
  2. La partie d’interface réseau internet, qui se connecte aux réflecteurs, Talk Group Brandmeister ou YSF Reflector : MMDVM Host, qui s’installe notamment sur un nano ordinateur Raspberry Pi.

Synoptique d’un relais utilisant le “MultiMode Digital Voice Modem” (MMDVM)

En plus d’être accessibles aux bricoleurs ayant la fibre informatique… il s’agit de réalisation à coût faible. Je vous propose de suivre étape par étape toute la mise en œuvre. L’objectif est simple : Disposer d’un relais numérique UHF interconnecté via internet.

Le tutoriel est à lire sur plusieurs pages. Utiliser le sommaire et la navigation proposée en bas d’article pour vous faciliter la navigation.

Installation de la carte Arduino

Vous avez acheté votre carte Arduino DUE, et la première chose à faire est d’installer le logiciel d’édition IDE Arduino. Télécharger le fichier d’installation (86Mo pour la version 1.6.0 de l’IDE) sur la page https://www.arduino.cc/en/Main/Software
Installer le logiciel. Toutes les cases sont cochées notamment Install USB Driver.

 

Plusieurs questions de sécurité d’installation du Driver USB sont posées. Bien sûr, nous répondons Installer.

Le message Completed est affichée, l’installation est terminée, Cliquer sur Close.

Brancher la carte Arduino DUE sur le port USB de programmation (coté connecteur d’alimentation externe), le Gestionnaire de périphérique ajoute un Ports série COM. Dans mon cas, un port COM11 (Arduino DUE Programming Port).

Depuis le menu démarré, vous pouvez lancer le logiciel Arduino

Choisissez le port série correspondant à votre liaison avec l’Arduino DUE, (ici COM11) dans le menu Outils / Ports.

Puis choisir Outils / Gestionnaire de carte. Le gestionnaire télécharge les définitions des cartes Arduino sur internet.

 

Dans le champ Filtrez la recherche, tapez due. Sélectionner la ligne Arduino SAM Boards (32-bits ARM Cortex-M3), et cliquer Installer.

Sélectionner à présent en bas du menu Outils / Type de carte : “Arduino Due (Programming Port)”

Avant de programmer l’arduino avec le logiciel MMDVM, nous allons injecter un petit programme de test, pour vérifier que tout est correctement paramétré.

Programme de test de l’arduino Due

Ce programme de test va faire simplement clignoter la LED L existante sur la platine Arduino Due.

Ouvrer le programme existant dans le menu Fichier / Exemples / 01.Basics / Blink

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.

  Most Arduinos have an on-board LED you can control. On the Uno and
  Leonardo, it is attached to digital pin 13. If you're unsure what
  pin the on-board LED is connected to on your Arduino model, check
  the documentation at http://www.arduino.cc

  This example code is in the public domain.

  modified 8 May 2014
  by Scott Fitzgerald
 */


// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin 13 as an output.
  pinMode(13, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);              // wait for a second
  digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);              // wait for a second
}

Ce programme va donc simplement faire changer d’état la sortie Pin 13 sur laquelle est raccordée le voyant L de la platine.

Pour injecter le programme dans l’Arduino Due, cliquer sur la flèche.

Le programme est alors compilé par le logiciel, puis chargé dans l’arduino. A partir de là, le programme qui fait clignoter le voyant est autonome sur la platine Arduino et n’a bien-sûr plus besoin du logiciel Arduino du PC, qui a juste été utilisé à la compilation et au chargement.

La fenêtre du bas du logiciel indique l’avancement de la compilation, du chargement et de l’initialisation du programme de l’Arduino. Le message ‘Verify successful‘ indique le bon achèvement de la compilation.

Le croquis utilise 22 124 octets (4%) de l'espace de stockage de programmes. Le maximum est de 524 288 octets.
Atmel SMART device 0x285e0a60 found
Erase flash
done in 0.035 seconds

Write 24392 bytes to flash (96 pages)

[                              ] 0% (0/96 pages)
[==                            ] 9% (9/96 pages)
[=====                         ] 18% (18/96 pages)
[========                      ] 28% (27/96 pages)
[===========                   ] 37% (36/96 pages)
[==============                ] 46% (45/96 pages)
[================              ] 56% (54/96 pages)
[===================           ] 65% (63/96 pages)
[======================        ] 75% (72/96 pages)
[=========================     ] 84% (81/96 pages)
[============================  ] 93% (90/96 pages)
[==============================] 100% (96/96 pages)
done in 5.126 seconds

Verify 24392 bytes of flash

[                              ] 0% (0/96 pages)
[==                            ] 9% (9/96 pages)
[=====                         ] 18% (18/96 pages)
[========                      ] 28% (27/96 pages)
[===========                   ] 37% (36/96 pages)
[==============                ] 46% (45/96 pages)
[================              ] 56% (54/96 pages)
[===================           ] 65% (63/96 pages)
[======================        ] 75% (72/96 pages)
[=========================     ] 84% (81/96 pages)
[============================  ] 93% (90/96 pages)
[==============================] 100% (96/96 pages)
Verify successful
done in 5.175 seconds
Set boot flash true
CPU reset.

Voilà la LED clignotante…

 

Nous passons maintenant à l’installation du logiciel MMDVM sur l’arduino Due.

En réalité, avant d’installer le logiciel MMDVM, nous devons encore réaliser une petite modification de la configuration de l’éditeur Arduino.

Modification de la plateforme

Tel que spécifié dans le fichier Built.txt, des modifications sont nécessaires sur la définition d’un fichier de configuration du logiciel Arduino.

Ouvrez le répertoire C:\Users\User\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.9

Pour les autres plateformes, reportez vous directement au fichier d’instructions Built.txt.

Faites une copie de sauvegarde du fichier platform.txt

Editez le fichier platform.txt avec un éditeur de programmation (par exemple Notepad + ou SublimeText)

La ligne suivante doit être modifiée (dans mon cas, elle est en ligne 80)

## Combine gc-sections, archives, and objects
recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" -mcpu={build.mcu} -mthumb {compiler.c.elf.flags} "-T{build.variant.path}/{build.ldscript}" "-Wl,-Map,{build.path}/{build.project_name}.map" {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" "-L{build.path}" -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--start-group {compiler.combine.flags} {object_files} "{build.variant.path}/{build.variant_system_lib}" "{build.path}/{archive_file}" -Wl,--end-group -lm -gcc
## Combine gc-sections, archives, and objects
recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" -mcpu={build.mcu} -mthumb {compiler.c.elf.flags} "-T{build.variant.path}/{build.ldscript}" "-Wl,-Map,{build.path}/{build.project_name}.map" {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" "-L{build.path}" -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--start-group {compiler.combine.flags} {object_files} "{build.variant.path}/{build.variant_system_lib}" "{build.system.path}/CMSIS/CMSIS/Lib/ARM/arm_cortexM3l_math.lib" "{build.path}/{archive_file}" -Wl,--end-group -lm -gcc

Cela revient à ajouter pratiquement à la fin de la ligne le complément suivant

"{build.system.path}/CMSIS/CMSIS/Lib/ARM/arm_cortexM3l_math.lib"

En effet, si l’on ne réalise pas cette modification décrite dans le fichier Built.txt, une erreur de compilation suivante peut apparaître :

sketch\DMRTX.cpp.o: In function `CDMRTX::writeByte(unsigned char, unsigned char)':

sketch/DMRTX.cpp:299: undefined reference to `arm_fir_fast_q15'

sketch\DStarTX.cpp.o: In function `CDStarTX::writeByte(unsigned char)':

sketch/DStarTX.cpp:453: undefined reference to `arm_fir_fast_q15'

sketch\IO.cpp.o: In function `CIO::process()':

sketch/IO.cpp:344: undefined reference to `arm_fir_fast_q15'

sketch/IO.cpp:351: undefined reference to `arm_fir_fast_q15'

sketch/IO.cpp:362: undefined reference to `arm_fir_fast_q15'

sketch\IO.cpp.o:sketch/IO.cpp:369: more undefined references to `arm_fir_fast_q15' follow

collect2.exe: error: ld returned 1 exit status

exit status 1
Erreur de compilation pour la carte Arduino Due (Programming Port)

Après avoir installé le logiciel permettant de charger par port USB l’Arduino Due et avoir fait cette modification du fichier platform.txt, nous pouvons à présent nous occuper de charger le logiciel de Jonathan G4KLX sur l’Arduino Due. Cette opération s’effectue en trois temps.

Téléchargement du logiciel MMDVM

  1. Le firmware (logiciel) Arduino de MMDVM est à télécharger sur la plateforme github
    https://github.com/g4klx/MMDVM
  2. Télécharger le ZIP depuis le bouton placé en haut à droite.
  3. Dézipper le fichier MMDVM-master.zip dans un répertoire.
  4. Renommer le répertoire en MMDVM

Configurer le logiciel MMDVM

Ouvrez le fichier MMDVM/MMDVM.ino (un double clic sur le fichier depuis l’explorateur, ouvrira directementl’éditeur Arduino)

Cliquer sur l’onglet “Config.h”

Modifier les lignes suivantes pour que le fonctionnement corresponde à la platine MMDVM que j’ai réalisé (sérigraphiée “PCB designed by F5UII“) . Sauvegarder le fichier Config.h (Ctrl-S ou Fichier/Enregistrer)

  1. L’oscillateur TCXO est un 12 Mhz
  2. La carte est inspiré de SP8NTH (la ligne #define  ARDUINO_DUE_ZUM_V10 est mise en commentaire avec // en début de ligne). On supprime les // de commentaires devant #define  ARDUINO_DUE_NTH
    /*
     *   Copyright (C) 2015,2016 by Jonathan Naylor G4KLX
     *
     *   This program is free software; you can redistribute it and/or modify
     *   it under the terms of the GNU General Public License as published by
     *   the Free Software Foundation; either version 2 of the License, or
     *   (at your option) any later version.
     *
     *   This program is distributed in the hope that it will be useful,
     *   but WITHOUT ANY WARRANTY; without even the implied warranty of
     *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     *   GNU General Public License for more details.
     *
     *   You should have received a copy of the GNU General Public License
     *   along with this program; if not, write to the Free Software
     *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
     */
    
    #if !defined(CONFIG_H)
    #define  CONFIG_H
    
    // Allow for the use of high quality external clock oscillators
    // The number is the frequency of the oscillator in Hertz.
    // For 12 MHz
    #define EXTERNAL_OSC 12000000
    // For 14.4 MHz
    // #define EXTERNAL_OSC 14400000
    // For 19.2 MHz
    // #define EXTERNAL_OSC 19200000
    
    // Allow the use of the COS line to lockout the modem
    // #define USE_COS_AS_LOCKOUT
    
    // Use pins to output the current mode
    // #define ARDUINO_MODE_PINS
    
    // For the original Arduino Due pin layout
    // #define  ARDUINO_DUE_PAPA
    
    // For the ZUM Board V1.0 pin layout
    // #define  ARDUINO_DUE_ZUM_V10
    
    // For the SP8NTH board
    #define  ARDUINO_DUE_NTH
    
    // To use wider C4FSK filters for DMR and System Fusion on transmit
    // #define WIDE_C4FSK_FILTERS_TX
    // To use wider C4FSK filters for DMR and System Fusion on receive
    // #define WIDE_C4FSK_FILTERS_RX
    
    #endif

Compiler et charger MMDVM sur l’Arduino Due

  1. Sélectionner le premier onglet ‘MMDVM’
  2. Cliquer sur l’icone V Vérifier. La compilation du logiciel MMDVM débute. Le bas de fenêtre vous indique l’avancement.
  3. Si la compilation s’est bien terminée sans erreur, vous pouvez charger le logiciel dans l’Arduino Due, en cliquant sur la flèche 
    Le croquis utilise 53 304 octets (10%) de l'espace de stockage de programmes. Le maximum est de 524 288 octets.
    Atmel SMART device 0x285e0a60 found
    Erase flash
    done in 0.036 seconds
    
    Write 55924 bytes to flash (219 pages)
    
    [                              ] 0% (0/219 pages)
    [==                            ] 9% (21/219 pages)
    [=====                         ] 19% (42/219 pages)
    [========                      ] 28% (63/219 pages)
    [===========                   ] 38% (84/219 pages)
    [==============                ] 47% (105/219 pages)
    [=================             ] 57% (126/219 pages)
    [====================          ] 67% (147/219 pages)
    [=======================       ] 76% (168/219 pages)
    [=========================     ] 86% (189/219 pages)
    [============================  ] 95% (210/219 pages)
    [==============================] 100% (219/219 pages)
    done in 11.677 seconds
    
    Verify 55924 bytes of flash
    
    [                              ] 0% (0/219 pages)
    [==                            ] 9% (21/219 pages)
    [=====                         ] 19% (42/219 pages)
    [========                      ] 28% (63/219 pages)
    [===========                   ] 38% (84/219 pages)
    [==============                ] 47% (105/219 pages)
    [=================             ] 57% (126/219 pages)
    [====================          ] 67% (147/219 pages)
    [=======================       ] 76% (168/219 pages)
    [=========================     ] 86% (189/219 pages)
    [============================  ] 95% (210/219 pages)
    [==============================] 100% (219/219 pages)
    Verify successful
    done in 11.246 seconds
    Set boot flash true
    CPU reset.

Et ensuite

En appuyant sur le bouton reset, la LED L de l’arduino se met à clignoter. Le firmware MMDVM est à présent prêt.

La suite consiste à installer le second logiciel MMDVMHost sur un Raspberry Pi. Cela fera l’objet d’un second article détaillé, qui présentera également les réglages à effectuer sur les filtres basse-fréquence de platine MMDVM installée sur l’arduino.

N’hésitez pas à poster vos questions ou remarques en bas d’article.