Estágio Mouchaud sobre Bluetooth 4.0 e 6lowpan

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

Page de Corentin Mouchaud

Description du Stage

Etude sur l'implantation du protocole 6lowpan sur une communication Bluetooth 4.0 dans une carte nrf51 de Nordic Semiconductors. Il s'agit de l'Equipement Kit, avec deux carte : la carte pca10000 et pca10001

A gauche : pca10001, à droite : pca10000

Programme de Travail

Anglais

(1) Basic study of the Nordic board including ARM Cortex 0 and Radio Module. (2 weeks)

(2) Basic study of the implementation of Bluetooth 4.0 on the Nordic board (C programming knowledgement is needed). (2 week). Note that the protocols is already implemented by Nordic.

(3) Small development (to be defined) showing the communication of a tablet with the nordic board using B4.0. Samples are provided then we do not expect problems in this phase.(2 weeks)

(4) Study of 6lowpan and the Contiki implementation. (2 weeks)

(5) Viability analyses to port Contiki on the Nordic Board. (2 weeks)


Français

(1) Etude basique de la carte Nordic qui inclue un processeur ARM Cortex M0 et un module radio. (2 semaines)

(2) Etude basique de l'implantation d'un Bluetooth 4.0 sur la carte Nordic (Connaissance de la programmation C requise). (2 semaines). A noter que le protocole est deja implanté par Nordic.

(3) Petit développement (a définir) pour montrer la communication d'une tablette avec la carte Nordic utilisant le Bluetooth 4.0. Les exemples sont fournis alors nous ne nous attendons pas à avoir de problèmes dans cette phase. (2 semaimes)

(4) Etude du protocole 6lowpan et de l'implantation Contiki. (2 semaines)

(5) Analyse de la viabilité de mettre Contiki sur la carte Nordic. (2 semaines)

Semaine 1 - 14/04/2014

Etape (1): Basic study of the Nordic board including ARM Cortex 0 and Radio Module.

Projet pratique


Développer un logiciel pour contrôler a distance deux LEDs dans une carte de l'Equipement Test nrf51 (pca10001). Le programme principal doit s’exécuter dans un PC lié a une première carte nrf51 (pca10000) a travers un portserial/USB. Cette carte doit executer un programme pour envoyer les commandes via RADIO a une seconde carte nrf51 (pca10000).

Diagramme de l'exemple

Réalisation


Le travail a été réalisé sous Windows :

1 - Il a d'abord fallut que je me documente sur les deux cartes nRF51822, de l'Evaluation Kit, misent a ma disposition (pca10000 et pca10001).

2 - En suivant le guide d'utilisation de l'Evaluation Kit j'ai télécharger le logciel KEIL MDK-ARM. Ce logiciel permet de compiler des programmes dans les cartes.

3 - Toujours en suivant la documentation, j'ai du telecharger J-Link Software de Segger pour configurer les cartes ( ATTENTION : la version de J - Link Software doit correspondre a la version de Keil ) .

4 - Ensuite j'ai télécharger, sur le site Nordic Semiconductor, plusieurs exemples de programme pouvant être mis sur les deux cartes.

5 - J'ai ensuite pris le terminal Realterm, me permettant de communiquer avec les programmes.

6 - J'ai d'abord implanter un exemple de programme sur la carte pca10001 en passant par KEIL. Ce programme fait clignoter les deux LEDs l'une après l'autre. J'ai pu voir que la carte fonctionnait correctement.

7 - Cette fois ci j'ai mis dans les deux cartes les deux programmes exemple LEDs_RADIO. Une fois mis il a fallut configurer le terminal pour qu'il puisse communiquer avec la carte pca10000. Le programme dans cette carte demande une valeur : soit 0, soit 1. on rentre la valeur dans le terminal et la carte envoie un paquet a la seconde carte. Celle ci lit le paquet et en fonction de la valeur, allume le LED0 et éteins la LED1, ou inversement.

Semaine 2 - 21/04/2014

Etape (1): Basic study of the Nordic board including ARM Cortex 0 and Radio Module.

Projet pratique


Développer un logiciel pour contrôler a distance deux LEDs dans une carte de l'Equipement Test nrf51 (pca10001). Le programme principal s'exécuteras finalement dans la première carte nrf51 (pca10000) a travers un portserial/USB. Cette carte doit exécuter un programme pour envoyer les commandes via RADIO a une seconde carte nrf51 (pca10001). Par la suite, commencer a étudier CONTIKI et son implantation sur la carte.

Réalisation


J'ai modifier les deux programmes exemples LEDs_RADIO pour pouvoir commander indépendamment les deux LEDs présentent sur la carte pca10001. Dans le premier programme, sur la carte pca10000, j'ai modifier le code pour envoyer différents paquets.

