Changes between Initial Version and Version 1 of SujetTP1


Ignore:
Timestamp:
Jan 28, 2014, 8:57:11 AM (11 years ago)
Author:
jpeeters
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SujetTP1

    v1 v1  
     1= Enoncé de TP1: Outils de développement et GPIO =
     2
     3La carte Raspberry Pi offre de nombreuses possibilités pour développer des
     4applications embarquées. Notamment, elle dispose de ports d'entrées/sorties
     5génériques (GPIO) qui permettent de s'interfacer avec un grand nombre de
     6périphériques plus ou moins exotiques.
     7
     8Dans ce TP il vous est demander de développer une application "user-land"
     9qui fasse clignoter une ou plusieurs LED's selon on motif que vous choisirez
     10et également de récupérer les informations de plusieurs boutons poussoirs.
     11
     12A la fin de ce TP, vous devriez avoir acquis les compétences suivantes:
     13* Compilation croisée via un compilateur déporté
     14* Contrôle distant de système embarqué par liaison réseau (SSH)
     15* Manipulation d'un périphérique GPIO et de ses registres "memory mappés"
     16* Interface numérique/analogique via des ports GPIO
     17* Programmation d'automates de contrôle en C
     18
     19= 1. Prise en mains des outils de développement: Hello World! =
     20
     21La première étape consiste à vous familiariser avec les outils de
     22développement. Pour cela, vous allez développer un petit programme
     23de type "Hello World!" qui affiche une phrase sur la sortie standard
     24grâce à un printf.
     25
     26Pour compiler votre programme, suivez les instructions suivantes.
     27
     28Tout d'abord configurez votre terminal pour utiliser le compilateur croisé:
     29{{{
     30$ source /users/enseig/jpeeters/m1.peri/export_rpi_toolchain.sh
     31}}}
     32
     33Une fois le terminal configuré, vérifiez que le compilateur est accéssible:
     34{{{
     35$ which bcm2708hardfp-gcc
     36}}}
     37Si cette commande ne retourne rien, la configuration n'a pas fonctionnée.
     38Appelez le chargé de TP pour vous aider.
     39
     40Votre suite d'outils (toolchain) contient tous les outils nécessaire pour
     41la compilatio, l'édition des liens et la manipulation de binaires pour la
     42carte Raspberry Pi. Et tous ces outils sont préfixés par la même chaîne de
     43caractéres: "bcm2708hardfp". Il d'agit donc d'un compilateur pour un SoC
     44BCM2708 avec l'option hardfp activée (calcul flottant matériel). Il s'agit
     45bien du SoC de la carte Raspberry Pi.
     46
     47Maintenant, pour compiler un programme C vers un binaire qui puisse
     48s'exécuter sur le carte Raspberry Pi, il vous faut écrire un Makefile pour
     49plus de facilité. Pour cela, suivez la syntaxe de base des Makefile:
     50{{{
     51cible: dépendences
     52    commande
     53}}}
     54Notez bien que l'indentation de la seconde ligne doit OBLIGATOIREMENT être
     55une tabulation et non un série d'espaces.
     56
     57Vous pourrez donc par exemple, écrire la règle de Makefile suivante:
     58{{{
     59helloworld.x: helloworld.c
     60    bcm2708hardfp-gcc -o $@ $< -O2 -static
     61}}}
     62
     63L'option "-static" est importante ici car la librairie C du compilateur croisé
     64n'est pas tout à fait identique à la librairie C sur la carte Raspberry Pi.
     65Ajouter "-static" à la ligne de compilation permet de créer un binaire qui
     66contient en plus les fonction de la librairie C utilisée par votre programme.
     67Ceci permettra à celui-ci de ne pas essayer d'utiliser des fonction de la
     68librairie C installée sur la carte.
     69
     70Essayez toutes les variantes ou combinaison de programme C que vous souhaitez.
     71
     72== 2. Contrôle de GPIO en sortie ==
     73
     74Dans cette exercice, on vous propose de manipuler une pin du GPIO en mode
     75"sortie" pour contrôler le clignotement d'une LED à une fréquence donnée.
     76
     77Avant de commencer à écrire du code, déterminez quelles sont les différentes
     78étapes nécessaires depuis l'initialisation jusqu'à l'envoi des valeurs 0 ou 1
     79sur le GPIO ?
     80
     81Dans un premier temps, on vous ne demande pas d'écrire le code spécifique
     82à la manipulation des registres du contrôleur GPIO. Pour vous aider,
     83vous avez à disposition une petite librairie "libgpio".
     84
     85Pour récupérer cette librairie, exécuter la commande suivante dans un
     86terminal et dans le dossier que vous souhaitez pour contenir votre code pour
     87ce premier TP.
     88{{{
     89cp -r /users/enseig/jpeeters/m1.peri/lab1 .
     90}}}
     91
     92Editez le fichier lab1.c et ajouter le code que vous pensez nécessaire à la
     93réalisation de cet exercice.
     94
     95ATTENTION: ne changez pas les valeur de GPIO_LED0 car vous risqueriez
     96d'endommager la carte Raspberry Pi.
     97
     98Ensuite compilez le grâce au Makefile qui vous est fourni.
     99
     100Pour exécuter votre programme sur une carte Raspberry Pi, vous devez vous
     101connecter en SSH sur la machine peri-gw:
     102{{{
     103$ ssh peri-gw
     104}}}
     105
     106Une fois connecté, allez dans votre dossier qui contient votre programme
     107compilé pour la carte. Ensuite téléchargez votre programme sur une des cartes
     108disponibles comme indiqué par le chargé de TP.
     109
     110Qu'observez-vous ? Essayez de changer la fréquence de clignotement.
     111
     112== 3. Contrôle de plusieurs GPIO en mode "sortie" ==
     113
     114Refaites le même exercice que précedemment mais cette fois-ci configurer
     115plusieurs GPIO en sorties.
     116
     117En plus du GPIO 4 de l'exercice précédent, rajoutez 3 définitions pour les
     118LED1, LED2 et LED3 qui sont respectivement connectées aux GPIO 17, 22 et 23.
     119
     120Avant d'exécuter votre programme, validez votre code avec le chargé de TP !
     121
     122== 4. Lecture de la valeur d'une entrée GPIO ==
     123
     124Maintenant que vous maîtrisez le contrôle d'un GPIO en sortie, passons au
     125mode "entrée".
     126
     127Toujours à l'aide de la librairie libgpio fournie avec ce TP, écrivez un
     128programme qui configure la GPIO <a définir> en entrée. Et affichez la
     129valeur de ces GPIO dans une boucle infinie (boucle d'échantillonnage).
     130
     131Une fois réalisé, compilé votre programme comme précédemment à l'aide du
     132Makefile fourni. Et validez votre code avec le chargé de TP !
     133
     134Ensuite, copiez votre programme sur la carte comme indiqué dans l'exercice
     135précédent.
     136
     137Les cartes Raspberry Pi sont équipées d'un petit circuit analogique dans
     138lequel des boutons poussoir sont connectés aux certains GPIO. Ces GPIO sont
     139connecté avec une résistance de Pull-Up, ce qui signifie que lorsque que vous
     140n'appuyez pas, la valeur du GPIO vaut 1 et lorsque vous appuyez, le courant
     141passe par à la masse et la valeur du GPIO passe à 1.
     142
     143Qu'observez-vous ?
     144
     145Quelle est la fréquence d'échantillonnage (approximative) en sachant que le
     146processeur de la carte fonctionne à une fréquence de 700MHz ?
     147
     148A supposer que vous êtes capable d'appuyez sur le bouton à une fréquence de
     14910Hz (i.e. 10 fois par seconde) et sachant que le théorème de Shannon dit
     150qu'il faut au moins échantillonner au double de la fréquence du signal
     151d'entrée, quelle est la plus petit fréquence d'échantillonnage possible ?
     152
     153Pour plus de fiabilité, on utilisera une fréquence d'échantillonnage de 100Hz.
     154Comment pouvez vous écrire un programme qui échantillonne à cette fréquence ?
     155
     156== 5. Manipulation de registres bas-niveau ==
     157
     158Pour mieux comprendre les implications à bas niveau de l'utilisation d'un
     159contrôleur de GPIO, on vous demande de réécrire les fonctions gpio_setup,
     160gpio_config, gpio_value et gpio_update.
     161
     162Vous réaliserez cela étape par étape. Aidez-vous des fichiers objets
     163précompilé dans le répertoire lab1.
     164
     165Par exemple, si vous souhaitez écrire votre propre gpio_setup, créez un
     166fichier gpio_setup.c dans lequel vous écrirez votre code. Pour recompiler
     167la librairie libgpio, il vous suffit de réutiliser le Makefile fourni.
     168
     169ATTENTION: pour fonctionner avec le reste de la librairie libgpio, il vous
     170faut déclarer dans gpio_setup.c une variable globale gpio_base_p de type
     171uint32_t volatile *. Cette variable qui est un pointer vers un entier
     172non-signé de 32 bits doit contenir l'adresse de début de la région de mémoire
     173virtuelle associée après un appel à la fonction mmap.
     174
     175== 6. Amusez-vous ! ==
     176
     177Maintenant que vous maîtrisez tous les aspects liés à la configuration et
     178à la programmtion des GPIO sur Raspberry Pi, laisser aller votre imagination
     179et proposer d'autres programmes à exécuter sur la carte Raspberry Pi qui
     180vous est fournie.