Red Pitaya Startup – Exécution automatique de programme au démarrage.

Je vous présente un tutoriel pour la carte Red Pitaya pour exécuter un programme C automatiquement au démarrage.

Résumé : Pour pouvoir utiliser une fonction autonome avec une carte Red Pitaya, il est nécessaire de pouvoir lancer le programme automatiquement au démarrage de la carte. Ce lancement est nécessaire pour pouvoir « oublier » votre carte dans votre système ou votre laboratoire. La fonction sera donc en exécution permanente.


Information avant de commencé

Niveaux de difficulté  : étoile jauneétoile jauneétoile-grise étoile grise

Prérequis :

  • Utilisation de la carte Red Pitaya
  • Programmation en C

Les Logiciels ( gratuit) utilisés dans ce tutoriel :

  • WinSCP,
  • Putty,
  • Advanced IP scanner,
  • Notepad++,
  • Firefox .

Préparer de la carte RedPitaya 

Suivre les indications sur site de redpitaya pour préparer votre carte SD.

Connectez-vous à votre Red Pitaya en suivant les indications de ce site  .

Une fois connecté à votre Red Pitaya, il faut connaitre son adresse IP. Pour cela vous pouvez utiliser Advance IP scanner, ou sur l’interface WEB du redpitaya cliqué sur System, puis Network manager.

IP fixe

Pour simplifier l’utilisation et la gestion de la Red Pitaya je vous conseille de le configurer en IP fixe, comme ci-dessous. Pour ma part une fois le Red Pitaya configuré en adresse IP fixe, je lui fixe une étiquette dessus avec l’IP.

Maintenant que vous connaissez son adresse IP, vous pouvez vous connecter avec WinSCP :

Le Nom d’utilisateur et le mot de passe par défaut sont root et root, mais je vous conseille de le changer par la suite. 

connexion Win SCP

Bravo, vous avez maintenant accès aux entrailles (à la carte SD) de la Red Pitaya.

Pour finir l’installation « confirmé », vous pouvez télécharger le dossier ScieTech puis le transférerà la racine de la carte avec WinSCP (vérifier bien que vous êtes à la racine de la carte ).

Création et lancement du programme C

Nous allons pour l’exemple créer un programme C très simple, mais pouvez le réaliser avec votre propre programme, nous repartons de l’exemple « Blink » ( clignotement d’une LED ) :

Nous devons ajouter à notre programme le lancement automatique du programme FPGA ( il est bien sûr possible d’utiliser un autre programme FPGA , ou votre propre programme FPGA).

system("cat /opt/redpitaya/fpga/fpga_0.94.bit > /dev/xdevcfg");

Nous devons aussi nous assurer que le programme soit dans une boucle infinie. Dans le programme blink il y a déjà une boucle de 1000, nous pouvons par exemples ajouter retries++, ce qui en fera une boucle infinie.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#include "redpitaya/rp.h"

int main (int argc, char **argv) {
    int unsigned period = 1000000; // uS

    // lancement du programme FPGA
    system("cat /opt/redpitaya/fpga/fpga_0.94.bit > /dev/xdevcfg"); 
	sleep(2);
	
	
    // Initialization of API
    if (rp_Init() != RP_OK) {
        fprintf(stderr, "Red Pitaya API init failed!\n");
        return EXIT_FAILURE;
    }
	rp_DpinSetState(1, RP_HIGH); // on allume une LED fixe 

    int unsigned retries = 1000;
    while (retries--){
		retries++ ;
        rp_DpinSetState(0, RP_HIGH);
        usleep(period/2);
        rp_DpinSetState(0, RP_LOW);
        usleep(period/2);
    }

    // Releasing resources
	rp_DpinSetState(1, RP_LOW); // on éteint une LED fixe 
    rp_Release();

    return EXIT_SUCCESS;
}



Dans tous mes programmes de lancement automatique, je garde une fonction de LED fixe qui s’allume au démarrage et s’éteint à la fin. Et je garde une fonction de LED clignotante. Ces deux fonctions sont très utiles pour vérifier que la carte est bien démarrée sans avoir à se connecter dessus.

Nous pouvons maintenant tester le programme  Transférer votre programme avec WINSCP dans le dossier ScieTech

Vous pouvez ouvrir directement PuTTY depuis l’interface de WINSCP en faisant CTRL-P ou en cliquant sur Pour lancer un programme positionner vous dans le bon fichier 

cd //ScieTech

Pour compiler le programme startup

make startup

Cela va créer au même endroit un fichier Nom du programme, c’est celui-ci qu’on va maintenant lancer :

LD_LIBRARY_PATH=/opt/redpitaya/lib  ./startup

Si vous voulez dans un premier temps tester votre programme je vous conseille de supprimer la ligne de lancement du FPGA, et de le lancer à la main comme ceci

cat /opt/redpitaya/fpga/fpga_0.94.bit > /dev/xdevcfg 

Quand vous lancer un programme avec une boucle vous pouvez l’arrêter en appuyant sur CTRL+C

Vous pouvez maintenant vérifier que votre programme fonctionne correctement.

Attention, un programme travaillant en continu requiert des tests approfondis, pour s’assurer que l’ensemble des cas d’erreur possible sont pris en compte. Il est recommandé de créer des autotests dans votre programme qui vérifiera périodiquement le fonctionnement. Vous devez aussi prévoir des délais max sur vos fonctions pour empêcher des blocages.

Lancement d’un programme au démarrage du RedPitaya.

Nous allons créer un fichier startup.service dans /etc/systemd/system , pour lancer le script au démarrage de la carte :

[Unit]
Description=My start up script

[Service]
ExecStart=/bin/bash /ScieTech/startup.sh

[Install]
WantedBy=multi-user.target

Le script startup.sh nous permet, comme sur Windows, de lancer n’importe quelle commande shell , mais de manière automatique. Vous pouvez ouvrir le script en question qui se trouve dans le dossier ScieTech

#!/bin/sh -e
gcc -g -std=gnu99 -Wall -Werror -I/opt/redpitaya/include  -L/opt/redpitaya/lib  /ScieTech/startup.c  -lm -lpthread -lrp -o /ScieTech/startup
LD_LIBRARY_PATH=/opt/redpitaya/lib //ScieTech/startup
exit 0

La première commande permet de compiler le programme, mais sans utiliser le Makefile.

La deuxième commande permet de lancer la commande en question.

Si vous voulez tester votre programme Lancement d’un script

bash //ScieTech/startup.sh

Pour active le lancement automatique du programme au démarrage :

systemctl enable startup.service
reboot

Pour désactiver le lancement automatique du programme au démarrage :

systemctl disable myservice.service
reboot

Pour aller plus loin

Maintenant que vous savez lancer un programme au démarrage , vous pouvez créer votre propre application.

Nous verrons dans d’autres tutoriels comment :

  • Programme C d’analyse de signaux pulsée.
  • Créer une page WEB d’interface pour continuer à interagir avec votre programme.
  • écrire son propre programme FPGA connecter au programme C

N’hésitez pas à laisser un commentaire ou à me contacter si vous avez des questions sur ce tutoriel ou si vous voulez que j’aborte un sujet particulier.

Laisser un commentaire