int main(void)
{
  init(); // initialisation
  simple_uart_putstring((const uint8_t *)"\n\rPress '1' pour allumer la LED 0\n\rPress '2' pour eteindre la LED 0\n\rPress '9' pour allumer la LED 2\n\rPress '0' pour eteindre la LED 2\n\r "); 
  // ce qu'affiche le terminal
  while(true)
  {
    uint8_t c = simple_uart_get(); // lecture de la valeur
    if (c != '1' && c != '2' && c != '9' && c != '0') // seules valeurs qui fonctionnent : 1, 2, 9, 0
      continue; 
    simple_uart_put(c); // sauvegarde de la valeur

Au niveau du second programme, j'ai modifier le code pour pouvoir qu'en fonction de la valeur du paquet envoyer par le premier programme, celui réalise différentes actions :

if (NRF_RADIO->CRCSTATUS == 1U) // écrit la valeur reçu
    {
      switch(packet[0])
      {
        case '1': // valeur reçu : 1
          nrf_gpio_pin_set(LED0); // La lED 0 s'allume
          break;
        case '2': // valeur reçu : 2
          nrf_gpio_pin_clear(LED0); // La LED 0 s’éteint
          break;
	case '9': // valeur reçu : 9
          nrf_gpio_pin_set(LED1); // La lED 1 s'allume
          break;
	case '0': // valeur reçu : 0
          nrf_gpio_pin_clear(LED1); // La LED 1 s’éteint
          break;
      }
    }

Finalement il n'est pas nécessaire pour l'instant de passer par un troisième programme sur l'ordinateur. Ceci sera réaliser ultérieurement.

Le premier programme envoie des données, tandis que le second reçoit des données. Pour que les deux programmes puissent recevoir et envoyer, il est nécessaire de créer deux fonctions, "recevoir" et "envoyer", dans chaque programmes. Ceci est en cours de réalisation.

En parallèle j'ai commencer a me documenter sur le CONTIKI ainsi que son implantation sur la carte. Des recherches plus approfondies vont m'être nécessaires concernant sont fonctionnement et son implantation.

Semaine 3 - 28/04/2014

Etape (5): Viability analyses to port Contiki on the Nordic Board.

Projet pratique


Mettre le système d'exploitation Contiki sur les cartes EK nrf51, puis ensuite ajouter et faire fonctionner dans les cartes les deux programme créer dans l’étape précédente.

Réalisation



Il a d'abord fallut que je me documente sur la structure/architecture des systèmes d'exploitation. Je me suis donc intéresser aux noyaux de systèmes d’exploitation, et plus précisément aux noyaux temps réels. Dans un second temps a l’exécution multitâche d'un système d'exploitation.

J'ai ensuite étudier les outils de travail, car le travail sera réalisé sous Linux, qui est un système d'exploitation qui m'est quasiment inconnu. J'ai notamment étudier le GCC (GNU Compiler Collection), qui permet de compiler différents langages de programmation. GCC a été porté sur de nombreux microprocesseur. Celui qui nous intéresse est le GCC-ARM. Le dernier outil que j'ai étudié est le logiciel Make. Ce dernier a pour objectif de construire automatiquement des fichiers, souvent exécutables, ou des bibliothèques à partir d'éléments de base tels que du code source.

Pour finir j'ai étudié les mécanismes interne du système d'exploitation Contiki (Timers, Multi-Threading, etc...)


Semaine 4 - 05/05/2014

Etape (5): Viability analyses to port Contiki on the Nordic Board.

Projet pratique


Mettre le système d'exploitation Contiki sur les cartes EK nrf51, puis ensuite ajouter et faire fonctionner dans les cartes les deux programme créer dans l’étape précédente.

Réalisation


A partir de là, le travail sera réalisé sous linux. Il a donc fallut repartir de zero:

1 - J'ai d'abord du télécharger JLink Software de SEGGER. Pour cela il faut rentrer le numero de serie d'une des deux cartes. Ensuite le software s'installe automatiquement dans /opt/SEGGER/JLink. Une fois installé, Je lance le programme JLinkExe : cd /opt/SEGGER/JLink/

./JLinkExe </syntaxhighlight>

Une fois le programme lancé, on a la possibilité d'utiliser les commandes JLinkExe. Elles nous permettront de configurer la carte pca10000

2 - Ensuite il faut brancher la carte pca10000 sur un port USB. On utilise la comande dmesg dans le terminal. On peut ainsi voir que la carte a été detectée ttyACM0 (la fonction détaille précisemment la carte).

3 - On peut ensuite utiliser la fonction ls /dev qui nous nous permet d'afficher le contenu du repertoire dev qui contient tous les peripheriques matériels. Cela nous permet de voir que le peripherique ttyACM0 a été ajouté.

4 - Par la suite, j'ai installer Cutecom : sudo apt-get install cutecom </syntaxhighlight>

Ce programme est un termial graphique. On le lance avec la commande suivante : sudo cutecom. Une fois Cutecom ouvert, il faut regler les parametres pour communiquer avec la carte :

Device : /dev/ttyACM0

Baud rate : 38400

Data bits : 8

Stop bits : 1

Parity : None

5 - Je telecharge ensuite la chaine de compilation GNU-GCC. Je prend le Linux installation tarball. En revanche il s'agit de programmes en 32 bit, alors que je tourne sur ubuntu 64 bit. Pour pouvoir faire tourner les programmes, j'installe la librairie 32-bit : sudo apt-get install ia32-libs </syntaxhighlight>

6 - Ensuite je dois telecharger sur le site de Nordic Semiconductor : nRF51-SDK-zip. Ce fichier contient des documentations et des exemples de codes a faire tourner sur les cartes nrf51.


A partir de la nous nous servirons des projet mis a dispositions par Earthlord :

1 - Il faut premièrement télécharger de l'exmple de Earthlord.

2 - Il faut ensuite télécharger Eclipse, puis le C/C++ Developers. Une fois fait, il faut installer CDT GNU Cross Development Tools. Cela nous permettras de compiler correctement sur Eclipse.

4 - Maintenant, dans Eclipse, il faut importer le projet exemple (File->Import->General Tab-> Existing projects into workspace). On selectionne le dossier et on termine.

5 - Une fois ceci fait, on remarque deux erreurs. Il faut donc aller dans les propriétés du projet. Il faut premierement aller dans 'Settings' de la section 'C/C++ Build'. A partir de la il faut selectionner 'Use Global Toolchain Path' puis ajouter le Global Path : /home/corentin/Bureau/Work/gcc-arm-none-eabi-4_8-2013q4/bin. Dans un second temps il faut aller dans 'Path and Symbols' de la section 'C/C++ General'. Dans /Languages/GNU C, il faut editer la location du Global Path, comme precedemment : /home/corentin/Bureau/Work/gcc-arm-none-eabi-4_8-2013q4/arm-none-eabi/include.

6 - Il ne reste plus qu'à mettre a jour le Makefile. Il faut mettre le bon dossier pour le GCC_INSTALL_ROOT : /home/corentin/Bureau/Work/gcc-arm-none-eabi-4_8-2013q4.

7 - Le programme peut etre compilé (CTRL+B). Il faut maintenant ouvrir le terminal. Je me place dans le dossier du projet : cd /home/corentin/Bureau/Work/nrf51Demo-master </syntaxhighlight>

Je lance la commande make upload. Le programme se lance dans la carte pca10000. Pour voir ce qui s'ecrit dans la carte, il suffit d'ouvrir un autre terminal et de lancer la commande sudo cutecom. Dans Cutecom il suffit d'ouvrir le device pour voir le fonctionnement du programme.

Dans le terminal, d'autre commandes sont possible :

make all : Compile le projet

make clean : Supprime les fichier crées.

make upload : Télecharge le programme dans la cible

make erase-all : Supprime le programme dans la cible


Maintenant que j'ai reussi a faire tourner un programme sur la carte, je dois mettre Contiki sur la carte :

1 - Je télécharge le code source de EarthLord. Il s'agit du code source de Contiki, a la seule difference, qu'il a rajouter un exemple pour porter Contiki sur la carte pca10000.

2 - Je lance dans un premier temps l'exemple hello-world. Pour cela je vais dans le dossier : cd /home/corentin/Bureau/Work/contiki-master/examples/hello-world </syntaxhighlight> Une fois dans le dossier je lance la commande make. Il y a d'abord eu une erreur. Il manquait une librairie pour lancer curses.h. J'installe donc la librairie 'libncurses5-dev' avec la fonction apt-get install libncurses5-dev qui me permet d'installer cette librairie. Je peux donc de nouveau lancer la commande make. Cela creer le 'hello-world.native'. Pour le lancer j'utilise la commande : ./hello-world.native </syntaxhighlight>

Le programme se lance dans le terminal.

Semaine 5 - 12/05/2014

Etape (?)

Projet pratique


Etudier et réaliser une communication UDP client - serveur sur l'ordinateur, qui se verra plus tard etre implanter sur les cartes

Réalisation


Je me suis d'abord documenter sur ce protocole, car il m'etait inconnu. Le rôle de ce protocole est de permettre la transmission de données de manière très simple entre deux entités, chacune étant définie par une adresse IP et un numéro de port. Contrairement au protocole TCP, il fonctionne sans négociation : il n'existe pas de procédure de connexion préalable à l'envoi des données. Donc UDP ne garantit pas la bonne livraison des datagrammes à destination, ni leur ordre d'arrivée.

Semaine 6 - 19/05/2014

Etape (3): Small development (to be defined) showing the communication of a tablet with the nordic board using B4.0.

Projet pratique


Réalisation


Semaine 7 - 26/05/2014

Etape (3): Small development (to be defined) showing the communication of a tablet with the nordic board using B4.0.

Projet pratique


Réalisation



Semaine 8 - 02/05/2014

Etape (3): Small development (to be defined) showing the communication of a tablet with the nordic board using B4.0.

Projet pratique


Réalisation


References