<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>https://wiki-ima.plil.fr/mediawiki//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Amachere</id>
		<title>Wiki d'activités IMA - Contributions de l’utilisateur [fr]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki-ima.plil.fr/mediawiki//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Amachere"/>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php/Sp%C3%A9cial:Contributions/Amachere"/>
		<updated>2026-05-13T18:53:55Z</updated>
		<subtitle>Contributions de l’utilisateur</subtitle>
		<generator>MediaWiki 1.29.2</generator>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47006</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47006"/>
				<updated>2018-02-05T14:21:55Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Utilisation d'ansible pour le déploiement automatique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d'un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L'objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d'un système linux (configuration réseau, packages, et dossiers importants) afin de l'utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l'état n-1 voire à l'état initial.&lt;br /&gt;
&lt;br /&gt;
==Réinstallation rapide==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d'un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l'opposé du premier, supprimant la configuration actuelle d'un nouveau système linux pour y coller celle que l'on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L'option -a permet de copier les liens symboliques ainsi que l'arborescence tels qu'ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d'upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
==Système de fichiers incrémental (overlay fs)==&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d'une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l'aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L'adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L'interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ 'mac=00:16:3E:5C:6B:A2, bridge=INSECURE' ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;br /&gt;
==Création d'une partition LVM==&lt;br /&gt;
*On veut placer les /var et /home de la machine virtuelle sur un disque partitionné de cordouan.&lt;br /&gt;
*On créer d'abord deux partitions de 10Go sur cordouan :&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_home&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_var&lt;br /&gt;
*Il faut ensuite modifier le fichier de configuration de la machine virtuelle (/etc/xen/ima-tomate) pour ajouter les disques :&lt;br /&gt;
 disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/ima5-tomate/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/ima5-tomate/swap.img,xvda1,w',&lt;br /&gt;
                  'phy:/dev/virtual/ima5-tomate_var,xvda3,w',&lt;br /&gt;
                  'phy:/dev/virtual/ima5-tomate_home,xvda4,w'&lt;br /&gt;
               ]&lt;br /&gt;
*Puis on formate ces deux nouveau disques :&lt;br /&gt;
 mkfs -t ext4 /dev/xvda3&lt;br /&gt;
 mkfs -t ext4 /dev/xvda4&lt;br /&gt;
*Enfin on monte les partitions dans la VM :&lt;br /&gt;
**On ajoute la ligne suivante dans le fichier /etc/fstab de la VM afin que le /home soit monté au lancement :&lt;br /&gt;
 /dev/xvda4 /home ext4 defaults 0 2 &lt;br /&gt;
**Le /var doit d'abord être monté sur un fichier temporaire :&lt;br /&gt;
 mount /dev/xvda3 /mnt&lt;br /&gt;
Puis on déplace le /var actuel dans ce nouveau fichier :&lt;br /&gt;
 mv /var/* /mnt&lt;br /&gt;
Enfin on ajoute la ligne suivante dans le fichier /etc/fstab de la VM :&lt;br /&gt;
 /dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
==Création du serveur SSH==&lt;br /&gt;
*L’installation du serveur ssh se fait tout simplement grâce à :&lt;br /&gt;
 apt-get install ssh&lt;br /&gt;
*Il suffit ensuite de modifier le fichier /etc/ssh/sshd_config pour pouvoir accéder à la machine en root :&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
Cette ligne est déjà écrite dans le fichier, il faut juste changer l'option par &amp;quot;yes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Configuration du serveur DNS==&lt;br /&gt;
*Il faut d'abord installer bind pour la configuration du DNS ainsi qu'un serveur apache2 :&lt;br /&gt;
 apt-get install bind9 apache2&lt;br /&gt;
*Nous avons aussi réserver le nom de domaine tomatecomsique.space sur gandi.net.&lt;br /&gt;
*Nous créons le dossier du site web :&lt;br /&gt;
 mkdir /var/www/www.tomatecosmique.space&lt;br /&gt;
*Enfin nous configurons le bind :&lt;br /&gt;
**On commence par créer le fichier de zone db.tomatecosmique.space dans /etc/bind/, son contenu est :&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL    604800&lt;br /&gt;
 @       IN      SOA     dns1.tomatecosmique.space. root.tomatecomsique.space. (&lt;br /&gt;
                               2         ; Serial&lt;br /&gt;
                          604800         ; Refresh&lt;br /&gt;
                           86400         ; Retry&lt;br /&gt;
                         2419200         ; Expire&lt;br /&gt;
                          604800         ; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 @       IN      NS      dns1.tomatecosmique.space.&lt;br /&gt;
 dns1    IN      A       193.48.57.184&lt;br /&gt;
**Ensuite on configure /etc/bind/named.conf.local :&lt;br /&gt;
 zone &amp;quot;tomatecosmique.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.tomatecosmique.space&amp;quot;;&lt;br /&gt;
         allow-transfer { 217.70.177.40; };&lt;br /&gt;
 };&lt;br /&gt;
**Et /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
         directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
         dnssec-validation auto;&lt;br /&gt;
         auth-nxdomain no;&lt;br /&gt;
         listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
**Enfin on relance le service bind :&lt;br /&gt;
 service bind9 restart&lt;br /&gt;
*Il y a aussi une configuration à effectuer sur le site gandi :&lt;br /&gt;
**Dans l'onglet &amp;quot;Gérer les 'glues records'&amp;quot; :&lt;br /&gt;
 Nom du serveur : dns1.tomatecosmique.space&lt;br /&gt;
 IP : 193.48.57.184&lt;br /&gt;
**Dans l'onglet &amp;quot;Modifier les serveurs DNS&amp;quot; :&lt;br /&gt;
 DNS1 : dns1.tomatecosmique.space&lt;br /&gt;
 DNS2 : ns6.gandi.net&lt;br /&gt;
&lt;br /&gt;
==Sécurisation du site via certificat SSL==&lt;br /&gt;
*Obtention du certificat :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha1 -keyout tomatecosmique.space.key -out tomatecosmique.space.csr &lt;br /&gt;
*On copie les clés dans les dossiers appropriés :&lt;br /&gt;
 cp certificat.crt /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
 cp serveur.key /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
 cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
Le fichier GandiStandardSSLCA.pem est généré une fois le certificat validé par gandi&lt;br /&gt;
*On peut ensuite faire un hashage pour prendre en compte le certificat :&lt;br /&gt;
 c_rehash /etc/ssl/certs&lt;br /&gt;
*Ensuite on configure apache2 :&lt;br /&gt;
**On crée d'abord le fichier 000-tomatecosmique.space-ssl.conf dans /etc/apache2/sites-available/ :&lt;br /&gt;
 #NameVirtualHost *:443&lt;br /&gt;
   &amp;lt;VirtualHost 193.48.57.184:443&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
         ServerName www.tomatecosmique.space&lt;br /&gt;
         ServerAlias tomatecosmique.space&lt;br /&gt;
         DocumentRoot /var/www/www.tomatecosmique.space/&lt;br /&gt;
         CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
 &lt;br /&gt;
         SSLEngine on&lt;br /&gt;
         SSLCerticateFile /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
         SSLCerticateKeyFile /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
         SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
         SSLVerifyClient None&lt;br /&gt;
   &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
**On modifie ensuite /etc/apache2/ports.conf :&lt;br /&gt;
 Listen 80 443&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule mod_gnutls.c&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
**Enfin on exécute les commandes suivantes pour finir la configuration d'apache :&lt;br /&gt;
 a2enmod ssl &lt;br /&gt;
 a2ensite 000-tomatecosmique.space-ssl.conf&lt;br /&gt;
 service apache2 reload&lt;br /&gt;
&lt;br /&gt;
==Sécurisation avec DNSSEC==&lt;br /&gt;
*On commence par modifier /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
        directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
        dnssec-enable yes;&lt;br /&gt;
        dnssec-validation yes;&lt;br /&gt;
        dnssec-lookaside auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
*On génère ensuite les clés KSK et ZSK dans /etc/bind/ :&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
*On rajoute les lignes suivantes à la fin du fichier /etc/bind/db.tomatecosmique.space :&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+22620.key&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+23885.key&lt;br /&gt;
*On peut enfin signer la zone :&lt;br /&gt;
 dnssec-signzone -o tomatecosmique.space -k Ktomatecosmique.space.+007+22620 db.tomatecosmique.space Ktomatecosmique.space.+007+23885&lt;br /&gt;
&lt;br /&gt;
==RAID5 et cryptage des données==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
&lt;br /&gt;
Depuis cordouan, nous créons 3 disque disques virtuels avec ''lvcreate'' :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid1&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid2&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous rajoutons ces disques à la configuration de notre machine virtuelle. Toujours depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/ima5-tomate_raid1,xvdd1, w',&lt;br /&gt;
'phy:/dev/virtual/ima5-tomate_raid2,xvdd2 w',&lt;br /&gt;
'phy:/dev/virtual/ima5-tomate_raid3,xvdd3 w',&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depuis notre machine virtuelle cette fois, nous installons mdadm :&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install mdadm &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous créons le disque RAID5 md0 :&lt;br /&gt;
&amp;lt;pre&amp;gt; mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvdd2 /dev/xvdd3 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous installons le système de fichier ext4 dessus :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkfs -t ext4 /dev/md0 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons le tout et montons le disque :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --detail --scan &amp;gt;&amp;gt; /etc/mdadm/mdadm.conf&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous effectuons un petit test afin de noter la reconstruction de notre disque. &lt;br /&gt;
Nous supprimons une des partitions et observons qu'il est bien manquant dans la configuration :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --set-faulty /dev/md0 /dev/xvdd2&lt;br /&gt;
mdadm --remove /dev/md0 /dev/xvdd2&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdd3[2] xvdd2[1] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous montons le disque à nouveau et pouvons noter la reconstruction du disque :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Papaye:/mnt# ls&lt;br /&gt;
lost+found &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous remettons la partition :&lt;br /&gt;
mdadm --add /dev/md0 /dev/xvdd2&lt;br /&gt;
&lt;br /&gt;
Et on observe la reconstruction grâce à cat /proc/mdstat.&lt;br /&gt;
&lt;br /&gt;
=== Cryptage des données ===&lt;br /&gt;
Dans cette partie, nous allons voir comment crypter des données sur un disque virtuel.&lt;br /&gt;
De la même manière que pour la partie précédente, nous créons un disque virtuel via la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_cryptage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nous rajoutons ce disque à la configuration de notre machine virtuelle. Depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/ima5-tomate_cryptage,xvdd4, w',&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous configurons le disque en type Luks :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksFormat /dev/xvdd4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
La phrase secrète est : glopglop.&lt;br /&gt;
&lt;br /&gt;
Nous pouvons vérifier les informations via cette commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 blkid | grep crypto&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous obtenons les informations suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /dev/xvdd4: UUID=&amp;quot;50b21f40-ca69-4c42-aa68-83b8e9b96922&amp;quot; TYPE=&amp;quot;crypto_LUKS&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous ouvrons et ajoutons un mapping avec :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksOpen /dev/xvdd4 crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, nous saisissons la phrase secrète.&lt;br /&gt;
&lt;br /&gt;
Nous formatons le mapping en ext3:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs.ext3 /dev/mapper/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous montons notre partition.&lt;br /&gt;
Montage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /mnt/crypthome &amp;amp;&amp;amp; mount /dev/mapper/crypthome /mnt/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Démontage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
umount /mnt/crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous encryptons à nouveau la partition avec la commande suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksClose crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Soutenance=&lt;br /&gt;
==Utilisation d'ansible pour le déploiement automatique==&lt;br /&gt;
*Il faut commencer par installer le package ansible et ses dépendances (python simplejson). Les dépendances doivent aussi être installées sur la machine esclave.&lt;br /&gt;
*Il faut ensuite configurer la connexion en ssh sur la machine esclave :&lt;br /&gt;
 ssh-copy-id root@193.48.57.182&lt;br /&gt;
*Le fichier /etc/ansible/hosts contient les hosts à contrôller par ansible.&lt;br /&gt;
*La connection peut être testée avec :&lt;br /&gt;
 ansible all -m ping&lt;br /&gt;
*On créé ensuite une arborescence de fichier pour définir les tâches à effectuer :&lt;br /&gt;
 -Ansible&lt;br /&gt;
     _playbook.yml&lt;br /&gt;
     -roles&lt;br /&gt;
          -role1&lt;br /&gt;
               -tasks&lt;br /&gt;
                    _main.yml&lt;br /&gt;
                    ...&lt;br /&gt;
               -handlers&lt;br /&gt;
                    _main.yml&lt;br /&gt;
               -var&lt;br /&gt;
               ...                &lt;br /&gt;
          -role2&lt;br /&gt;
          ...&lt;br /&gt;
*Exemple avec installation et configuration d'apache2 sur une machine virtuelle :&lt;br /&gt;
**playbook.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - hosts: all&lt;br /&gt;
   roles:  &lt;br /&gt;
     - apache2&lt;br /&gt;
&amp;quot;hosts:&amp;quot; permet de préciser les machines sur lesquelles effecteur les actions qui suivent. &amp;quot;roles:&amp;quot; est simplement le listes des rôles à exécuter.&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/tasks/main.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - name: &amp;quot;Install apache2&amp;quot;&lt;br /&gt;
   apt: name=apache2&lt;br /&gt;
 - name: &amp;quot;Service&amp;quot;&lt;br /&gt;
   service: name=apache2 enabled=yes state=started&lt;br /&gt;
 - name: &amp;quot;Config apache_1&amp;quot;&lt;br /&gt;
   copy: src=../var/virtualhost.conf dest=/etc/apache2/sites-available/virtualhost.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_2&amp;quot;&lt;br /&gt;
   copy: src=../var/ports.conf dest=/etc/apache2/ports.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_3&amp;quot;&lt;br /&gt;
   copy: src=../var/apache2.conf dest=/etc/apache2/apache2.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_4&amp;quot;&lt;br /&gt;
   copy: src=../var/index.html dest=/var/www/html/index.html&lt;br /&gt;
 - name: &amp;quot;Config apache_5&amp;quot;&lt;br /&gt;
   shell: a2ensite virtualhost.conf&lt;br /&gt;
   notify: &amp;quot;Restart apache2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/var contient les 4 fichiers utilisés par 'copy'.&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/handlers/main.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - name: &amp;quot;Restart apache2&amp;quot;&lt;br /&gt;
   service: name=apache2 state=restarted&lt;br /&gt;
 - name: &amp;quot;Enable virtualhost&amp;quot;&lt;br /&gt;
   shell: a2ensite virtualhost.conf&lt;br /&gt;
Les handleurs définis ici sont utilisés dans /roles/apaches2/tasks/main.yml avec 'notify'&lt;br /&gt;
&lt;br /&gt;
*On peut tester la syntaxe avec :&lt;br /&gt;
 ansible-playbook playbook.yml --syntax-check&lt;br /&gt;
Et exécuter le playbook avec :&lt;br /&gt;
 ansible-playbook playbook.yml&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47005</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47005"/>
				<updated>2018-02-05T14:21:24Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Soutenance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d'un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L'objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d'un système linux (configuration réseau, packages, et dossiers importants) afin de l'utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l'état n-1 voire à l'état initial.&lt;br /&gt;
&lt;br /&gt;
==Réinstallation rapide==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d'un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l'opposé du premier, supprimant la configuration actuelle d'un nouveau système linux pour y coller celle que l'on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L'option -a permet de copier les liens symboliques ainsi que l'arborescence tels qu'ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d'upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
==Système de fichiers incrémental (overlay fs)==&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d'une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l'aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L'adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L'interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ 'mac=00:16:3E:5C:6B:A2, bridge=INSECURE' ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;br /&gt;
==Création d'une partition LVM==&lt;br /&gt;
*On veut placer les /var et /home de la machine virtuelle sur un disque partitionné de cordouan.&lt;br /&gt;
*On créer d'abord deux partitions de 10Go sur cordouan :&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_home&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_var&lt;br /&gt;
*Il faut ensuite modifier le fichier de configuration de la machine virtuelle (/etc/xen/ima-tomate) pour ajouter les disques :&lt;br /&gt;
 disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/ima5-tomate/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/ima5-tomate/swap.img,xvda1,w',&lt;br /&gt;
                  'phy:/dev/virtual/ima5-tomate_var,xvda3,w',&lt;br /&gt;
                  'phy:/dev/virtual/ima5-tomate_home,xvda4,w'&lt;br /&gt;
               ]&lt;br /&gt;
*Puis on formate ces deux nouveau disques :&lt;br /&gt;
 mkfs -t ext4 /dev/xvda3&lt;br /&gt;
 mkfs -t ext4 /dev/xvda4&lt;br /&gt;
*Enfin on monte les partitions dans la VM :&lt;br /&gt;
**On ajoute la ligne suivante dans le fichier /etc/fstab de la VM afin que le /home soit monté au lancement :&lt;br /&gt;
 /dev/xvda4 /home ext4 defaults 0 2 &lt;br /&gt;
**Le /var doit d'abord être monté sur un fichier temporaire :&lt;br /&gt;
 mount /dev/xvda3 /mnt&lt;br /&gt;
Puis on déplace le /var actuel dans ce nouveau fichier :&lt;br /&gt;
 mv /var/* /mnt&lt;br /&gt;
Enfin on ajoute la ligne suivante dans le fichier /etc/fstab de la VM :&lt;br /&gt;
 /dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
==Création du serveur SSH==&lt;br /&gt;
*L’installation du serveur ssh se fait tout simplement grâce à :&lt;br /&gt;
 apt-get install ssh&lt;br /&gt;
*Il suffit ensuite de modifier le fichier /etc/ssh/sshd_config pour pouvoir accéder à la machine en root :&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
Cette ligne est déjà écrite dans le fichier, il faut juste changer l'option par &amp;quot;yes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Configuration du serveur DNS==&lt;br /&gt;
*Il faut d'abord installer bind pour la configuration du DNS ainsi qu'un serveur apache2 :&lt;br /&gt;
 apt-get install bind9 apache2&lt;br /&gt;
*Nous avons aussi réserver le nom de domaine tomatecomsique.space sur gandi.net.&lt;br /&gt;
*Nous créons le dossier du site web :&lt;br /&gt;
 mkdir /var/www/www.tomatecosmique.space&lt;br /&gt;
*Enfin nous configurons le bind :&lt;br /&gt;
**On commence par créer le fichier de zone db.tomatecosmique.space dans /etc/bind/, son contenu est :&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL    604800&lt;br /&gt;
 @       IN      SOA     dns1.tomatecosmique.space. root.tomatecomsique.space. (&lt;br /&gt;
                               2         ; Serial&lt;br /&gt;
                          604800         ; Refresh&lt;br /&gt;
                           86400         ; Retry&lt;br /&gt;
                         2419200         ; Expire&lt;br /&gt;
                          604800         ; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 @       IN      NS      dns1.tomatecosmique.space.&lt;br /&gt;
 dns1    IN      A       193.48.57.184&lt;br /&gt;
**Ensuite on configure /etc/bind/named.conf.local :&lt;br /&gt;
 zone &amp;quot;tomatecosmique.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.tomatecosmique.space&amp;quot;;&lt;br /&gt;
         allow-transfer { 217.70.177.40; };&lt;br /&gt;
 };&lt;br /&gt;
**Et /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
         directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
         dnssec-validation auto;&lt;br /&gt;
         auth-nxdomain no;&lt;br /&gt;
         listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
**Enfin on relance le service bind :&lt;br /&gt;
 service bind9 restart&lt;br /&gt;
*Il y a aussi une configuration à effectuer sur le site gandi :&lt;br /&gt;
**Dans l'onglet &amp;quot;Gérer les 'glues records'&amp;quot; :&lt;br /&gt;
 Nom du serveur : dns1.tomatecosmique.space&lt;br /&gt;
 IP : 193.48.57.184&lt;br /&gt;
**Dans l'onglet &amp;quot;Modifier les serveurs DNS&amp;quot; :&lt;br /&gt;
 DNS1 : dns1.tomatecosmique.space&lt;br /&gt;
 DNS2 : ns6.gandi.net&lt;br /&gt;
&lt;br /&gt;
==Sécurisation du site via certificat SSL==&lt;br /&gt;
*Obtention du certificat :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha1 -keyout tomatecosmique.space.key -out tomatecosmique.space.csr &lt;br /&gt;
*On copie les clés dans les dossiers appropriés :&lt;br /&gt;
 cp certificat.crt /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
 cp serveur.key /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
 cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
Le fichier GandiStandardSSLCA.pem est généré une fois le certificat validé par gandi&lt;br /&gt;
*On peut ensuite faire un hashage pour prendre en compte le certificat :&lt;br /&gt;
 c_rehash /etc/ssl/certs&lt;br /&gt;
*Ensuite on configure apache2 :&lt;br /&gt;
**On crée d'abord le fichier 000-tomatecosmique.space-ssl.conf dans /etc/apache2/sites-available/ :&lt;br /&gt;
 #NameVirtualHost *:443&lt;br /&gt;
   &amp;lt;VirtualHost 193.48.57.184:443&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
         ServerName www.tomatecosmique.space&lt;br /&gt;
         ServerAlias tomatecosmique.space&lt;br /&gt;
         DocumentRoot /var/www/www.tomatecosmique.space/&lt;br /&gt;
         CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
 &lt;br /&gt;
         SSLEngine on&lt;br /&gt;
         SSLCerticateFile /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
         SSLCerticateKeyFile /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
         SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
         SSLVerifyClient None&lt;br /&gt;
   &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
**On modifie ensuite /etc/apache2/ports.conf :&lt;br /&gt;
 Listen 80 443&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule mod_gnutls.c&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
**Enfin on exécute les commandes suivantes pour finir la configuration d'apache :&lt;br /&gt;
 a2enmod ssl &lt;br /&gt;
 a2ensite 000-tomatecosmique.space-ssl.conf&lt;br /&gt;
 service apache2 reload&lt;br /&gt;
&lt;br /&gt;
==Sécurisation avec DNSSEC==&lt;br /&gt;
*On commence par modifier /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
        directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
        dnssec-enable yes;&lt;br /&gt;
        dnssec-validation yes;&lt;br /&gt;
        dnssec-lookaside auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
*On génère ensuite les clés KSK et ZSK dans /etc/bind/ :&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
*On rajoute les lignes suivantes à la fin du fichier /etc/bind/db.tomatecosmique.space :&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+22620.key&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+23885.key&lt;br /&gt;
*On peut enfin signer la zone :&lt;br /&gt;
 dnssec-signzone -o tomatecosmique.space -k Ktomatecosmique.space.+007+22620 db.tomatecosmique.space Ktomatecosmique.space.+007+23885&lt;br /&gt;
&lt;br /&gt;
==RAID5 et cryptage des données==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
&lt;br /&gt;
Depuis cordouan, nous créons 3 disque disques virtuels avec ''lvcreate'' :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid1&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid2&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous rajoutons ces disques à la configuration de notre machine virtuelle. Toujours depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/ima5-tomate_raid1,xvdd1, w',&lt;br /&gt;
'phy:/dev/virtual/ima5-tomate_raid2,xvdd2 w',&lt;br /&gt;
'phy:/dev/virtual/ima5-tomate_raid3,xvdd3 w',&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depuis notre machine virtuelle cette fois, nous installons mdadm :&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install mdadm &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous créons le disque RAID5 md0 :&lt;br /&gt;
&amp;lt;pre&amp;gt; mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvdd2 /dev/xvdd3 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous installons le système de fichier ext4 dessus :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkfs -t ext4 /dev/md0 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons le tout et montons le disque :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --detail --scan &amp;gt;&amp;gt; /etc/mdadm/mdadm.conf&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous effectuons un petit test afin de noter la reconstruction de notre disque. &lt;br /&gt;
Nous supprimons une des partitions et observons qu'il est bien manquant dans la configuration :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --set-faulty /dev/md0 /dev/xvdd2&lt;br /&gt;
mdadm --remove /dev/md0 /dev/xvdd2&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdd3[2] xvdd2[1] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous montons le disque à nouveau et pouvons noter la reconstruction du disque :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Papaye:/mnt# ls&lt;br /&gt;
lost+found &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous remettons la partition :&lt;br /&gt;
mdadm --add /dev/md0 /dev/xvdd2&lt;br /&gt;
&lt;br /&gt;
Et on observe la reconstruction grâce à cat /proc/mdstat.&lt;br /&gt;
&lt;br /&gt;
=== Cryptage des données ===&lt;br /&gt;
Dans cette partie, nous allons voir comment crypter des données sur un disque virtuel.&lt;br /&gt;
De la même manière que pour la partie précédente, nous créons un disque virtuel via la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_cryptage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nous rajoutons ce disque à la configuration de notre machine virtuelle. Depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/ima5-tomate_cryptage,xvdd4, w',&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous configurons le disque en type Luks :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksFormat /dev/xvdd4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
La phrase secrète est : glopglop.&lt;br /&gt;
&lt;br /&gt;
Nous pouvons vérifier les informations via cette commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 blkid | grep crypto&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous obtenons les informations suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /dev/xvdd4: UUID=&amp;quot;50b21f40-ca69-4c42-aa68-83b8e9b96922&amp;quot; TYPE=&amp;quot;crypto_LUKS&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous ouvrons et ajoutons un mapping avec :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksOpen /dev/xvdd4 crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, nous saisissons la phrase secrète.&lt;br /&gt;
&lt;br /&gt;
Nous formatons le mapping en ext3:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs.ext3 /dev/mapper/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous montons notre partition.&lt;br /&gt;
Montage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /mnt/crypthome &amp;amp;&amp;amp; mount /dev/mapper/crypthome /mnt/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Démontage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
umount /mnt/crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous encryptons à nouveau la partition avec la commande suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksClose crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Soutenance=&lt;br /&gt;
==Utilisation d'ansible pour le déploiement automatique==&lt;br /&gt;
*Il faut commencer par installer le package ansible et ses dépendances (python simplejson). Les dépendances doivent aussi être installées sur la machine esclave.&lt;br /&gt;
*Il faut ensuite configurer la connexion en ssh sur la machine esclave :&lt;br /&gt;
 ssh-copy-id root@193.48.57.182&lt;br /&gt;
*Le fichier /etc/ansible/hosts contient les hosts à contrôller par ansible.&lt;br /&gt;
*La connection peut être testée avec :&lt;br /&gt;
 ansible all -m ping&lt;br /&gt;
*On créé ensuite une arborescence de fichier pour définir les tâches à effectuer :&lt;br /&gt;
 -Ansible&lt;br /&gt;
     _playbook.yml&lt;br /&gt;
     -roles&lt;br /&gt;
          -role1&lt;br /&gt;
               -tasks&lt;br /&gt;
                    _main.yml&lt;br /&gt;
                    ...&lt;br /&gt;
               -handlers&lt;br /&gt;
                    _main.yml&lt;br /&gt;
               -var&lt;br /&gt;
               ...                &lt;br /&gt;
          -role2&lt;br /&gt;
          ...&lt;br /&gt;
*Exemple avec installation et configuration d'apache2 sur une machine virtuelle :&lt;br /&gt;
 **playbook.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - hosts: all&lt;br /&gt;
   roles:  &lt;br /&gt;
     - apache2&lt;br /&gt;
&amp;quot;hosts:&amp;quot; permet de préciser les machines sur lesquelles effecteur les actions qui suivent. &amp;quot;roles:&amp;quot; est simplement le listes des rôles à exécuter.&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/tasks/main.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - name: &amp;quot;Install apache2&amp;quot;&lt;br /&gt;
   apt: name=apache2&lt;br /&gt;
 - name: &amp;quot;Service&amp;quot;&lt;br /&gt;
   service: name=apache2 enabled=yes state=started&lt;br /&gt;
 - name: &amp;quot;Config apache_1&amp;quot;&lt;br /&gt;
   copy: src=../var/virtualhost.conf dest=/etc/apache2/sites-available/virtualhost.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_2&amp;quot;&lt;br /&gt;
   copy: src=../var/ports.conf dest=/etc/apache2/ports.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_3&amp;quot;&lt;br /&gt;
   copy: src=../var/apache2.conf dest=/etc/apache2/apache2.conf&lt;br /&gt;
 - name: &amp;quot;Config apache_4&amp;quot;&lt;br /&gt;
   copy: src=../var/index.html dest=/var/www/html/index.html&lt;br /&gt;
 - name: &amp;quot;Config apache_5&amp;quot;&lt;br /&gt;
   shell: a2ensite virtualhost.conf&lt;br /&gt;
   notify: &amp;quot;Restart apache2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/var contient les 4 fichiers utilisés par 'copy'.&lt;br /&gt;
&lt;br /&gt;
**roles/apache2/handlers/main.yml :&lt;br /&gt;
 ---&lt;br /&gt;
 - name: &amp;quot;Restart apache2&amp;quot;&lt;br /&gt;
   service: name=apache2 state=restarted&lt;br /&gt;
 - name: &amp;quot;Enable virtualhost&amp;quot;&lt;br /&gt;
   shell: a2ensite virtualhost.conf&lt;br /&gt;
Les handleurs définis ici sont utilisés dans /roles/apaches2/tasks/main.yml avec 'notify'&lt;br /&gt;
&lt;br /&gt;
*On peut tester la syntaxe avec :&lt;br /&gt;
 ansible-playbook playbook.yml --syntax-check&lt;br /&gt;
Et exécuter le playbook avec :&lt;br /&gt;
 ansible-playbook playbook.yml&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47004</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=47004"/>
				<updated>2018-02-05T14:01:04Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d'un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L'objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d'un système linux (configuration réseau, packages, et dossiers importants) afin de l'utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l'état n-1 voire à l'état initial.&lt;br /&gt;
&lt;br /&gt;
==Réinstallation rapide==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d'un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l'opposé du premier, supprimant la configuration actuelle d'un nouveau système linux pour y coller celle que l'on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L'option -a permet de copier les liens symboliques ainsi que l'arborescence tels qu'ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d'upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
==Système de fichiers incrémental (overlay fs)==&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d'une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l'aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L'adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L'interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ 'mac=00:16:3E:5C:6B:A2, bridge=INSECURE' ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;br /&gt;
==Création d'une partition LVM==&lt;br /&gt;
*On veut placer les /var et /home de la machine virtuelle sur un disque partitionné de cordouan.&lt;br /&gt;
*On créer d'abord deux partitions de 10Go sur cordouan :&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_home&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_var&lt;br /&gt;
*Il faut ensuite modifier le fichier de configuration de la machine virtuelle (/etc/xen/ima-tomate) pour ajouter les disques :&lt;br /&gt;
 disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/ima5-tomate/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/ima5-tomate/swap.img,xvda1,w',&lt;br /&gt;
                  'phy:/dev/virtual/ima5-tomate_var,xvda3,w',&lt;br /&gt;
                  'phy:/dev/virtual/ima5-tomate_home,xvda4,w'&lt;br /&gt;
               ]&lt;br /&gt;
*Puis on formate ces deux nouveau disques :&lt;br /&gt;
 mkfs -t ext4 /dev/xvda3&lt;br /&gt;
 mkfs -t ext4 /dev/xvda4&lt;br /&gt;
*Enfin on monte les partitions dans la VM :&lt;br /&gt;
**On ajoute la ligne suivante dans le fichier /etc/fstab de la VM afin que le /home soit monté au lancement :&lt;br /&gt;
 /dev/xvda4 /home ext4 defaults 0 2 &lt;br /&gt;
**Le /var doit d'abord être monté sur un fichier temporaire :&lt;br /&gt;
 mount /dev/xvda3 /mnt&lt;br /&gt;
Puis on déplace le /var actuel dans ce nouveau fichier :&lt;br /&gt;
 mv /var/* /mnt&lt;br /&gt;
Enfin on ajoute la ligne suivante dans le fichier /etc/fstab de la VM :&lt;br /&gt;
 /dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
==Création du serveur SSH==&lt;br /&gt;
*L’installation du serveur ssh se fait tout simplement grâce à :&lt;br /&gt;
 apt-get install ssh&lt;br /&gt;
*Il suffit ensuite de modifier le fichier /etc/ssh/sshd_config pour pouvoir accéder à la machine en root :&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
Cette ligne est déjà écrite dans le fichier, il faut juste changer l'option par &amp;quot;yes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Configuration du serveur DNS==&lt;br /&gt;
*Il faut d'abord installer bind pour la configuration du DNS ainsi qu'un serveur apache2 :&lt;br /&gt;
 apt-get install bind9 apache2&lt;br /&gt;
*Nous avons aussi réserver le nom de domaine tomatecomsique.space sur gandi.net.&lt;br /&gt;
*Nous créons le dossier du site web :&lt;br /&gt;
 mkdir /var/www/www.tomatecosmique.space&lt;br /&gt;
*Enfin nous configurons le bind :&lt;br /&gt;
**On commence par créer le fichier de zone db.tomatecosmique.space dans /etc/bind/, son contenu est :&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL    604800&lt;br /&gt;
 @       IN      SOA     dns1.tomatecosmique.space. root.tomatecomsique.space. (&lt;br /&gt;
                               2         ; Serial&lt;br /&gt;
                          604800         ; Refresh&lt;br /&gt;
                           86400         ; Retry&lt;br /&gt;
                         2419200         ; Expire&lt;br /&gt;
                          604800         ; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 @       IN      NS      dns1.tomatecosmique.space.&lt;br /&gt;
 dns1    IN      A       193.48.57.184&lt;br /&gt;
**Ensuite on configure /etc/bind/named.conf.local :&lt;br /&gt;
 zone &amp;quot;tomatecosmique.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.tomatecosmique.space&amp;quot;;&lt;br /&gt;
         allow-transfer { 217.70.177.40; };&lt;br /&gt;
 };&lt;br /&gt;
**Et /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
         directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
         dnssec-validation auto;&lt;br /&gt;
         auth-nxdomain no;&lt;br /&gt;
         listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
**Enfin on relance le service bind :&lt;br /&gt;
 service bind9 restart&lt;br /&gt;
*Il y a aussi une configuration à effectuer sur le site gandi :&lt;br /&gt;
**Dans l'onglet &amp;quot;Gérer les 'glues records'&amp;quot; :&lt;br /&gt;
 Nom du serveur : dns1.tomatecosmique.space&lt;br /&gt;
 IP : 193.48.57.184&lt;br /&gt;
**Dans l'onglet &amp;quot;Modifier les serveurs DNS&amp;quot; :&lt;br /&gt;
 DNS1 : dns1.tomatecosmique.space&lt;br /&gt;
 DNS2 : ns6.gandi.net&lt;br /&gt;
&lt;br /&gt;
==Sécurisation du site via certificat SSL==&lt;br /&gt;
*Obtention du certificat :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha1 -keyout tomatecosmique.space.key -out tomatecosmique.space.csr &lt;br /&gt;
*On copie les clés dans les dossiers appropriés :&lt;br /&gt;
 cp certificat.crt /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
 cp serveur.key /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
 cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
Le fichier GandiStandardSSLCA.pem est généré une fois le certificat validé par gandi&lt;br /&gt;
*On peut ensuite faire un hashage pour prendre en compte le certificat :&lt;br /&gt;
 c_rehash /etc/ssl/certs&lt;br /&gt;
*Ensuite on configure apache2 :&lt;br /&gt;
**On crée d'abord le fichier 000-tomatecosmique.space-ssl.conf dans /etc/apache2/sites-available/ :&lt;br /&gt;
 #NameVirtualHost *:443&lt;br /&gt;
   &amp;lt;VirtualHost 193.48.57.184:443&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
         ServerName www.tomatecosmique.space&lt;br /&gt;
         ServerAlias tomatecosmique.space&lt;br /&gt;
         DocumentRoot /var/www/www.tomatecosmique.space/&lt;br /&gt;
         CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
 &lt;br /&gt;
         SSLEngine on&lt;br /&gt;
         SSLCerticateFile /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
         SSLCerticateKeyFile /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
         SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
         SSLVerifyClient None&lt;br /&gt;
   &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
**On modifie ensuite /etc/apache2/ports.conf :&lt;br /&gt;
 Listen 80 443&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule mod_gnutls.c&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
**Enfin on exécute les commandes suivantes pour finir la configuration d'apache :&lt;br /&gt;
 a2enmod ssl &lt;br /&gt;
 a2ensite 000-tomatecosmique.space-ssl.conf&lt;br /&gt;
 service apache2 reload&lt;br /&gt;
&lt;br /&gt;
==Sécurisation avec DNSSEC==&lt;br /&gt;
*On commence par modifier /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
        directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
        dnssec-enable yes;&lt;br /&gt;
        dnssec-validation yes;&lt;br /&gt;
        dnssec-lookaside auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
*On génère ensuite les clés KSK et ZSK dans /etc/bind/ :&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
*On rajoute les lignes suivantes à la fin du fichier /etc/bind/db.tomatecosmique.space :&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+22620.key&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+23885.key&lt;br /&gt;
*On peut enfin signer la zone :&lt;br /&gt;
 dnssec-signzone -o tomatecosmique.space -k Ktomatecosmique.space.+007+22620 db.tomatecosmique.space Ktomatecosmique.space.+007+23885&lt;br /&gt;
&lt;br /&gt;
==RAID5 et cryptage des données==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
&lt;br /&gt;
Depuis cordouan, nous créons 3 disque disques virtuels avec ''lvcreate'' :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid1&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid2&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_raid3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous rajoutons ces disques à la configuration de notre machine virtuelle. Toujours depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/ima5-tomate_raid1,xvdd1, w',&lt;br /&gt;
'phy:/dev/virtual/ima5-tomate_raid2,xvdd2 w',&lt;br /&gt;
'phy:/dev/virtual/ima5-tomate_raid3,xvdd3 w',&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depuis notre machine virtuelle cette fois, nous installons mdadm :&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install mdadm &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous créons le disque RAID5 md0 :&lt;br /&gt;
&amp;lt;pre&amp;gt; mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvdd2 /dev/xvdd3 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous installons le système de fichier ext4 dessus :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkfs -t ext4 /dev/md0 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons le tout et montons le disque :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --detail --scan &amp;gt;&amp;gt; /etc/mdadm/mdadm.conf&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous effectuons un petit test afin de noter la reconstruction de notre disque. &lt;br /&gt;
Nous supprimons une des partitions et observons qu'il est bien manquant dans la configuration :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --set-faulty /dev/md0 /dev/xvdd2&lt;br /&gt;
mdadm --remove /dev/md0 /dev/xvdd2&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdd3[2] xvdd2[1] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous montons le disque à nouveau et pouvons noter la reconstruction du disque :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Papaye:/mnt# ls&lt;br /&gt;
lost+found &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous remettons la partition :&lt;br /&gt;
mdadm --add /dev/md0 /dev/xvdd2&lt;br /&gt;
&lt;br /&gt;
Et on observe la reconstruction grâce à cat /proc/mdstat.&lt;br /&gt;
&lt;br /&gt;
=== Cryptage des données ===&lt;br /&gt;
Dans cette partie, nous allons voir comment crypter des données sur un disque virtuel.&lt;br /&gt;
De la même manière que pour la partie précédente, nous créons un disque virtuel via la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/ima5-tomate_cryptage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nous rajoutons ce disque à la configuration de notre machine virtuelle. Depuis cordouan, dans /etc/xen/ima5-tomate.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/ima5-tomate_cryptage,xvdd4, w',&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous configurons le disque en type Luks :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksFormat /dev/xvdd4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
La phrase secrète est : glopglop.&lt;br /&gt;
&lt;br /&gt;
Nous pouvons vérifier les informations via cette commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 blkid | grep crypto&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous obtenons les informations suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /dev/xvdd4: UUID=&amp;quot;50b21f40-ca69-4c42-aa68-83b8e9b96922&amp;quot; TYPE=&amp;quot;crypto_LUKS&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous ouvrons et ajoutons un mapping avec :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksOpen /dev/xvdd4 crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, nous saisissons la phrase secrète.&lt;br /&gt;
&lt;br /&gt;
Nous formatons le mapping en ext3:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs.ext3 /dev/mapper/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous montons notre partition.&lt;br /&gt;
Montage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /mnt/crypthome &amp;amp;&amp;amp; mount /dev/mapper/crypthome /mnt/crypthome&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Démontage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
umount /mnt/crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous encryptons à nouveau la partition avec la commande suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksClose crypthome &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Soutenance=&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=46586</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=46586"/>
				<updated>2017-12-08T13:43:28Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Sécurisation du site via certificat SSL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d'un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L'objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d'un système linux (configuration réseau, packages, et dossiers importants) afin de l'utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l'état n-1 voire à l'état initial.&lt;br /&gt;
&lt;br /&gt;
==Réinstallation rapide==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d'un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l'opposé du premier, supprimant la configuration actuelle d'un nouveau système linux pour y coller celle que l'on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L'option -a permet de copier les liens symboliques ainsi que l'arborescence tels qu'ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d'upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
==Système de fichiers incrémental (overlay fs)==&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d'une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l'aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L'adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L'interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ 'mac=00:16:3E:5C:6B:A2, bridge=INSECURE' ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;br /&gt;
==Création d'une partition LVM==&lt;br /&gt;
*On veut placer les /var et /home de la machine virtuelle sur un disque partitionné de cordouan.&lt;br /&gt;
*On créer d'abord deux partitions de 10Go sur cordouan :&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_home&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_var&lt;br /&gt;
*Il faut ensuite modifier le fichier de configuration de la machine virtuelle (/etc/xen/ima-tomate) pour ajouter les disques :&lt;br /&gt;
 disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/ima5-tomate/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/ima5-tomate/swap.img,xvda1,w',&lt;br /&gt;
                  'phy:/dev/virtual/ima5-tomate_var,xvda3,w',&lt;br /&gt;
                  'phy:/dev/virtual/ima5-tomate_home,xvda4,w'&lt;br /&gt;
               ]&lt;br /&gt;
*Puis on formate ces deux nouveau disques :&lt;br /&gt;
 mkfs -t ext4 /dev/xvda3&lt;br /&gt;
 mkfs -t ext4 /dev/xvda4&lt;br /&gt;
*Enfin on monte les partitions dans la VM :&lt;br /&gt;
**On ajoute la ligne suivante dans le fichier /etc/fstab de la VM afin que le /home soit monté au lancement :&lt;br /&gt;
 /dev/xvda4 /home ext4 defaults 0 2 &lt;br /&gt;
**Le /var doit d'abord être monté sur un fichier temporaire :&lt;br /&gt;
 mount /dev/xvda3 /mnt&lt;br /&gt;
Puis on déplace le /var actuel dans ce nouveau fichier :&lt;br /&gt;
 mv /var/* /mnt&lt;br /&gt;
Enfin on ajoute la ligne suivante dans le fichier /etc/fstab de la VM :&lt;br /&gt;
 /dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
==Création du serveur SSH==&lt;br /&gt;
*L’installation du serveur ssh se fait tout simplement grâce à :&lt;br /&gt;
 apt-get install ssh&lt;br /&gt;
*Il suffit ensuite de modifier le fichier /etc/ssh/sshd_config pour pouvoir accéder à la machine en root :&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
Cette ligne est déjà écrite dans le fichier, il faut juste changer l'option par &amp;quot;yes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Configuration du serveur DNS==&lt;br /&gt;
*Il faut d'abord installer bind pour la configuration du DNS ainsi qu'un serveur apache2 :&lt;br /&gt;
 apt-get install bind9 apache2&lt;br /&gt;
*Nous avons aussi réserver le nom de domaine tomatecomsique.space sur gandi.net.&lt;br /&gt;
*Nous créons le dossier du site web :&lt;br /&gt;
 mkdir /var/www/www.tomatecosmique.space&lt;br /&gt;
*Enfin nous configurons le bind :&lt;br /&gt;
**On commence par créer le fichier de zone db.tomatecosmique.space dans /etc/bind/, son contenu est :&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL    604800&lt;br /&gt;
 @       IN      SOA     dns1.tomatecosmique.space. root.tomatecomsique.space. (&lt;br /&gt;
                               2         ; Serial&lt;br /&gt;
                          604800         ; Refresh&lt;br /&gt;
                           86400         ; Retry&lt;br /&gt;
                         2419200         ; Expire&lt;br /&gt;
                          604800         ; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 @       IN      NS      dns1.tomatecosmique.space.&lt;br /&gt;
 dns1    IN      A       193.48.57.184&lt;br /&gt;
**Ensuite on configure /etc/bind/named.conf.local :&lt;br /&gt;
 zone &amp;quot;tomatecosmique.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.tomatecosmique.space&amp;quot;;&lt;br /&gt;
         allow-transfer { 217.70.177.40; };&lt;br /&gt;
 };&lt;br /&gt;
**Et /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
         directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
         dnssec-validation auto;&lt;br /&gt;
         auth-nxdomain no;&lt;br /&gt;
         listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
**Enfin on relance le service bind :&lt;br /&gt;
 service bind9 restart&lt;br /&gt;
*Il y a aussi une configuration à effectuer sur le site gandi :&lt;br /&gt;
**Dans l'onglet &amp;quot;Gérer les 'glues records'&amp;quot; :&lt;br /&gt;
 Nom du serveur : dns1.tomatecosmique.space&lt;br /&gt;
 IP : 193.48.57.184&lt;br /&gt;
**Dans l'onglet &amp;quot;Modifier les serveurs DNS&amp;quot; :&lt;br /&gt;
 DNS1 : dns1.tomatecosmique.space&lt;br /&gt;
 DNS2 : ns6.gandi.net&lt;br /&gt;
&lt;br /&gt;
==Sécurisation du site via certificat SSL==&lt;br /&gt;
*Obtention du certificat :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha1 -keyout tomatecosmique.space.key -out tomatecosmique.space.csr &lt;br /&gt;
*On copie les clés dans les dossiers appropriés :&lt;br /&gt;
 cp certificat.crt /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
 cp serveur.key /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
 cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
Le fichier GandiStandardSSLCA.pem est généré une fois le certificat validé par gandi&lt;br /&gt;
*On peut ensuite faire un hashage pour prendre en compte le certificat :&lt;br /&gt;
 c_rehash /etc/ssl/certs&lt;br /&gt;
*Ensuite on configure apache2 :&lt;br /&gt;
**On crée d'abord le fichier 000-tomatecosmique.space-ssl.conf dans /etc/apache2/sites-available/ :&lt;br /&gt;
 #NameVirtualHost *:443&lt;br /&gt;
   &amp;lt;VirtualHost 193.48.57.184:443&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
         ServerName www.tomatecosmique.space&lt;br /&gt;
         ServerAlias tomatecosmique.space&lt;br /&gt;
         DocumentRoot /var/www/www.tomatecosmique.space/&lt;br /&gt;
         CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
 &lt;br /&gt;
         SSLEngine on&lt;br /&gt;
         SSLCerticateFile /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
         SSLCerticateKeyFile /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
         SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
         SSLVerifyClient None&lt;br /&gt;
   &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
**On modifie ensuite /etc/apache2/ports.conf :&lt;br /&gt;
 Listen 80 443&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule mod_gnutls.c&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
**Enfin on exécute les commandes suivantes pour finir la configuration d'apache :&lt;br /&gt;
 a2enmod ssl &lt;br /&gt;
 a2ensite 000-tomatecosmique.space-ssl.conf&lt;br /&gt;
 service apache2 reload&lt;br /&gt;
&lt;br /&gt;
==Sécurisation avec DNSSEC==&lt;br /&gt;
*On commence par modifier /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
        directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
        dnssec-enable yes;&lt;br /&gt;
        dnssec-validation yes;&lt;br /&gt;
        dnssec-lookaside auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
*On génère ensuite les clés KSK et ZSK dans /etc/bind/ :&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
*On rajoute les lignes suivantes à la fin du fichier /etc/bind/db.tomatecosmique.space :&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+22620.key&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+23885.key&lt;br /&gt;
*On peut enfin signer la zone :&lt;br /&gt;
 dnssec-signzone -o papaye.space -k Ktomatecosmique.space.+007+22620 db.tomatecosmique.space Ktomatecosmique.space.+007+23885&lt;br /&gt;
&lt;br /&gt;
==RAID5 et cryptage des données==&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=46189</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=46189"/>
				<updated>2017-11-12T15:20:18Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Sécurisation avec DNSSEC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d'un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L'objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d'un système linux (configuration réseau, packages, et dossiers importants) afin de l'utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l'état n-1 voire à l'état initial.&lt;br /&gt;
&lt;br /&gt;
==Réinstallation rapide==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d'un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l'opposé du premier, supprimant la configuration actuelle d'un nouveau système linux pour y coller celle que l'on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L'option -a permet de copier les liens symboliques ainsi que l'arborescence tels qu'ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d'upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
==Système de fichiers incrémental (overlay fs)==&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d'une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l'aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L'adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L'interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ 'mac=00:16:3E:5C:6B:A2, bridge=INSECURE' ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;br /&gt;
==Création d'une partition LVM==&lt;br /&gt;
*On veut placer les /var et /home de la machine virtuelle sur un disque partitionné de cordouan.&lt;br /&gt;
*On créer d'abord deux partitions de 10Go sur cordouan :&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_home&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_var&lt;br /&gt;
*Il faut ensuite modifier le fichier de configuration de la machine virtuelle (/etc/xen/ima-tomate) pour ajouter les disques :&lt;br /&gt;
 disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/ima5-tomate/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/ima5-tomate/swap.img,xvda1,w',&lt;br /&gt;
                  'phy:/dev/virtual/ima5-tomate_var,xvda3,w',&lt;br /&gt;
                  'phy:/dev/virtual/ima5-tomate_home,xvda4,w'&lt;br /&gt;
               ]&lt;br /&gt;
*Puis on formate ces deux nouveau disques :&lt;br /&gt;
 mkfs -t ext4 /dev/xvda3&lt;br /&gt;
 mkfs -t ext4 /dev/xvda4&lt;br /&gt;
*Enfin on monte les partitions dans la VM :&lt;br /&gt;
**On ajoute la ligne suivante dans le fichier /etc/fstab de la VM afin que le /home soit monté au lancement :&lt;br /&gt;
 /dev/xvda4 /home ext4 defaults 0 2 &lt;br /&gt;
**Le /var doit d'abord être monté sur un fichier temporaire :&lt;br /&gt;
 mount /dev/xvda3 /mnt&lt;br /&gt;
Puis on déplace le /var actuel dans ce nouveau fichier :&lt;br /&gt;
 mv /var/* /mnt&lt;br /&gt;
Enfin on ajoute la ligne suivante dans le fichier /etc/fstab de la VM :&lt;br /&gt;
 /dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
==Création du serveur SSH==&lt;br /&gt;
*L’installation du serveur ssh se fait tout simplement grâce à :&lt;br /&gt;
 apt-get install ssh&lt;br /&gt;
*Il suffit ensuite de modifier le fichier /etc/ssh/sshd_config pour pouvoir accéder à la machine en root :&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
Cette ligne est déjà écrite dans le fichier, il faut juste changer l'option par &amp;quot;yes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Configuration du serveur DNS==&lt;br /&gt;
*Il faut d'abord installer bind pour la configuration du DNS ainsi qu'un serveur apache2 :&lt;br /&gt;
 apt-get install bind9 apache2&lt;br /&gt;
*Nous avons aussi réserver le nom de domaine tomatecomsique.space sur gandi.net.&lt;br /&gt;
*Nous créons le dossier du site web :&lt;br /&gt;
 mkdir /var/www/www.tomatecosmique.space&lt;br /&gt;
*Enfin nous configurons le bind :&lt;br /&gt;
**On commence par créer le fichier de zone db.tomatecosmique.space dans /etc/bind/, son contenu est :&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL    604800&lt;br /&gt;
 @       IN      SOA     dns1.tomatecosmique.space. root.tomatecomsique.space. (&lt;br /&gt;
                               2         ; Serial&lt;br /&gt;
                          604800         ; Refresh&lt;br /&gt;
                           86400         ; Retry&lt;br /&gt;
                         2419200         ; Expire&lt;br /&gt;
                          604800         ; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 @       IN      NS      dns1.tomatecosmique.space.&lt;br /&gt;
 dns1    IN      A       193.48.57.184&lt;br /&gt;
**Ensuite on configure /etc/bind/named.conf.local :&lt;br /&gt;
 zone &amp;quot;tomatecosmique.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.tomatecosmique.space&amp;quot;;&lt;br /&gt;
         allow-transfer { 217.70.177.40; };&lt;br /&gt;
 };&lt;br /&gt;
**Et /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
         directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
         dnssec-validation auto;&lt;br /&gt;
         auth-nxdomain no;&lt;br /&gt;
         listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
**Enfin on relance le service bind :&lt;br /&gt;
 service bind9 restart&lt;br /&gt;
*Il y a aussi une configuration à effectuer sur le site gandi :&lt;br /&gt;
**Dans l'onglet &amp;quot;Gérer les 'glues records'&amp;quot; :&lt;br /&gt;
 Nom du serveur : dns1.tomatecosmique.space&lt;br /&gt;
 IP : 193.48.57.184&lt;br /&gt;
**Dans l'onglet &amp;quot;Modifier les serveurs DNS&amp;quot; :&lt;br /&gt;
 DNS1 : dns1.tomatecosmique.space&lt;br /&gt;
 DNS2 : ns6.gandi.net&lt;br /&gt;
&lt;br /&gt;
==Sécurisation du site via certificat SSL==&lt;br /&gt;
*Obtention du certificat :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha1 -keyout tomatecosmique.space.key -out tomatecosmique.space.csr &lt;br /&gt;
*On copie les clés dans les dossiers appropriés :&lt;br /&gt;
 cp certificat.crt /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
 cp serveur.key /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
 cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
Le fichier GandiStandardSSLCA.pem est généré une fois le certificat validé par gandi&lt;br /&gt;
*On peut ensuite faire un hashage pour prendre en compte le certificat :&lt;br /&gt;
 c_rehash /etc/ssl/certs&lt;br /&gt;
*Ensuite on configure apache2 :&lt;br /&gt;
**On crée d'abord le fichier 000-tomatecosmique.space-ssl.conf dans /etc/apache2/sites-available/ :&lt;br /&gt;
 #NameVirtualHost *:443&lt;br /&gt;
   &amp;lt;VirtualHost 193.48.57.184:443&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
         ServerName www.tomatecosmique.space&lt;br /&gt;
         ServerAlias tomatecosmique.space&lt;br /&gt;
         DocumentRoot /var/www/www.tomatecosmique.space/&lt;br /&gt;
         CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
 &lt;br /&gt;
         SSLEngine on&lt;br /&gt;
         SSLCerticateFile /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
         SSLCerticateKeyFile /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
         SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
         SSLVerifyClient None&lt;br /&gt;
   &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
**On modifie ensuite /etc/apache2/ports.conf :&lt;br /&gt;
 Listen 80 443&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule mod_gnutls.c&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
**Enfin on exécute les commandes suivantes pour finir la configuration d'apache :&lt;br /&gt;
 a2enmod ssl &lt;br /&gt;
 a2ensite 000-piscinemorte.net-ssl.conf&lt;br /&gt;
 service apache2 reload&lt;br /&gt;
&lt;br /&gt;
==Sécurisation avec DNSSEC==&lt;br /&gt;
*On commence par modifier /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
        directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
        dnssec-enable yes;&lt;br /&gt;
        dnssec-validation yes;&lt;br /&gt;
        dnssec-lookaside auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
*On génère ensuite les clés KSK et ZSK dans /etc/bind/ :&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
 dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE tomatecosmique.space&lt;br /&gt;
*On rajoute les lignes suivantes à la fin du fichier /etc/bind/db.tomatecosmique.space :&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+22620.key&lt;br /&gt;
 $INCLUDE Ktomatecosmique.space.+007+23885.key&lt;br /&gt;
*On peut enfin signer la zone :&lt;br /&gt;
 dnssec-signzone -o papaye.space -k Ktomatecosmique.space.+007+22620 db.tomatecosmique.space Ktomatecosmique.space.+007+23885&lt;br /&gt;
&lt;br /&gt;
==RAID5 et cryptage des données==&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=46188</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=46188"/>
				<updated>2017-11-12T15:10:50Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Sécurisation du site via certificat SSL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d'un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L'objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d'un système linux (configuration réseau, packages, et dossiers importants) afin de l'utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l'état n-1 voire à l'état initial.&lt;br /&gt;
&lt;br /&gt;
==Réinstallation rapide==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d'un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l'opposé du premier, supprimant la configuration actuelle d'un nouveau système linux pour y coller celle que l'on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L'option -a permet de copier les liens symboliques ainsi que l'arborescence tels qu'ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d'upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
==Système de fichiers incrémental (overlay fs)==&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d'une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l'aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L'adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L'interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ 'mac=00:16:3E:5C:6B:A2, bridge=INSECURE' ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;br /&gt;
==Création d'une partition LVM==&lt;br /&gt;
*On veut placer les /var et /home de la machine virtuelle sur un disque partitionné de cordouan.&lt;br /&gt;
*On créer d'abord deux partitions de 10Go sur cordouan :&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_home&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_var&lt;br /&gt;
*Il faut ensuite modifier le fichier de configuration de la machine virtuelle (/etc/xen/ima-tomate) pour ajouter les disques :&lt;br /&gt;
 disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/ima5-tomate/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/ima5-tomate/swap.img,xvda1,w',&lt;br /&gt;
                  'phy:/dev/virtual/ima5-tomate_var,xvda3,w',&lt;br /&gt;
                  'phy:/dev/virtual/ima5-tomate_home,xvda4,w'&lt;br /&gt;
               ]&lt;br /&gt;
*Puis on formate ces deux nouveau disques :&lt;br /&gt;
 mkfs -t ext4 /dev/xvda3&lt;br /&gt;
 mkfs -t ext4 /dev/xvda4&lt;br /&gt;
*Enfin on monte les partitions dans la VM :&lt;br /&gt;
**On ajoute la ligne suivante dans le fichier /etc/fstab de la VM afin que le /home soit monté au lancement :&lt;br /&gt;
 /dev/xvda4 /home ext4 defaults 0 2 &lt;br /&gt;
**Le /var doit d'abord être monté sur un fichier temporaire :&lt;br /&gt;
 mount /dev/xvda3 /mnt&lt;br /&gt;
Puis on déplace le /var actuel dans ce nouveau fichier :&lt;br /&gt;
 mv /var/* /mnt&lt;br /&gt;
Enfin on ajoute la ligne suivante dans le fichier /etc/fstab de la VM :&lt;br /&gt;
 /dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
==Création du serveur SSH==&lt;br /&gt;
*L’installation du serveur ssh se fait tout simplement grâce à :&lt;br /&gt;
 apt-get install ssh&lt;br /&gt;
*Il suffit ensuite de modifier le fichier /etc/ssh/sshd_config pour pouvoir accéder à la machine en root :&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
Cette ligne est déjà écrite dans le fichier, il faut juste changer l'option par &amp;quot;yes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Configuration du serveur DNS==&lt;br /&gt;
*Il faut d'abord installer bind pour la configuration du DNS ainsi qu'un serveur apache2 :&lt;br /&gt;
 apt-get install bind9 apache2&lt;br /&gt;
*Nous avons aussi réserver le nom de domaine tomatecomsique.space sur gandi.net.&lt;br /&gt;
*Nous créons le dossier du site web :&lt;br /&gt;
 mkdir /var/www/www.tomatecosmique.space&lt;br /&gt;
*Enfin nous configurons le bind :&lt;br /&gt;
**On commence par créer le fichier de zone db.tomatecosmique.space dans /etc/bind/, son contenu est :&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL    604800&lt;br /&gt;
 @       IN      SOA     dns1.tomatecosmique.space. root.tomatecomsique.space. (&lt;br /&gt;
                               2         ; Serial&lt;br /&gt;
                          604800         ; Refresh&lt;br /&gt;
                           86400         ; Retry&lt;br /&gt;
                         2419200         ; Expire&lt;br /&gt;
                          604800         ; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 @       IN      NS      dns1.tomatecosmique.space.&lt;br /&gt;
 dns1    IN      A       193.48.57.184&lt;br /&gt;
**Ensuite on configure /etc/bind/named.conf.local :&lt;br /&gt;
 zone &amp;quot;tomatecosmique.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.tomatecosmique.space&amp;quot;;&lt;br /&gt;
         allow-transfer { 217.70.177.40; };&lt;br /&gt;
 };&lt;br /&gt;
**Et /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
         directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
         dnssec-validation auto;&lt;br /&gt;
         auth-nxdomain no;&lt;br /&gt;
         listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
**Enfin on relance le service bind :&lt;br /&gt;
 service bind9 restart&lt;br /&gt;
*Il y a aussi une configuration à effectuer sur le site gandi :&lt;br /&gt;
**Dans l'onglet &amp;quot;Gérer les 'glues records'&amp;quot; :&lt;br /&gt;
 Nom du serveur : dns1.tomatecosmique.space&lt;br /&gt;
 IP : 193.48.57.184&lt;br /&gt;
**Dans l'onglet &amp;quot;Modifier les serveurs DNS&amp;quot; :&lt;br /&gt;
 DNS1 : dns1.tomatecosmique.space&lt;br /&gt;
 DNS2 : ns6.gandi.net&lt;br /&gt;
&lt;br /&gt;
==Sécurisation du site via certificat SSL==&lt;br /&gt;
*Obtention du certificat :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha1 -keyout tomatecosmique.space.key -out tomatecosmique.space.csr &lt;br /&gt;
*On copie les clés dans les dossiers appropriés :&lt;br /&gt;
 cp certificat.crt /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
 cp serveur.key /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
 cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
Le fichier GandiStandardSSLCA.pem est généré une fois le certificat validé par gandi&lt;br /&gt;
*On peut ensuite faire un hashage pour prendre en compte le certificat :&lt;br /&gt;
 c_rehash /etc/ssl/certs&lt;br /&gt;
*Ensuite on configure apache2 :&lt;br /&gt;
**On crée d'abord le fichier 000-tomatecosmique.space-ssl.conf dans /etc/apache2/sites-available/ :&lt;br /&gt;
 #NameVirtualHost *:443&lt;br /&gt;
   &amp;lt;VirtualHost 193.48.57.184:443&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
         ServerName www.tomatecosmique.space&lt;br /&gt;
         ServerAlias tomatecosmique.space&lt;br /&gt;
         DocumentRoot /var/www/www.tomatecosmique.space/&lt;br /&gt;
         CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
 &lt;br /&gt;
         SSLEngine on&lt;br /&gt;
         SSLCerticateFile /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
         SSLCerticateKeyFile /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
         SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
         SSLVerifyClient None&lt;br /&gt;
   &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
**On modifie ensuite /etc/apache2/ports.conf :&lt;br /&gt;
 Listen 80 443&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule mod_gnutls.c&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
**Enfin on exécute les commandes suivantes pour finir la configuration d'apache :&lt;br /&gt;
 a2enmod ssl &lt;br /&gt;
 a2ensite 000-piscinemorte.net-ssl.conf&lt;br /&gt;
 service apache2 reload&lt;br /&gt;
&lt;br /&gt;
==Sécurisation avec DNSSEC==&lt;br /&gt;
==RAID5 et cryptage des données==&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=46187</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=46187"/>
				<updated>2017-11-12T15:10:05Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Sécurisation du site via certificat SSL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d'un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L'objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d'un système linux (configuration réseau, packages, et dossiers importants) afin de l'utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l'état n-1 voire à l'état initial.&lt;br /&gt;
&lt;br /&gt;
==Réinstallation rapide==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d'un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l'opposé du premier, supprimant la configuration actuelle d'un nouveau système linux pour y coller celle que l'on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L'option -a permet de copier les liens symboliques ainsi que l'arborescence tels qu'ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d'upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
==Système de fichiers incrémental (overlay fs)==&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d'une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l'aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L'adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L'interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ 'mac=00:16:3E:5C:6B:A2, bridge=INSECURE' ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;br /&gt;
==Création d'une partition LVM==&lt;br /&gt;
*On veut placer les /var et /home de la machine virtuelle sur un disque partitionné de cordouan.&lt;br /&gt;
*On créer d'abord deux partitions de 10Go sur cordouan :&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_home&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_var&lt;br /&gt;
*Il faut ensuite modifier le fichier de configuration de la machine virtuelle (/etc/xen/ima-tomate) pour ajouter les disques :&lt;br /&gt;
 disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/ima5-tomate/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/ima5-tomate/swap.img,xvda1,w',&lt;br /&gt;
                  'phy:/dev/virtual/ima5-tomate_var,xvda3,w',&lt;br /&gt;
                  'phy:/dev/virtual/ima5-tomate_home,xvda4,w'&lt;br /&gt;
               ]&lt;br /&gt;
*Puis on formate ces deux nouveau disques :&lt;br /&gt;
 mkfs -t ext4 /dev/xvda3&lt;br /&gt;
 mkfs -t ext4 /dev/xvda4&lt;br /&gt;
*Enfin on monte les partitions dans la VM :&lt;br /&gt;
**On ajoute la ligne suivante dans le fichier /etc/fstab de la VM afin que le /home soit monté au lancement :&lt;br /&gt;
 /dev/xvda4 /home ext4 defaults 0 2 &lt;br /&gt;
**Le /var doit d'abord être monté sur un fichier temporaire :&lt;br /&gt;
 mount /dev/xvda3 /mnt&lt;br /&gt;
Puis on déplace le /var actuel dans ce nouveau fichier :&lt;br /&gt;
 mv /var/* /mnt&lt;br /&gt;
Enfin on ajoute la ligne suivante dans le fichier /etc/fstab de la VM :&lt;br /&gt;
 /dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
==Création du serveur SSH==&lt;br /&gt;
*L’installation du serveur ssh se fait tout simplement grâce à :&lt;br /&gt;
 apt-get install ssh&lt;br /&gt;
*Il suffit ensuite de modifier le fichier /etc/ssh/sshd_config pour pouvoir accéder à la machine en root :&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
Cette ligne est déjà écrite dans le fichier, il faut juste changer l'option par &amp;quot;yes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Configuration du serveur DNS==&lt;br /&gt;
*Il faut d'abord installer bind pour la configuration du DNS ainsi qu'un serveur apache2 :&lt;br /&gt;
 apt-get install bind9 apache2&lt;br /&gt;
*Nous avons aussi réserver le nom de domaine tomatecomsique.space sur gandi.net.&lt;br /&gt;
*Nous créons le dossier du site web :&lt;br /&gt;
 mkdir /var/www/www.tomatecosmique.space&lt;br /&gt;
*Enfin nous configurons le bind :&lt;br /&gt;
**On commence par créer le fichier de zone db.tomatecosmique.space dans /etc/bind/, son contenu est :&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL    604800&lt;br /&gt;
 @       IN      SOA     dns1.tomatecosmique.space. root.tomatecomsique.space. (&lt;br /&gt;
                               2         ; Serial&lt;br /&gt;
                          604800         ; Refresh&lt;br /&gt;
                           86400         ; Retry&lt;br /&gt;
                         2419200         ; Expire&lt;br /&gt;
                          604800         ; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 @       IN      NS      dns1.tomatecosmique.space.&lt;br /&gt;
 dns1    IN      A       193.48.57.184&lt;br /&gt;
**Ensuite on configure /etc/bind/named.conf.local :&lt;br /&gt;
 zone &amp;quot;tomatecosmique.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.tomatecosmique.space&amp;quot;;&lt;br /&gt;
         allow-transfer { 217.70.177.40; };&lt;br /&gt;
 };&lt;br /&gt;
**Et /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
         directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
         dnssec-validation auto;&lt;br /&gt;
         auth-nxdomain no;&lt;br /&gt;
         listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
**Enfin on relance le service bind :&lt;br /&gt;
 service bind9 restart&lt;br /&gt;
*Il y a aussi une configuration à effectuer sur le site gandi :&lt;br /&gt;
**Dans l'onglet &amp;quot;Gérer les 'glues records'&amp;quot; :&lt;br /&gt;
 Nom du serveur : dns1.tomatecosmique.space&lt;br /&gt;
 IP : 193.48.57.184&lt;br /&gt;
**Dans l'onglet &amp;quot;Modifier les serveurs DNS&amp;quot; :&lt;br /&gt;
 DNS1 : dns1.tomatecosmique.space&lt;br /&gt;
 DNS2 : ns6.gandi.net&lt;br /&gt;
&lt;br /&gt;
==Sécurisation du site via certificat SSL==&lt;br /&gt;
*Obtention du certificat :&lt;br /&gt;
 openssl req -nodes -newkey rsa:2048 -sha1 -keyout tomatecosmique.space.key -out tomatecosmique.space.csr &lt;br /&gt;
*On copie les clés dans les dossiers appropriés :&lt;br /&gt;
 cp certificat.crt /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
 cp serveur.key /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
 cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
Le fichier GandiStandardSSLCA.pem est généré une fois le certificat validé par gandi&lt;br /&gt;
*On peut ensuite faire un hashage pour prendre en compte le certificat :&lt;br /&gt;
 c_rehash /etc/ssl/certs&lt;br /&gt;
*Ensuite on configure apache2 :&lt;br /&gt;
**On crée d'abord le fichier 000-tomatecosmique.space-ssl.conf dans /etc/apache2/sites-available/ :&lt;br /&gt;
 #NameVirtualHost *:443&lt;br /&gt;
   &amp;lt;VirtualHost 193.48.57.184:443&amp;gt;&lt;br /&gt;
&lt;br /&gt;
         ServerName www.tomatecosmique.space&lt;br /&gt;
         ServerAlias tomatecosmique.space&lt;br /&gt;
         DocumentRoot /var/www/www.tomatecosmique.space/&lt;br /&gt;
         CustomLog /var/log/apache2/secure_access.log combined&lt;br /&gt;
&lt;br /&gt;
         SSLEngine on&lt;br /&gt;
         SSLCerticateFile /etc/ssl/certs/tomatecosmique.space.crt&lt;br /&gt;
         SSLCerticateKeyFile /etc/ssl/private/tomatecosmique.space.key&lt;br /&gt;
         SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
         SSLVerifyClient None&lt;br /&gt;
   &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
**On modifie ensuite /etc/apache2/ports.conf :&lt;br /&gt;
 Listen 80 443&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;IfModule mod_gnutls.c&amp;gt;&lt;br /&gt;
         Listen 443&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
**Enfin on exécute les commandes suivantes pour finir la configuration d'apache :&lt;br /&gt;
 a2enmod ssl &lt;br /&gt;
 a2ensite 000-piscinemorte.net-ssl.conf&lt;br /&gt;
 service apache2 reload&lt;br /&gt;
&lt;br /&gt;
==Sécurisation avec DNSSEC==&lt;br /&gt;
==RAID5 et cryptage des données==&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=46186</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=46186"/>
				<updated>2017-11-12T14:53:28Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Configuration du serveur DNS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d'un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L'objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d'un système linux (configuration réseau, packages, et dossiers importants) afin de l'utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l'état n-1 voire à l'état initial.&lt;br /&gt;
&lt;br /&gt;
==Réinstallation rapide==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d'un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l'opposé du premier, supprimant la configuration actuelle d'un nouveau système linux pour y coller celle que l'on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L'option -a permet de copier les liens symboliques ainsi que l'arborescence tels qu'ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d'upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
==Système de fichiers incrémental (overlay fs)==&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d'une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l'aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L'adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L'interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ 'mac=00:16:3E:5C:6B:A2, bridge=INSECURE' ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;br /&gt;
==Création d'une partition LVM==&lt;br /&gt;
*On veut placer les /var et /home de la machine virtuelle sur un disque partitionné de cordouan.&lt;br /&gt;
*On créer d'abord deux partitions de 10Go sur cordouan :&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_home&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_var&lt;br /&gt;
*Il faut ensuite modifier le fichier de configuration de la machine virtuelle (/etc/xen/ima-tomate) pour ajouter les disques :&lt;br /&gt;
 disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/ima5-tomate/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/ima5-tomate/swap.img,xvda1,w',&lt;br /&gt;
                  'phy:/dev/virtual/ima5-tomate_var,xvda3,w',&lt;br /&gt;
                  'phy:/dev/virtual/ima5-tomate_home,xvda4,w'&lt;br /&gt;
               ]&lt;br /&gt;
*Puis on formate ces deux nouveau disques :&lt;br /&gt;
 mkfs -t ext4 /dev/xvda3&lt;br /&gt;
 mkfs -t ext4 /dev/xvda4&lt;br /&gt;
*Enfin on monte les partitions dans la VM :&lt;br /&gt;
**On ajoute la ligne suivante dans le fichier /etc/fstab de la VM afin que le /home soit monté au lancement :&lt;br /&gt;
 /dev/xvda4 /home ext4 defaults 0 2 &lt;br /&gt;
**Le /var doit d'abord être monté sur un fichier temporaire :&lt;br /&gt;
 mount /dev/xvda3 /mnt&lt;br /&gt;
Puis on déplace le /var actuel dans ce nouveau fichier :&lt;br /&gt;
 mv /var/* /mnt&lt;br /&gt;
Enfin on ajoute la ligne suivante dans le fichier /etc/fstab de la VM :&lt;br /&gt;
 /dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
==Création du serveur SSH==&lt;br /&gt;
*L’installation du serveur ssh se fait tout simplement grâce à :&lt;br /&gt;
 apt-get install ssh&lt;br /&gt;
*Il suffit ensuite de modifier le fichier /etc/ssh/sshd_config pour pouvoir accéder à la machine en root :&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
Cette ligne est déjà écrite dans le fichier, il faut juste changer l'option par &amp;quot;yes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Configuration du serveur DNS==&lt;br /&gt;
*Il faut d'abord installer bind pour la configuration du DNS ainsi qu'un serveur apache2 :&lt;br /&gt;
 apt-get install bind9 apache2&lt;br /&gt;
*Nous avons aussi réserver le nom de domaine tomatecomsique.space sur gandi.net.&lt;br /&gt;
*Nous créons le dossier du site web :&lt;br /&gt;
 mkdir /var/www/www.tomatecosmique.space&lt;br /&gt;
*Enfin nous configurons le bind :&lt;br /&gt;
**On commence par créer le fichier de zone db.tomatecosmique.space dans /etc/bind/, son contenu est :&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL    604800&lt;br /&gt;
 @       IN      SOA     dns1.tomatecosmique.space. root.tomatecomsique.space. (&lt;br /&gt;
                               2         ; Serial&lt;br /&gt;
                          604800         ; Refresh&lt;br /&gt;
                           86400         ; Retry&lt;br /&gt;
                         2419200         ; Expire&lt;br /&gt;
                          604800         ; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 @       IN      NS      dns1.tomatecosmique.space.&lt;br /&gt;
 dns1    IN      A       193.48.57.184&lt;br /&gt;
**Ensuite on configure /etc/bind/named.conf.local :&lt;br /&gt;
 zone &amp;quot;tomatecosmique.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.tomatecosmique.space&amp;quot;;&lt;br /&gt;
         allow-transfer { 217.70.177.40; };&lt;br /&gt;
 };&lt;br /&gt;
**Et /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
         directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
         dnssec-validation auto;&lt;br /&gt;
         auth-nxdomain no;&lt;br /&gt;
         listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
**Enfin on relance le service bind :&lt;br /&gt;
 service bind9 restart&lt;br /&gt;
*Il y a aussi une configuration à effectuer sur le site gandi :&lt;br /&gt;
**Dans l'onglet &amp;quot;Gérer les 'glues records'&amp;quot; :&lt;br /&gt;
 Nom du serveur : dns1.tomatecosmique.space&lt;br /&gt;
 IP : 193.48.57.184&lt;br /&gt;
**Dans l'onglet &amp;quot;Modifier les serveurs DNS&amp;quot; :&lt;br /&gt;
 DNS1 : dns1.tomatecosmique.space&lt;br /&gt;
 DNS2 : ns6.gandi.net&lt;br /&gt;
&lt;br /&gt;
==Sécurisation du site via certificat SSL==&lt;br /&gt;
==Sécurisation avec DNSSEC==&lt;br /&gt;
==RAID5 et cryptage des données==&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=46185</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=46185"/>
				<updated>2017-11-12T14:51:57Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d'un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L'objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d'un système linux (configuration réseau, packages, et dossiers importants) afin de l'utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l'état n-1 voire à l'état initial.&lt;br /&gt;
&lt;br /&gt;
==Réinstallation rapide==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d'un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l'opposé du premier, supprimant la configuration actuelle d'un nouveau système linux pour y coller celle que l'on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L'option -a permet de copier les liens symboliques ainsi que l'arborescence tels qu'ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d'upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
==Système de fichiers incrémental (overlay fs)==&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d'une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l'aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L'adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L'interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ 'mac=00:16:3E:5C:6B:A2, bridge=INSECURE' ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;br /&gt;
==Création d'une partition LVM==&lt;br /&gt;
*On veut placer les /var et /home de la machine virtuelle sur un disque partitionné de cordouan.&lt;br /&gt;
*On créer d'abord deux partitions de 10Go sur cordouan :&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_home&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_var&lt;br /&gt;
*Il faut ensuite modifier le fichier de configuration de la machine virtuelle (/etc/xen/ima-tomate) pour ajouter les disques :&lt;br /&gt;
 disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/ima5-tomate/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/ima5-tomate/swap.img,xvda1,w',&lt;br /&gt;
                  'phy:/dev/virtual/ima5-tomate_var,xvda3,w',&lt;br /&gt;
                  'phy:/dev/virtual/ima5-tomate_home,xvda4,w'&lt;br /&gt;
               ]&lt;br /&gt;
*Puis on formate ces deux nouveau disques :&lt;br /&gt;
 mkfs -t ext4 /dev/xvda3&lt;br /&gt;
 mkfs -t ext4 /dev/xvda4&lt;br /&gt;
*Enfin on monte les partitions dans la VM :&lt;br /&gt;
**On ajoute la ligne suivante dans le fichier /etc/fstab de la VM afin que le /home soit monté au lancement :&lt;br /&gt;
 /dev/xvda4 /home ext4 defaults 0 2 &lt;br /&gt;
**Le /var doit d'abord être monté sur un fichier temporaire :&lt;br /&gt;
 mount /dev/xvda3 /mnt&lt;br /&gt;
Puis on déplace le /var actuel dans ce nouveau fichier :&lt;br /&gt;
 mv /var/* /mnt&lt;br /&gt;
Enfin on ajoute la ligne suivante dans le fichier /etc/fstab de la VM :&lt;br /&gt;
 /dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
==Création du serveur SSH==&lt;br /&gt;
*L’installation du serveur ssh se fait tout simplement grâce à :&lt;br /&gt;
 apt-get install ssh&lt;br /&gt;
*Il suffit ensuite de modifier le fichier /etc/ssh/sshd_config pour pouvoir accéder à la machine en root :&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
Cette ligne est déjà écrite dans le fichier, il faut juste changer l'option par &amp;quot;yes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Configuration du serveur DNS==&lt;br /&gt;
*Il faut d'abord installer bind pour la configuration du DNS ainsi qu'un serveur apache2 :&lt;br /&gt;
 apt-get install bind9 apache2&lt;br /&gt;
*Nous avons aussi réserver le nom de domaine tomatecomsique.space sur gandi.net.&lt;br /&gt;
*Nous créons le dossier du site web :&lt;br /&gt;
 mkdir /var/www/www.tomatecosmique.space&lt;br /&gt;
*Enfin nous configurons le bind :&lt;br /&gt;
**On commence par créer le fichier de zone db.tomatecosmique.space dans /etc/bind/, son contenu est :&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL    604800&lt;br /&gt;
 @       IN      SOA     dns1.tomatecosmique.space. root.tomatecomsique.space. (&lt;br /&gt;
                               2         ; Serial&lt;br /&gt;
                          604800         ; Refresh&lt;br /&gt;
                           86400         ; Retry&lt;br /&gt;
                         2419200         ; Expire&lt;br /&gt;
                          604800         ; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 @       IN      NS      dns1.tomatecosmique.space.&lt;br /&gt;
 dns1    IN      A       193.48.57.184&lt;br /&gt;
**Ensuite on configure /etc/bind/named.conf.local :&lt;br /&gt;
 zone &amp;quot;tomatecosmique.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.tomatecosmique.space&amp;quot;;&lt;br /&gt;
         allow-transfer { 217.70.177.40; };&lt;br /&gt;
 };&lt;br /&gt;
**Et /etc/bind/named.conf.options :&lt;br /&gt;
 options {&lt;br /&gt;
         directory &amp;quot;/var/cache/bind&amp;quot;;&lt;br /&gt;
         dnssec-validation auto;&lt;br /&gt;
         auth-nxdomain no;&lt;br /&gt;
         listen-on-v6 { any; };&lt;br /&gt;
 };&lt;br /&gt;
**Enfin on relance le service bind :&lt;br /&gt;
 service bind9 restart&lt;br /&gt;
*Il y a aussi une configuration à effectuer sur le site gandi :&lt;br /&gt;
**Dans l'onglet &amp;quot;glues records&amp;quot; :&lt;br /&gt;
 Nom du serveur : dns1.tomatecosmique.space&lt;br /&gt;
 IP : 193.48.57.184&lt;br /&gt;
&lt;br /&gt;
==Sécurisation du site via certificat SSL==&lt;br /&gt;
==Sécurisation avec DNSSEC==&lt;br /&gt;
==RAID5 et cryptage des données==&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=46184</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=46184"/>
				<updated>2017-11-12T14:27:58Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Création du serveur SSH */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d'un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L'objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d'un système linux (configuration réseau, packages, et dossiers importants) afin de l'utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l'état n-1 voire à l'état initial.&lt;br /&gt;
&lt;br /&gt;
==Réinstallation rapide==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d'un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l'opposé du premier, supprimant la configuration actuelle d'un nouveau système linux pour y coller celle que l'on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L'option -a permet de copier les liens symboliques ainsi que l'arborescence tels qu'ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d'upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
==Système de fichiers incrémental (overlay fs)==&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d'une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l'aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L'adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L'interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ 'mac=00:16:3E:5C:6B:A2, bridge=INSECURE' ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;br /&gt;
==Création d'une partition LVM==&lt;br /&gt;
*On veut placer les /var et /home de la machine virtuelle sur un disque partitionné de cordouan.&lt;br /&gt;
*On créer d'abord deux partitions de 10Go sur cordouan :&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_home&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_var&lt;br /&gt;
*Il faut ensuite modifier le fichier de configuration de la machine virtuelle (/etc/xen/ima-tomate) pour ajouter les disques :&lt;br /&gt;
 disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/ima5-tomate/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/ima5-tomate/swap.img,xvda1,w',&lt;br /&gt;
                  'phy:/dev/virtual/ima5-tomate_var,xvda3,w',&lt;br /&gt;
                  'phy:/dev/virtual/ima5-tomate_home,xvda4,w'&lt;br /&gt;
               ]&lt;br /&gt;
*Puis on formate ces deux nouveau disques :&lt;br /&gt;
 mkfs -t ext4 /dev/xvda3&lt;br /&gt;
 mkfs -t ext4 /dev/xvda4&lt;br /&gt;
*Enfin on monte les partitions dans la VM :&lt;br /&gt;
**On ajoute la ligne suivante dans le fichier /etc/fstab de la VM afin que le /home soit monté au lancement :&lt;br /&gt;
 /dev/xvda4 /home ext4 defaults 0 2 &lt;br /&gt;
**Le /var doit d'abord être monté sur un fichier temporaire :&lt;br /&gt;
 mount /dev/xvda3 /mnt&lt;br /&gt;
Puis on déplace le /var actuel dans ce nouveau fichier :&lt;br /&gt;
 mv /var/* /mnt&lt;br /&gt;
Enfin on ajoute la ligne suivante dans le fichier /etc/fstab de la VM :&lt;br /&gt;
 /dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
==Création du serveur SSH==&lt;br /&gt;
*L’installation du serveur ssh se fait tout simplement grâce à :&lt;br /&gt;
 apt-get install ssh&lt;br /&gt;
*Il suffit ensuite de modifier le fichier /etc/ssh/sshd_config pour pouvoir accéder à la machine en root :&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
Cette ligne est déjà écrite dans le fichier, il faut juste changer l'option par &amp;quot;yes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Configuration du serveur DNS==&lt;br /&gt;
==Sécurisation du site via certificat SSL==&lt;br /&gt;
==Sécurisation avec DNSSEC==&lt;br /&gt;
==RAID5 et cryptage des données==&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=46183</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=46183"/>
				<updated>2017-11-12T14:24:53Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Création d'une partition LVM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d'un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L'objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d'un système linux (configuration réseau, packages, et dossiers importants) afin de l'utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l'état n-1 voire à l'état initial.&lt;br /&gt;
&lt;br /&gt;
==Réinstallation rapide==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d'un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l'opposé du premier, supprimant la configuration actuelle d'un nouveau système linux pour y coller celle que l'on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L'option -a permet de copier les liens symboliques ainsi que l'arborescence tels qu'ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d'upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
==Système de fichiers incrémental (overlay fs)==&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d'une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l'aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L'adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L'interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ 'mac=00:16:3E:5C:6B:A2, bridge=INSECURE' ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;br /&gt;
==Création d'une partition LVM==&lt;br /&gt;
*On veut placer les /var et /home de la machine virtuelle sur un disque partitionné de cordouan.&lt;br /&gt;
*On créer d'abord deux partitions de 10Go sur cordouan :&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_home&lt;br /&gt;
 lvcreate -L10G -ima5-tomate_var&lt;br /&gt;
*Il faut ensuite modifier le fichier de configuration de la machine virtuelle (/etc/xen/ima-tomate) pour ajouter les disques :&lt;br /&gt;
 disk        = [&lt;br /&gt;
                  'file:/usr/local/xen/domains/ima5-tomate/disk.img,xvda2,w',&lt;br /&gt;
                  'file:/usr/local/xen/domains/ima5-tomate/swap.img,xvda1,w',&lt;br /&gt;
                  'phy:/dev/virtual/ima5-tomate_var,xvda3,w',&lt;br /&gt;
                  'phy:/dev/virtual/ima5-tomate_home,xvda4,w'&lt;br /&gt;
               ]&lt;br /&gt;
*Puis on formate ces deux nouveau disques :&lt;br /&gt;
 mkfs -t ext4 /dev/xvda3&lt;br /&gt;
 mkfs -t ext4 /dev/xvda4&lt;br /&gt;
*Enfin on monte les partitions dans la VM :&lt;br /&gt;
**On ajoute la ligne suivante dans le fichier /etc/fstab de la VM afin que le /home soit monté au lancement :&lt;br /&gt;
 /dev/xvda4 /home ext4 defaults 0 2 &lt;br /&gt;
**Le /var doit d'abord être monté sur un fichier temporaire :&lt;br /&gt;
 mount /dev/xvda3 /mnt&lt;br /&gt;
Puis on déplace le /var actuel dans ce nouveau fichier :&lt;br /&gt;
 mv /var/* /mnt&lt;br /&gt;
Enfin on ajoute la ligne suivante dans le fichier /etc/fstab de la VM :&lt;br /&gt;
 /dev/xvda3 /home ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
==Création du serveur SSH==&lt;br /&gt;
==Configuration du serveur DNS==&lt;br /&gt;
==Sécurisation du site via certificat SSL==&lt;br /&gt;
==Sécurisation avec DNSSEC==&lt;br /&gt;
==RAID5 et cryptage des données==&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=46182</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=46182"/>
				<updated>2017-11-12T14:08:42Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Réalisation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d'un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L'objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d'un système linux (configuration réseau, packages, et dossiers importants) afin de l'utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l'état n-1 voire à l'état initial.&lt;br /&gt;
&lt;br /&gt;
==Réinstallation rapide==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d'un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l'opposé du premier, supprimant la configuration actuelle d'un nouveau système linux pour y coller celle que l'on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L'option -a permet de copier les liens symboliques ainsi que l'arborescence tels qu'ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d'upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
==Système de fichiers incrémental (overlay fs)==&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d'une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l'aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L'adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L'interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ 'mac=00:16:3E:5C:6B:A2, bridge=INSECURE' ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;br /&gt;
==Création d'une partition LVM==&lt;br /&gt;
==Création du serveur SSH==&lt;br /&gt;
==Configuration du serveur DNS==&lt;br /&gt;
==Sécurisation du site via certificat SSL==&lt;br /&gt;
==Sécurisation avec DNSSEC==&lt;br /&gt;
==RAID5 et cryptage des données==&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=46181</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=46181"/>
				<updated>2017-11-12T14:07:27Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Partie commune */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d'un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L'objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d'un système linux (configuration réseau, packages, et dossiers importants) afin de l'utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l'état n-1 voire à l'état initial.&lt;br /&gt;
&lt;br /&gt;
==Réalisation==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d'un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l'opposé du premier, supprimant la configuration actuelle d'un nouveau système linux pour y coller celle que l'on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L'option -a permet de copier les liens symboliques ainsi que l'arborescence tels qu'ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d'upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d'une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l'aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L'adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L'interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ 'mac=00:16:3E:5C:6B:A2, bridge=INSECURE' ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;br /&gt;
==Création d'une partition LVM==&lt;br /&gt;
==Création du serveur SSH==&lt;br /&gt;
==Configuration du serveur DNS==&lt;br /&gt;
==Sécurisation du site via certificat SSL==&lt;br /&gt;
==Sécurisation avec DNSSEC==&lt;br /&gt;
==RAID5 et cryptage des données==&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=46180</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=46180"/>
				<updated>2017-11-12T14:03:18Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Partie commune */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d'un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L'objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d'un système linux (configuration réseau, packages, et dossiers importants) afin de l'utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l'état n-1 voire à l'état initial.&lt;br /&gt;
&lt;br /&gt;
==Réalisation==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d'un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l'opposé du premier, supprimant la configuration actuelle d'un nouveau système linux pour y coller celle que l'on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L'option -a permet de copier les liens symboliques ainsi que l'arborescence tels qu'ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d'upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;br /&gt;
==Installation d'une machine virtuelle sur le serveur Cordouan==&lt;br /&gt;
*Nous avons installé une machine virtuel xen à l'aide la commande : &lt;br /&gt;
 xen-create-image --hostname=ima5-tomate --dir=/usr/local/xen --ip=172.26.76.106 --netmask=255.255.255.224 --gateway=172.26.79.254&lt;br /&gt;
L'adresse ip est temporaire et sera remplacé par la suite par 193.48.57.184 (réseau de TP ima5)&lt;br /&gt;
*L'interface ethernet est montée sur le pont insecure en modifiant le fichier de configuration (/etc/xen/ima5-tomate.cfg) :&lt;br /&gt;
 vif         = [ 'mac=00:16:3E:5C:6B:A2, bridge=INSECURE' ]&lt;br /&gt;
Encore une fois, ceci est temporaire et nous utiliserons le pont IMA5sc par la suite.&lt;br /&gt;
*La machine virtuelle peut être lancée et stoppée avec les commandes suivantes :&lt;br /&gt;
 xl create /etc/xen/ima5-tomate.cfg&lt;br /&gt;
 xl destroy /etc/xen/ima5-tomate.cfg&lt;br /&gt;
*Pour accéder à la console de la machine virtuelle, on utilise :&lt;br /&gt;
 xl console ima5-tomate&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=46179</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=46179"/>
				<updated>2017-11-12T13:54:13Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Réalisation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d'un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L'objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d'un système linux (configuration réseau, packages, et dossiers importants) afin de l'utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l'état n-1 voire à l'état initial.&lt;br /&gt;
&lt;br /&gt;
==Réalisation==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d'un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -a /etc/alternatives .&lt;br /&gt;
         cp -a /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l'opposé du premier, supprimant la configuration actuelle d'un nouveau système linux pour y coller celle que l'on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -a backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -a backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*La récupération et l’installation du réseau, des configurations du miroir des archives, et des répertoire alternatives et default se fait simplement par la commande cp. L'option -a permet de copier les liens symboliques ainsi que l'arborescence tels qu'ils sont. Cependant la copie des liens symbolique semble ne pas fonctionner sur certains type de formatage de clé usb.&lt;br /&gt;
*Pour réinstaller les packages, il suffit de récupérer la liste des packages installés grâce à la commande dpkg --get-selections dont la sortie et redirigée vers un fichier texte. Ensuite il faut mettre à jour la liste des packages sur le nouveau système avec dpkg --set-selections qui prend en entrée le fichier texte précédent. Enfin il suffit d'upgrade les packages (apt-get dselect-upgrade) afin de tous les installer.&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=45982</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=45982"/>
				<updated>2017-11-05T13:58:58Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d'un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L'objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d'un système linux (configuration réseau, packages, et dossiers importants) afin de l'utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l'état n-1 voire à l'état initial.&lt;br /&gt;
&lt;br /&gt;
==Réalisation==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d'un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -r /etc/alternatives .&lt;br /&gt;
         cp -r /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -r /etc/alternatives .&lt;br /&gt;
         cp -r /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l'opposé du premier, supprimant la configuration actuelle d'un nouveau système linux pour y coller celle que l'on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -r backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -r backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
=Partie commune=&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=45981</id>
		<title>Cahier 2017 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B04&amp;diff=45981"/>
				<updated>2017-11-05T13:58:04Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Présentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Système pour réinstallation rapide d'un système linux=&lt;br /&gt;
==Objectifs==&lt;br /&gt;
*L'objectif principal de notre tache est de créer un programme permettant de récupérer la configuration d'un système linux (configuration réseau, packages, et dossiers importants) afin de l'utiliser pour configurer un système linux fraîchement installé.&lt;br /&gt;
*Il faudra ensuite proposé un système de fichiers incrémental permettant de forcer le système à l'état n-1 voire à l'état initial.&lt;br /&gt;
&lt;br /&gt;
==Réalisation==&lt;br /&gt;
*Pour la première partie de ce sujet, nous avons réalisé deux script shell ayant plusieurs fonctions.&lt;br /&gt;
*Le premier script récupère la configuration d'un système linux :&lt;br /&gt;
**crée un répertoire pour y enregistrer la configuration&lt;br /&gt;
**récupère le dossier de configuration réseau /etc/network&lt;br /&gt;
**récupère la liste des miroirs des archives debian&lt;br /&gt;
**récupère la liste des packages installés&lt;br /&gt;
**récupère les dossiers /etc/default et /etc/alternatives&lt;br /&gt;
getconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #get the current network and packages config of a linux system for further recover&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to get the current configuration of the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     echo &amp;quot;A backup directory is already existing&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to overwrite this backup ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Overwriting refused&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
         rm -r backup&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -r /etc/alternatives .&lt;br /&gt;
         cp -r /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
     else&lt;br /&gt;
         mkdir backup&lt;br /&gt;
         cd backup&lt;br /&gt;
         cp -r /etc/network .&lt;br /&gt;
         echo &amp;quot;Network configuration saved&amp;quot;&lt;br /&gt;
         cp -r /var/cache/debconf .&lt;br /&gt;
         cp /etc/apt/sources.list .&lt;br /&gt;
         cp -r /etc/apt/sources.list.d .&lt;br /&gt;
         echo &amp;quot;Mirror configuraiton saved&amp;quot;&lt;br /&gt;
         touch packages&lt;br /&gt;
         dpkg --get-selections &amp;gt; packages&lt;br /&gt;
         echo &amp;quot;Packages list saved&amp;quot;&lt;br /&gt;
         cp -r /etc/alternatives .&lt;br /&gt;
         cp -r /etc/default .&lt;br /&gt;
         echo &amp;quot;Other important files saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;Basic configuration successfully saved&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
*Le deuxième script effectue l'opposé du premier, supprimant la configuration actuelle d'un nouveau système linux pour y coller celle que l'on a sauvegardée précédemment :&lt;br /&gt;
setconf.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #set an old network and packages config of a linux system on a freshly installed linux system &lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;$(id -u)&amp;quot; != &amp;quot;0&amp;quot; ] ; then&lt;br /&gt;
    echo &amp;quot;error : This script must be run as root&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Trying to set the old configuration on the system&amp;quot;&lt;br /&gt;
 if [ -e backup -a -d backup ] ; then&lt;br /&gt;
     answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
     while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
         echo &amp;quot;Do you want to configure the network and the packages on this system ? [y/n] :&amp;quot;&lt;br /&gt;
         read answer&lt;br /&gt;
     done&lt;br /&gt;
     &lt;br /&gt;
     if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
         echo &amp;quot;Configuration aborted&amp;quot;&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         exit&lt;br /&gt;
     else&lt;br /&gt;
          rm -r /etc/network&lt;br /&gt;
          cp -r backup/network /etc/&lt;br /&gt;
          echo &amp;quot;Network reconfigured, going to restart...&amp;quot;&lt;br /&gt;
          /etc/init.d/networking restart&lt;br /&gt;
          echo &amp;quot;Network has been restarted&amp;quot;&lt;br /&gt;
          rm -r /var/cache/debconf&lt;br /&gt;
          cp -r backup/debconf /var/cache/&lt;br /&gt;
          dpkg-reconfigure debconf&lt;br /&gt;
          rm /etc/apt/sources.list &lt;br /&gt;
          cp backup/sources.list /etc/apt/&lt;br /&gt;
          rm -r /etc/apt/sources.list.d&lt;br /&gt;
          cp -r backup/sources.list.d /etc/apt/&lt;br /&gt;
          echo &amp;quot;Mirror configured, updating packages list...&amp;quot;&lt;br /&gt;
          apt-get update&lt;br /&gt;
          echo &amp;quot;Packages list updated&amp;quot;&lt;br /&gt;
          echo &amp;quot;Installing all packages...&amp;quot;&lt;br /&gt;
          dpkg --set-selections &amp;lt; backup/packages&lt;br /&gt;
          apt-get dselect-upgrade&lt;br /&gt;
          echo &amp;quot;Packages installed&amp;quot;&lt;br /&gt;
          rm -r /etc/alternatives&lt;br /&gt;
          cp -r backup/alternatives /etc/&lt;br /&gt;
          rm -r /etc/defaultreboot&lt;br /&gt;
          cp -r backup/default /etc/&lt;br /&gt;
         echo &amp;quot;done&amp;quot;&lt;br /&gt;
         echo &amp;quot;The system needs to reboot&amp;quot;&lt;br /&gt;
         answer=&amp;quot;\0&amp;quot;&lt;br /&gt;
         while [ $answer != &amp;quot;n&amp;quot; -a $answer != &amp;quot;y&amp;quot; ] ; do&lt;br /&gt;
             echo &amp;quot;Do you want to reboot now ? [y/n] :&amp;quot;&lt;br /&gt;
             read answer&lt;br /&gt;
         done&lt;br /&gt;
         if [ $answer = &amp;quot;n&amp;quot; ] ; then&lt;br /&gt;
             echo &amp;quot;Reboot refused&amp;quot;&lt;br /&gt;
             echo &amp;quot;done&amp;quot;&lt;br /&gt;
             exit&lt;br /&gt;
         else&lt;br /&gt;
             echo &amp;quot;System is going to reboot&amp;quot;&lt;br /&gt;
              reboot&lt;br /&gt;
             exit&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;error : There is no backup directory here, execute getconf.sh on the system you want to recover first&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P23_Application_de_gestion_de_conteneurs_pour_sites_Web&amp;diff=45707</id>
		<title>P23 Application de gestion de conteneurs pour sites Web</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P23_Application_de_gestion_de_conteneurs_pour_sites_Web&amp;diff=45707"/>
				<updated>2017-10-18T12:13:49Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Tableau de bord */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation générale du projet ==&lt;br /&gt;
L'objectif du projet est de créer une application web de gestion de conteneurs pour l’hébergement de sites web de manière simple.&lt;br /&gt;
Cette application pourra notamment permettre à l'utilisateur de choisir un nom de domaine, préciser certaines caractéristiques du conteneur hébergeant le site web, modifier le code source du site, ainsi que lancer ou détruire le conteneur.&lt;br /&gt;
&lt;br /&gt;
== Cahier des charges ==&lt;br /&gt;
L'application web sera hébergée sur une machine virtuelle linux qui regroupera tous les conteneurs. Cette machine virtuelle consommera une adresse IPv4 routée qui devra être partagée entre les conteneurs. Les sites web doivent être accessibles en IPv4 et IPv6 et communiquer en HTTP et HTTPS. Aussi les ressources processeur de la machine physique devront être gérées avec le mécanisme des cgroups.  &lt;br /&gt;
Il faut donc prévoir l'architecture réseau permettant la connexion des conteneurs, un ou plusieurs modèle(s) de conteneur capable d'héberger un site web, ainsi que l'architecture le l’application web.&lt;br /&gt;
&lt;br /&gt;
== Tableau de bord ==&lt;br /&gt;
&lt;br /&gt;
*L'architecture système / réseau doit pouvoir permettre de gérer plusieurs conteneurs à la fois tout en ne consommant qu'une adresse ip publique, il faut donc mettre en place une machine virtuelle avec une interface ethernet statique pouvant accueillir les conteneurs. Pour cela l'interface ethernet sera montée sur un bridge sur lequel les conteneurs seront eux-mêmes connecté grâce à une lan virtuelle. Il faudra aussi probablement faire du NAT / PAT (Network Address Translation / Port Address Translation) pour permettre aux conteneurs de communiquer avec l'extérieur. Un système de fichiers cgroup sera créer et monté sur la machine virtuelle afin de gérer les espaces de nommages des conteneurs pour assurer l'isolation de chacun ainsi que de contrôler les ressources utilisés.&lt;br /&gt;
[[Fichier:asr1.jpeg]] &lt;br /&gt;
*Modèle de l’application web :&lt;br /&gt;
**page connexion / authentification permettant aux personnes habilitées d'accéder au site&lt;br /&gt;
**base de donnée contenant la liste des personnes pouvant créer un site, et leur(s) site(s) web associé(s)[[Fichier:bddapweb.png]]&lt;br /&gt;
**page administrateur permettant de vérifier l'état de tous les conteneurs&lt;br /&gt;
***possibilité de relancer un conteneur stoppé ou de supprimer un conteneur&lt;br /&gt;
**page utilisateur permettant de créer, gérer ou supprimer un conteneur&lt;br /&gt;
***l'onglet de création permettra de créer et lancer un conteneur  &lt;br /&gt;
***choix à proposer lors de la création : type de serveur(s), présence ou non d'une base de donné, nom de domaine, langage utilisé&lt;br /&gt;
***l'onglet de gestion permettra de lancé / stoppé un conteneur, modifier le code source d'un site ou supprimer un conteneur&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Bddapweb.png&amp;diff=45706</id>
		<title>Fichier:Bddapweb.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Bddapweb.png&amp;diff=45706"/>
				<updated>2017-10-18T12:06:42Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Asr1.jpeg&amp;diff=45705</id>
		<title>Fichier:Asr1.jpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Asr1.jpeg&amp;diff=45705"/>
				<updated>2017-10-18T12:05:41Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P23_Application_de_gestion_de_conteneurs_pour_sites_Web&amp;diff=45704</id>
		<title>P23 Application de gestion de conteneurs pour sites Web</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P23_Application_de_gestion_de_conteneurs_pour_sites_Web&amp;diff=45704"/>
				<updated>2017-10-18T12:04:15Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation générale du projet ==&lt;br /&gt;
L'objectif du projet est de créer une application web de gestion de conteneurs pour l’hébergement de sites web de manière simple.&lt;br /&gt;
Cette application pourra notamment permettre à l'utilisateur de choisir un nom de domaine, préciser certaines caractéristiques du conteneur hébergeant le site web, modifier le code source du site, ainsi que lancer ou détruire le conteneur.&lt;br /&gt;
&lt;br /&gt;
== Cahier des charges ==&lt;br /&gt;
L'application web sera hébergée sur une machine virtuelle linux qui regroupera tous les conteneurs. Cette machine virtuelle consommera une adresse IPv4 routée qui devra être partagée entre les conteneurs. Les sites web doivent être accessibles en IPv4 et IPv6 et communiquer en HTTP et HTTPS. Aussi les ressources processeur de la machine physique devront être gérées avec le mécanisme des cgroups.  &lt;br /&gt;
Il faut donc prévoir l'architecture réseau permettant la connexion des conteneurs, un ou plusieurs modèle(s) de conteneur capable d'héberger un site web, ainsi que l'architecture le l’application web.&lt;br /&gt;
&lt;br /&gt;
== Tableau de bord ==&lt;br /&gt;
&lt;br /&gt;
*L'architecture système / réseau doit pouvoir permettre de gérer plusieurs conteneurs à la fois tout en ne consommant qu'une adresse ip publique, il faut donc mettre en place une machine virtuelle avec une interface ethernet statique pouvant accueillir les conteneurs. Pour cela l'interface ethernet sera montée sur un bridge sur lequel les conteneurs seront eux-mêmes connecté grâce à une lan virtuelle. Il faudra aussi probablement faire du NAT / PAT (Network Address Translation / Port Address Translation) pour permettre aux conteneurs de communiquer avec l'extérieur.&lt;br /&gt;
[[Fichier:asr1.jpeg]] &lt;br /&gt;
*Modèle de l’application web :&lt;br /&gt;
**page connexion / authentification permettant aux personnes habilitées d'accéder au site&lt;br /&gt;
**base de donnée contenant la liste des personnes pouvant créer un site, et leur(s) site(s) web associé(s)[[Fichier:bddapweb.png]]&lt;br /&gt;
**page administrateur permettant de vérifier l'état de tous les conteneurs&lt;br /&gt;
***possibilité de relancer un conteneur stoppé ou de supprimer un conteneur&lt;br /&gt;
**page utilisateur permettant de créer, gérer ou supprimer un conteneur&lt;br /&gt;
***l'onglet de création permettra de créer et lancer un conteneur  &lt;br /&gt;
***choix à proposer lors de la création : type de serveur(s), présence ou non d'une base de donné, nom de domaine, langage utilisé&lt;br /&gt;
***l'onglet de gestion permettra de lancé / stoppé un conteneur, modifier le code source d'un site ou supprimer un conteneur&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P23_Application_de_gestion_de_conteneurs_pour_sites_Web&amp;diff=45336</id>
		<title>P23 Application de gestion de conteneurs pour sites Web</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P23_Application_de_gestion_de_conteneurs_pour_sites_Web&amp;diff=45336"/>
				<updated>2017-10-01T13:54:46Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : Page créée avec « == Présentation générale du projet == L'objectif du projet est de créer une application web de gestion de conteneurs pour l’hébergement de sites web de manière simple... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation générale du projet ==&lt;br /&gt;
L'objectif du projet est de créer une application web de gestion de conteneurs pour l’hébergement de sites web de manière simple.&lt;br /&gt;
Cette application pourra notamment permettre à l'utilisateur de choisir un nom de domaine, préciser certaines caractéristiques du conteneur hébergeant le site web, modifier le code source du site, ainsi que lancer ou détruire le conteneur.&lt;br /&gt;
&lt;br /&gt;
== Cahier des charges ==&lt;br /&gt;
L'application web sera hébergée sur une machine virtuelle linux qui regroupera tous les conteneurs. Cette machine virtuelle consommera une adresse IPv4 routée qui devra être partagée entre les conteneurs. Les sites web doivent être accessibles en IPv4 et IPv6 et communiquer en HTTP et HTTPS. Aussi les ressources processeur de la machine physique devront être gérées avec le mécanisme des cgroups.  &lt;br /&gt;
Il faut donc prévoir l'architecture réseau permettant la connexion des conteneurs, un ou plusieurs modèle(s) de conteneur capable d'héberger un site web, ainsi que l'architecture le l’application web.&lt;br /&gt;
&lt;br /&gt;
== Tableau de bord ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Projets_IMA5_2017/2018&amp;diff=45335</id>
		<title>Projets IMA5 2017/2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Projets_IMA5_2017/2018&amp;diff=45335"/>
				<updated>2017-10-01T13:28:30Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Répartition des binômes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Merci de référencer vos pages de projets ici. Merci aussi d'uniformiser vos formats que ce soit en regardant la présentation des projets déjà créés ou en allant modifier le format des précédents si votre façon de faire vous semble la meilleure. Dans tous les cas un minimum de communication entre les binômes est conseillée.&lt;br /&gt;
&lt;br /&gt;
Toutes les sources doivent être déposées sur notre archive GIT. Le service est disponible à l'URL [https://archives.plil.fr archives.plil.fr]. Connectez-vous avec vos identifiants Polytech'Lille. Sauf indication contraire de vos encadrants, rendez le projet public et mettez le lien sur votre Wiki. Vous pouvez trouver de la documentation sur ce système d'archives sur ce [https://git-scm.com/book/fr/v1 site].&lt;br /&gt;
&lt;br /&gt;
== Répartition des binômes ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Projet&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Elèves&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Encadrant Ecole&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Rapport décembre&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Rapports finaux&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Vidéo&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P1 Conception d'une pompe automatique à insuline]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Alice Coffin / Amina Fahem&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Belkacem Ould Bouamama&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P18 Localisation of quadrotors]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Nicky UNG / Hugo Delatte&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Jérémie DEQUIDT / Gang ZHENG&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P25 Développement d'un cobot ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Tristan HART&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Rodolphe Astori / Alexandre Boé / Xavier Redon / Thomas Vantroys &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P29 QT pour tablette à retour tactile]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;lValentin BEAUCHAMP / Vivian SENAFFE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Laurent GRISONI&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P33 Utilisation de Nao avec des enfants autistes]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Antoine ARNAUDET&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Thomas VANTROYS&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P34 Robot reconstructeur de mouvement]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Baptiste GRILLERE / Jean-Baptiste SAISON&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Rochdi MERZOUKI / Guillaume DEWAELE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P21 Projet bras déformable antagoniste]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Florian GIOVANNANGELI&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Thor BIEZE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P20 Projet marionnette déformable interactive ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Bacem HAGUI&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Félix VANNESTE, Jeremie DEQUIDT&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P5 Commande d’une centrale de production de biogaz ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Cheikh Soilihi SAID AHMED&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Midzodzi PEKPE &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P15 Réseau de capteurs temps réel ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Edmur Lopes&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Alexandre Boé / Xavier Redon / Thomas Vantroys&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[P23 Application de gestion de conteneurs pour sites Web]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Alexis MACHEREZ&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Xavier REDON / Thomas VANTROYS&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42451</id>
		<title>IMA4 2016/2017 P32</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42451"/>
				<updated>2017-05-18T12:13:54Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Semaine 9 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Cahier des charges'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;Présentation générale du projet&amp;lt;/span&amp;gt;=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Contexte&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'expansion de l'utilisation des objets connectés permet de nos jours d'accéder à des données ou de contrôler aisément d'autres systèmes connectés à distance. Les objets connectés sont de plus en plus déployés mais leur sécurité n'est pas toujours testée. Par conséquent, de nombreuses informations sensibles sont susceptibles de transiter en permanence par le biais de multiples plages de fréquences. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ceci amène donc un questionnement sur la sécurité des transferts de données entre la multitude d'objets connectés actuellement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Objectif du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de réaliser un brouilleur d'ondes radiofréquence dans la bande des 868 MHz capable de bloquer les communications LoRa.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Description du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
A l'aboutissement du projet, nous devrions être capable de détecter une communication LoRa dans la bande des 868 MHz, et de la brouiller elle seule, sans incidence sur les autres communications sur d'autres fréquences du réseau LoRa.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous devrons réaliser un montage réalisant un brouillage sur la plage 863-870Mhz afin d'empêcher toute communication LoRa, en envoyant du bruit électronique sur toute la plage de fréquence.&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet, nous perfectionnerons ce montage pour qu'il puisse détecter une communication LoRa à une fréquence donnée (grâce au &amp;quot;join-request message&amp;quot; de 18 octets envoyés par le end-point/node, ou bien grâce aux informations données dans le préambule des paquets), afin d'envoyer des données erronées et de bloquer uniquement cette communication.&lt;br /&gt;
&lt;br /&gt;
Si le temps et le budget le permettent, nous pourrons aussi être amenés à brouiller la plage de fréquences autour des 433 MHz (aussi utilisé par le réseau LoRa).&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Choix techniques : matériel et logiciel&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser ce système, nous allons utiliser un microcontrôleur cc430 muni d'un transceiver cc1101, d'un récepteur LoRa(868MHz) communicant via protocole SPI avec le microcontrôleur, 2 antennes, une batterie, quelques LEDs.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Calendrier prévisionnel'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Liste des tâches à effectuer&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
# Documentation sur le réseau LoRa&lt;br /&gt;
##moyen de transmission&lt;br /&gt;
##format de modulation&lt;br /&gt;
##trame des paquets&lt;br /&gt;
# Réalisation du premier montage brouillant toute la plage&lt;br /&gt;
##contrôler l'émetteur RF du cc430&lt;br /&gt;
##programmer un bruitage sur la plage 863-870MHz&lt;br /&gt;
##test et optimisation&lt;br /&gt;
# Ajout d'un récepteur LoRa pour détecter et brouiller une seule communication&lt;br /&gt;
##contrôler le récepteur LoRa avec le cc430 par protocole spi&lt;br /&gt;
##détecter une communication LoRa à une fréquence donnée&lt;br /&gt;
##contrôler l'émetteur RF afin de brouiller cette communication de manière brutale&lt;br /&gt;
##brouiller cette communication en tentant de changer les données du paquet &lt;br /&gt;
##test et optimisation&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Calendrier&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
''[[Avant le 19/12/16]]'' - Élaboration du Cahier des charges et remplissage du Wiki&lt;br /&gt;
&lt;br /&gt;
''[[Avant fin Janvier]]'' - Complément du Cahier des Charges et listage du matériel nécessaire pour le projet&lt;br /&gt;
&lt;br /&gt;
''[[Répartition sur le S8]]'' - 120h: Réalisation de la 1ere fonction (45h) / Réalisation de la 2e fonction (45h) / Test et débuguage (30h)&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Feuille d'heures'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Après les vacances !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Cahier des charges / Wiki&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 1h&lt;br /&gt;
| 0,5h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
| 7,5h&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le réseau LoRa&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8,5h&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le matériel&lt;br /&gt;
| 1h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 1h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|12h&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7,5h&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 7h&lt;br /&gt;
|-&lt;br /&gt;
| Initialisation des registres&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3h&lt;br /&gt;
|3h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6h&lt;br /&gt;
|-&lt;br /&gt;
| Code 1ère fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1,5h&lt;br /&gt;
|3h&lt;br /&gt;
|3h&lt;br /&gt;
|4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 11,5h&lt;br /&gt;
|-&lt;br /&gt;
| Code 2ème fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 8h&lt;br /&gt;
|-&lt;br /&gt;
| Optimisation/Correction fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 7h&lt;br /&gt;
|-&lt;br /&gt;
| Optimisation/Correction fonction 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| 6h&lt;br /&gt;
|-&lt;br /&gt;
| Tests et mesures&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 11h&lt;br /&gt;
|-&lt;br /&gt;
| Modification de la carte&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Avancement du Projet'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Phase préparatoire'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[Jeu 15/12/16]]'' &lt;br /&gt;
*Rendez-vous de mise au point du cahier des charges avec les trois encadrants (M. Boé, M. Vantroys et M. Redon)&lt;br /&gt;
*Elaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 1'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[23/01/17 - 29/01/17]]'' &lt;br /&gt;
*Revue du Cahier des Charges&lt;br /&gt;
*Recherches approfondies sur les modes de transmissions du réseau LoRa&lt;br /&gt;
*Recherche de matériel&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 2'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[30/01/17 - 05/02/17]]''  &lt;br /&gt;
*Précisions sur le cahier des charges&lt;br /&gt;
*Listage du matériel&lt;br /&gt;
*Recherche et détermination de solutions technologiques possibles pour les fonctions demandées&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 3'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[06/02/17 - 12/02/17]]''&lt;br /&gt;
*validation du matériel&lt;br /&gt;
Nous allons utiliser un cc430f5137 (MCU+RF) monté sur une carte optimisée pour les communications autours de 868Mhz.&lt;br /&gt;
Nous pouvons commencer à étudier son fonctionnement, particulièrement celui du module RF (cc1101).&lt;br /&gt;
Nous avons aussi récupéré des exemples de code en c sur le site de Texas Instrument et vu l'utilisation de ces codes sur un projet IMA5 de l'an passé.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 4'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/02/17 - 19/02/17]]''&lt;br /&gt;
*Recherche de solutions pour répondre à la 1ère fonction (brouiller la plage 863-870Mhz).&lt;br /&gt;
&lt;br /&gt;
Après une lecture approfondie de la datasheet du module RF du cc430, nous avons choisi d'utiliser la fréquence de base du module (pouvant être définie grâce aux registres) couplée au registre CHANNR. Cela nous permettra de modifier plus facilement la fréquence de la porteuse, en suivant la formule suivante : [[Fichier:rampe.png]].&lt;br /&gt;
&lt;br /&gt;
Nous pourrons alors balayer la plage de fréquence en changeant la valeur de CHANNR.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 5'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[27/02/17 - 05/03/17]]''&lt;br /&gt;
&lt;br /&gt;
A l'aide de la datasheet du cc1101 ([http://www.ti.com/lit/ds/symlink/cc1101.pdf datasheet_cc1101] pages : 70 à 95), nous avons défini les registres du module RF de la manière suivante (sachant que la fréquence du quartz est de 26MHz, soit Fxosc=26MHz) :&lt;br /&gt;
&lt;br /&gt;
*La fréquence de base a été fixée à 862,999MHz en suivant la formule donnée dans la data sheet[[Fichier:carrier_formula.png]]&lt;br /&gt;
ce qui nous a donné les valeurs FREQ2=0x21, FREQ1=0x31 et FREQ0=0x3A (FREQ=2 175 290)&lt;br /&gt;
&lt;br /&gt;
*Nous avons suivi la formule [[Fichier:chanspace_formula.png]] afin d'avoir un espacement entre les cannaux d'environ 100Khz&lt;br /&gt;
ce qui nous a donné  MDMCFG1=0x02 (CHANSPC_E=2) et MDMCFG0=0x00(CHANSPC_M=0)&lt;br /&gt;
&lt;br /&gt;
*Pour le moment, nous avons choisi le mode de modulation AM, nous avons donc initialisé les registres MDMCFG2=0x30 (mode ASK/OOK) et FREND0=0x50(patable=0 donnant le mode ASK)&lt;br /&gt;
&lt;br /&gt;
*Nous avons créé une bibliothèque RFconfig.h regroupant les valeurs de tous les registres :&lt;br /&gt;
&lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 //0 (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x0F //default (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x31 //868Mhz&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0x3A /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x22 //default (data rate)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x30 // ASK/OOK,no sync-word&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x02 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0x00 //chanspc_m=0&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 //default (no effet on ASK/OOK mode)&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset not used)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x03 //default (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x40 //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x50 //patable=0 -&amp;gt; ASK&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosen&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x0B //default&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 6'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[06/03/17 - 12/03/17]]''&lt;br /&gt;
*Nous avons préparé un premier code réalisant une rampe sur la plage 863-870MHz. Ce code est basé sur une boucle infinie qui incrémente le registre chann de 0 à 69 (pour passer de 863 à 870Mhz) et envoie des paquets 0xFF grâce aux fonctions ChangeChannel(chann) et send_comand().&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		1	// maximum size of data sent by rf&lt;br /&gt;
 &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 10000&lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 &lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFF;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init();&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);	 &lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
     {&lt;br /&gt;
       ChangeChannel(chann);&lt;br /&gt;
       send_cmd();&lt;br /&gt;
       if(chann&amp;gt;=69) &lt;br /&gt;
 	{&lt;br /&gt;
 	  chann=0x00;&lt;br /&gt;
 	}&lt;br /&gt;
       else&lt;br /&gt;
 	{&lt;br /&gt;
 	  chann++;&lt;br /&gt;
 	}&lt;br /&gt;
       __delay_cycles(DELAY);&lt;br /&gt;
     }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Après quelques corrections du code, nous avons pu le compiler grâce au Makefile&lt;br /&gt;
&lt;br /&gt;
*Avec la commande (exécutée en root) et le montage suivants, nous avons upload le main sur le cc430&lt;br /&gt;
 mspdebug rf2500 &amp;quot;prog main&amp;quot;&lt;br /&gt;
[[Fichier:montage001.png]]&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 7'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/03/17 - 19/03/17]]''&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé les premiers tests sur l'analyseur de spectre afin de vérifier que le code fonctionne bien.&lt;br /&gt;
&lt;br /&gt;
*Dans un premier temps, nous avons essayé une fréquence fixe pour voir la calibration du cc430.&lt;br /&gt;
[[Fichier:862.png]]&lt;br /&gt;
Avec un exemple à 862Mhz, on remarque bien que les registres ont bien été initialisés et que la carte émet à la fréquence demandée.&lt;br /&gt;
&lt;br /&gt;
*Ensuite, nous avons testé le code effectuant le balayage sur la plage de fréquence 863-870Mhz, en augmentant le sweep time de l'analyseur de spectre pour voir les différentes fréquences auxquelles la carte émet.&lt;br /&gt;
[[Fichier:sweep.png]]&lt;br /&gt;
En observant de 861 à 872 Mhz sur l'écran de l'analyseur, on peut voir que le code effectue bien le balayage.&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission de la carte étant faible, nous avons essayé de l'augmenter en modifiant certains registres notamment ceux que l'on peut optimiser à l'aide du logiciel smart RF studio. Cependant, nous pensons qu'il faudra changer l'antenne patch actuelle de la carte pour une antenne connectée en SMA.&lt;br /&gt;
&lt;br /&gt;
*Nous avons aussi tenté de brouiller les communications d'autres groupes de projet utilisant des modules LoRa. Ces derniers étant configurés à 433Mhz, nous avons dû changer la fréquence de notre carte. Le brouillage ne fonctionnait pas mais notre carte étant optimisée pour une émission autour de 868Mhz, les résultats n'étaient pas pertinents.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 8'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[20/03/17 - 26/03/17]]'' &lt;br /&gt;
&lt;br /&gt;
*Nous avons emprunté à M. Vantroys 3 modules SX1276 montés sur des cartes NUCLEO-F401RE afin de pouvoir tester notre carte sur une communication LoRa à 868Mhz&lt;br /&gt;
[[Fichier:lorambed.png]]&lt;br /&gt;
*Le code utilisé pour le test a été récupéré sur le forum des développeurs du site mbed.com. C'est un code &amp;quot;ping pong&amp;quot; effectuant une communication continue entre deux modules LoRa à une fréquence de 868Mhz. Il nous a suffit d'utiliser le compilateur du site (qui regroupe toutes les bibliothèques nécessaires) en indiquant que la carte utilisée est une F401RE pour que le binaire produit soit compatible. La carte NUCLEO étant reconnue comme un système de fichier par Linux, pour la flasher il faut la monter en usb à l'aide des commandes fdisk et mount puis de copier le binaire dedans avec la commande cp.&lt;br /&gt;
[[Fichier:lora pingpong.zip]]&lt;br /&gt;
*Une fois les modules NUCLEO flashés, la communication LoRa est établie dès que deux modules sont alimentés. Nous avons donc branché en USB deux modules sur deux machines différentes afin d'observer la communication sur des terminaux. La communication se fait bien, l'un envoie &amp;quot;ping&amp;quot; tandis que l'autre envoie &amp;quot;pong&amp;quot; lorsqu'il reçoit &amp;quot;ping&amp;quot;. Malheureusement, comme nous l'avions prédit, notre carte a une puissance d'émission trop faible et ne parvient pas à brouiller efficacement.&lt;br /&gt;
*Les modules peuvent aussi communiquer en modulation FSK, dans ce cas notre système arrive à effectuer le brouillage. Néanmoins, il serait plus intéressant de parvenir à brouiller la communication LoRa.&lt;br /&gt;
*Après plusieurs changements dans le code du cc430, n'ayant pas de résultats positifs, nous avons diminué la puissance d'émission des modules LoRa en changeant un header dans le code lora_pingpong.cpp. En passant cette puissance de 14dBm à 6dBm, nous sommes parvenus à brouiller la communication entre les deux modules LoRa.&lt;br /&gt;
&lt;br /&gt;
*En parallèle, nous avons commencé à rechercher des solutions pour la fonction 2. Un pseudo code est donné sur le site ti.com ([https://www.ti.com/lit/an/swra315/swra315.pdf pseudo_code_frequency_scanning]) qui permet de faire un scan sur une plage de fréquence et de récupérer la fréquence ou le signal reçu est le plus fort. Ce code pourra être écrit en C puis incorporé dans notre main pour détecter une communication et la brouiller.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 9'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[27/03/17 - 02/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*Même si le brouillage ne s’effectue qu'à puissance réduite, nous avons cherché à l'optimiser&lt;br /&gt;
**Nous avons premièrement réalisé que le mode de modulation choisi au départ (ASK) n'était pas adapté au brouillage d'une communication LoRa. Nous avons donc essayé le mode GFSK qui est le plus proche du format de modulation du réseau LoRa. Nous avons aussi essayé les modes 2FSK et 4FSK qui sont relativement proches du GFSK. Nous en avons conclu que le mode de modulation à utiliser est GFSK (ce mode fonctionne aussi pour brouiller la modulation FSK)&lt;br /&gt;
**Ensuite, nous avons réduit la plage de fréquence balayée par le cc430 afin de voir si il y avait une influence sur le brouillage. Nous avons remarqué que le brouillage était plus efficace pour un balayage de 866 à 870 Mhz (au lieu de 863-870 initialement)&lt;br /&gt;
**Dans le même ordre d'idée, nous avons décidé de réduire le nombre d'incrémentations du registre CHANNR afin d'augmenter la rapidité du balayage. Pour ce faire, nous avons augmenté la taille de chaque canal, passant de 100kHz à 200kHz&lt;br /&gt;
**La puissance d'émission de la carte a été changée dans la fonction WritePATable (appelée par rfinit() dans le main), afin d'être maximale (12dBm)&lt;br /&gt;
**Enfin, nous avons augmenté le nombre de paquets à envoyer&lt;br /&gt;
&lt;br /&gt;
Nouvelle bibliothèque RFconfig.h :&lt;br /&gt;
&lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 // (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x06 //default 0f (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x4E //866&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0xC2 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x83 // data rate&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x13 // GFSK &lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x22 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0xF8 //chanspc_m=248&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 // default 47khz deviation&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset for demodulation)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x07 // (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x77 //&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x10 //patable=0 (useless for gfsk) &lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosed&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x09 //&lt;br /&gt;
&lt;br /&gt;
Nouveau main.c : &lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;led_commands.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		10	// maximum size of data sent by rf&lt;br /&gt;
  &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 5000 //15ms  &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 &lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFD;&lt;br /&gt;
   buffer[1] = 0xAA;&lt;br /&gt;
   buffer[2] = 0xFF;&lt;br /&gt;
   buffer[3] = 0x11;&lt;br /&gt;
   buffer[4] = 0xFF;&lt;br /&gt;
   buffer[5] = 0x66;&lt;br /&gt;
   buffer[6] = 0xFF;&lt;br /&gt;
   buffer[7] = 0x33;&lt;br /&gt;
   buffer[8] = 0x1F;&lt;br /&gt;
   buffer[9] = 0xF8;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   unsigned char led2=0x10;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(0x10, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 allumée quand le cc430 est sous tension&lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chann);&lt;br /&gt;
     send_cmd();&lt;br /&gt;
     if(chann&amp;gt;=20) //866-870&lt;br /&gt;
     {&lt;br /&gt;
       chann=0x00;&lt;br /&gt;
       led2=led2^0x10;&lt;br /&gt;
       set_color(0x10, 0x00, 0x00, led2, 0x00, 0x00); //led2 s'allume toutes les 2 rampes&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {&lt;br /&gt;
       chann++;&lt;br /&gt;
     }&lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Fonction WritePATable :&lt;br /&gt;
&lt;br /&gt;
 void WritePATable(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char valueRead = 0;&lt;br /&gt;
   &lt;br /&gt;
   //while(valueRead != 0x03)    // Output Power: -30  [dBm]&lt;br /&gt;
   //while(valueRead != 0x25)    // Output Power: -12  [dBm]&lt;br /&gt;
   //while(valueRead != 0x2D)    // Output Power: -6   [dBm]&lt;br /&gt;
   //while(valueRead != 0x8D)    // Output Power:  0   [dBm]&lt;br /&gt;
   //while(valueRead != 0xC3)    // Output Power:  10  [dBm]&lt;br /&gt;
   while(valueRead != 0xC0)    // Output Power:  Maximum  [dBm]&lt;br /&gt;
   //while(valueRead != 0xC6)    // Output Power(default):  8.8  [dBm]&lt;br /&gt;
   {&lt;br /&gt;
     /* Write the power output to the PA_TABLE and verify the write operation.  */&lt;br /&gt;
     unsigned char i = 0; &lt;br /&gt;
 &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
     //RF1AINSTRW = 0x7E03; // PA Table write (burst), Output Power: -30  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E25; // PA Table write (burst), Output Power: -12  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E2D; // PA Table write (burst), Output Power: -6   [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E8D; // PA Table write (burst), Output Power: 0    [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC3; // PA Table write (burst), Output Power: 10   [dBm]&lt;br /&gt;
     RF1AINSTRW = 0x7EC0; // PA Table write (burst), Output Power: Maximum  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC6; // PA Table write (burst), Output Power(default):  8.8  [dBm]&lt;br /&gt;
     &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
       RF1AINSTR1B = RF_PATABRD;                 // -miguel read &amp;amp; write&lt;br /&gt;
     &lt;br /&gt;
     // Traverse PATABLE pointers to read &lt;br /&gt;
     for (i = 0; i &amp;lt; 7; i++)&lt;br /&gt;
     {&lt;br /&gt;
       while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
       valueRead  = RF1ADOUT1B;     &lt;br /&gt;
     }&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
     valueRead  = RF1ADOUTB;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 10'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[03/04/17 - 09/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission étant trop faible pour brouiller la communication entre les 2 modules LoRa, nous avons décidé de changer l'antenne de la carte. Il a fallu couper l'antenne patch à l'aide d'une scie afin de souder un connecteur SMA.&lt;br /&gt;
[[Fichier:cc430antenne.png]]&lt;br /&gt;
*Grâce à cette nouvelle antenne, la communication peut maintenant être brouillée à une puissance de 10dBm (contre 6 auparavant). Mais il faut que la carte reste relativement proche d'un des modules.&lt;br /&gt;
*Pour réussir le brouillage quand les modules LoRa sont à leur puissance maximale (14dBm), il faudra sûrement ajouter un amplificateur entre la sortie de la carte et son antenne.&lt;br /&gt;
*Nous avons codé la fonction de scan en c et l'avons incorporé dans le main &lt;br /&gt;
**Cette fonction autorise le module à entrer en mode RX pour recevoir les communications. Elle incrémente ensuite le canal pour parcourir la plage 863-870MHz afin de détecter une communication. Toute les incrémentations, la variable rssi récupère la valeur contenue dans le registre qui correspond à la valeur du RSSI. Cette valeur étant en binaire complément 2, elle est convertie en dBm et placée dans un entier. Enfin, si cette valeur est supérieur à la valeur maximale déjà mesuré ou à un palier prédéfini (ici 0dBm), on stocke le numéro du canal correspondant qui sera utilisé dans le main par la suite.&lt;br /&gt;
&lt;br /&gt;
fonction de scan :&lt;br /&gt;
 void freq_scan(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char rssi;&lt;br /&gt;
   long rssi_dbm;&lt;br /&gt;
   unsigned char chan_scan=START_FREQ_CHAN;&lt;br /&gt;
   long rssi_max=0; //scan will take communication above 0dbm&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, led2, 0x00); //led2 blue while scanning&lt;br /&gt;
   &lt;br /&gt;
   ChangeChannel(chan_scan);&lt;br /&gt;
   ReceiveOn();    //enable RX&lt;br /&gt;
   while((Strobe(RF_SNOP) &amp;amp; 0x70) != 0x10); //make sure RX is ready&lt;br /&gt;
   while(chan_scan&amp;lt;STOP_FREQ_CHAN)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chan_scan);&lt;br /&gt;
     rssi = ReadSingleReg(RSSI);  //define in cc430f5137.h RSSI=0x34 corresponding to addr of rssi value&lt;br /&gt;
     if (rssi &amp;gt;= 128) &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (long)((long)( rssi - 256) / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     else &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (rssi / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     if(rssi_dbm&amp;gt;rssi_max)&lt;br /&gt;
     {&lt;br /&gt;
       rssi_max=rssi_dbm;&lt;br /&gt;
       chan_jam=chan_scan-10; //start jamming 2Mhz below max dbm received&lt;br /&gt;
     }&lt;br /&gt;
     chan_scan++;&lt;br /&gt;
     Strobe( RF_SFRX); //flush the RX FIFO&lt;br /&gt;
   }&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
nouveau main :&lt;br /&gt;
&lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chan_main=0x00;&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 on if cc430 powered&lt;br /&gt;
   int i;&lt;br /&gt;
   &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     freq_scan();&lt;br /&gt;
     ReceiveOff();&lt;br /&gt;
     chan_main=chan_jam;&lt;br /&gt;
     if (chan_main != 0)  //jam only if a communication xas detected with freq_scan&lt;br /&gt;
     {&lt;br /&gt;
       for(i=0 ; i&amp;lt;(20*NUM_JAM_RAMP) ; i++) //ramp start 2Mhz below chan_jam and stop 2Mhz above&lt;br /&gt;
       {&lt;br /&gt;
         ChangeChannel(chan_main);&lt;br /&gt;
         if (chan_main&amp;gt;= (chan_jam+20))&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main=0x00;&lt;br /&gt;
           led2=led2^0x10;&lt;br /&gt;
           set_color(led1, 0x00, 0x00, led2, 0x00, 0x00); //led2 blink red every two ramp of jamming&lt;br /&gt;
         }&lt;br /&gt;
         else&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main++;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     chan_main=0x00;  &lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
header :&lt;br /&gt;
 #define DELAY 100 //300us  &lt;br /&gt;
 #define DELAY_RSSI 10 //30us&lt;br /&gt;
 &lt;br /&gt;
 #define START_FREQ_CHAN 15&lt;br /&gt;
 #define STOP_FREQ_CHAN 50     //scanning 863-870Mhz with 200khz steps&lt;br /&gt;
 #define RSSI_OFFSET 74 //cf datasheet&lt;br /&gt;
 &lt;br /&gt;
 #define NUM_JAM_RAMP 50&lt;br /&gt;
 &lt;br /&gt;
 unsigned char chan_jam=0x00;&lt;br /&gt;
 unsigned char led2=0x10;&lt;br /&gt;
 unsigned char led1=0x10;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Après les vacances'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
*Nous avons effectué des tests pour vérifier si la fonction de scan fonctionne. Malheureusement, le cc430 n'a pas l'air de détecter de communications. La fréquence des modules LoRa a été fixée à 868MHz en mettant le header LORA_FHSS_ENABLE à false (ceci désactive le glissement de fréquence) pour faire des tests dans des conditions plus optimales. Cependant, le cc430 ne détecte toujours aucune communication.&lt;br /&gt;
*Nous avons donc vérifié plusieurs éléments du code : la conversion en dBm du registre RSSI, la lecture dans le registre, le temps de mise à jour du registre RSSI.&lt;br /&gt;
**D'après le pseudo-code fourni par texas instrument, et ce que nous avons pu lire sur les forums des développeurs, la conversion fonctionne. Nous avons tout de même essayé d'autre moyen de conversion, mais aucune de ces méthodes n'a permis au cc430 de détecter une communication.&lt;br /&gt;
**En ce qui concerne la lecture dans le registre, nous avons effectué des tests en lisant dans d'autres registres et en allumant une led, nous en avons conclu que la fonction ReadSingleReg fonctionne. Nous nous sommes donc portés sur l'adresse de ce registre, en vérifiant la bibliothèque cc430f5137.h, nous avons constaté que la variable RSSI était bien définie dans les adresses de registres.&lt;br /&gt;
**Enfin, d'après les datasheets du cc430 et du cc1101, le registre RSSI met un certain temps a s'actualiser, ce temps peut être calculé et dépend de la taille des paquets reçu. Ne pouvant pas connaitre pas la taille des paquets de la communication que l'on cherche à brouiller à l'avance, nous avons décidé de fixer un temps d'attente 2 fois supérieur au temps caractéristique (~15us), soit 30 micro seconde.&lt;br /&gt;
*Malgré ces essaies et corrections de code, nous ne sommes pas parvenu à faire fonctionner la détection de communication.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Fichiers Rendus'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[[Fichier:code_fonction_1.zip]]&lt;br /&gt;
*[[Fichier:code_fonction_2.zip]]&lt;br /&gt;
*[[Fichier:compte_rendu.pdf]]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Bibliographie'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[http://www.ti.com/ ti.com]&lt;br /&gt;
*[https://www.mbed.com/en/ mbed.com]&lt;br /&gt;
*[http://www.semtech.com/ semtech.com]&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42450</id>
		<title>IMA4 2016/2017 P32</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42450"/>
				<updated>2017-05-18T12:12:59Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Semaine 9 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Cahier des charges'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;Présentation générale du projet&amp;lt;/span&amp;gt;=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Contexte&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'expansion de l'utilisation des objets connectés permet de nos jours d'accéder à des données ou de contrôler aisément d'autres systèmes connectés à distance. Les objets connectés sont de plus en plus déployés mais leur sécurité n'est pas toujours testée. Par conséquent, de nombreuses informations sensibles sont susceptibles de transiter en permanence par le biais de multiples plages de fréquences. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ceci amène donc un questionnement sur la sécurité des transferts de données entre la multitude d'objets connectés actuellement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Objectif du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de réaliser un brouilleur d'ondes radiofréquence dans la bande des 868 MHz capable de bloquer les communications LoRa.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Description du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
A l'aboutissement du projet, nous devrions être capable de détecter une communication LoRa dans la bande des 868 MHz, et de la brouiller elle seule, sans incidence sur les autres communications sur d'autres fréquences du réseau LoRa.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous devrons réaliser un montage réalisant un brouillage sur la plage 863-870Mhz afin d'empêcher toute communication LoRa, en envoyant du bruit électronique sur toute la plage de fréquence.&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet, nous perfectionnerons ce montage pour qu'il puisse détecter une communication LoRa à une fréquence donnée (grâce au &amp;quot;join-request message&amp;quot; de 18 octets envoyés par le end-point/node, ou bien grâce aux informations données dans le préambule des paquets), afin d'envoyer des données erronées et de bloquer uniquement cette communication.&lt;br /&gt;
&lt;br /&gt;
Si le temps et le budget le permettent, nous pourrons aussi être amenés à brouiller la plage de fréquences autour des 433 MHz (aussi utilisé par le réseau LoRa).&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Choix techniques : matériel et logiciel&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser ce système, nous allons utiliser un microcontrôleur cc430 muni d'un transceiver cc1101, d'un récepteur LoRa(868MHz) communicant via protocole SPI avec le microcontrôleur, 2 antennes, une batterie, quelques LEDs.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Calendrier prévisionnel'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Liste des tâches à effectuer&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
# Documentation sur le réseau LoRa&lt;br /&gt;
##moyen de transmission&lt;br /&gt;
##format de modulation&lt;br /&gt;
##trame des paquets&lt;br /&gt;
# Réalisation du premier montage brouillant toute la plage&lt;br /&gt;
##contrôler l'émetteur RF du cc430&lt;br /&gt;
##programmer un bruitage sur la plage 863-870MHz&lt;br /&gt;
##test et optimisation&lt;br /&gt;
# Ajout d'un récepteur LoRa pour détecter et brouiller une seule communication&lt;br /&gt;
##contrôler le récepteur LoRa avec le cc430 par protocole spi&lt;br /&gt;
##détecter une communication LoRa à une fréquence donnée&lt;br /&gt;
##contrôler l'émetteur RF afin de brouiller cette communication de manière brutale&lt;br /&gt;
##brouiller cette communication en tentant de changer les données du paquet &lt;br /&gt;
##test et optimisation&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Calendrier&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
''[[Avant le 19/12/16]]'' - Élaboration du Cahier des charges et remplissage du Wiki&lt;br /&gt;
&lt;br /&gt;
''[[Avant fin Janvier]]'' - Complément du Cahier des Charges et listage du matériel nécessaire pour le projet&lt;br /&gt;
&lt;br /&gt;
''[[Répartition sur le S8]]'' - 120h: Réalisation de la 1ere fonction (45h) / Réalisation de la 2e fonction (45h) / Test et débuguage (30h)&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Feuille d'heures'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Après les vacances !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Cahier des charges / Wiki&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 1h&lt;br /&gt;
| 0,5h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
| 7,5h&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le réseau LoRa&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8,5h&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le matériel&lt;br /&gt;
| 1h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 1h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|12h&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7,5h&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 7h&lt;br /&gt;
|-&lt;br /&gt;
| Initialisation des registres&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3h&lt;br /&gt;
|3h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6h&lt;br /&gt;
|-&lt;br /&gt;
| Code 1ère fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1,5h&lt;br /&gt;
|3h&lt;br /&gt;
|3h&lt;br /&gt;
|4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 11,5h&lt;br /&gt;
|-&lt;br /&gt;
| Code 2ème fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 8h&lt;br /&gt;
|-&lt;br /&gt;
| Optimisation/Correction fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 7h&lt;br /&gt;
|-&lt;br /&gt;
| Optimisation/Correction fonction 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| 6h&lt;br /&gt;
|-&lt;br /&gt;
| Tests et mesures&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 11h&lt;br /&gt;
|-&lt;br /&gt;
| Modification de la carte&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Avancement du Projet'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Phase préparatoire'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[Jeu 15/12/16]]'' &lt;br /&gt;
*Rendez-vous de mise au point du cahier des charges avec les trois encadrants (M. Boé, M. Vantroys et M. Redon)&lt;br /&gt;
*Elaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 1'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[23/01/17 - 29/01/17]]'' &lt;br /&gt;
*Revue du Cahier des Charges&lt;br /&gt;
*Recherches approfondies sur les modes de transmissions du réseau LoRa&lt;br /&gt;
*Recherche de matériel&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 2'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[30/01/17 - 05/02/17]]''  &lt;br /&gt;
*Précisions sur le cahier des charges&lt;br /&gt;
*Listage du matériel&lt;br /&gt;
*Recherche et détermination de solutions technologiques possibles pour les fonctions demandées&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 3'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[06/02/17 - 12/02/17]]''&lt;br /&gt;
*validation du matériel&lt;br /&gt;
Nous allons utiliser un cc430f5137 (MCU+RF) monté sur une carte optimisée pour les communications autours de 868Mhz.&lt;br /&gt;
Nous pouvons commencer à étudier son fonctionnement, particulièrement celui du module RF (cc1101).&lt;br /&gt;
Nous avons aussi récupéré des exemples de code en c sur le site de Texas Instrument et vu l'utilisation de ces codes sur un projet IMA5 de l'an passé.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 4'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/02/17 - 19/02/17]]''&lt;br /&gt;
*Recherche de solutions pour répondre à la 1ère fonction (brouiller la plage 863-870Mhz).&lt;br /&gt;
&lt;br /&gt;
Après une lecture approfondie de la datasheet du module RF du cc430, nous avons choisi d'utiliser la fréquence de base du module (pouvant être définie grâce aux registres) couplée au registre CHANNR. Cela nous permettra de modifier plus facilement la fréquence de la porteuse, en suivant la formule suivante : [[Fichier:rampe.png]].&lt;br /&gt;
&lt;br /&gt;
Nous pourrons alors balayer la plage de fréquence en changeant la valeur de CHANNR.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 5'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[27/02/17 - 05/03/17]]''&lt;br /&gt;
&lt;br /&gt;
A l'aide de la datasheet du cc1101 ([http://www.ti.com/lit/ds/symlink/cc1101.pdf datasheet_cc1101] pages : 70 à 95), nous avons défini les registres du module RF de la manière suivante (sachant que la fréquence du quartz est de 26MHz, soit Fxosc=26MHz) :&lt;br /&gt;
&lt;br /&gt;
*La fréquence de base a été fixée à 862,999MHz en suivant la formule donnée dans la data sheet[[Fichier:carrier_formula.png]]&lt;br /&gt;
ce qui nous a donné les valeurs FREQ2=0x21, FREQ1=0x31 et FREQ0=0x3A (FREQ=2 175 290)&lt;br /&gt;
&lt;br /&gt;
*Nous avons suivi la formule [[Fichier:chanspace_formula.png]] afin d'avoir un espacement entre les cannaux d'environ 100Khz&lt;br /&gt;
ce qui nous a donné  MDMCFG1=0x02 (CHANSPC_E=2) et MDMCFG0=0x00(CHANSPC_M=0)&lt;br /&gt;
&lt;br /&gt;
*Pour le moment, nous avons choisi le mode de modulation AM, nous avons donc initialisé les registres MDMCFG2=0x30 (mode ASK/OOK) et FREND0=0x50(patable=0 donnant le mode ASK)&lt;br /&gt;
&lt;br /&gt;
*Nous avons créé une bibliothèque RFconfig.h regroupant les valeurs de tous les registres :&lt;br /&gt;
&lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 //0 (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x0F //default (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x31 //868Mhz&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0x3A /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x22 //default (data rate)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x30 // ASK/OOK,no sync-word&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x02 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0x00 //chanspc_m=0&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 //default (no effet on ASK/OOK mode)&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset not used)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x03 //default (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x40 //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x50 //patable=0 -&amp;gt; ASK&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosen&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x0B //default&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 6'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[06/03/17 - 12/03/17]]''&lt;br /&gt;
*Nous avons préparé un premier code réalisant une rampe sur la plage 863-870MHz. Ce code est basé sur une boucle infinie qui incrémente le registre chann de 0 à 69 (pour passer de 863 à 870Mhz) et envoie des paquets 0xFF grâce aux fonctions ChangeChannel(chann) et send_comand().&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		1	// maximum size of data sent by rf&lt;br /&gt;
 &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 10000&lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 &lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFF;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init();&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);	 &lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
     {&lt;br /&gt;
       ChangeChannel(chann);&lt;br /&gt;
       send_cmd();&lt;br /&gt;
       if(chann&amp;gt;=69) &lt;br /&gt;
 	{&lt;br /&gt;
 	  chann=0x00;&lt;br /&gt;
 	}&lt;br /&gt;
       else&lt;br /&gt;
 	{&lt;br /&gt;
 	  chann++;&lt;br /&gt;
 	}&lt;br /&gt;
       __delay_cycles(DELAY);&lt;br /&gt;
     }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Après quelques corrections du code, nous avons pu le compiler grâce au Makefile&lt;br /&gt;
&lt;br /&gt;
*Avec la commande (exécutée en root) et le montage suivants, nous avons upload le main sur le cc430&lt;br /&gt;
 mspdebug rf2500 &amp;quot;prog main&amp;quot;&lt;br /&gt;
[[Fichier:montage001.png]]&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 7'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/03/17 - 19/03/17]]''&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé les premiers tests sur l'analyseur de spectre afin de vérifier que le code fonctionne bien.&lt;br /&gt;
&lt;br /&gt;
*Dans un premier temps, nous avons essayé une fréquence fixe pour voir la calibration du cc430.&lt;br /&gt;
[[Fichier:862.png]]&lt;br /&gt;
Avec un exemple à 862Mhz, on remarque bien que les registres ont bien été initialisés et que la carte émet à la fréquence demandée.&lt;br /&gt;
&lt;br /&gt;
*Ensuite, nous avons testé le code effectuant le balayage sur la plage de fréquence 863-870Mhz, en augmentant le sweep time de l'analyseur de spectre pour voir les différentes fréquences auxquelles la carte émet.&lt;br /&gt;
[[Fichier:sweep.png]]&lt;br /&gt;
En observant de 861 à 872 Mhz sur l'écran de l'analyseur, on peut voir que le code effectue bien le balayage.&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission de la carte étant faible, nous avons essayé de l'augmenter en modifiant certains registres notamment ceux que l'on peut optimiser à l'aide du logiciel smart RF studio. Cependant, nous pensons qu'il faudra changer l'antenne patch actuelle de la carte pour une antenne connectée en SMA.&lt;br /&gt;
&lt;br /&gt;
*Nous avons aussi tenté de brouiller les communications d'autres groupes de projet utilisant des modules LoRa. Ces derniers étant configurés à 433Mhz, nous avons dû changer la fréquence de notre carte. Le brouillage ne fonctionnait pas mais notre carte étant optimisée pour une émission autour de 868Mhz, les résultats n'étaient pas pertinents.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 8'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[20/03/17 - 26/03/17]]'' &lt;br /&gt;
&lt;br /&gt;
*Nous avons emprunté à M. Vantroys 3 modules SX1276 montés sur des cartes NUCLEO-F401RE afin de pouvoir tester notre carte sur une communication LoRa à 868Mhz&lt;br /&gt;
[[Fichier:lorambed.png]]&lt;br /&gt;
*Le code utilisé pour le test a été récupéré sur le forum des développeurs du site mbed.com. C'est un code &amp;quot;ping pong&amp;quot; effectuant une communication continue entre deux modules LoRa à une fréquence de 868Mhz. Il nous a suffit d'utiliser le compilateur du site (qui regroupe toutes les bibliothèques nécessaires) en indiquant que la carte utilisée est une F401RE pour que le binaire produit soit compatible. La carte NUCLEO étant reconnue comme un système de fichier par Linux, pour la flasher il faut la monter en usb à l'aide des commandes fdisk et mount puis de copier le binaire dedans avec la commande cp.&lt;br /&gt;
[[Fichier:lora pingpong.zip]]&lt;br /&gt;
*Une fois les modules NUCLEO flashés, la communication LoRa est établie dès que deux modules sont alimentés. Nous avons donc branché en USB deux modules sur deux machines différentes afin d'observer la communication sur des terminaux. La communication se fait bien, l'un envoie &amp;quot;ping&amp;quot; tandis que l'autre envoie &amp;quot;pong&amp;quot; lorsqu'il reçoit &amp;quot;ping&amp;quot;. Malheureusement, comme nous l'avions prédit, notre carte a une puissance d'émission trop faible et ne parvient pas à brouiller efficacement.&lt;br /&gt;
*Les modules peuvent aussi communiquer en modulation FSK, dans ce cas notre système arrive à effectuer le brouillage. Néanmoins, il serait plus intéressant de parvenir à brouiller la communication LoRa.&lt;br /&gt;
*Après plusieurs changements dans le code du cc430, n'ayant pas de résultats positifs, nous avons diminué la puissance d'émission des modules LoRa en changeant un header dans le code lora_pingpong.cpp. En passant cette puissance de 14dBm à 6dBm, nous sommes parvenus à brouiller la communication entre les deux modules LoRa.&lt;br /&gt;
&lt;br /&gt;
*En parallèle, nous avons commencé à rechercher des solutions pour la fonction 2. Un pseudo code est donné sur le site ti.com ([https://www.ti.com/lit/an/swra315/swra315.pdf pseudo_code_frequency_scanning]) qui permet de faire un scan sur une plage de fréquence et de récupérer la fréquence ou le signal reçu est le plus fort. Ce code pourra être écrit en C puis incorporé dans notre main pour détecter une communication et la brouiller.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 9'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[27/03/17 - 02/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*Même si le brouillage ne s’effectue qu'à puissance réduite, nous avons cherché à l'optimiser&lt;br /&gt;
**Nous avons premièrement réalisé que le mode de modulation choisi au départ (ASK) n'était pas adapté au brouillage d'une communication LoRa. Nous avons donc essayé le mode GFSK qui est le plus proche du format de modulation du réseau LoRa. Nous avons aussi essayé les modes 2FSK et 4FSK qui sont relativement proches du GFSK. Nous en avons conclu que le mode de modulation à utiliser est GFSK (ce mode fonctionne aussi pour brouiller la modulation FSK)&lt;br /&gt;
**Ensuite, nous avons réduit la plage de fréquence balayée par le cc430 afin de voir si il y avait une influence sur le brouillage. Nous avons remarqué que le brouillage était plus efficace pour un balayage de 866 à 870 Mhz (au lieu de 863-870 initialement)&lt;br /&gt;
**Dans le même ordre d'idée, nous avons décidé de réduire le nombre d'incrémentations du registre CHANNR afin d'augmenter la rapidité du balayage. Pour ce faire, nous avons augmenté la taille de chaque canal, passant de 100kHz à 200kHz&lt;br /&gt;
**La puissance d'émission de la carte a été changée dans la fonction WritePATable (appelée par rfinit() dans le main), afin d'être maximale (12dBm)&lt;br /&gt;
**Enfin, nous avons augmenté le nombre de paquets à envoyer&lt;br /&gt;
&lt;br /&gt;
Nouvelle bibliothèque RFconfig.h :&lt;br /&gt;
&lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 // (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x06 //default 0f (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x4E //866&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0xC2 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x83 // data rate&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x13 // GFSK &lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x22 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0xF8 //chanspc_m=248&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 // default 47khz deviation&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset for demodulation)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x07 // (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x77 //&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x10 //patable=0 (useless for gfsk) &lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosed&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x09 //&lt;br /&gt;
&lt;br /&gt;
Nouveau main.c : &lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;led_commands.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		10	// maximum size of data sent by rf&lt;br /&gt;
  &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 5000 //15ms  &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFD;&lt;br /&gt;
   buffer[1] = 0xAA;&lt;br /&gt;
   buffer[2] = 0xFF;&lt;br /&gt;
   buffer[3] = 0x11;&lt;br /&gt;
   buffer[4] = 0xFF;&lt;br /&gt;
   buffer[5] = 0x66;&lt;br /&gt;
   buffer[6] = 0xFF;&lt;br /&gt;
   buffer[7] = 0x33;&lt;br /&gt;
   buffer[8] = 0x1F;&lt;br /&gt;
   buffer[9] = 0xF8;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   unsigned char led2=0x10;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(0x10, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 allumée quand le cc430 est sous tension&lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chann);&lt;br /&gt;
     send_cmd();&lt;br /&gt;
     if(chann&amp;gt;=20) //866-870&lt;br /&gt;
     {&lt;br /&gt;
       chann=0x00;&lt;br /&gt;
       led2=led2^0x10;&lt;br /&gt;
       set_color(0x10, 0x00, 0x00, led2, 0x00, 0x00); //led2 s'allume toutes les 2 rampes&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {&lt;br /&gt;
       chann++;&lt;br /&gt;
     }&lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Fonction WritePATable :&lt;br /&gt;
&lt;br /&gt;
 void WritePATable(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char valueRead = 0;&lt;br /&gt;
   &lt;br /&gt;
   //while(valueRead != 0x03)    // Output Power: -30  [dBm]&lt;br /&gt;
   //while(valueRead != 0x25)    // Output Power: -12  [dBm]&lt;br /&gt;
   //while(valueRead != 0x2D)    // Output Power: -6   [dBm]&lt;br /&gt;
   //while(valueRead != 0x8D)    // Output Power:  0   [dBm]&lt;br /&gt;
   //while(valueRead != 0xC3)    // Output Power:  10  [dBm]&lt;br /&gt;
   while(valueRead != 0xC0)    // Output Power:  Maximum  [dBm]&lt;br /&gt;
   //while(valueRead != 0xC6)    // Output Power(default):  8.8  [dBm]&lt;br /&gt;
   {&lt;br /&gt;
     /* Write the power output to the PA_TABLE and verify the write operation.  */&lt;br /&gt;
     unsigned char i = 0; &lt;br /&gt;
 &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
     //RF1AINSTRW = 0x7E03; // PA Table write (burst), Output Power: -30  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E25; // PA Table write (burst), Output Power: -12  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E2D; // PA Table write (burst), Output Power: -6   [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E8D; // PA Table write (burst), Output Power: 0    [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC3; // PA Table write (burst), Output Power: 10   [dBm]&lt;br /&gt;
     RF1AINSTRW = 0x7EC0; // PA Table write (burst), Output Power: Maximum  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC6; // PA Table write (burst), Output Power(default):  8.8  [dBm]&lt;br /&gt;
     &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
       RF1AINSTR1B = RF_PATABRD;                 // -miguel read &amp;amp; write&lt;br /&gt;
     &lt;br /&gt;
     // Traverse PATABLE pointers to read &lt;br /&gt;
     for (i = 0; i &amp;lt; 7; i++)&lt;br /&gt;
     {&lt;br /&gt;
       while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
       valueRead  = RF1ADOUT1B;     &lt;br /&gt;
     }&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
     valueRead  = RF1ADOUTB;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 10'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[03/04/17 - 09/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission étant trop faible pour brouiller la communication entre les 2 modules LoRa, nous avons décidé de changer l'antenne de la carte. Il a fallu couper l'antenne patch à l'aide d'une scie afin de souder un connecteur SMA.&lt;br /&gt;
[[Fichier:cc430antenne.png]]&lt;br /&gt;
*Grâce à cette nouvelle antenne, la communication peut maintenant être brouillée à une puissance de 10dBm (contre 6 auparavant). Mais il faut que la carte reste relativement proche d'un des modules.&lt;br /&gt;
*Pour réussir le brouillage quand les modules LoRa sont à leur puissance maximale (14dBm), il faudra sûrement ajouter un amplificateur entre la sortie de la carte et son antenne.&lt;br /&gt;
*Nous avons codé la fonction de scan en c et l'avons incorporé dans le main &lt;br /&gt;
**Cette fonction autorise le module à entrer en mode RX pour recevoir les communications. Elle incrémente ensuite le canal pour parcourir la plage 863-870MHz afin de détecter une communication. Toute les incrémentations, la variable rssi récupère la valeur contenue dans le registre qui correspond à la valeur du RSSI. Cette valeur étant en binaire complément 2, elle est convertie en dBm et placée dans un entier. Enfin, si cette valeur est supérieur à la valeur maximale déjà mesuré ou à un palier prédéfini (ici 0dBm), on stocke le numéro du canal correspondant qui sera utilisé dans le main par la suite.&lt;br /&gt;
&lt;br /&gt;
fonction de scan :&lt;br /&gt;
 void freq_scan(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char rssi;&lt;br /&gt;
   long rssi_dbm;&lt;br /&gt;
   unsigned char chan_scan=START_FREQ_CHAN;&lt;br /&gt;
   long rssi_max=0; //scan will take communication above 0dbm&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, led2, 0x00); //led2 blue while scanning&lt;br /&gt;
   &lt;br /&gt;
   ChangeChannel(chan_scan);&lt;br /&gt;
   ReceiveOn();    //enable RX&lt;br /&gt;
   while((Strobe(RF_SNOP) &amp;amp; 0x70) != 0x10); //make sure RX is ready&lt;br /&gt;
   while(chan_scan&amp;lt;STOP_FREQ_CHAN)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chan_scan);&lt;br /&gt;
     rssi = ReadSingleReg(RSSI);  //define in cc430f5137.h RSSI=0x34 corresponding to addr of rssi value&lt;br /&gt;
     if (rssi &amp;gt;= 128) &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (long)((long)( rssi - 256) / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     else &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (rssi / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     if(rssi_dbm&amp;gt;rssi_max)&lt;br /&gt;
     {&lt;br /&gt;
       rssi_max=rssi_dbm;&lt;br /&gt;
       chan_jam=chan_scan-10; //start jamming 2Mhz below max dbm received&lt;br /&gt;
     }&lt;br /&gt;
     chan_scan++;&lt;br /&gt;
     Strobe( RF_SFRX); //flush the RX FIFO&lt;br /&gt;
   }&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
nouveau main :&lt;br /&gt;
&lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chan_main=0x00;&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 on if cc430 powered&lt;br /&gt;
   int i;&lt;br /&gt;
   &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     freq_scan();&lt;br /&gt;
     ReceiveOff();&lt;br /&gt;
     chan_main=chan_jam;&lt;br /&gt;
     if (chan_main != 0)  //jam only if a communication xas detected with freq_scan&lt;br /&gt;
     {&lt;br /&gt;
       for(i=0 ; i&amp;lt;(20*NUM_JAM_RAMP) ; i++) //ramp start 2Mhz below chan_jam and stop 2Mhz above&lt;br /&gt;
       {&lt;br /&gt;
         ChangeChannel(chan_main);&lt;br /&gt;
         if (chan_main&amp;gt;= (chan_jam+20))&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main=0x00;&lt;br /&gt;
           led2=led2^0x10;&lt;br /&gt;
           set_color(led1, 0x00, 0x00, led2, 0x00, 0x00); //led2 blink red every two ramp of jamming&lt;br /&gt;
         }&lt;br /&gt;
         else&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main++;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     chan_main=0x00;  &lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
header :&lt;br /&gt;
 #define DELAY 100 //300us  &lt;br /&gt;
 #define DELAY_RSSI 10 //30us&lt;br /&gt;
 &lt;br /&gt;
 #define START_FREQ_CHAN 15&lt;br /&gt;
 #define STOP_FREQ_CHAN 50     //scanning 863-870Mhz with 200khz steps&lt;br /&gt;
 #define RSSI_OFFSET 74 //cf datasheet&lt;br /&gt;
 &lt;br /&gt;
 #define NUM_JAM_RAMP 50&lt;br /&gt;
 &lt;br /&gt;
 unsigned char chan_jam=0x00;&lt;br /&gt;
 unsigned char led2=0x10;&lt;br /&gt;
 unsigned char led1=0x10;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Après les vacances'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
*Nous avons effectué des tests pour vérifier si la fonction de scan fonctionne. Malheureusement, le cc430 n'a pas l'air de détecter de communications. La fréquence des modules LoRa a été fixée à 868MHz en mettant le header LORA_FHSS_ENABLE à false (ceci désactive le glissement de fréquence) pour faire des tests dans des conditions plus optimales. Cependant, le cc430 ne détecte toujours aucune communication.&lt;br /&gt;
*Nous avons donc vérifié plusieurs éléments du code : la conversion en dBm du registre RSSI, la lecture dans le registre, le temps de mise à jour du registre RSSI.&lt;br /&gt;
**D'après le pseudo-code fourni par texas instrument, et ce que nous avons pu lire sur les forums des développeurs, la conversion fonctionne. Nous avons tout de même essayé d'autre moyen de conversion, mais aucune de ces méthodes n'a permis au cc430 de détecter une communication.&lt;br /&gt;
**En ce qui concerne la lecture dans le registre, nous avons effectué des tests en lisant dans d'autres registres et en allumant une led, nous en avons conclu que la fonction ReadSingleReg fonctionne. Nous nous sommes donc portés sur l'adresse de ce registre, en vérifiant la bibliothèque cc430f5137.h, nous avons constaté que la variable RSSI était bien définie dans les adresses de registres.&lt;br /&gt;
**Enfin, d'après les datasheets du cc430 et du cc1101, le registre RSSI met un certain temps a s'actualiser, ce temps peut être calculé et dépend de la taille des paquets reçu. Ne pouvant pas connaitre pas la taille des paquets de la communication que l'on cherche à brouiller à l'avance, nous avons décidé de fixer un temps d'attente 2 fois supérieur au temps caractéristique (~15us), soit 30 micro seconde.&lt;br /&gt;
*Malgré ces essaies et corrections de code, nous ne sommes pas parvenu à faire fonctionner la détection de communication.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Fichiers Rendus'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[[Fichier:code_fonction_1.zip]]&lt;br /&gt;
*[[Fichier:code_fonction_2.zip]]&lt;br /&gt;
*[[Fichier:compte_rendu.pdf]]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Bibliographie'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[http://www.ti.com/ ti.com]&lt;br /&gt;
*[https://www.mbed.com/en/ mbed.com]&lt;br /&gt;
*[http://www.semtech.com/ semtech.com]&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42449</id>
		<title>IMA4 2016/2017 P32</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42449"/>
				<updated>2017-05-18T12:11:35Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Cahier des charges'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;Présentation générale du projet&amp;lt;/span&amp;gt;=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Contexte&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'expansion de l'utilisation des objets connectés permet de nos jours d'accéder à des données ou de contrôler aisément d'autres systèmes connectés à distance. Les objets connectés sont de plus en plus déployés mais leur sécurité n'est pas toujours testée. Par conséquent, de nombreuses informations sensibles sont susceptibles de transiter en permanence par le biais de multiples plages de fréquences. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ceci amène donc un questionnement sur la sécurité des transferts de données entre la multitude d'objets connectés actuellement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Objectif du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de réaliser un brouilleur d'ondes radiofréquence dans la bande des 868 MHz capable de bloquer les communications LoRa.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Description du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
A l'aboutissement du projet, nous devrions être capable de détecter une communication LoRa dans la bande des 868 MHz, et de la brouiller elle seule, sans incidence sur les autres communications sur d'autres fréquences du réseau LoRa.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous devrons réaliser un montage réalisant un brouillage sur la plage 863-870Mhz afin d'empêcher toute communication LoRa, en envoyant du bruit électronique sur toute la plage de fréquence.&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet, nous perfectionnerons ce montage pour qu'il puisse détecter une communication LoRa à une fréquence donnée (grâce au &amp;quot;join-request message&amp;quot; de 18 octets envoyés par le end-point/node, ou bien grâce aux informations données dans le préambule des paquets), afin d'envoyer des données erronées et de bloquer uniquement cette communication.&lt;br /&gt;
&lt;br /&gt;
Si le temps et le budget le permettent, nous pourrons aussi être amenés à brouiller la plage de fréquences autour des 433 MHz (aussi utilisé par le réseau LoRa).&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Choix techniques : matériel et logiciel&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser ce système, nous allons utiliser un microcontrôleur cc430 muni d'un transceiver cc1101, d'un récepteur LoRa(868MHz) communicant via protocole SPI avec le microcontrôleur, 2 antennes, une batterie, quelques LEDs.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Calendrier prévisionnel'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Liste des tâches à effectuer&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
# Documentation sur le réseau LoRa&lt;br /&gt;
##moyen de transmission&lt;br /&gt;
##format de modulation&lt;br /&gt;
##trame des paquets&lt;br /&gt;
# Réalisation du premier montage brouillant toute la plage&lt;br /&gt;
##contrôler l'émetteur RF du cc430&lt;br /&gt;
##programmer un bruitage sur la plage 863-870MHz&lt;br /&gt;
##test et optimisation&lt;br /&gt;
# Ajout d'un récepteur LoRa pour détecter et brouiller une seule communication&lt;br /&gt;
##contrôler le récepteur LoRa avec le cc430 par protocole spi&lt;br /&gt;
##détecter une communication LoRa à une fréquence donnée&lt;br /&gt;
##contrôler l'émetteur RF afin de brouiller cette communication de manière brutale&lt;br /&gt;
##brouiller cette communication en tentant de changer les données du paquet &lt;br /&gt;
##test et optimisation&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Calendrier&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
''[[Avant le 19/12/16]]'' - Élaboration du Cahier des charges et remplissage du Wiki&lt;br /&gt;
&lt;br /&gt;
''[[Avant fin Janvier]]'' - Complément du Cahier des Charges et listage du matériel nécessaire pour le projet&lt;br /&gt;
&lt;br /&gt;
''[[Répartition sur le S8]]'' - 120h: Réalisation de la 1ere fonction (45h) / Réalisation de la 2e fonction (45h) / Test et débuguage (30h)&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Feuille d'heures'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Après les vacances !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Cahier des charges / Wiki&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 1h&lt;br /&gt;
| 0,5h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
| 7,5h&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le réseau LoRa&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8,5h&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le matériel&lt;br /&gt;
| 1h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 1h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|12h&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7,5h&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 7h&lt;br /&gt;
|-&lt;br /&gt;
| Initialisation des registres&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3h&lt;br /&gt;
|3h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6h&lt;br /&gt;
|-&lt;br /&gt;
| Code 1ère fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1,5h&lt;br /&gt;
|3h&lt;br /&gt;
|3h&lt;br /&gt;
|4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 11,5h&lt;br /&gt;
|-&lt;br /&gt;
| Code 2ème fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 8h&lt;br /&gt;
|-&lt;br /&gt;
| Optimisation/Correction fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 7h&lt;br /&gt;
|-&lt;br /&gt;
| Optimisation/Correction fonction 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| 6h&lt;br /&gt;
|-&lt;br /&gt;
| Tests et mesures&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 11h&lt;br /&gt;
|-&lt;br /&gt;
| Modification de la carte&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Avancement du Projet'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Phase préparatoire'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[Jeu 15/12/16]]'' &lt;br /&gt;
*Rendez-vous de mise au point du cahier des charges avec les trois encadrants (M. Boé, M. Vantroys et M. Redon)&lt;br /&gt;
*Elaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 1'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[23/01/17 - 29/01/17]]'' &lt;br /&gt;
*Revue du Cahier des Charges&lt;br /&gt;
*Recherches approfondies sur les modes de transmissions du réseau LoRa&lt;br /&gt;
*Recherche de matériel&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 2'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[30/01/17 - 05/02/17]]''  &lt;br /&gt;
*Précisions sur le cahier des charges&lt;br /&gt;
*Listage du matériel&lt;br /&gt;
*Recherche et détermination de solutions technologiques possibles pour les fonctions demandées&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 3'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[06/02/17 - 12/02/17]]''&lt;br /&gt;
*validation du matériel&lt;br /&gt;
Nous allons utiliser un cc430f5137 (MCU+RF) monté sur une carte optimisée pour les communications autours de 868Mhz.&lt;br /&gt;
Nous pouvons commencer à étudier son fonctionnement, particulièrement celui du module RF (cc1101).&lt;br /&gt;
Nous avons aussi récupéré des exemples de code en c sur le site de Texas Instrument et vu l'utilisation de ces codes sur un projet IMA5 de l'an passé.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 4'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/02/17 - 19/02/17]]''&lt;br /&gt;
*Recherche de solutions pour répondre à la 1ère fonction (brouiller la plage 863-870Mhz).&lt;br /&gt;
&lt;br /&gt;
Après une lecture approfondie de la datasheet du module RF du cc430, nous avons choisi d'utiliser la fréquence de base du module (pouvant être définie grâce aux registres) couplée au registre CHANNR. Cela nous permettra de modifier plus facilement la fréquence de la porteuse, en suivant la formule suivante : [[Fichier:rampe.png]].&lt;br /&gt;
&lt;br /&gt;
Nous pourrons alors balayer la plage de fréquence en changeant la valeur de CHANNR.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 5'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[27/02/17 - 05/03/17]]''&lt;br /&gt;
&lt;br /&gt;
A l'aide de la datasheet du cc1101 ([http://www.ti.com/lit/ds/symlink/cc1101.pdf datasheet_cc1101] pages : 70 à 95), nous avons défini les registres du module RF de la manière suivante (sachant que la fréquence du quartz est de 26MHz, soit Fxosc=26MHz) :&lt;br /&gt;
&lt;br /&gt;
*La fréquence de base a été fixée à 862,999MHz en suivant la formule donnée dans la data sheet[[Fichier:carrier_formula.png]]&lt;br /&gt;
ce qui nous a donné les valeurs FREQ2=0x21, FREQ1=0x31 et FREQ0=0x3A (FREQ=2 175 290)&lt;br /&gt;
&lt;br /&gt;
*Nous avons suivi la formule [[Fichier:chanspace_formula.png]] afin d'avoir un espacement entre les cannaux d'environ 100Khz&lt;br /&gt;
ce qui nous a donné  MDMCFG1=0x02 (CHANSPC_E=2) et MDMCFG0=0x00(CHANSPC_M=0)&lt;br /&gt;
&lt;br /&gt;
*Pour le moment, nous avons choisi le mode de modulation AM, nous avons donc initialisé les registres MDMCFG2=0x30 (mode ASK/OOK) et FREND0=0x50(patable=0 donnant le mode ASK)&lt;br /&gt;
&lt;br /&gt;
*Nous avons créé une bibliothèque RFconfig.h regroupant les valeurs de tous les registres :&lt;br /&gt;
&lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 //0 (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x0F //default (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x31 //868Mhz&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0x3A /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x22 //default (data rate)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x30 // ASK/OOK,no sync-word&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x02 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0x00 //chanspc_m=0&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 //default (no effet on ASK/OOK mode)&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset not used)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x03 //default (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x40 //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x50 //patable=0 -&amp;gt; ASK&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosen&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x0B //default&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 6'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[06/03/17 - 12/03/17]]''&lt;br /&gt;
*Nous avons préparé un premier code réalisant une rampe sur la plage 863-870MHz. Ce code est basé sur une boucle infinie qui incrémente le registre chann de 0 à 69 (pour passer de 863 à 870Mhz) et envoie des paquets 0xFF grâce aux fonctions ChangeChannel(chann) et send_comand().&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		1	// maximum size of data sent by rf&lt;br /&gt;
 &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 10000&lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 &lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFF;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init();&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);	 &lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
     {&lt;br /&gt;
       ChangeChannel(chann);&lt;br /&gt;
       send_cmd();&lt;br /&gt;
       if(chann&amp;gt;=69) &lt;br /&gt;
 	{&lt;br /&gt;
 	  chann=0x00;&lt;br /&gt;
 	}&lt;br /&gt;
       else&lt;br /&gt;
 	{&lt;br /&gt;
 	  chann++;&lt;br /&gt;
 	}&lt;br /&gt;
       __delay_cycles(DELAY);&lt;br /&gt;
     }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Après quelques corrections du code, nous avons pu le compiler grâce au Makefile&lt;br /&gt;
&lt;br /&gt;
*Avec la commande (exécutée en root) et le montage suivants, nous avons upload le main sur le cc430&lt;br /&gt;
 mspdebug rf2500 &amp;quot;prog main&amp;quot;&lt;br /&gt;
[[Fichier:montage001.png]]&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 7'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/03/17 - 19/03/17]]''&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé les premiers tests sur l'analyseur de spectre afin de vérifier que le code fonctionne bien.&lt;br /&gt;
&lt;br /&gt;
*Dans un premier temps, nous avons essayé une fréquence fixe pour voir la calibration du cc430.&lt;br /&gt;
[[Fichier:862.png]]&lt;br /&gt;
Avec un exemple à 862Mhz, on remarque bien que les registres ont bien été initialisés et que la carte émet à la fréquence demandée.&lt;br /&gt;
&lt;br /&gt;
*Ensuite, nous avons testé le code effectuant le balayage sur la plage de fréquence 863-870Mhz, en augmentant le sweep time de l'analyseur de spectre pour voir les différentes fréquences auxquelles la carte émet.&lt;br /&gt;
[[Fichier:sweep.png]]&lt;br /&gt;
En observant de 861 à 872 Mhz sur l'écran de l'analyseur, on peut voir que le code effectue bien le balayage.&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission de la carte étant faible, nous avons essayé de l'augmenter en modifiant certains registres notamment ceux que l'on peut optimiser à l'aide du logiciel smart RF studio. Cependant, nous pensons qu'il faudra changer l'antenne patch actuelle de la carte pour une antenne connectée en SMA.&lt;br /&gt;
&lt;br /&gt;
*Nous avons aussi tenté de brouiller les communications d'autres groupes de projet utilisant des modules LoRa. Ces derniers étant configurés à 433Mhz, nous avons dû changer la fréquence de notre carte. Le brouillage ne fonctionnait pas mais notre carte étant optimisée pour une émission autour de 868Mhz, les résultats n'étaient pas pertinents.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 8'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[20/03/17 - 26/03/17]]'' &lt;br /&gt;
&lt;br /&gt;
*Nous avons emprunté à M. Vantroys 3 modules SX1276 montés sur des cartes NUCLEO-F401RE afin de pouvoir tester notre carte sur une communication LoRa à 868Mhz&lt;br /&gt;
[[Fichier:lorambed.png]]&lt;br /&gt;
*Le code utilisé pour le test a été récupéré sur le forum des développeurs du site mbed.com. C'est un code &amp;quot;ping pong&amp;quot; effectuant une communication continue entre deux modules LoRa à une fréquence de 868Mhz. Il nous a suffit d'utiliser le compilateur du site (qui regroupe toutes les bibliothèques nécessaires) en indiquant que la carte utilisée est une F401RE pour que le binaire produit soit compatible. La carte NUCLEO étant reconnue comme un système de fichier par Linux, pour la flasher il faut la monter en usb à l'aide des commandes fdisk et mount puis de copier le binaire dedans avec la commande cp.&lt;br /&gt;
[[Fichier:lora pingpong.zip]]&lt;br /&gt;
*Une fois les modules NUCLEO flashés, la communication LoRa est établie dès que deux modules sont alimentés. Nous avons donc branché en USB deux modules sur deux machines différentes afin d'observer la communication sur des terminaux. La communication se fait bien, l'un envoie &amp;quot;ping&amp;quot; tandis que l'autre envoie &amp;quot;pong&amp;quot; lorsqu'il reçoit &amp;quot;ping&amp;quot;. Malheureusement, comme nous l'avions prédit, notre carte a une puissance d'émission trop faible et ne parvient pas à brouiller efficacement.&lt;br /&gt;
*Les modules peuvent aussi communiquer en modulation FSK, dans ce cas notre système arrive à effectuer le brouillage. Néanmoins, il serait plus intéressant de parvenir à brouiller la communication LoRa.&lt;br /&gt;
*Après plusieurs changements dans le code du cc430, n'ayant pas de résultats positifs, nous avons diminué la puissance d'émission des modules LoRa en changeant un header dans le code lora_pingpong.cpp. En passant cette puissance de 14dBm à 6dBm, nous sommes parvenus à brouiller la communication entre les deux modules LoRa.&lt;br /&gt;
&lt;br /&gt;
*En parallèle, nous avons commencé à rechercher des solutions pour la fonction 2. Un pseudo code est donné sur le site ti.com ([https://www.ti.com/lit/an/swra315/swra315.pdf pseudo_code_frequency_scanning]) qui permet de faire un scan sur une plage de fréquence et de récupérer la fréquence ou le signal reçu est le plus fort. Ce code pourra être écrit en C puis incorporé dans notre main pour détecter une communication et la brouiller.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 9'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[27/03/17 - 02/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*Même si le brouillage ne s’effectue qu'à puissance réduite, nous avons cherché à l'optimiser&lt;br /&gt;
**Nous avons premièrement réalisé que le mode de modulation choisi au départ (ASK) n'était pas adapté au brouillage d'une communication LoRa. Nous avons donc essayé le mode GFSK qui est le plus proche du format de modulation du réseau LoRa. Nous avons aussi essayé les modes 2FSK et 4FSK qui sont relativement proches du GFSK. Nous en avons conclu que le mode de modulation à utiliser est GFSK (ce mode fonctionne aussi pour brouiller la modulation FSK)&lt;br /&gt;
**Ensuite, nous avons réduit la plage de fréquence balayée par le cc430 afin de voir si il y avait une influence sur le brouillage. Nous avons remarqué que le brouillage était plus efficace pour un balayage de 866 à 870 Mhz (au lieu de 863-870 initialement)&lt;br /&gt;
**Dans le même ordre d'idée, nous avons décidé de réduire le nombre d'incrémentations du registre CHANNR afin d'augmenter la rapidité du balayage. Pour ce faire, nous avons augmenté la taille de chaque canal, passant de 100kHz à 200kHz&lt;br /&gt;
**La puissance d'émission de la carte a été changée dans la fonction WritePATable (appelée par rfinit() dans le main), afin d'être maximale (12dBm)&lt;br /&gt;
**Enfin, nous avons augmenté le nombre de paquets à envoyer&lt;br /&gt;
&lt;br /&gt;
Nouvelle bibliothèque RFconfig.h :&lt;br /&gt;
&lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 // (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x06 //default 0f (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x4E //866&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0xC2 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x83 // data rate&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x13 // GFSK &lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x22 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0xF8 //chanspc_m=248&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 // default 47khz deviation&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset for demodulation)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x07 // (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x77 //&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x10 //patable=0 (useless for gfsk) &lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosed&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x09 //&lt;br /&gt;
&lt;br /&gt;
Nouveau main.c : &lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;led_commands.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		10	// maximum size of data sent by rf&lt;br /&gt;
  &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 5000 //15ms  &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Any other commands are for RSSI measurement&lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFD;&lt;br /&gt;
   buffer[1] = 0xAA;&lt;br /&gt;
   buffer[2] = 0xFF;&lt;br /&gt;
   buffer[3] = 0x11;&lt;br /&gt;
   buffer[4] = 0xFF;&lt;br /&gt;
   buffer[5] = 0x66;&lt;br /&gt;
   buffer[6] = 0xFF;&lt;br /&gt;
   buffer[7] = 0x33;&lt;br /&gt;
   buffer[8] = 0x1F;&lt;br /&gt;
   buffer[9] = 0xF8;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   unsigned char led2=0x10;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(0x10, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 allumée quand le cc430 est sous tension&lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chann);&lt;br /&gt;
     send_cmd();&lt;br /&gt;
     if(chann&amp;gt;=20) //866-870&lt;br /&gt;
     {&lt;br /&gt;
       chann=0x00;&lt;br /&gt;
       led2=led2^0x10;&lt;br /&gt;
       set_color(0x10, 0x00, 0x00, led2, 0x00, 0x00); //led2 s'allume toutes les 2 rampes&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {&lt;br /&gt;
       chann++;&lt;br /&gt;
     }&lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Fonction WritePATable :&lt;br /&gt;
&lt;br /&gt;
 void WritePATable(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char valueRead = 0;&lt;br /&gt;
   &lt;br /&gt;
   //while(valueRead != 0x03)    // Output Power: -30  [dBm]&lt;br /&gt;
   //while(valueRead != 0x25)    // Output Power: -12  [dBm]&lt;br /&gt;
   //while(valueRead != 0x2D)    // Output Power: -6   [dBm]&lt;br /&gt;
   //while(valueRead != 0x8D)    // Output Power:  0   [dBm]&lt;br /&gt;
   //while(valueRead != 0xC3)    // Output Power:  10  [dBm]&lt;br /&gt;
   while(valueRead != 0xC0)    // Output Power:  Maximum  [dBm]&lt;br /&gt;
   //while(valueRead != 0xC6)    // Output Power(default):  8.8  [dBm]&lt;br /&gt;
   {&lt;br /&gt;
     /* Write the power output to the PA_TABLE and verify the write operation.  */&lt;br /&gt;
     unsigned char i = 0; &lt;br /&gt;
 &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
     //RF1AINSTRW = 0x7E03; // PA Table write (burst), Output Power: -30  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E25; // PA Table write (burst), Output Power: -12  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E2D; // PA Table write (burst), Output Power: -6   [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E8D; // PA Table write (burst), Output Power: 0    [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC3; // PA Table write (burst), Output Power: 10   [dBm]&lt;br /&gt;
     RF1AINSTRW = 0x7EC0; // PA Table write (burst), Output Power: Maximum  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC6; // PA Table write (burst), Output Power(default):  8.8  [dBm]&lt;br /&gt;
     &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
       RF1AINSTR1B = RF_PATABRD;                 // -miguel read &amp;amp; write&lt;br /&gt;
     &lt;br /&gt;
     // Traverse PATABLE pointers to read &lt;br /&gt;
     for (i = 0; i &amp;lt; 7; i++)&lt;br /&gt;
     {&lt;br /&gt;
       while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
       valueRead  = RF1ADOUT1B;     &lt;br /&gt;
     }&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
     valueRead  = RF1ADOUTB;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 10'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[03/04/17 - 09/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission étant trop faible pour brouiller la communication entre les 2 modules LoRa, nous avons décidé de changer l'antenne de la carte. Il a fallu couper l'antenne patch à l'aide d'une scie afin de souder un connecteur SMA.&lt;br /&gt;
[[Fichier:cc430antenne.png]]&lt;br /&gt;
*Grâce à cette nouvelle antenne, la communication peut maintenant être brouillée à une puissance de 10dBm (contre 6 auparavant). Mais il faut que la carte reste relativement proche d'un des modules.&lt;br /&gt;
*Pour réussir le brouillage quand les modules LoRa sont à leur puissance maximale (14dBm), il faudra sûrement ajouter un amplificateur entre la sortie de la carte et son antenne.&lt;br /&gt;
*Nous avons codé la fonction de scan en c et l'avons incorporé dans le main &lt;br /&gt;
**Cette fonction autorise le module à entrer en mode RX pour recevoir les communications. Elle incrémente ensuite le canal pour parcourir la plage 863-870MHz afin de détecter une communication. Toute les incrémentations, la variable rssi récupère la valeur contenue dans le registre qui correspond à la valeur du RSSI. Cette valeur étant en binaire complément 2, elle est convertie en dBm et placée dans un entier. Enfin, si cette valeur est supérieur à la valeur maximale déjà mesuré ou à un palier prédéfini (ici 0dBm), on stocke le numéro du canal correspondant qui sera utilisé dans le main par la suite.&lt;br /&gt;
&lt;br /&gt;
fonction de scan :&lt;br /&gt;
 void freq_scan(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char rssi;&lt;br /&gt;
   long rssi_dbm;&lt;br /&gt;
   unsigned char chan_scan=START_FREQ_CHAN;&lt;br /&gt;
   long rssi_max=0; //scan will take communication above 0dbm&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, led2, 0x00); //led2 blue while scanning&lt;br /&gt;
   &lt;br /&gt;
   ChangeChannel(chan_scan);&lt;br /&gt;
   ReceiveOn();    //enable RX&lt;br /&gt;
   while((Strobe(RF_SNOP) &amp;amp; 0x70) != 0x10); //make sure RX is ready&lt;br /&gt;
   while(chan_scan&amp;lt;STOP_FREQ_CHAN)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chan_scan);&lt;br /&gt;
     rssi = ReadSingleReg(RSSI);  //define in cc430f5137.h RSSI=0x34 corresponding to addr of rssi value&lt;br /&gt;
     if (rssi &amp;gt;= 128) &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (long)((long)( rssi - 256) / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     else &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (rssi / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     if(rssi_dbm&amp;gt;rssi_max)&lt;br /&gt;
     {&lt;br /&gt;
       rssi_max=rssi_dbm;&lt;br /&gt;
       chan_jam=chan_scan-10; //start jamming 2Mhz below max dbm received&lt;br /&gt;
     }&lt;br /&gt;
     chan_scan++;&lt;br /&gt;
     Strobe( RF_SFRX); //flush the RX FIFO&lt;br /&gt;
   }&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
nouveau main :&lt;br /&gt;
&lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chan_main=0x00;&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 on if cc430 powered&lt;br /&gt;
   int i;&lt;br /&gt;
   &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     freq_scan();&lt;br /&gt;
     ReceiveOff();&lt;br /&gt;
     chan_main=chan_jam;&lt;br /&gt;
     if (chan_main != 0)  //jam only if a communication xas detected with freq_scan&lt;br /&gt;
     {&lt;br /&gt;
       for(i=0 ; i&amp;lt;(20*NUM_JAM_RAMP) ; i++) //ramp start 2Mhz below chan_jam and stop 2Mhz above&lt;br /&gt;
       {&lt;br /&gt;
         ChangeChannel(chan_main);&lt;br /&gt;
         if (chan_main&amp;gt;= (chan_jam+20))&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main=0x00;&lt;br /&gt;
           led2=led2^0x10;&lt;br /&gt;
           set_color(led1, 0x00, 0x00, led2, 0x00, 0x00); //led2 blink red every two ramp of jamming&lt;br /&gt;
         }&lt;br /&gt;
         else&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main++;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     chan_main=0x00;  &lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
header :&lt;br /&gt;
 #define DELAY 100 //300us  &lt;br /&gt;
 #define DELAY_RSSI 10 //30us&lt;br /&gt;
 &lt;br /&gt;
 #define START_FREQ_CHAN 15&lt;br /&gt;
 #define STOP_FREQ_CHAN 50     //scanning 863-870Mhz with 200khz steps&lt;br /&gt;
 #define RSSI_OFFSET 74 //cf datasheet&lt;br /&gt;
 &lt;br /&gt;
 #define NUM_JAM_RAMP 50&lt;br /&gt;
 &lt;br /&gt;
 unsigned char chan_jam=0x00;&lt;br /&gt;
 unsigned char led2=0x10;&lt;br /&gt;
 unsigned char led1=0x10;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Après les vacances'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
*Nous avons effectué des tests pour vérifier si la fonction de scan fonctionne. Malheureusement, le cc430 n'a pas l'air de détecter de communications. La fréquence des modules LoRa a été fixée à 868MHz en mettant le header LORA_FHSS_ENABLE à false (ceci désactive le glissement de fréquence) pour faire des tests dans des conditions plus optimales. Cependant, le cc430 ne détecte toujours aucune communication.&lt;br /&gt;
*Nous avons donc vérifié plusieurs éléments du code : la conversion en dBm du registre RSSI, la lecture dans le registre, le temps de mise à jour du registre RSSI.&lt;br /&gt;
**D'après le pseudo-code fourni par texas instrument, et ce que nous avons pu lire sur les forums des développeurs, la conversion fonctionne. Nous avons tout de même essayé d'autre moyen de conversion, mais aucune de ces méthodes n'a permis au cc430 de détecter une communication.&lt;br /&gt;
**En ce qui concerne la lecture dans le registre, nous avons effectué des tests en lisant dans d'autres registres et en allumant une led, nous en avons conclu que la fonction ReadSingleReg fonctionne. Nous nous sommes donc portés sur l'adresse de ce registre, en vérifiant la bibliothèque cc430f5137.h, nous avons constaté que la variable RSSI était bien définie dans les adresses de registres.&lt;br /&gt;
**Enfin, d'après les datasheets du cc430 et du cc1101, le registre RSSI met un certain temps a s'actualiser, ce temps peut être calculé et dépend de la taille des paquets reçu. Ne pouvant pas connaitre pas la taille des paquets de la communication que l'on cherche à brouiller à l'avance, nous avons décidé de fixer un temps d'attente 2 fois supérieur au temps caractéristique (~15us), soit 30 micro seconde.&lt;br /&gt;
*Malgré ces essaies et corrections de code, nous ne sommes pas parvenu à faire fonctionner la détection de communication.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Fichiers Rendus'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[[Fichier:code_fonction_1.zip]]&lt;br /&gt;
*[[Fichier:code_fonction_2.zip]]&lt;br /&gt;
*[[Fichier:compte_rendu.pdf]]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Bibliographie'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[http://www.ti.com/ ti.com]&lt;br /&gt;
*[https://www.mbed.com/en/ mbed.com]&lt;br /&gt;
*[http://www.semtech.com/ semtech.com]&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42448</id>
		<title>IMA4 2016/2017 P32</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42448"/>
				<updated>2017-05-18T12:10:37Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Semaine 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Cahier des charges'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;Présentation générale du projet&amp;lt;/span&amp;gt;=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Contexte&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'expansion de l'utilisation des objets connectés permet de nos jours d'accéder à des données ou de contrôler aisément d'autres systèmes connectés à distance. Les objets connectés sont de plus en plus déployés mais leur sécurité n'est pas toujours testée. Par conséquent, de nombreuses informations sensibles sont susceptibles de transiter en permanence par le biais de multiples plages de fréquences. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ceci amène donc un questionnement sur la sécurité des transferts de données entre la multitude d'objets connectés actuellement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Objectif du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de réaliser un brouilleur d'ondes radiofréquence dans la bande des 868 MHz capable de bloquer les communications LoRa.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Description du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
A l'aboutissement du projet, nous devrions être capable de détecter une communication LoRa dans la bande des 868 MHz, et de la brouiller elle seule, sans incidence sur les autres communications sur d'autres fréquences du réseau LoRa.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous devrons réaliser un montage réalisant un brouillage sur la plage 863-870Mhz afin d'empêcher toute communication LoRa, en envoyant du bruit électronique sur toute la plage de fréquence.&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet, nous perfectionnerons ce montage pour qu'il puisse détecter une communication LoRa à une fréquence donnée (grâce au &amp;quot;join-request message&amp;quot; de 18 octets envoyés par le end-point/node, ou bien grâce aux informations données dans le préambule des paquets), afin d'envoyer des données erronées et de bloquer uniquement cette communication.&lt;br /&gt;
&lt;br /&gt;
Si le temps et le budget le permettent, nous pourrons aussi être amenés à brouiller la plage de fréquences autour des 433 MHz (aussi utilisé par le réseau LoRa).&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Choix techniques : matériel et logiciel&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser ce système, nous allons utiliser un microcontrôleur cc430 muni d'un transceiver cc1101, d'un récepteur LoRa(868MHz) communicant via protocole SPI avec le microcontrôleur, 2 antennes, une batterie, quelques LEDs.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Calendrier prévisionnel'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Liste des tâches à effectuer&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
# Documentation sur le réseau LoRa&lt;br /&gt;
##moyen de transmission&lt;br /&gt;
##format de modulation&lt;br /&gt;
##trame des paquets&lt;br /&gt;
# Réalisation du premier montage brouillant toute la plage&lt;br /&gt;
##contrôler l'émetteur RF du cc430&lt;br /&gt;
##programmer un bruitage sur la plage 863-870MHz&lt;br /&gt;
##test et optimisation&lt;br /&gt;
# Ajout d'un récepteur LoRa pour détecter et brouiller une seule communication&lt;br /&gt;
##contrôler le récepteur LoRa avec le cc430 par protocole spi&lt;br /&gt;
##détecter une communication LoRa à une fréquence donnée&lt;br /&gt;
##contrôler l'émetteur RF afin de brouiller cette communication de manière brutale&lt;br /&gt;
##brouiller cette communication en tentant de changer les données du paquet &lt;br /&gt;
##test et optimisation&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Calendrier&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
''[[Avant le 19/12/16]]'' - Élaboration du Cahier des charges et remplissage du Wiki&lt;br /&gt;
&lt;br /&gt;
''[[Avant fin Janvier]]'' - Complément du Cahier des Charges et listage du matériel nécessaire pour le projet&lt;br /&gt;
&lt;br /&gt;
''[[Répartition sur le S8]]'' - 120h: Réalisation de la 1ere fonction (45h) / Réalisation de la 2e fonction (45h) / Test et débuguage (30h)&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Feuille d'heures'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Après les vacances !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Cahier des charges / Wiki&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 1h&lt;br /&gt;
| 0,5h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
| 7,5h&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le réseau LoRa&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8,5h&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le matériel&lt;br /&gt;
| 1h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|11h&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7,5h&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 7h&lt;br /&gt;
|-&lt;br /&gt;
| Initialisation des registres&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3h&lt;br /&gt;
|3h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6h&lt;br /&gt;
|-&lt;br /&gt;
| Code 1ère fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1,5h&lt;br /&gt;
|3h&lt;br /&gt;
|3h&lt;br /&gt;
|4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 11,5h&lt;br /&gt;
|-&lt;br /&gt;
| Code 2ème fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 8h&lt;br /&gt;
|-&lt;br /&gt;
| Optimisation/Correction fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 7h&lt;br /&gt;
|-&lt;br /&gt;
| Optimisation/Correction fonction 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| 6h&lt;br /&gt;
|-&lt;br /&gt;
| Tests et mesures&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 11h&lt;br /&gt;
|-&lt;br /&gt;
| Modification de la carte&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Avancement du Projet'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Phase préparatoire'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[Jeu 15/12/16]]'' &lt;br /&gt;
*Rendez-vous de mise au point du cahier des charges avec les trois encadrants (M. Boé, M. Vantroys et M. Redon)&lt;br /&gt;
*Elaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 1'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[23/01/17 - 29/01/17]]'' &lt;br /&gt;
*Revue du Cahier des Charges&lt;br /&gt;
*Recherches approfondies sur les modes de transmissions du réseau LoRa&lt;br /&gt;
*Recherche de matériel&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 2'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[30/01/17 - 05/02/17]]''  &lt;br /&gt;
*Précisions sur le cahier des charges&lt;br /&gt;
*Listage du matériel&lt;br /&gt;
*Recherche et détermination de solutions technologiques possibles pour les fonctions demandées&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 3'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[06/02/17 - 12/02/17]]''&lt;br /&gt;
*validation du matériel&lt;br /&gt;
Nous allons utiliser un cc430f5137 (MCU+RF) monté sur une carte optimisée pour les communications autours de 868Mhz.&lt;br /&gt;
Nous pouvons commencer à étudier son fonctionnement, particulièrement celui du module RF (cc1101).&lt;br /&gt;
Nous avons aussi récupéré des exemples de code en c sur le site de Texas Instrument et vu l'utilisation de ces codes sur un projet IMA5 de l'an passé.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 4'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/02/17 - 19/02/17]]''&lt;br /&gt;
*Recherche de solutions pour répondre à la 1ère fonction (brouiller la plage 863-870Mhz).&lt;br /&gt;
&lt;br /&gt;
Après une lecture approfondie de la datasheet du module RF du cc430, nous avons choisi d'utiliser la fréquence de base du module (pouvant être définie grâce aux registres) couplée au registre CHANNR. Cela nous permettra de modifier plus facilement la fréquence de la porteuse, en suivant la formule suivante : [[Fichier:rampe.png]].&lt;br /&gt;
&lt;br /&gt;
Nous pourrons alors balayer la plage de fréquence en changeant la valeur de CHANNR.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 5'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[27/02/17 - 05/03/17]]''&lt;br /&gt;
&lt;br /&gt;
A l'aide de la datasheet du cc1101 ([http://www.ti.com/lit/ds/symlink/cc1101.pdf datasheet_cc1101] pages : 70 à 95), nous avons défini les registres du module RF de la manière suivante (sachant que la fréquence du quartz est de 26MHz, soit Fxosc=26MHz) :&lt;br /&gt;
&lt;br /&gt;
*La fréquence de base a été fixée à 862,999MHz en suivant la formule donnée dans la data sheet[[Fichier:carrier_formula.png]]&lt;br /&gt;
ce qui nous a donné les valeurs FREQ2=0x21, FREQ1=0x31 et FREQ0=0x3A (FREQ=2 175 290)&lt;br /&gt;
&lt;br /&gt;
*Nous avons suivi la formule [[Fichier:chanspace_formula.png]] afin d'avoir un espacement entre les cannaux d'environ 100Khz&lt;br /&gt;
ce qui nous a donné  MDMCFG1=0x02 (CHANSPC_E=2) et MDMCFG0=0x00(CHANSPC_M=0)&lt;br /&gt;
&lt;br /&gt;
*Pour le moment, nous avons choisi le mode de modulation AM, nous avons donc initialisé les registres MDMCFG2=0x30 (mode ASK/OOK) et FREND0=0x50(patable=0 donnant le mode ASK)&lt;br /&gt;
&lt;br /&gt;
*Nous avons créé une bibliothèque RFconfig.h regroupant les valeurs de tous les registres :&lt;br /&gt;
&lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 //0 (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x0F //default (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x31 //868Mhz&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0x3A /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x22 //default (data rate)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x30 // ASK/OOK,no sync-word&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x02 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0x00 //chanspc_m=0&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 //default (no effet on ASK/OOK mode)&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset not used)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x03 //default (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x40 //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x50 //patable=0 -&amp;gt; ASK&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosen&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x0B //default&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 6'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[06/03/17 - 12/03/17]]''&lt;br /&gt;
*Nous avons préparé un premier code réalisant une rampe sur la plage 863-870MHz. Ce code est basé sur une boucle infinie qui incrémente le registre chann de 0 à 69 (pour passer de 863 à 870Mhz) et envoie des paquets 0xFF grâce aux fonctions ChangeChannel(chann) et send_comand().&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		1	// maximum size of data sent by rf&lt;br /&gt;
 &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 10000&lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 &lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFF;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init();&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);	 &lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
     {&lt;br /&gt;
       ChangeChannel(chann);&lt;br /&gt;
       send_cmd();&lt;br /&gt;
       if(chann&amp;gt;=69) &lt;br /&gt;
 	{&lt;br /&gt;
 	  chann=0x00;&lt;br /&gt;
 	}&lt;br /&gt;
       else&lt;br /&gt;
 	{&lt;br /&gt;
 	  chann++;&lt;br /&gt;
 	}&lt;br /&gt;
       __delay_cycles(DELAY);&lt;br /&gt;
     }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Après quelques corrections du code, nous avons pu le compiler grâce au Makefile&lt;br /&gt;
&lt;br /&gt;
*Avec la commande (exécutée en root) et le montage suivants, nous avons upload le main sur le cc430&lt;br /&gt;
 mspdebug rf2500 &amp;quot;prog main&amp;quot;&lt;br /&gt;
[[Fichier:montage001.png]]&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 7'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/03/17 - 19/03/17]]''&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé les premiers tests sur l'analyseur de spectre afin de vérifier que le code fonctionne bien.&lt;br /&gt;
&lt;br /&gt;
*Dans un premier temps, nous avons essayé une fréquence fixe pour voir la calibration du cc430.&lt;br /&gt;
[[Fichier:862.png]]&lt;br /&gt;
Avec un exemple à 862Mhz, on remarque bien que les registres ont bien été initialisés et que la carte émet à la fréquence demandée.&lt;br /&gt;
&lt;br /&gt;
*Ensuite, nous avons testé le code effectuant le balayage sur la plage de fréquence 863-870Mhz, en augmentant le sweep time de l'analyseur de spectre pour voir les différentes fréquences auxquelles la carte émet.&lt;br /&gt;
[[Fichier:sweep.png]]&lt;br /&gt;
En observant de 861 à 872 Mhz sur l'écran de l'analyseur, on peut voir que le code effectue bien le balayage.&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission de la carte étant faible, nous avons essayé de l'augmenter en modifiant certains registres notamment ceux que l'on peut optimiser à l'aide du logiciel smart RF studio. Cependant, nous pensons qu'il faudra changer l'antenne patch actuelle de la carte pour une antenne connectée en SMA.&lt;br /&gt;
&lt;br /&gt;
*Nous avons aussi tenté de brouiller les communications d'autres groupes de projet utilisant des modules LoRa. Ces derniers étant configurés à 433Mhz, nous avons dû changer la fréquence de notre carte. Le brouillage ne fonctionnait pas mais notre carte étant optimisée pour une émission autour de 868Mhz, les résultats n'étaient pas pertinents.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 8'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[20/03/17 - 26/03/17]]'' &lt;br /&gt;
&lt;br /&gt;
*Nous avons emprunté à M. Vantroys 3 modules SX1276 montés sur des cartes NUCLEO-F401RE afin de pouvoir tester notre carte sur une communication LoRa à 868Mhz&lt;br /&gt;
[[Fichier:lorambed.png]]&lt;br /&gt;
*Le code utilisé pour le test a été récupéré sur le forum des développeurs du site mbed.com. C'est un code &amp;quot;ping pong&amp;quot; effectuant une communication continue entre deux modules LoRa à une fréquence de 868Mhz. Il nous a suffit d'utiliser le compilateur du site (qui regroupe toutes les bibliothèques nécessaires) en indiquant que la carte utilisée est une F401RE pour que le binaire produit soit compatible. La carte NUCLEO étant reconnue comme un système de fichier par Linux, pour la flasher il faut la monter en usb à l'aide des commandes fdisk et mount puis de copier le binaire dedans avec la commande cp.&lt;br /&gt;
[[Fichier:lora pingpong.zip]]&lt;br /&gt;
*Une fois les modules NUCLEO flashés, la communication LoRa est établie dès que deux modules sont alimentés. Nous avons donc branché en USB deux modules sur deux machines différentes afin d'observer la communication sur des terminaux. La communication se fait bien, l'un envoie &amp;quot;ping&amp;quot; tandis que l'autre envoie &amp;quot;pong&amp;quot; lorsqu'il reçoit &amp;quot;ping&amp;quot;. Malheureusement, comme nous l'avions prédit, notre carte a une puissance d'émission trop faible et ne parvient pas à brouiller efficacement.&lt;br /&gt;
*Les modules peuvent aussi communiquer en modulation FSK, dans ce cas notre système arrive à effectuer le brouillage. Néanmoins, il serait plus intéressant de parvenir à brouiller la communication LoRa.&lt;br /&gt;
*Après plusieurs changements dans le code du cc430, n'ayant pas de résultats positifs, nous avons diminué la puissance d'émission des modules LoRa en changeant un header dans le code lora_pingpong.cpp. En passant cette puissance de 14dBm à 6dBm, nous sommes parvenus à brouiller la communication entre les deux modules LoRa.&lt;br /&gt;
&lt;br /&gt;
*En parallèle, nous avons commencé à rechercher des solutions pour la fonction 2. Un pseudo code est donné sur le site ti.com ([https://www.ti.com/lit/an/swra315/swra315.pdf pseudo_code_frequency_scanning]) qui permet de faire un scan sur une plage de fréquence et de récupérer la fréquence ou le signal reçu est le plus fort. Ce code pourra être écrit en C puis incorporé dans notre main pour détecter une communication et la brouiller.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 9'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[27/03/17 - 02/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*Même si le brouillage ne s’effectue qu'à puissance réduite, nous avons cherché à l'optimiser&lt;br /&gt;
**Nous avons premièrement réalisé que le mode de modulation choisi au départ (ASK) n'était pas adapté au brouillage d'une communication LoRa. Nous avons donc essayé le mode GFSK qui est le plus proche du format de modulation du réseau LoRa. Nous avons aussi essayé les modes 2FSK et 4FSK qui sont relativement proches du GFSK. Nous en avons conclu que le mode de modulation à utiliser est GFSK (ce mode fonctionne aussi pour brouiller la modulation FSK)&lt;br /&gt;
**Ensuite, nous avons réduit la plage de fréquence balayée par le cc430 afin de voir si il y avait une influence sur le brouillage. Nous avons remarqué que le brouillage était plus efficace pour un balayage de 866 à 870 Mhz (au lieu de 863-870 initialement)&lt;br /&gt;
**Dans le même ordre d'idée, nous avons décidé de réduire le nombre d'incrémentations du registre CHANNR afin d'augmenter la rapidité du balayage. Pour ce faire, nous avons augmenté la taille de chaque canal, passant de 100kHz à 200kHz&lt;br /&gt;
**La puissance d'émission de la carte a été changée dans la fonction WritePATable (appelée par rfinit() dans le main), afin d'être maximale (12dBm)&lt;br /&gt;
**Enfin, nous avons augmenté le nombre de paquets à envoyer&lt;br /&gt;
&lt;br /&gt;
Nouvelle bibliothèque RFconfig.h :&lt;br /&gt;
&lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 // (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x06 //default 0f (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x4E //866&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0xC2 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x83 // data rate&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x13 // GFSK &lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x22 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0xF8 //chanspc_m=248&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 // default 47khz deviation&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset for demodulation)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x07 // (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x77 //&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x10 //patable=0 (useless for gfsk) &lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosed&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x09 //&lt;br /&gt;
&lt;br /&gt;
Nouveau main.c : &lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;led_commands.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		10	// maximum size of data sent by rf&lt;br /&gt;
  &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 5000 //15ms  &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Any other commands are for RSSI measurement&lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFD;&lt;br /&gt;
   buffer[1] = 0xAA;&lt;br /&gt;
   buffer[2] = 0xFF;&lt;br /&gt;
   buffer[3] = 0x11;&lt;br /&gt;
   buffer[4] = 0xFF;&lt;br /&gt;
   buffer[5] = 0x66;&lt;br /&gt;
   buffer[6] = 0xFF;&lt;br /&gt;
   buffer[7] = 0x33;&lt;br /&gt;
   buffer[8] = 0x1F;&lt;br /&gt;
   buffer[9] = 0xF8;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   unsigned char led2=0x10;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(0x10, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 allumée quand le cc430 est sous tension&lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chann);&lt;br /&gt;
     send_cmd();&lt;br /&gt;
     if(chann&amp;gt;=20) //866-870&lt;br /&gt;
     {&lt;br /&gt;
       chann=0x00;&lt;br /&gt;
       led2=led2^0x10;&lt;br /&gt;
       set_color(0x10, 0x00, 0x00, led2, 0x00, 0x00); //led2 s'allume toutes les 2 rampes&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {&lt;br /&gt;
       chann++;&lt;br /&gt;
     }&lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Fonction WritePATable :&lt;br /&gt;
&lt;br /&gt;
 void WritePATable(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char valueRead = 0;&lt;br /&gt;
   &lt;br /&gt;
   //while(valueRead != 0x03)    // Output Power: -30  [dBm]&lt;br /&gt;
   //while(valueRead != 0x25)    // Output Power: -12  [dBm]&lt;br /&gt;
   //while(valueRead != 0x2D)    // Output Power: -6   [dBm]&lt;br /&gt;
   //while(valueRead != 0x8D)    // Output Power:  0   [dBm]&lt;br /&gt;
   //while(valueRead != 0xC3)    // Output Power:  10  [dBm]&lt;br /&gt;
   while(valueRead != 0xC0)    // Output Power:  Maximum  [dBm]&lt;br /&gt;
   //while(valueRead != 0xC6)    // Output Power(default):  8.8  [dBm]&lt;br /&gt;
   {&lt;br /&gt;
     /* Write the power output to the PA_TABLE and verify the write operation.  */&lt;br /&gt;
     unsigned char i = 0; &lt;br /&gt;
 &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
     //RF1AINSTRW = 0x7E03; // PA Table write (burst), Output Power: -30  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E25; // PA Table write (burst), Output Power: -12  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E2D; // PA Table write (burst), Output Power: -6   [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E8D; // PA Table write (burst), Output Power: 0    [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC3; // PA Table write (burst), Output Power: 10   [dBm]&lt;br /&gt;
     RF1AINSTRW = 0x7EC0; // PA Table write (burst), Output Power: Maximum  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC6; // PA Table write (burst), Output Power(default):  8.8  [dBm]&lt;br /&gt;
     &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
       RF1AINSTR1B = RF_PATABRD;                 // -miguel read &amp;amp; write&lt;br /&gt;
     &lt;br /&gt;
     // Traverse PATABLE pointers to read &lt;br /&gt;
     for (i = 0; i &amp;lt; 7; i++)&lt;br /&gt;
     {&lt;br /&gt;
       while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
       valueRead  = RF1ADOUT1B;     &lt;br /&gt;
     }&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
     valueRead  = RF1ADOUTB;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 10'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[03/04/17 - 09/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission étant trop faible pour brouiller la communication entre les 2 modules LoRa, nous avons décidé de changer l'antenne de la carte. Il a fallu couper l'antenne patch à l'aide d'une scie afin de souder un connecteur SMA.&lt;br /&gt;
[[Fichier:cc430antenne.png]]&lt;br /&gt;
*Grâce à cette nouvelle antenne, la communication peut maintenant être brouillée à une puissance de 10dBm (contre 6 auparavant). Mais il faut que la carte reste relativement proche d'un des modules.&lt;br /&gt;
*Pour réussir le brouillage quand les modules LoRa sont à leur puissance maximale (14dBm), il faudra sûrement ajouter un amplificateur entre la sortie de la carte et son antenne.&lt;br /&gt;
*Nous avons codé la fonction de scan en c et l'avons incorporé dans le main &lt;br /&gt;
**Cette fonction autorise le module à entrer en mode RX pour recevoir les communications. Elle incrémente ensuite le canal pour parcourir la plage 863-870MHz afin de détecter une communication. Toute les incrémentations, la variable rssi récupère la valeur contenue dans le registre qui correspond à la valeur du RSSI. Cette valeur étant en binaire complément 2, elle est convertie en dBm et placée dans un entier. Enfin, si cette valeur est supérieur à la valeur maximale déjà mesuré ou à un palier prédéfini (ici 0dBm), on stocke le numéro du canal correspondant qui sera utilisé dans le main par la suite.&lt;br /&gt;
&lt;br /&gt;
fonction de scan :&lt;br /&gt;
 void freq_scan(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char rssi;&lt;br /&gt;
   long rssi_dbm;&lt;br /&gt;
   unsigned char chan_scan=START_FREQ_CHAN;&lt;br /&gt;
   long rssi_max=0; //scan will take communication above 0dbm&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, led2, 0x00); //led2 blue while scanning&lt;br /&gt;
   &lt;br /&gt;
   ChangeChannel(chan_scan);&lt;br /&gt;
   ReceiveOn();    //enable RX&lt;br /&gt;
   while((Strobe(RF_SNOP) &amp;amp; 0x70) != 0x10); //make sure RX is ready&lt;br /&gt;
   while(chan_scan&amp;lt;STOP_FREQ_CHAN)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chan_scan);&lt;br /&gt;
     rssi = ReadSingleReg(RSSI);  //define in cc430f5137.h RSSI=0x34 corresponding to addr of rssi value&lt;br /&gt;
     if (rssi &amp;gt;= 128) &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (long)((long)( rssi - 256) / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     else &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (rssi / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     if(rssi_dbm&amp;gt;rssi_max)&lt;br /&gt;
     {&lt;br /&gt;
       rssi_max=rssi_dbm;&lt;br /&gt;
       chan_jam=chan_scan-10; //start jamming 2Mhz below max dbm received&lt;br /&gt;
     }&lt;br /&gt;
     chan_scan++;&lt;br /&gt;
     Strobe( RF_SFRX); //flush the RX FIFO&lt;br /&gt;
   }&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
nouveau main :&lt;br /&gt;
&lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chan_main=0x00;&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 on if cc430 powered&lt;br /&gt;
   int i;&lt;br /&gt;
   &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     freq_scan();&lt;br /&gt;
     ReceiveOff();&lt;br /&gt;
     chan_main=chan_jam;&lt;br /&gt;
     if (chan_main != 0)  //jam only if a communication xas detected with freq_scan&lt;br /&gt;
     {&lt;br /&gt;
       for(i=0 ; i&amp;lt;(20*NUM_JAM_RAMP) ; i++) //ramp start 2Mhz below chan_jam and stop 2Mhz above&lt;br /&gt;
       {&lt;br /&gt;
         ChangeChannel(chan_main);&lt;br /&gt;
         if (chan_main&amp;gt;= (chan_jam+20))&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main=0x00;&lt;br /&gt;
           led2=led2^0x10;&lt;br /&gt;
           set_color(led1, 0x00, 0x00, led2, 0x00, 0x00); //led2 blink red every two ramp of jamming&lt;br /&gt;
         }&lt;br /&gt;
         else&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main++;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     chan_main=0x00;  &lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
header :&lt;br /&gt;
 #define DELAY 100 //300us  &lt;br /&gt;
 #define DELAY_RSSI 10 //30us&lt;br /&gt;
 &lt;br /&gt;
 #define START_FREQ_CHAN 15&lt;br /&gt;
 #define STOP_FREQ_CHAN 50     //scanning 863-870Mhz with 200khz steps&lt;br /&gt;
 #define RSSI_OFFSET 74 //cf datasheet&lt;br /&gt;
 &lt;br /&gt;
 #define NUM_JAM_RAMP 50&lt;br /&gt;
 &lt;br /&gt;
 unsigned char chan_jam=0x00;&lt;br /&gt;
 unsigned char led2=0x10;&lt;br /&gt;
 unsigned char led1=0x10;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Après les vacances'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
*Nous avons effectué des tests pour vérifier si la fonction de scan fonctionne. Malheureusement, le cc430 n'a pas l'air de détecter de communications. La fréquence des modules LoRa a été fixée à 868MHz en mettant le header LORA_FHSS_ENABLE à false (ceci désactive le glissement de fréquence) pour faire des tests dans des conditions plus optimales. Cependant, le cc430 ne détecte toujours aucune communication.&lt;br /&gt;
*Nous avons donc vérifié plusieurs éléments du code : la conversion en dBm du registre RSSI, la lecture dans le registre, le temps de mise à jour du registre RSSI.&lt;br /&gt;
**D'après le pseudo-code fourni par texas instrument, et ce que nous avons pu lire sur les forums des développeurs, la conversion fonctionne. Nous avons tout de même essayé d'autre moyen de conversion, mais aucune de ces méthodes n'a permis au cc430 de détecter une communication.&lt;br /&gt;
**En ce qui concerne la lecture dans le registre, nous avons effectué des tests en lisant dans d'autres registres et en allumant une led, nous en avons conclu que la fonction ReadSingleReg fonctionne. Nous nous sommes donc portés sur l'adresse de ce registre, en vérifiant la bibliothèque cc430f5137.h, nous avons constaté que la variable RSSI était bien définie dans les adresses de registres.&lt;br /&gt;
**Enfin, d'après les datasheets du cc430 et du cc1101, le registre RSSI met un certain temps a s'actualiser, ce temps peut être calculé et dépend de la taille des paquets reçu. Ne pouvant pas connaitre pas la taille des paquets de la communication que l'on cherche à brouiller à l'avance, nous avons décidé de fixer un temps d'attente 2 fois supérieur au temps caractéristique (~15us), soit 30 micro seconde.&lt;br /&gt;
*Malgré ces essaies et corrections de code, nous ne sommes pas parvenu à faire fonctionner la détection de communication.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Fichiers Rendus'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[[Fichier:code_fonction_1.zip]]&lt;br /&gt;
*[[Fichier:code_fonction_2.zip]]&lt;br /&gt;
*[[Fichier:compte_rendu.pdf]]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Bibliographie'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[http://www.ti.com/ ti.com]&lt;br /&gt;
*[https://www.mbed.com/en/ mbed.com]&lt;br /&gt;
*[http://www.semtech.com/ semtech.com]&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42447</id>
		<title>IMA4 2016/2017 P32</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42447"/>
				<updated>2017-05-18T12:10:20Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Semaine 6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Cahier des charges'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;Présentation générale du projet&amp;lt;/span&amp;gt;=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Contexte&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'expansion de l'utilisation des objets connectés permet de nos jours d'accéder à des données ou de contrôler aisément d'autres systèmes connectés à distance. Les objets connectés sont de plus en plus déployés mais leur sécurité n'est pas toujours testée. Par conséquent, de nombreuses informations sensibles sont susceptibles de transiter en permanence par le biais de multiples plages de fréquences. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ceci amène donc un questionnement sur la sécurité des transferts de données entre la multitude d'objets connectés actuellement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Objectif du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de réaliser un brouilleur d'ondes radiofréquence dans la bande des 868 MHz capable de bloquer les communications LoRa.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Description du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
A l'aboutissement du projet, nous devrions être capable de détecter une communication LoRa dans la bande des 868 MHz, et de la brouiller elle seule, sans incidence sur les autres communications sur d'autres fréquences du réseau LoRa.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous devrons réaliser un montage réalisant un brouillage sur la plage 863-870Mhz afin d'empêcher toute communication LoRa, en envoyant du bruit électronique sur toute la plage de fréquence.&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet, nous perfectionnerons ce montage pour qu'il puisse détecter une communication LoRa à une fréquence donnée (grâce au &amp;quot;join-request message&amp;quot; de 18 octets envoyés par le end-point/node, ou bien grâce aux informations données dans le préambule des paquets), afin d'envoyer des données erronées et de bloquer uniquement cette communication.&lt;br /&gt;
&lt;br /&gt;
Si le temps et le budget le permettent, nous pourrons aussi être amenés à brouiller la plage de fréquences autour des 433 MHz (aussi utilisé par le réseau LoRa).&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Choix techniques : matériel et logiciel&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser ce système, nous allons utiliser un microcontrôleur cc430 muni d'un transceiver cc1101, d'un récepteur LoRa(868MHz) communicant via protocole SPI avec le microcontrôleur, 2 antennes, une batterie, quelques LEDs.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Calendrier prévisionnel'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Liste des tâches à effectuer&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
# Documentation sur le réseau LoRa&lt;br /&gt;
##moyen de transmission&lt;br /&gt;
##format de modulation&lt;br /&gt;
##trame des paquets&lt;br /&gt;
# Réalisation du premier montage brouillant toute la plage&lt;br /&gt;
##contrôler l'émetteur RF du cc430&lt;br /&gt;
##programmer un bruitage sur la plage 863-870MHz&lt;br /&gt;
##test et optimisation&lt;br /&gt;
# Ajout d'un récepteur LoRa pour détecter et brouiller une seule communication&lt;br /&gt;
##contrôler le récepteur LoRa avec le cc430 par protocole spi&lt;br /&gt;
##détecter une communication LoRa à une fréquence donnée&lt;br /&gt;
##contrôler l'émetteur RF afin de brouiller cette communication de manière brutale&lt;br /&gt;
##brouiller cette communication en tentant de changer les données du paquet &lt;br /&gt;
##test et optimisation&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Calendrier&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
''[[Avant le 19/12/16]]'' - Élaboration du Cahier des charges et remplissage du Wiki&lt;br /&gt;
&lt;br /&gt;
''[[Avant fin Janvier]]'' - Complément du Cahier des Charges et listage du matériel nécessaire pour le projet&lt;br /&gt;
&lt;br /&gt;
''[[Répartition sur le S8]]'' - 120h: Réalisation de la 1ere fonction (45h) / Réalisation de la 2e fonction (45h) / Test et débuguage (30h)&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Feuille d'heures'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Après les vacances !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Cahier des charges / Wiki&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 1h&lt;br /&gt;
| 0,5h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
| 7,5h&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le réseau LoRa&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8,5h&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le matériel&lt;br /&gt;
| 1h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|11h&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7,5h&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 7h&lt;br /&gt;
|-&lt;br /&gt;
| Initialisation des registres&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3h&lt;br /&gt;
|3h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6h&lt;br /&gt;
|-&lt;br /&gt;
| Code 1ère fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1,5h&lt;br /&gt;
|3h&lt;br /&gt;
|3h&lt;br /&gt;
|4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 11,5h&lt;br /&gt;
|-&lt;br /&gt;
| Code 2ème fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 8h&lt;br /&gt;
|-&lt;br /&gt;
| Optimisation/Correction fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 7h&lt;br /&gt;
|-&lt;br /&gt;
| Optimisation/Correction fonction 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| 6h&lt;br /&gt;
|-&lt;br /&gt;
| Tests et mesures&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 11h&lt;br /&gt;
|-&lt;br /&gt;
| Modification de la carte&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Avancement du Projet'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Phase préparatoire'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[Jeu 15/12/16]]'' &lt;br /&gt;
*Rendez-vous de mise au point du cahier des charges avec les trois encadrants (M. Boé, M. Vantroys et M. Redon)&lt;br /&gt;
*Elaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 1'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[23/01/17 - 29/01/17]]'' &lt;br /&gt;
*Revue du Cahier des Charges&lt;br /&gt;
*Recherches approfondies sur les modes de transmissions du réseau LoRa&lt;br /&gt;
*Recherche de matériel&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 2'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[30/01/17 - 05/02/17]]''  &lt;br /&gt;
*Précisions sur le cahier des charges&lt;br /&gt;
*Listage du matériel&lt;br /&gt;
*Recherche et détermination de solutions technologiques possibles pour les fonctions demandées&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 3'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[06/02/17 - 12/02/17]]''&lt;br /&gt;
*validation du matériel&lt;br /&gt;
Nous allons utiliser un cc430f5137 (MCU+RF) monté sur une carte optimisée pour les communications autours de 868Mhz.&lt;br /&gt;
Nous pouvons commencer à étudier son fonctionnement, particulièrement celui du module RF (cc1101).&lt;br /&gt;
Nous avons aussi récupéré des exemples de code en c sur le site de Texas Instrument et vu l'utilisation de ces codes sur un projet IMA5 de l'an passé.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 4'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/02/17 - 19/02/17]]''&lt;br /&gt;
*Recherche de solutions pour répondre à la 1ère fonction (brouiller la plage 863-870Mhz).&lt;br /&gt;
&lt;br /&gt;
Après une lecture approfondie de la datasheet du module RF du cc430, nous avons choisi d'utiliser la fréquence de base du module (pouvant être définie grâce aux registres) couplée au registre CHANNR. Cela nous permettra de modifier plus facilement la fréquence de la porteuse, en suivant la formule suivante : [[Fichier:rampe.png]].&lt;br /&gt;
&lt;br /&gt;
Nous pourrons alors balayer la plage de fréquence en changeant la valeur de CHANNR.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 5'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[27/02/17 - 05/03/17]]''&lt;br /&gt;
&lt;br /&gt;
A l'aide de la datasheet du cc1101 ([http://www.ti.com/lit/ds/symlink/cc1101.pdf datasheet_cc1101] pages : 70 à 95), nous avons défini les registres du module RF de la manière suivante (sachant que la fréquence du quartz est de 26MHz, soit Fxosc=26MHz) :&lt;br /&gt;
&lt;br /&gt;
*La fréquence de base a été fixée à 862,999MHz en suivant la formule donnée dans la data sheet[[Fichier:carrier_formula.png]]&lt;br /&gt;
ce qui nous a donné les valeurs FREQ2=0x21, FREQ1=0x31 et FREQ0=0x3A (FREQ=2 175 290)&lt;br /&gt;
&lt;br /&gt;
*Nous avons suivi la formule [[Fichier:chanspace_formula.png]] afin d'avoir un espacement entre les cannaux d'environ 100Khz&lt;br /&gt;
ce qui nous a donné  MDMCFG1=0x02 (CHANSPC_E=2) et MDMCFG0=0x00(CHANSPC_M=0)&lt;br /&gt;
&lt;br /&gt;
*Pour le moment, nous avons choisi le mode de modulation AM, nous avons donc initialisé les registres MDMCFG2=0x30 (mode ASK/OOK) et FREND0=0x50(patable=0 donnant le mode ASK)&lt;br /&gt;
&lt;br /&gt;
*Nous avons créé une bibliothèque RFconfig.h regroupant les valeurs de tous les registres :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal and high VCO recommended&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz stop at 870&lt;br /&gt;
 //FREQ=00 10 00 01 00 11 00 01 00 11 10 10&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //CHANNR from 0 to 69 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 //0 (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x0F //default (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x31 //868Mhz&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0x3A /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x22 //default (data rate)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x30 // ASK/OOK,no sync-word&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x02 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0x00 //chanspc_m=0&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 //default (no effet on ASK/OOK mode)&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset not used)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x03 //default (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x40 //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x50 //patable=0 -&amp;gt; ASK&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosen&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x0B //default&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 6'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[06/03/17 - 12/03/17]]''&lt;br /&gt;
*Nous avons préparé un premier code réalisant une rampe sur la plage 863-870MHz. Ce code est basé sur une boucle infinie qui incrémente le registre chann de 0 à 69 (pour passer de 863 à 870Mhz) et envoie des paquets 0xFF grâce aux fonctions ChangeChannel(chann) et send_comand().&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		1	// maximum size of data sent by rf&lt;br /&gt;
 &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 10000&lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 &lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFF;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init();&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);	 &lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
     {&lt;br /&gt;
       ChangeChannel(chann);&lt;br /&gt;
       send_cmd();&lt;br /&gt;
       if(chann&amp;gt;=69) &lt;br /&gt;
 	{&lt;br /&gt;
 	  chann=0x00;&lt;br /&gt;
 	}&lt;br /&gt;
       else&lt;br /&gt;
 	{&lt;br /&gt;
 	  chann++;&lt;br /&gt;
 	}&lt;br /&gt;
       __delay_cycles(DELAY);&lt;br /&gt;
     }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Après quelques corrections du code, nous avons pu le compiler grâce au Makefile&lt;br /&gt;
&lt;br /&gt;
*Avec la commande (exécutée en root) et le montage suivants, nous avons upload le main sur le cc430&lt;br /&gt;
 mspdebug rf2500 &amp;quot;prog main&amp;quot;&lt;br /&gt;
[[Fichier:montage001.png]]&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 7'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/03/17 - 19/03/17]]''&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé les premiers tests sur l'analyseur de spectre afin de vérifier que le code fonctionne bien.&lt;br /&gt;
&lt;br /&gt;
*Dans un premier temps, nous avons essayé une fréquence fixe pour voir la calibration du cc430.&lt;br /&gt;
[[Fichier:862.png]]&lt;br /&gt;
Avec un exemple à 862Mhz, on remarque bien que les registres ont bien été initialisés et que la carte émet à la fréquence demandée.&lt;br /&gt;
&lt;br /&gt;
*Ensuite, nous avons testé le code effectuant le balayage sur la plage de fréquence 863-870Mhz, en augmentant le sweep time de l'analyseur de spectre pour voir les différentes fréquences auxquelles la carte émet.&lt;br /&gt;
[[Fichier:sweep.png]]&lt;br /&gt;
En observant de 861 à 872 Mhz sur l'écran de l'analyseur, on peut voir que le code effectue bien le balayage.&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission de la carte étant faible, nous avons essayé de l'augmenter en modifiant certains registres notamment ceux que l'on peut optimiser à l'aide du logiciel smart RF studio. Cependant, nous pensons qu'il faudra changer l'antenne patch actuelle de la carte pour une antenne connectée en SMA.&lt;br /&gt;
&lt;br /&gt;
*Nous avons aussi tenté de brouiller les communications d'autres groupes de projet utilisant des modules LoRa. Ces derniers étant configurés à 433Mhz, nous avons dû changer la fréquence de notre carte. Le brouillage ne fonctionnait pas mais notre carte étant optimisée pour une émission autour de 868Mhz, les résultats n'étaient pas pertinents.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 8'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[20/03/17 - 26/03/17]]'' &lt;br /&gt;
&lt;br /&gt;
*Nous avons emprunté à M. Vantroys 3 modules SX1276 montés sur des cartes NUCLEO-F401RE afin de pouvoir tester notre carte sur une communication LoRa à 868Mhz&lt;br /&gt;
[[Fichier:lorambed.png]]&lt;br /&gt;
*Le code utilisé pour le test a été récupéré sur le forum des développeurs du site mbed.com. C'est un code &amp;quot;ping pong&amp;quot; effectuant une communication continue entre deux modules LoRa à une fréquence de 868Mhz. Il nous a suffit d'utiliser le compilateur du site (qui regroupe toutes les bibliothèques nécessaires) en indiquant que la carte utilisée est une F401RE pour que le binaire produit soit compatible. La carte NUCLEO étant reconnue comme un système de fichier par Linux, pour la flasher il faut la monter en usb à l'aide des commandes fdisk et mount puis de copier le binaire dedans avec la commande cp.&lt;br /&gt;
[[Fichier:lora pingpong.zip]]&lt;br /&gt;
*Une fois les modules NUCLEO flashés, la communication LoRa est établie dès que deux modules sont alimentés. Nous avons donc branché en USB deux modules sur deux machines différentes afin d'observer la communication sur des terminaux. La communication se fait bien, l'un envoie &amp;quot;ping&amp;quot; tandis que l'autre envoie &amp;quot;pong&amp;quot; lorsqu'il reçoit &amp;quot;ping&amp;quot;. Malheureusement, comme nous l'avions prédit, notre carte a une puissance d'émission trop faible et ne parvient pas à brouiller efficacement.&lt;br /&gt;
*Les modules peuvent aussi communiquer en modulation FSK, dans ce cas notre système arrive à effectuer le brouillage. Néanmoins, il serait plus intéressant de parvenir à brouiller la communication LoRa.&lt;br /&gt;
*Après plusieurs changements dans le code du cc430, n'ayant pas de résultats positifs, nous avons diminué la puissance d'émission des modules LoRa en changeant un header dans le code lora_pingpong.cpp. En passant cette puissance de 14dBm à 6dBm, nous sommes parvenus à brouiller la communication entre les deux modules LoRa.&lt;br /&gt;
&lt;br /&gt;
*En parallèle, nous avons commencé à rechercher des solutions pour la fonction 2. Un pseudo code est donné sur le site ti.com ([https://www.ti.com/lit/an/swra315/swra315.pdf pseudo_code_frequency_scanning]) qui permet de faire un scan sur une plage de fréquence et de récupérer la fréquence ou le signal reçu est le plus fort. Ce code pourra être écrit en C puis incorporé dans notre main pour détecter une communication et la brouiller.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 9'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[27/03/17 - 02/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*Même si le brouillage ne s’effectue qu'à puissance réduite, nous avons cherché à l'optimiser&lt;br /&gt;
**Nous avons premièrement réalisé que le mode de modulation choisi au départ (ASK) n'était pas adapté au brouillage d'une communication LoRa. Nous avons donc essayé le mode GFSK qui est le plus proche du format de modulation du réseau LoRa. Nous avons aussi essayé les modes 2FSK et 4FSK qui sont relativement proches du GFSK. Nous en avons conclu que le mode de modulation à utiliser est GFSK (ce mode fonctionne aussi pour brouiller la modulation FSK)&lt;br /&gt;
**Ensuite, nous avons réduit la plage de fréquence balayée par le cc430 afin de voir si il y avait une influence sur le brouillage. Nous avons remarqué que le brouillage était plus efficace pour un balayage de 866 à 870 Mhz (au lieu de 863-870 initialement)&lt;br /&gt;
**Dans le même ordre d'idée, nous avons décidé de réduire le nombre d'incrémentations du registre CHANNR afin d'augmenter la rapidité du balayage. Pour ce faire, nous avons augmenté la taille de chaque canal, passant de 100kHz à 200kHz&lt;br /&gt;
**La puissance d'émission de la carte a été changée dans la fonction WritePATable (appelée par rfinit() dans le main), afin d'être maximale (12dBm)&lt;br /&gt;
**Enfin, nous avons augmenté le nombre de paquets à envoyer&lt;br /&gt;
&lt;br /&gt;
Nouvelle bibliothèque RFconfig.h :&lt;br /&gt;
&lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 // (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x06 //default 0f (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x4E //866&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0xC2 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x83 // data rate&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x13 // GFSK &lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x22 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0xF8 //chanspc_m=248&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 // default 47khz deviation&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset for demodulation)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x07 // (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x77 //&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x10 //patable=0 (useless for gfsk) &lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosed&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x09 //&lt;br /&gt;
&lt;br /&gt;
Nouveau main.c : &lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;led_commands.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		10	// maximum size of data sent by rf&lt;br /&gt;
  &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 5000 //15ms  &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Any other commands are for RSSI measurement&lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFD;&lt;br /&gt;
   buffer[1] = 0xAA;&lt;br /&gt;
   buffer[2] = 0xFF;&lt;br /&gt;
   buffer[3] = 0x11;&lt;br /&gt;
   buffer[4] = 0xFF;&lt;br /&gt;
   buffer[5] = 0x66;&lt;br /&gt;
   buffer[6] = 0xFF;&lt;br /&gt;
   buffer[7] = 0x33;&lt;br /&gt;
   buffer[8] = 0x1F;&lt;br /&gt;
   buffer[9] = 0xF8;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   unsigned char led2=0x10;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(0x10, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 allumée quand le cc430 est sous tension&lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chann);&lt;br /&gt;
     send_cmd();&lt;br /&gt;
     if(chann&amp;gt;=20) //866-870&lt;br /&gt;
     {&lt;br /&gt;
       chann=0x00;&lt;br /&gt;
       led2=led2^0x10;&lt;br /&gt;
       set_color(0x10, 0x00, 0x00, led2, 0x00, 0x00); //led2 s'allume toutes les 2 rampes&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {&lt;br /&gt;
       chann++;&lt;br /&gt;
     }&lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Fonction WritePATable :&lt;br /&gt;
&lt;br /&gt;
 void WritePATable(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char valueRead = 0;&lt;br /&gt;
   &lt;br /&gt;
   //while(valueRead != 0x03)    // Output Power: -30  [dBm]&lt;br /&gt;
   //while(valueRead != 0x25)    // Output Power: -12  [dBm]&lt;br /&gt;
   //while(valueRead != 0x2D)    // Output Power: -6   [dBm]&lt;br /&gt;
   //while(valueRead != 0x8D)    // Output Power:  0   [dBm]&lt;br /&gt;
   //while(valueRead != 0xC3)    // Output Power:  10  [dBm]&lt;br /&gt;
   while(valueRead != 0xC0)    // Output Power:  Maximum  [dBm]&lt;br /&gt;
   //while(valueRead != 0xC6)    // Output Power(default):  8.8  [dBm]&lt;br /&gt;
   {&lt;br /&gt;
     /* Write the power output to the PA_TABLE and verify the write operation.  */&lt;br /&gt;
     unsigned char i = 0; &lt;br /&gt;
 &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
     //RF1AINSTRW = 0x7E03; // PA Table write (burst), Output Power: -30  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E25; // PA Table write (burst), Output Power: -12  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E2D; // PA Table write (burst), Output Power: -6   [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E8D; // PA Table write (burst), Output Power: 0    [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC3; // PA Table write (burst), Output Power: 10   [dBm]&lt;br /&gt;
     RF1AINSTRW = 0x7EC0; // PA Table write (burst), Output Power: Maximum  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC6; // PA Table write (burst), Output Power(default):  8.8  [dBm]&lt;br /&gt;
     &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
       RF1AINSTR1B = RF_PATABRD;                 // -miguel read &amp;amp; write&lt;br /&gt;
     &lt;br /&gt;
     // Traverse PATABLE pointers to read &lt;br /&gt;
     for (i = 0; i &amp;lt; 7; i++)&lt;br /&gt;
     {&lt;br /&gt;
       while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
       valueRead  = RF1ADOUT1B;     &lt;br /&gt;
     }&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
     valueRead  = RF1ADOUTB;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 10'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[03/04/17 - 09/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission étant trop faible pour brouiller la communication entre les 2 modules LoRa, nous avons décidé de changer l'antenne de la carte. Il a fallu couper l'antenne patch à l'aide d'une scie afin de souder un connecteur SMA.&lt;br /&gt;
[[Fichier:cc430antenne.png]]&lt;br /&gt;
*Grâce à cette nouvelle antenne, la communication peut maintenant être brouillée à une puissance de 10dBm (contre 6 auparavant). Mais il faut que la carte reste relativement proche d'un des modules.&lt;br /&gt;
*Pour réussir le brouillage quand les modules LoRa sont à leur puissance maximale (14dBm), il faudra sûrement ajouter un amplificateur entre la sortie de la carte et son antenne.&lt;br /&gt;
*Nous avons codé la fonction de scan en c et l'avons incorporé dans le main &lt;br /&gt;
**Cette fonction autorise le module à entrer en mode RX pour recevoir les communications. Elle incrémente ensuite le canal pour parcourir la plage 863-870MHz afin de détecter une communication. Toute les incrémentations, la variable rssi récupère la valeur contenue dans le registre qui correspond à la valeur du RSSI. Cette valeur étant en binaire complément 2, elle est convertie en dBm et placée dans un entier. Enfin, si cette valeur est supérieur à la valeur maximale déjà mesuré ou à un palier prédéfini (ici 0dBm), on stocke le numéro du canal correspondant qui sera utilisé dans le main par la suite.&lt;br /&gt;
&lt;br /&gt;
fonction de scan :&lt;br /&gt;
 void freq_scan(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char rssi;&lt;br /&gt;
   long rssi_dbm;&lt;br /&gt;
   unsigned char chan_scan=START_FREQ_CHAN;&lt;br /&gt;
   long rssi_max=0; //scan will take communication above 0dbm&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, led2, 0x00); //led2 blue while scanning&lt;br /&gt;
   &lt;br /&gt;
   ChangeChannel(chan_scan);&lt;br /&gt;
   ReceiveOn();    //enable RX&lt;br /&gt;
   while((Strobe(RF_SNOP) &amp;amp; 0x70) != 0x10); //make sure RX is ready&lt;br /&gt;
   while(chan_scan&amp;lt;STOP_FREQ_CHAN)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chan_scan);&lt;br /&gt;
     rssi = ReadSingleReg(RSSI);  //define in cc430f5137.h RSSI=0x34 corresponding to addr of rssi value&lt;br /&gt;
     if (rssi &amp;gt;= 128) &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (long)((long)( rssi - 256) / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     else &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (rssi / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     if(rssi_dbm&amp;gt;rssi_max)&lt;br /&gt;
     {&lt;br /&gt;
       rssi_max=rssi_dbm;&lt;br /&gt;
       chan_jam=chan_scan-10; //start jamming 2Mhz below max dbm received&lt;br /&gt;
     }&lt;br /&gt;
     chan_scan++;&lt;br /&gt;
     Strobe( RF_SFRX); //flush the RX FIFO&lt;br /&gt;
   }&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
nouveau main :&lt;br /&gt;
&lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chan_main=0x00;&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 on if cc430 powered&lt;br /&gt;
   int i;&lt;br /&gt;
   &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     freq_scan();&lt;br /&gt;
     ReceiveOff();&lt;br /&gt;
     chan_main=chan_jam;&lt;br /&gt;
     if (chan_main != 0)  //jam only if a communication xas detected with freq_scan&lt;br /&gt;
     {&lt;br /&gt;
       for(i=0 ; i&amp;lt;(20*NUM_JAM_RAMP) ; i++) //ramp start 2Mhz below chan_jam and stop 2Mhz above&lt;br /&gt;
       {&lt;br /&gt;
         ChangeChannel(chan_main);&lt;br /&gt;
         if (chan_main&amp;gt;= (chan_jam+20))&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main=0x00;&lt;br /&gt;
           led2=led2^0x10;&lt;br /&gt;
           set_color(led1, 0x00, 0x00, led2, 0x00, 0x00); //led2 blink red every two ramp of jamming&lt;br /&gt;
         }&lt;br /&gt;
         else&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main++;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     chan_main=0x00;  &lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
header :&lt;br /&gt;
 #define DELAY 100 //300us  &lt;br /&gt;
 #define DELAY_RSSI 10 //30us&lt;br /&gt;
 &lt;br /&gt;
 #define START_FREQ_CHAN 15&lt;br /&gt;
 #define STOP_FREQ_CHAN 50     //scanning 863-870Mhz with 200khz steps&lt;br /&gt;
 #define RSSI_OFFSET 74 //cf datasheet&lt;br /&gt;
 &lt;br /&gt;
 #define NUM_JAM_RAMP 50&lt;br /&gt;
 &lt;br /&gt;
 unsigned char chan_jam=0x00;&lt;br /&gt;
 unsigned char led2=0x10;&lt;br /&gt;
 unsigned char led1=0x10;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Après les vacances'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
*Nous avons effectué des tests pour vérifier si la fonction de scan fonctionne. Malheureusement, le cc430 n'a pas l'air de détecter de communications. La fréquence des modules LoRa a été fixée à 868MHz en mettant le header LORA_FHSS_ENABLE à false (ceci désactive le glissement de fréquence) pour faire des tests dans des conditions plus optimales. Cependant, le cc430 ne détecte toujours aucune communication.&lt;br /&gt;
*Nous avons donc vérifié plusieurs éléments du code : la conversion en dBm du registre RSSI, la lecture dans le registre, le temps de mise à jour du registre RSSI.&lt;br /&gt;
**D'après le pseudo-code fourni par texas instrument, et ce que nous avons pu lire sur les forums des développeurs, la conversion fonctionne. Nous avons tout de même essayé d'autre moyen de conversion, mais aucune de ces méthodes n'a permis au cc430 de détecter une communication.&lt;br /&gt;
**En ce qui concerne la lecture dans le registre, nous avons effectué des tests en lisant dans d'autres registres et en allumant une led, nous en avons conclu que la fonction ReadSingleReg fonctionne. Nous nous sommes donc portés sur l'adresse de ce registre, en vérifiant la bibliothèque cc430f5137.h, nous avons constaté que la variable RSSI était bien définie dans les adresses de registres.&lt;br /&gt;
**Enfin, d'après les datasheets du cc430 et du cc1101, le registre RSSI met un certain temps a s'actualiser, ce temps peut être calculé et dépend de la taille des paquets reçu. Ne pouvant pas connaitre pas la taille des paquets de la communication que l'on cherche à brouiller à l'avance, nous avons décidé de fixer un temps d'attente 2 fois supérieur au temps caractéristique (~15us), soit 30 micro seconde.&lt;br /&gt;
*Malgré ces essaies et corrections de code, nous ne sommes pas parvenu à faire fonctionner la détection de communication.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Fichiers Rendus'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[[Fichier:code_fonction_1.zip]]&lt;br /&gt;
*[[Fichier:code_fonction_2.zip]]&lt;br /&gt;
*[[Fichier:compte_rendu.pdf]]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Bibliographie'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[http://www.ti.com/ ti.com]&lt;br /&gt;
*[https://www.mbed.com/en/ mbed.com]&lt;br /&gt;
*[http://www.semtech.com/ semtech.com]&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42446</id>
		<title>IMA4 2016/2017 P32</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42446"/>
				<updated>2017-05-18T12:09:45Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Semaine 9 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Cahier des charges'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;Présentation générale du projet&amp;lt;/span&amp;gt;=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Contexte&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'expansion de l'utilisation des objets connectés permet de nos jours d'accéder à des données ou de contrôler aisément d'autres systèmes connectés à distance. Les objets connectés sont de plus en plus déployés mais leur sécurité n'est pas toujours testée. Par conséquent, de nombreuses informations sensibles sont susceptibles de transiter en permanence par le biais de multiples plages de fréquences. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ceci amène donc un questionnement sur la sécurité des transferts de données entre la multitude d'objets connectés actuellement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Objectif du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de réaliser un brouilleur d'ondes radiofréquence dans la bande des 868 MHz capable de bloquer les communications LoRa.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Description du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
A l'aboutissement du projet, nous devrions être capable de détecter une communication LoRa dans la bande des 868 MHz, et de la brouiller elle seule, sans incidence sur les autres communications sur d'autres fréquences du réseau LoRa.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous devrons réaliser un montage réalisant un brouillage sur la plage 863-870Mhz afin d'empêcher toute communication LoRa, en envoyant du bruit électronique sur toute la plage de fréquence.&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet, nous perfectionnerons ce montage pour qu'il puisse détecter une communication LoRa à une fréquence donnée (grâce au &amp;quot;join-request message&amp;quot; de 18 octets envoyés par le end-point/node, ou bien grâce aux informations données dans le préambule des paquets), afin d'envoyer des données erronées et de bloquer uniquement cette communication.&lt;br /&gt;
&lt;br /&gt;
Si le temps et le budget le permettent, nous pourrons aussi être amenés à brouiller la plage de fréquences autour des 433 MHz (aussi utilisé par le réseau LoRa).&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Choix techniques : matériel et logiciel&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser ce système, nous allons utiliser un microcontrôleur cc430 muni d'un transceiver cc1101, d'un récepteur LoRa(868MHz) communicant via protocole SPI avec le microcontrôleur, 2 antennes, une batterie, quelques LEDs.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Calendrier prévisionnel'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Liste des tâches à effectuer&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
# Documentation sur le réseau LoRa&lt;br /&gt;
##moyen de transmission&lt;br /&gt;
##format de modulation&lt;br /&gt;
##trame des paquets&lt;br /&gt;
# Réalisation du premier montage brouillant toute la plage&lt;br /&gt;
##contrôler l'émetteur RF du cc430&lt;br /&gt;
##programmer un bruitage sur la plage 863-870MHz&lt;br /&gt;
##test et optimisation&lt;br /&gt;
# Ajout d'un récepteur LoRa pour détecter et brouiller une seule communication&lt;br /&gt;
##contrôler le récepteur LoRa avec le cc430 par protocole spi&lt;br /&gt;
##détecter une communication LoRa à une fréquence donnée&lt;br /&gt;
##contrôler l'émetteur RF afin de brouiller cette communication de manière brutale&lt;br /&gt;
##brouiller cette communication en tentant de changer les données du paquet &lt;br /&gt;
##test et optimisation&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Calendrier&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
''[[Avant le 19/12/16]]'' - Élaboration du Cahier des charges et remplissage du Wiki&lt;br /&gt;
&lt;br /&gt;
''[[Avant fin Janvier]]'' - Complément du Cahier des Charges et listage du matériel nécessaire pour le projet&lt;br /&gt;
&lt;br /&gt;
''[[Répartition sur le S8]]'' - 120h: Réalisation de la 1ere fonction (45h) / Réalisation de la 2e fonction (45h) / Test et débuguage (30h)&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Feuille d'heures'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Après les vacances !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Cahier des charges / Wiki&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 1h&lt;br /&gt;
| 0,5h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
| 7,5h&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le réseau LoRa&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8,5h&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le matériel&lt;br /&gt;
| 1h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|11h&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7,5h&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 7h&lt;br /&gt;
|-&lt;br /&gt;
| Initialisation des registres&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3h&lt;br /&gt;
|3h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6h&lt;br /&gt;
|-&lt;br /&gt;
| Code 1ère fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1,5h&lt;br /&gt;
|3h&lt;br /&gt;
|3h&lt;br /&gt;
|4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 11,5h&lt;br /&gt;
|-&lt;br /&gt;
| Code 2ème fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 8h&lt;br /&gt;
|-&lt;br /&gt;
| Optimisation/Correction fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 7h&lt;br /&gt;
|-&lt;br /&gt;
| Optimisation/Correction fonction 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| 6h&lt;br /&gt;
|-&lt;br /&gt;
| Tests et mesures&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 11h&lt;br /&gt;
|-&lt;br /&gt;
| Modification de la carte&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Avancement du Projet'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Phase préparatoire'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[Jeu 15/12/16]]'' &lt;br /&gt;
*Rendez-vous de mise au point du cahier des charges avec les trois encadrants (M. Boé, M. Vantroys et M. Redon)&lt;br /&gt;
*Elaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 1'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[23/01/17 - 29/01/17]]'' &lt;br /&gt;
*Revue du Cahier des Charges&lt;br /&gt;
*Recherches approfondies sur les modes de transmissions du réseau LoRa&lt;br /&gt;
*Recherche de matériel&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 2'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[30/01/17 - 05/02/17]]''  &lt;br /&gt;
*Précisions sur le cahier des charges&lt;br /&gt;
*Listage du matériel&lt;br /&gt;
*Recherche et détermination de solutions technologiques possibles pour les fonctions demandées&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 3'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[06/02/17 - 12/02/17]]''&lt;br /&gt;
*validation du matériel&lt;br /&gt;
Nous allons utiliser un cc430f5137 (MCU+RF) monté sur une carte optimisée pour les communications autours de 868Mhz.&lt;br /&gt;
Nous pouvons commencer à étudier son fonctionnement, particulièrement celui du module RF (cc1101).&lt;br /&gt;
Nous avons aussi récupéré des exemples de code en c sur le site de Texas Instrument et vu l'utilisation de ces codes sur un projet IMA5 de l'an passé.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 4'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/02/17 - 19/02/17]]''&lt;br /&gt;
*Recherche de solutions pour répondre à la 1ère fonction (brouiller la plage 863-870Mhz).&lt;br /&gt;
&lt;br /&gt;
Après une lecture approfondie de la datasheet du module RF du cc430, nous avons choisi d'utiliser la fréquence de base du module (pouvant être définie grâce aux registres) couplée au registre CHANNR. Cela nous permettra de modifier plus facilement la fréquence de la porteuse, en suivant la formule suivante : [[Fichier:rampe.png]].&lt;br /&gt;
&lt;br /&gt;
Nous pourrons alors balayer la plage de fréquence en changeant la valeur de CHANNR.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 5'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[27/02/17 - 05/03/17]]''&lt;br /&gt;
&lt;br /&gt;
A l'aide de la datasheet du cc1101 ([http://www.ti.com/lit/ds/symlink/cc1101.pdf datasheet_cc1101] pages : 70 à 95), nous avons défini les registres du module RF de la manière suivante (sachant que la fréquence du quartz est de 26MHz, soit Fxosc=26MHz) :&lt;br /&gt;
&lt;br /&gt;
*La fréquence de base a été fixée à 862,999MHz en suivant la formule donnée dans la data sheet[[Fichier:carrier_formula.png]]&lt;br /&gt;
ce qui nous a donné les valeurs FREQ2=0x21, FREQ1=0x31 et FREQ0=0x3A (FREQ=2 175 290)&lt;br /&gt;
&lt;br /&gt;
*Nous avons suivi la formule [[Fichier:chanspace_formula.png]] afin d'avoir un espacement entre les cannaux d'environ 100Khz&lt;br /&gt;
ce qui nous a donné  MDMCFG1=0x02 (CHANSPC_E=2) et MDMCFG0=0x00(CHANSPC_M=0)&lt;br /&gt;
&lt;br /&gt;
*Pour le moment, nous avons choisi le mode de modulation AM, nous avons donc initialisé les registres MDMCFG2=0x30 (mode ASK/OOK) et FREND0=0x50(patable=0 donnant le mode ASK)&lt;br /&gt;
&lt;br /&gt;
*Nous avons créé une bibliothèque RFconfig.h regroupant les valeurs de tous les registres :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal and high VCO recommended&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz stop at 870&lt;br /&gt;
 //FREQ=00 10 00 01 00 11 00 01 00 11 10 10&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //CHANNR from 0 to 69 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 //0 (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x0F //default (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x31 //868Mhz&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0x3A /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x22 //default (data rate)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x30 // ASK/OOK,no sync-word&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x02 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0x00 //chanspc_m=0&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 //default (no effet on ASK/OOK mode)&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset not used)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x03 //default (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x40 //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x50 //patable=0 -&amp;gt; ASK&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosen&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x0B //default&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 6'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[06/03/17 - 12/03/17]]''&lt;br /&gt;
*Nous avons préparé un premier code réalisant une rampe sur la plage 863-870MHz. Ce code est basé sur une boucle infinie qui incrémente le registre chann de 0 à 69 (pour passer de 863 à 870Mhz) et envoie des paquets 0xFF grâce aux fonctions ChangeChannel(chann) et send_comand().&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		1	// maximum size of data sent by rf&lt;br /&gt;
 &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 10000&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFF;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init();&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);	 &lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
     {&lt;br /&gt;
       ChangeChannel(chann);&lt;br /&gt;
       send_cmd();&lt;br /&gt;
       if(chann&amp;gt;=69) &lt;br /&gt;
 	{&lt;br /&gt;
 	  chann=0x00;&lt;br /&gt;
 	}&lt;br /&gt;
       else&lt;br /&gt;
 	{&lt;br /&gt;
 	  chann++;&lt;br /&gt;
 	}&lt;br /&gt;
       __delay_cycles(DELAY);&lt;br /&gt;
     }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Après quelques corrections du code, nous avons pu le compiler grâce au Makefile&lt;br /&gt;
&lt;br /&gt;
*Avec la commande (exécutée en root) et le montage suivants, nous avons upload le main sur le cc430&lt;br /&gt;
 mspdebug rf2500 &amp;quot;prog main&amp;quot;&lt;br /&gt;
[[Fichier:montage001.png]]&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 7'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/03/17 - 19/03/17]]''&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé les premiers tests sur l'analyseur de spectre afin de vérifier que le code fonctionne bien.&lt;br /&gt;
&lt;br /&gt;
*Dans un premier temps, nous avons essayé une fréquence fixe pour voir la calibration du cc430.&lt;br /&gt;
[[Fichier:862.png]]&lt;br /&gt;
Avec un exemple à 862Mhz, on remarque bien que les registres ont bien été initialisés et que la carte émet à la fréquence demandée.&lt;br /&gt;
&lt;br /&gt;
*Ensuite, nous avons testé le code effectuant le balayage sur la plage de fréquence 863-870Mhz, en augmentant le sweep time de l'analyseur de spectre pour voir les différentes fréquences auxquelles la carte émet.&lt;br /&gt;
[[Fichier:sweep.png]]&lt;br /&gt;
En observant de 861 à 872 Mhz sur l'écran de l'analyseur, on peut voir que le code effectue bien le balayage.&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission de la carte étant faible, nous avons essayé de l'augmenter en modifiant certains registres notamment ceux que l'on peut optimiser à l'aide du logiciel smart RF studio. Cependant, nous pensons qu'il faudra changer l'antenne patch actuelle de la carte pour une antenne connectée en SMA.&lt;br /&gt;
&lt;br /&gt;
*Nous avons aussi tenté de brouiller les communications d'autres groupes de projet utilisant des modules LoRa. Ces derniers étant configurés à 433Mhz, nous avons dû changer la fréquence de notre carte. Le brouillage ne fonctionnait pas mais notre carte étant optimisée pour une émission autour de 868Mhz, les résultats n'étaient pas pertinents.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 8'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[20/03/17 - 26/03/17]]'' &lt;br /&gt;
&lt;br /&gt;
*Nous avons emprunté à M. Vantroys 3 modules SX1276 montés sur des cartes NUCLEO-F401RE afin de pouvoir tester notre carte sur une communication LoRa à 868Mhz&lt;br /&gt;
[[Fichier:lorambed.png]]&lt;br /&gt;
*Le code utilisé pour le test a été récupéré sur le forum des développeurs du site mbed.com. C'est un code &amp;quot;ping pong&amp;quot; effectuant une communication continue entre deux modules LoRa à une fréquence de 868Mhz. Il nous a suffit d'utiliser le compilateur du site (qui regroupe toutes les bibliothèques nécessaires) en indiquant que la carte utilisée est une F401RE pour que le binaire produit soit compatible. La carte NUCLEO étant reconnue comme un système de fichier par Linux, pour la flasher il faut la monter en usb à l'aide des commandes fdisk et mount puis de copier le binaire dedans avec la commande cp.&lt;br /&gt;
[[Fichier:lora pingpong.zip]]&lt;br /&gt;
*Une fois les modules NUCLEO flashés, la communication LoRa est établie dès que deux modules sont alimentés. Nous avons donc branché en USB deux modules sur deux machines différentes afin d'observer la communication sur des terminaux. La communication se fait bien, l'un envoie &amp;quot;ping&amp;quot; tandis que l'autre envoie &amp;quot;pong&amp;quot; lorsqu'il reçoit &amp;quot;ping&amp;quot;. Malheureusement, comme nous l'avions prédit, notre carte a une puissance d'émission trop faible et ne parvient pas à brouiller efficacement.&lt;br /&gt;
*Les modules peuvent aussi communiquer en modulation FSK, dans ce cas notre système arrive à effectuer le brouillage. Néanmoins, il serait plus intéressant de parvenir à brouiller la communication LoRa.&lt;br /&gt;
*Après plusieurs changements dans le code du cc430, n'ayant pas de résultats positifs, nous avons diminué la puissance d'émission des modules LoRa en changeant un header dans le code lora_pingpong.cpp. En passant cette puissance de 14dBm à 6dBm, nous sommes parvenus à brouiller la communication entre les deux modules LoRa.&lt;br /&gt;
&lt;br /&gt;
*En parallèle, nous avons commencé à rechercher des solutions pour la fonction 2. Un pseudo code est donné sur le site ti.com ([https://www.ti.com/lit/an/swra315/swra315.pdf pseudo_code_frequency_scanning]) qui permet de faire un scan sur une plage de fréquence et de récupérer la fréquence ou le signal reçu est le plus fort. Ce code pourra être écrit en C puis incorporé dans notre main pour détecter une communication et la brouiller.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 9'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[27/03/17 - 02/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*Même si le brouillage ne s’effectue qu'à puissance réduite, nous avons cherché à l'optimiser&lt;br /&gt;
**Nous avons premièrement réalisé que le mode de modulation choisi au départ (ASK) n'était pas adapté au brouillage d'une communication LoRa. Nous avons donc essayé le mode GFSK qui est le plus proche du format de modulation du réseau LoRa. Nous avons aussi essayé les modes 2FSK et 4FSK qui sont relativement proches du GFSK. Nous en avons conclu que le mode de modulation à utiliser est GFSK (ce mode fonctionne aussi pour brouiller la modulation FSK)&lt;br /&gt;
**Ensuite, nous avons réduit la plage de fréquence balayée par le cc430 afin de voir si il y avait une influence sur le brouillage. Nous avons remarqué que le brouillage était plus efficace pour un balayage de 866 à 870 Mhz (au lieu de 863-870 initialement)&lt;br /&gt;
**Dans le même ordre d'idée, nous avons décidé de réduire le nombre d'incrémentations du registre CHANNR afin d'augmenter la rapidité du balayage. Pour ce faire, nous avons augmenté la taille de chaque canal, passant de 100kHz à 200kHz&lt;br /&gt;
**La puissance d'émission de la carte a été changée dans la fonction WritePATable (appelée par rfinit() dans le main), afin d'être maximale (12dBm)&lt;br /&gt;
**Enfin, nous avons augmenté le nombre de paquets à envoyer&lt;br /&gt;
&lt;br /&gt;
Nouvelle bibliothèque RFconfig.h :&lt;br /&gt;
&lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 // (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x06 //default 0f (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x4E //866&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0xC2 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x83 // data rate&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x13 // GFSK &lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x22 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0xF8 //chanspc_m=248&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 // default 47khz deviation&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset for demodulation)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x07 // (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x77 //&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x10 //patable=0 (useless for gfsk) &lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosed&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x09 //&lt;br /&gt;
&lt;br /&gt;
Nouveau main.c : &lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;led_commands.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		10	// maximum size of data sent by rf&lt;br /&gt;
  &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 5000 //15ms  &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Any other commands are for RSSI measurement&lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFD;&lt;br /&gt;
   buffer[1] = 0xAA;&lt;br /&gt;
   buffer[2] = 0xFF;&lt;br /&gt;
   buffer[3] = 0x11;&lt;br /&gt;
   buffer[4] = 0xFF;&lt;br /&gt;
   buffer[5] = 0x66;&lt;br /&gt;
   buffer[6] = 0xFF;&lt;br /&gt;
   buffer[7] = 0x33;&lt;br /&gt;
   buffer[8] = 0x1F;&lt;br /&gt;
   buffer[9] = 0xF8;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   unsigned char led2=0x10;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(0x10, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 allumée quand le cc430 est sous tension&lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chann);&lt;br /&gt;
     send_cmd();&lt;br /&gt;
     if(chann&amp;gt;=20) //866-870&lt;br /&gt;
     {&lt;br /&gt;
       chann=0x00;&lt;br /&gt;
       led2=led2^0x10;&lt;br /&gt;
       set_color(0x10, 0x00, 0x00, led2, 0x00, 0x00); //led2 s'allume toutes les 2 rampes&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {&lt;br /&gt;
       chann++;&lt;br /&gt;
     }&lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Fonction WritePATable :&lt;br /&gt;
&lt;br /&gt;
 void WritePATable(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char valueRead = 0;&lt;br /&gt;
   &lt;br /&gt;
   //while(valueRead != 0x03)    // Output Power: -30  [dBm]&lt;br /&gt;
   //while(valueRead != 0x25)    // Output Power: -12  [dBm]&lt;br /&gt;
   //while(valueRead != 0x2D)    // Output Power: -6   [dBm]&lt;br /&gt;
   //while(valueRead != 0x8D)    // Output Power:  0   [dBm]&lt;br /&gt;
   //while(valueRead != 0xC3)    // Output Power:  10  [dBm]&lt;br /&gt;
   while(valueRead != 0xC0)    // Output Power:  Maximum  [dBm]&lt;br /&gt;
   //while(valueRead != 0xC6)    // Output Power(default):  8.8  [dBm]&lt;br /&gt;
   {&lt;br /&gt;
     /* Write the power output to the PA_TABLE and verify the write operation.  */&lt;br /&gt;
     unsigned char i = 0; &lt;br /&gt;
 &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
     //RF1AINSTRW = 0x7E03; // PA Table write (burst), Output Power: -30  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E25; // PA Table write (burst), Output Power: -12  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E2D; // PA Table write (burst), Output Power: -6   [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E8D; // PA Table write (burst), Output Power: 0    [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC3; // PA Table write (burst), Output Power: 10   [dBm]&lt;br /&gt;
     RF1AINSTRW = 0x7EC0; // PA Table write (burst), Output Power: Maximum  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC6; // PA Table write (burst), Output Power(default):  8.8  [dBm]&lt;br /&gt;
     &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
       RF1AINSTR1B = RF_PATABRD;                 // -miguel read &amp;amp; write&lt;br /&gt;
     &lt;br /&gt;
     // Traverse PATABLE pointers to read &lt;br /&gt;
     for (i = 0; i &amp;lt; 7; i++)&lt;br /&gt;
     {&lt;br /&gt;
       while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
       valueRead  = RF1ADOUT1B;     &lt;br /&gt;
     }&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
     valueRead  = RF1ADOUTB;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 10'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[03/04/17 - 09/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission étant trop faible pour brouiller la communication entre les 2 modules LoRa, nous avons décidé de changer l'antenne de la carte. Il a fallu couper l'antenne patch à l'aide d'une scie afin de souder un connecteur SMA.&lt;br /&gt;
[[Fichier:cc430antenne.png]]&lt;br /&gt;
*Grâce à cette nouvelle antenne, la communication peut maintenant être brouillée à une puissance de 10dBm (contre 6 auparavant). Mais il faut que la carte reste relativement proche d'un des modules.&lt;br /&gt;
*Pour réussir le brouillage quand les modules LoRa sont à leur puissance maximale (14dBm), il faudra sûrement ajouter un amplificateur entre la sortie de la carte et son antenne.&lt;br /&gt;
*Nous avons codé la fonction de scan en c et l'avons incorporé dans le main &lt;br /&gt;
**Cette fonction autorise le module à entrer en mode RX pour recevoir les communications. Elle incrémente ensuite le canal pour parcourir la plage 863-870MHz afin de détecter une communication. Toute les incrémentations, la variable rssi récupère la valeur contenue dans le registre qui correspond à la valeur du RSSI. Cette valeur étant en binaire complément 2, elle est convertie en dBm et placée dans un entier. Enfin, si cette valeur est supérieur à la valeur maximale déjà mesuré ou à un palier prédéfini (ici 0dBm), on stocke le numéro du canal correspondant qui sera utilisé dans le main par la suite.&lt;br /&gt;
&lt;br /&gt;
fonction de scan :&lt;br /&gt;
 void freq_scan(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char rssi;&lt;br /&gt;
   long rssi_dbm;&lt;br /&gt;
   unsigned char chan_scan=START_FREQ_CHAN;&lt;br /&gt;
   long rssi_max=0; //scan will take communication above 0dbm&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, led2, 0x00); //led2 blue while scanning&lt;br /&gt;
   &lt;br /&gt;
   ChangeChannel(chan_scan);&lt;br /&gt;
   ReceiveOn();    //enable RX&lt;br /&gt;
   while((Strobe(RF_SNOP) &amp;amp; 0x70) != 0x10); //make sure RX is ready&lt;br /&gt;
   while(chan_scan&amp;lt;STOP_FREQ_CHAN)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chan_scan);&lt;br /&gt;
     rssi = ReadSingleReg(RSSI);  //define in cc430f5137.h RSSI=0x34 corresponding to addr of rssi value&lt;br /&gt;
     if (rssi &amp;gt;= 128) &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (long)((long)( rssi - 256) / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     else &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (rssi / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     if(rssi_dbm&amp;gt;rssi_max)&lt;br /&gt;
     {&lt;br /&gt;
       rssi_max=rssi_dbm;&lt;br /&gt;
       chan_jam=chan_scan-10; //start jamming 2Mhz below max dbm received&lt;br /&gt;
     }&lt;br /&gt;
     chan_scan++;&lt;br /&gt;
     Strobe( RF_SFRX); //flush the RX FIFO&lt;br /&gt;
   }&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
nouveau main :&lt;br /&gt;
&lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chan_main=0x00;&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 on if cc430 powered&lt;br /&gt;
   int i;&lt;br /&gt;
   &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     freq_scan();&lt;br /&gt;
     ReceiveOff();&lt;br /&gt;
     chan_main=chan_jam;&lt;br /&gt;
     if (chan_main != 0)  //jam only if a communication xas detected with freq_scan&lt;br /&gt;
     {&lt;br /&gt;
       for(i=0 ; i&amp;lt;(20*NUM_JAM_RAMP) ; i++) //ramp start 2Mhz below chan_jam and stop 2Mhz above&lt;br /&gt;
       {&lt;br /&gt;
         ChangeChannel(chan_main);&lt;br /&gt;
         if (chan_main&amp;gt;= (chan_jam+20))&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main=0x00;&lt;br /&gt;
           led2=led2^0x10;&lt;br /&gt;
           set_color(led1, 0x00, 0x00, led2, 0x00, 0x00); //led2 blink red every two ramp of jamming&lt;br /&gt;
         }&lt;br /&gt;
         else&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main++;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     chan_main=0x00;  &lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
header :&lt;br /&gt;
 #define DELAY 100 //300us  &lt;br /&gt;
 #define DELAY_RSSI 10 //30us&lt;br /&gt;
 &lt;br /&gt;
 #define START_FREQ_CHAN 15&lt;br /&gt;
 #define STOP_FREQ_CHAN 50     //scanning 863-870Mhz with 200khz steps&lt;br /&gt;
 #define RSSI_OFFSET 74 //cf datasheet&lt;br /&gt;
 &lt;br /&gt;
 #define NUM_JAM_RAMP 50&lt;br /&gt;
 &lt;br /&gt;
 unsigned char chan_jam=0x00;&lt;br /&gt;
 unsigned char led2=0x10;&lt;br /&gt;
 unsigned char led1=0x10;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Après les vacances'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
*Nous avons effectué des tests pour vérifier si la fonction de scan fonctionne. Malheureusement, le cc430 n'a pas l'air de détecter de communications. La fréquence des modules LoRa a été fixée à 868MHz en mettant le header LORA_FHSS_ENABLE à false (ceci désactive le glissement de fréquence) pour faire des tests dans des conditions plus optimales. Cependant, le cc430 ne détecte toujours aucune communication.&lt;br /&gt;
*Nous avons donc vérifié plusieurs éléments du code : la conversion en dBm du registre RSSI, la lecture dans le registre, le temps de mise à jour du registre RSSI.&lt;br /&gt;
**D'après le pseudo-code fourni par texas instrument, et ce que nous avons pu lire sur les forums des développeurs, la conversion fonctionne. Nous avons tout de même essayé d'autre moyen de conversion, mais aucune de ces méthodes n'a permis au cc430 de détecter une communication.&lt;br /&gt;
**En ce qui concerne la lecture dans le registre, nous avons effectué des tests en lisant dans d'autres registres et en allumant une led, nous en avons conclu que la fonction ReadSingleReg fonctionne. Nous nous sommes donc portés sur l'adresse de ce registre, en vérifiant la bibliothèque cc430f5137.h, nous avons constaté que la variable RSSI était bien définie dans les adresses de registres.&lt;br /&gt;
**Enfin, d'après les datasheets du cc430 et du cc1101, le registre RSSI met un certain temps a s'actualiser, ce temps peut être calculé et dépend de la taille des paquets reçu. Ne pouvant pas connaitre pas la taille des paquets de la communication que l'on cherche à brouiller à l'avance, nous avons décidé de fixer un temps d'attente 2 fois supérieur au temps caractéristique (~15us), soit 30 micro seconde.&lt;br /&gt;
*Malgré ces essaies et corrections de code, nous ne sommes pas parvenu à faire fonctionner la détection de communication.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Fichiers Rendus'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[[Fichier:code_fonction_1.zip]]&lt;br /&gt;
*[[Fichier:code_fonction_2.zip]]&lt;br /&gt;
*[[Fichier:compte_rendu.pdf]]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Bibliographie'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[http://www.ti.com/ ti.com]&lt;br /&gt;
*[https://www.mbed.com/en/ mbed.com]&lt;br /&gt;
*[http://www.semtech.com/ semtech.com]&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42445</id>
		<title>IMA4 2016/2017 P32</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42445"/>
				<updated>2017-05-18T12:08:55Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Semaine 10 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Cahier des charges'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;Présentation générale du projet&amp;lt;/span&amp;gt;=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Contexte&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'expansion de l'utilisation des objets connectés permet de nos jours d'accéder à des données ou de contrôler aisément d'autres systèmes connectés à distance. Les objets connectés sont de plus en plus déployés mais leur sécurité n'est pas toujours testée. Par conséquent, de nombreuses informations sensibles sont susceptibles de transiter en permanence par le biais de multiples plages de fréquences. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ceci amène donc un questionnement sur la sécurité des transferts de données entre la multitude d'objets connectés actuellement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Objectif du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de réaliser un brouilleur d'ondes radiofréquence dans la bande des 868 MHz capable de bloquer les communications LoRa.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Description du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
A l'aboutissement du projet, nous devrions être capable de détecter une communication LoRa dans la bande des 868 MHz, et de la brouiller elle seule, sans incidence sur les autres communications sur d'autres fréquences du réseau LoRa.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous devrons réaliser un montage réalisant un brouillage sur la plage 863-870Mhz afin d'empêcher toute communication LoRa, en envoyant du bruit électronique sur toute la plage de fréquence.&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet, nous perfectionnerons ce montage pour qu'il puisse détecter une communication LoRa à une fréquence donnée (grâce au &amp;quot;join-request message&amp;quot; de 18 octets envoyés par le end-point/node, ou bien grâce aux informations données dans le préambule des paquets), afin d'envoyer des données erronées et de bloquer uniquement cette communication.&lt;br /&gt;
&lt;br /&gt;
Si le temps et le budget le permettent, nous pourrons aussi être amenés à brouiller la plage de fréquences autour des 433 MHz (aussi utilisé par le réseau LoRa).&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Choix techniques : matériel et logiciel&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser ce système, nous allons utiliser un microcontrôleur cc430 muni d'un transceiver cc1101, d'un récepteur LoRa(868MHz) communicant via protocole SPI avec le microcontrôleur, 2 antennes, une batterie, quelques LEDs.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Calendrier prévisionnel'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Liste des tâches à effectuer&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
# Documentation sur le réseau LoRa&lt;br /&gt;
##moyen de transmission&lt;br /&gt;
##format de modulation&lt;br /&gt;
##trame des paquets&lt;br /&gt;
# Réalisation du premier montage brouillant toute la plage&lt;br /&gt;
##contrôler l'émetteur RF du cc430&lt;br /&gt;
##programmer un bruitage sur la plage 863-870MHz&lt;br /&gt;
##test et optimisation&lt;br /&gt;
# Ajout d'un récepteur LoRa pour détecter et brouiller une seule communication&lt;br /&gt;
##contrôler le récepteur LoRa avec le cc430 par protocole spi&lt;br /&gt;
##détecter une communication LoRa à une fréquence donnée&lt;br /&gt;
##contrôler l'émetteur RF afin de brouiller cette communication de manière brutale&lt;br /&gt;
##brouiller cette communication en tentant de changer les données du paquet &lt;br /&gt;
##test et optimisation&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Calendrier&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
''[[Avant le 19/12/16]]'' - Élaboration du Cahier des charges et remplissage du Wiki&lt;br /&gt;
&lt;br /&gt;
''[[Avant fin Janvier]]'' - Complément du Cahier des Charges et listage du matériel nécessaire pour le projet&lt;br /&gt;
&lt;br /&gt;
''[[Répartition sur le S8]]'' - 120h: Réalisation de la 1ere fonction (45h) / Réalisation de la 2e fonction (45h) / Test et débuguage (30h)&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Feuille d'heures'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Après les vacances !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Cahier des charges / Wiki&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 1h&lt;br /&gt;
| 0,5h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
| 7,5h&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le réseau LoRa&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8,5h&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le matériel&lt;br /&gt;
| 1h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|11h&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7,5h&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 7h&lt;br /&gt;
|-&lt;br /&gt;
| Initialisation des registres&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3h&lt;br /&gt;
|3h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6h&lt;br /&gt;
|-&lt;br /&gt;
| Code 1ère fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1,5h&lt;br /&gt;
|3h&lt;br /&gt;
|3h&lt;br /&gt;
|4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 11,5h&lt;br /&gt;
|-&lt;br /&gt;
| Code 2ème fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 8h&lt;br /&gt;
|-&lt;br /&gt;
| Optimisation/Correction fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 7h&lt;br /&gt;
|-&lt;br /&gt;
| Optimisation/Correction fonction 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| 6h&lt;br /&gt;
|-&lt;br /&gt;
| Tests et mesures&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 11h&lt;br /&gt;
|-&lt;br /&gt;
| Modification de la carte&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Avancement du Projet'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Phase préparatoire'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[Jeu 15/12/16]]'' &lt;br /&gt;
*Rendez-vous de mise au point du cahier des charges avec les trois encadrants (M. Boé, M. Vantroys et M. Redon)&lt;br /&gt;
*Elaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 1'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[23/01/17 - 29/01/17]]'' &lt;br /&gt;
*Revue du Cahier des Charges&lt;br /&gt;
*Recherches approfondies sur les modes de transmissions du réseau LoRa&lt;br /&gt;
*Recherche de matériel&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 2'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[30/01/17 - 05/02/17]]''  &lt;br /&gt;
*Précisions sur le cahier des charges&lt;br /&gt;
*Listage du matériel&lt;br /&gt;
*Recherche et détermination de solutions technologiques possibles pour les fonctions demandées&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 3'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[06/02/17 - 12/02/17]]''&lt;br /&gt;
*validation du matériel&lt;br /&gt;
Nous allons utiliser un cc430f5137 (MCU+RF) monté sur une carte optimisée pour les communications autours de 868Mhz.&lt;br /&gt;
Nous pouvons commencer à étudier son fonctionnement, particulièrement celui du module RF (cc1101).&lt;br /&gt;
Nous avons aussi récupéré des exemples de code en c sur le site de Texas Instrument et vu l'utilisation de ces codes sur un projet IMA5 de l'an passé.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 4'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/02/17 - 19/02/17]]''&lt;br /&gt;
*Recherche de solutions pour répondre à la 1ère fonction (brouiller la plage 863-870Mhz).&lt;br /&gt;
&lt;br /&gt;
Après une lecture approfondie de la datasheet du module RF du cc430, nous avons choisi d'utiliser la fréquence de base du module (pouvant être définie grâce aux registres) couplée au registre CHANNR. Cela nous permettra de modifier plus facilement la fréquence de la porteuse, en suivant la formule suivante : [[Fichier:rampe.png]].&lt;br /&gt;
&lt;br /&gt;
Nous pourrons alors balayer la plage de fréquence en changeant la valeur de CHANNR.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 5'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[27/02/17 - 05/03/17]]''&lt;br /&gt;
&lt;br /&gt;
A l'aide de la datasheet du cc1101 ([http://www.ti.com/lit/ds/symlink/cc1101.pdf datasheet_cc1101] pages : 70 à 95), nous avons défini les registres du module RF de la manière suivante (sachant que la fréquence du quartz est de 26MHz, soit Fxosc=26MHz) :&lt;br /&gt;
&lt;br /&gt;
*La fréquence de base a été fixée à 862,999MHz en suivant la formule donnée dans la data sheet[[Fichier:carrier_formula.png]]&lt;br /&gt;
ce qui nous a donné les valeurs FREQ2=0x21, FREQ1=0x31 et FREQ0=0x3A (FREQ=2 175 290)&lt;br /&gt;
&lt;br /&gt;
*Nous avons suivi la formule [[Fichier:chanspace_formula.png]] afin d'avoir un espacement entre les cannaux d'environ 100Khz&lt;br /&gt;
ce qui nous a donné  MDMCFG1=0x02 (CHANSPC_E=2) et MDMCFG0=0x00(CHANSPC_M=0)&lt;br /&gt;
&lt;br /&gt;
*Pour le moment, nous avons choisi le mode de modulation AM, nous avons donc initialisé les registres MDMCFG2=0x30 (mode ASK/OOK) et FREND0=0x50(patable=0 donnant le mode ASK)&lt;br /&gt;
&lt;br /&gt;
*Nous avons créé une bibliothèque RFconfig.h regroupant les valeurs de tous les registres :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal and high VCO recommended&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz stop at 870&lt;br /&gt;
 //FREQ=00 10 00 01 00 11 00 01 00 11 10 10&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //CHANNR from 0 to 69 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 //0 (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x0F //default (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x31 //868Mhz&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0x3A /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x22 //default (data rate)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x30 // ASK/OOK,no sync-word&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x02 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0x00 //chanspc_m=0&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 //default (no effet on ASK/OOK mode)&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset not used)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x03 //default (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x40 //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x50 //patable=0 -&amp;gt; ASK&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosen&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x0B //default&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 6'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[06/03/17 - 12/03/17]]''&lt;br /&gt;
*Nous avons préparé un premier code réalisant une rampe sur la plage 863-870MHz. Ce code est basé sur une boucle infinie qui incrémente le registre chann de 0 à 69 (pour passer de 863 à 870Mhz) et envoie des paquets 0xFF grâce aux fonctions ChangeChannel(chann) et send_comand().&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		1	// maximum size of data sent by rf&lt;br /&gt;
 &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 10000&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFF;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init();&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);	 &lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
     {&lt;br /&gt;
       ChangeChannel(chann);&lt;br /&gt;
       send_cmd();&lt;br /&gt;
       if(chann&amp;gt;=69) &lt;br /&gt;
 	{&lt;br /&gt;
 	  chann=0x00;&lt;br /&gt;
 	}&lt;br /&gt;
       else&lt;br /&gt;
 	{&lt;br /&gt;
 	  chann++;&lt;br /&gt;
 	}&lt;br /&gt;
       __delay_cycles(DELAY);&lt;br /&gt;
     }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Après quelques corrections du code, nous avons pu le compiler grâce au Makefile&lt;br /&gt;
&lt;br /&gt;
*Avec la commande (exécutée en root) et le montage suivants, nous avons upload le main sur le cc430&lt;br /&gt;
 mspdebug rf2500 &amp;quot;prog main&amp;quot;&lt;br /&gt;
[[Fichier:montage001.png]]&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 7'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/03/17 - 19/03/17]]''&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé les premiers tests sur l'analyseur de spectre afin de vérifier que le code fonctionne bien.&lt;br /&gt;
&lt;br /&gt;
*Dans un premier temps, nous avons essayé une fréquence fixe pour voir la calibration du cc430.&lt;br /&gt;
[[Fichier:862.png]]&lt;br /&gt;
Avec un exemple à 862Mhz, on remarque bien que les registres ont bien été initialisés et que la carte émet à la fréquence demandée.&lt;br /&gt;
&lt;br /&gt;
*Ensuite, nous avons testé le code effectuant le balayage sur la plage de fréquence 863-870Mhz, en augmentant le sweep time de l'analyseur de spectre pour voir les différentes fréquences auxquelles la carte émet.&lt;br /&gt;
[[Fichier:sweep.png]]&lt;br /&gt;
En observant de 861 à 872 Mhz sur l'écran de l'analyseur, on peut voir que le code effectue bien le balayage.&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission de la carte étant faible, nous avons essayé de l'augmenter en modifiant certains registres notamment ceux que l'on peut optimiser à l'aide du logiciel smart RF studio. Cependant, nous pensons qu'il faudra changer l'antenne patch actuelle de la carte pour une antenne connectée en SMA.&lt;br /&gt;
&lt;br /&gt;
*Nous avons aussi tenté de brouiller les communications d'autres groupes de projet utilisant des modules LoRa. Ces derniers étant configurés à 433Mhz, nous avons dû changer la fréquence de notre carte. Le brouillage ne fonctionnait pas mais notre carte étant optimisée pour une émission autour de 868Mhz, les résultats n'étaient pas pertinents.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 8'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[20/03/17 - 26/03/17]]'' &lt;br /&gt;
&lt;br /&gt;
*Nous avons emprunté à M. Vantroys 3 modules SX1276 montés sur des cartes NUCLEO-F401RE afin de pouvoir tester notre carte sur une communication LoRa à 868Mhz&lt;br /&gt;
[[Fichier:lorambed.png]]&lt;br /&gt;
*Le code utilisé pour le test a été récupéré sur le forum des développeurs du site mbed.com. C'est un code &amp;quot;ping pong&amp;quot; effectuant une communication continue entre deux modules LoRa à une fréquence de 868Mhz. Il nous a suffit d'utiliser le compilateur du site (qui regroupe toutes les bibliothèques nécessaires) en indiquant que la carte utilisée est une F401RE pour que le binaire produit soit compatible. La carte NUCLEO étant reconnue comme un système de fichier par Linux, pour la flasher il faut la monter en usb à l'aide des commandes fdisk et mount puis de copier le binaire dedans avec la commande cp.&lt;br /&gt;
[[Fichier:lora pingpong.zip]]&lt;br /&gt;
*Une fois les modules NUCLEO flashés, la communication LoRa est établie dès que deux modules sont alimentés. Nous avons donc branché en USB deux modules sur deux machines différentes afin d'observer la communication sur des terminaux. La communication se fait bien, l'un envoie &amp;quot;ping&amp;quot; tandis que l'autre envoie &amp;quot;pong&amp;quot; lorsqu'il reçoit &amp;quot;ping&amp;quot;. Malheureusement, comme nous l'avions prédit, notre carte a une puissance d'émission trop faible et ne parvient pas à brouiller efficacement.&lt;br /&gt;
*Les modules peuvent aussi communiquer en modulation FSK, dans ce cas notre système arrive à effectuer le brouillage. Néanmoins, il serait plus intéressant de parvenir à brouiller la communication LoRa.&lt;br /&gt;
*Après plusieurs changements dans le code du cc430, n'ayant pas de résultats positifs, nous avons diminué la puissance d'émission des modules LoRa en changeant un header dans le code lora_pingpong.cpp. En passant cette puissance de 14dBm à 6dBm, nous sommes parvenus à brouiller la communication entre les deux modules LoRa.&lt;br /&gt;
&lt;br /&gt;
*En parallèle, nous avons commencé à rechercher des solutions pour la fonction 2. Un pseudo code est donné sur le site ti.com ([https://www.ti.com/lit/an/swra315/swra315.pdf pseudo_code_frequency_scanning]) qui permet de faire un scan sur une plage de fréquence et de récupérer la fréquence ou le signal reçu est le plus fort. Ce code pourra être écrit en C puis incorporé dans notre main pour détecter une communication et la brouiller.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 9'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[27/03/17 - 02/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*Même si le brouillage ne s’effectue qu'à puissance réduite, nous avons cherché à l'optimiser&lt;br /&gt;
**Nous avons premièrement réalisé que le mode de modulation choisi au départ (ASK) n'était pas adapté au brouillage d'une communication LoRa. Nous avons donc essayé le mode GFSK qui est le plus proche du format de modulation du réseau LoRa. Nous avons aussi essayé les modes 2FSK et 4FSK qui sont relativement proches du GFSK. Nous en avons conclu que le mode de modulation à utiliser est GFSK (ce mode fonctionne aussi pour brouiller la modulation FSK)&lt;br /&gt;
**Ensuite, nous avons réduit la plage de fréquence balayée par le cc430 afin de voir si il y avait une influence sur le brouillage. Nous avons remarqué que le brouillage était plus efficace pour un balayage de 866 à 870 Mhz (au lieu de 863-870 initialement)&lt;br /&gt;
**Dans le même ordre d'idée, nous avons décidé de réduire le nombre d'incrémentations du registre CHANNR afin d'augmenter la rapidité du balayage. Pour ce faire, nous avons augmenté la taille de chaque canal, passant de 100kHz à 200kHz&lt;br /&gt;
**La puissance d'émission de la carte a été changée dans la fonction WritePATable (appelée par rfinit() dans le main), afin d'être maximale (12dBm)&lt;br /&gt;
**Enfin, nous avons augmenté le nombre de paquets à envoyer&lt;br /&gt;
&lt;br /&gt;
Nouvelle bibliothèque RFconfig.h :&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //high VCO FSCAL2=0x2A&lt;br /&gt;
 &lt;br /&gt;
 //867 : 21589A&lt;br /&gt;
 //866 : 214EC2&lt;br /&gt;
 //865 : 2144EA&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 //for 433Mhz : freq=0x10A766 and low vco (FSCAL2=0x0A)&lt;br /&gt;
 //432 : 0x109D8E&lt;br /&gt;
 &lt;br /&gt;
 //gfsk, 866, chann space ~200k, high vco currently&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 // (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x06 //default 0f (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x4E //866&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0xC2 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x83 // data rate&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x13 // GFSK &lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x22 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0xF8 //chanspc_m=248&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 // default 47khz deviation&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset for demodulation)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x07 // (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x77 //&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x10 //patable=0 (useless for gfsk) &lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosed&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x09 //&lt;br /&gt;
&lt;br /&gt;
Nouveau main.c : &lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;led_commands.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		10	// maximum size of data sent by rf&lt;br /&gt;
  &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 5000 //15ms  &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Any other commands are for RSSI measurement&lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFD;&lt;br /&gt;
   buffer[1] = 0xAA;&lt;br /&gt;
   buffer[2] = 0xFF;&lt;br /&gt;
   buffer[3] = 0x11;&lt;br /&gt;
   buffer[4] = 0xFF;&lt;br /&gt;
   buffer[5] = 0x66;&lt;br /&gt;
   buffer[6] = 0xFF;&lt;br /&gt;
   buffer[7] = 0x33;&lt;br /&gt;
   buffer[8] = 0x1F;&lt;br /&gt;
   buffer[9] = 0xF8;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   unsigned char led2=0x10;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(0x10, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 allumée quand le cc430 est sous tension&lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chann);&lt;br /&gt;
     send_cmd();&lt;br /&gt;
     if(chann&amp;gt;=20) //866-870&lt;br /&gt;
     {&lt;br /&gt;
       chann=0x00;&lt;br /&gt;
       led2=led2^0x10;&lt;br /&gt;
       set_color(0x10, 0x00, 0x00, led2, 0x00, 0x00); //led2 s'allume toutes les 2 rampes&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {&lt;br /&gt;
       chann++;&lt;br /&gt;
     }&lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Fonction WritePATable :&lt;br /&gt;
&lt;br /&gt;
 void WritePATable(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char valueRead = 0;&lt;br /&gt;
   &lt;br /&gt;
   //while(valueRead != 0x03)    // Output Power: -30  [dBm]&lt;br /&gt;
   //while(valueRead != 0x25)    // Output Power: -12  [dBm]&lt;br /&gt;
   //while(valueRead != 0x2D)    // Output Power: -6   [dBm]&lt;br /&gt;
   //while(valueRead != 0x8D)    // Output Power:  0   [dBm]&lt;br /&gt;
   //while(valueRead != 0xC3)    // Output Power:  10  [dBm]&lt;br /&gt;
   while(valueRead != 0xC0)    // Output Power:  Maximum  [dBm]&lt;br /&gt;
   //while(valueRead != 0xC6)    // Output Power(default):  8.8  [dBm]&lt;br /&gt;
   {&lt;br /&gt;
     /* Write the power output to the PA_TABLE and verify the write operation.  */&lt;br /&gt;
     unsigned char i = 0; &lt;br /&gt;
 &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
     //RF1AINSTRW = 0x7E03; // PA Table write (burst), Output Power: -30  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E25; // PA Table write (burst), Output Power: -12  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E2D; // PA Table write (burst), Output Power: -6   [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E8D; // PA Table write (burst), Output Power: 0    [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC3; // PA Table write (burst), Output Power: 10   [dBm]&lt;br /&gt;
     RF1AINSTRW = 0x7EC0; // PA Table write (burst), Output Power: Maximum  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC6; // PA Table write (burst), Output Power(default):  8.8  [dBm]&lt;br /&gt;
     &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
       RF1AINSTR1B = RF_PATABRD;                 // -miguel read &amp;amp; write&lt;br /&gt;
     &lt;br /&gt;
     // Traverse PATABLE pointers to read &lt;br /&gt;
     for (i = 0; i &amp;lt; 7; i++)&lt;br /&gt;
     {&lt;br /&gt;
       while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
       valueRead  = RF1ADOUT1B;     &lt;br /&gt;
     }&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
     valueRead  = RF1ADOUTB;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 10'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[03/04/17 - 09/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission étant trop faible pour brouiller la communication entre les 2 modules LoRa, nous avons décidé de changer l'antenne de la carte. Il a fallu couper l'antenne patch à l'aide d'une scie afin de souder un connecteur SMA.&lt;br /&gt;
[[Fichier:cc430antenne.png]]&lt;br /&gt;
*Grâce à cette nouvelle antenne, la communication peut maintenant être brouillée à une puissance de 10dBm (contre 6 auparavant). Mais il faut que la carte reste relativement proche d'un des modules.&lt;br /&gt;
*Pour réussir le brouillage quand les modules LoRa sont à leur puissance maximale (14dBm), il faudra sûrement ajouter un amplificateur entre la sortie de la carte et son antenne.&lt;br /&gt;
*Nous avons codé la fonction de scan en c et l'avons incorporé dans le main &lt;br /&gt;
**Cette fonction autorise le module à entrer en mode RX pour recevoir les communications. Elle incrémente ensuite le canal pour parcourir la plage 863-870MHz afin de détecter une communication. Toute les incrémentations, la variable rssi récupère la valeur contenue dans le registre qui correspond à la valeur du RSSI. Cette valeur étant en binaire complément 2, elle est convertie en dBm et placée dans un entier. Enfin, si cette valeur est supérieur à la valeur maximale déjà mesuré ou à un palier prédéfini (ici 0dBm), on stocke le numéro du canal correspondant qui sera utilisé dans le main par la suite.&lt;br /&gt;
&lt;br /&gt;
fonction de scan :&lt;br /&gt;
 void freq_scan(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char rssi;&lt;br /&gt;
   long rssi_dbm;&lt;br /&gt;
   unsigned char chan_scan=START_FREQ_CHAN;&lt;br /&gt;
   long rssi_max=0; //scan will take communication above 0dbm&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, led2, 0x00); //led2 blue while scanning&lt;br /&gt;
   &lt;br /&gt;
   ChangeChannel(chan_scan);&lt;br /&gt;
   ReceiveOn();    //enable RX&lt;br /&gt;
   while((Strobe(RF_SNOP) &amp;amp; 0x70) != 0x10); //make sure RX is ready&lt;br /&gt;
   while(chan_scan&amp;lt;STOP_FREQ_CHAN)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chan_scan);&lt;br /&gt;
     rssi = ReadSingleReg(RSSI);  //define in cc430f5137.h RSSI=0x34 corresponding to addr of rssi value&lt;br /&gt;
     if (rssi &amp;gt;= 128) &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (long)((long)( rssi - 256) / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     else &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (rssi / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     if(rssi_dbm&amp;gt;rssi_max)&lt;br /&gt;
     {&lt;br /&gt;
       rssi_max=rssi_dbm;&lt;br /&gt;
       chan_jam=chan_scan-10; //start jamming 2Mhz below max dbm received&lt;br /&gt;
     }&lt;br /&gt;
     chan_scan++;&lt;br /&gt;
     Strobe( RF_SFRX); //flush the RX FIFO&lt;br /&gt;
   }&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
nouveau main :&lt;br /&gt;
&lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chan_main=0x00;&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 on if cc430 powered&lt;br /&gt;
   int i;&lt;br /&gt;
   &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     freq_scan();&lt;br /&gt;
     ReceiveOff();&lt;br /&gt;
     chan_main=chan_jam;&lt;br /&gt;
     if (chan_main != 0)  //jam only if a communication xas detected with freq_scan&lt;br /&gt;
     {&lt;br /&gt;
       for(i=0 ; i&amp;lt;(20*NUM_JAM_RAMP) ; i++) //ramp start 2Mhz below chan_jam and stop 2Mhz above&lt;br /&gt;
       {&lt;br /&gt;
         ChangeChannel(chan_main);&lt;br /&gt;
         if (chan_main&amp;gt;= (chan_jam+20))&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main=0x00;&lt;br /&gt;
           led2=led2^0x10;&lt;br /&gt;
           set_color(led1, 0x00, 0x00, led2, 0x00, 0x00); //led2 blink red every two ramp of jamming&lt;br /&gt;
         }&lt;br /&gt;
         else&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main++;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     chan_main=0x00;  &lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
header :&lt;br /&gt;
 #define DELAY 100 //300us  &lt;br /&gt;
 #define DELAY_RSSI 10 //30us&lt;br /&gt;
 &lt;br /&gt;
 #define START_FREQ_CHAN 15&lt;br /&gt;
 #define STOP_FREQ_CHAN 50     //scanning 863-870Mhz with 200khz steps&lt;br /&gt;
 #define RSSI_OFFSET 74 //cf datasheet&lt;br /&gt;
 &lt;br /&gt;
 #define NUM_JAM_RAMP 50&lt;br /&gt;
 &lt;br /&gt;
 unsigned char chan_jam=0x00;&lt;br /&gt;
 unsigned char led2=0x10;&lt;br /&gt;
 unsigned char led1=0x10;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Après les vacances'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
*Nous avons effectué des tests pour vérifier si la fonction de scan fonctionne. Malheureusement, le cc430 n'a pas l'air de détecter de communications. La fréquence des modules LoRa a été fixée à 868MHz en mettant le header LORA_FHSS_ENABLE à false (ceci désactive le glissement de fréquence) pour faire des tests dans des conditions plus optimales. Cependant, le cc430 ne détecte toujours aucune communication.&lt;br /&gt;
*Nous avons donc vérifié plusieurs éléments du code : la conversion en dBm du registre RSSI, la lecture dans le registre, le temps de mise à jour du registre RSSI.&lt;br /&gt;
**D'après le pseudo-code fourni par texas instrument, et ce que nous avons pu lire sur les forums des développeurs, la conversion fonctionne. Nous avons tout de même essayé d'autre moyen de conversion, mais aucune de ces méthodes n'a permis au cc430 de détecter une communication.&lt;br /&gt;
**En ce qui concerne la lecture dans le registre, nous avons effectué des tests en lisant dans d'autres registres et en allumant une led, nous en avons conclu que la fonction ReadSingleReg fonctionne. Nous nous sommes donc portés sur l'adresse de ce registre, en vérifiant la bibliothèque cc430f5137.h, nous avons constaté que la variable RSSI était bien définie dans les adresses de registres.&lt;br /&gt;
**Enfin, d'après les datasheets du cc430 et du cc1101, le registre RSSI met un certain temps a s'actualiser, ce temps peut être calculé et dépend de la taille des paquets reçu. Ne pouvant pas connaitre pas la taille des paquets de la communication que l'on cherche à brouiller à l'avance, nous avons décidé de fixer un temps d'attente 2 fois supérieur au temps caractéristique (~15us), soit 30 micro seconde.&lt;br /&gt;
*Malgré ces essaies et corrections de code, nous ne sommes pas parvenu à faire fonctionner la détection de communication.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Fichiers Rendus'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[[Fichier:code_fonction_1.zip]]&lt;br /&gt;
*[[Fichier:code_fonction_2.zip]]&lt;br /&gt;
*[[Fichier:compte_rendu.pdf]]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Bibliographie'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[http://www.ti.com/ ti.com]&lt;br /&gt;
*[https://www.mbed.com/en/ mbed.com]&lt;br /&gt;
*[http://www.semtech.com/ semtech.com]&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42444</id>
		<title>IMA4 2016/2017 P32</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42444"/>
				<updated>2017-05-18T12:07:50Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Cahier des charges'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;Présentation générale du projet&amp;lt;/span&amp;gt;=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Contexte&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'expansion de l'utilisation des objets connectés permet de nos jours d'accéder à des données ou de contrôler aisément d'autres systèmes connectés à distance. Les objets connectés sont de plus en plus déployés mais leur sécurité n'est pas toujours testée. Par conséquent, de nombreuses informations sensibles sont susceptibles de transiter en permanence par le biais de multiples plages de fréquences. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ceci amène donc un questionnement sur la sécurité des transferts de données entre la multitude d'objets connectés actuellement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Objectif du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de réaliser un brouilleur d'ondes radiofréquence dans la bande des 868 MHz capable de bloquer les communications LoRa.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Description du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
A l'aboutissement du projet, nous devrions être capable de détecter une communication LoRa dans la bande des 868 MHz, et de la brouiller elle seule, sans incidence sur les autres communications sur d'autres fréquences du réseau LoRa.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous devrons réaliser un montage réalisant un brouillage sur la plage 863-870Mhz afin d'empêcher toute communication LoRa, en envoyant du bruit électronique sur toute la plage de fréquence.&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet, nous perfectionnerons ce montage pour qu'il puisse détecter une communication LoRa à une fréquence donnée (grâce au &amp;quot;join-request message&amp;quot; de 18 octets envoyés par le end-point/node, ou bien grâce aux informations données dans le préambule des paquets), afin d'envoyer des données erronées et de bloquer uniquement cette communication.&lt;br /&gt;
&lt;br /&gt;
Si le temps et le budget le permettent, nous pourrons aussi être amenés à brouiller la plage de fréquences autour des 433 MHz (aussi utilisé par le réseau LoRa).&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Choix techniques : matériel et logiciel&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser ce système, nous allons utiliser un microcontrôleur cc430 muni d'un transceiver cc1101, d'un récepteur LoRa(868MHz) communicant via protocole SPI avec le microcontrôleur, 2 antennes, une batterie, quelques LEDs.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Calendrier prévisionnel'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Liste des tâches à effectuer&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
# Documentation sur le réseau LoRa&lt;br /&gt;
##moyen de transmission&lt;br /&gt;
##format de modulation&lt;br /&gt;
##trame des paquets&lt;br /&gt;
# Réalisation du premier montage brouillant toute la plage&lt;br /&gt;
##contrôler l'émetteur RF du cc430&lt;br /&gt;
##programmer un bruitage sur la plage 863-870MHz&lt;br /&gt;
##test et optimisation&lt;br /&gt;
# Ajout d'un récepteur LoRa pour détecter et brouiller une seule communication&lt;br /&gt;
##contrôler le récepteur LoRa avec le cc430 par protocole spi&lt;br /&gt;
##détecter une communication LoRa à une fréquence donnée&lt;br /&gt;
##contrôler l'émetteur RF afin de brouiller cette communication de manière brutale&lt;br /&gt;
##brouiller cette communication en tentant de changer les données du paquet &lt;br /&gt;
##test et optimisation&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Calendrier&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
''[[Avant le 19/12/16]]'' - Élaboration du Cahier des charges et remplissage du Wiki&lt;br /&gt;
&lt;br /&gt;
''[[Avant fin Janvier]]'' - Complément du Cahier des Charges et listage du matériel nécessaire pour le projet&lt;br /&gt;
&lt;br /&gt;
''[[Répartition sur le S8]]'' - 120h: Réalisation de la 1ere fonction (45h) / Réalisation de la 2e fonction (45h) / Test et débuguage (30h)&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Feuille d'heures'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Après les vacances !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Cahier des charges / Wiki&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 1h&lt;br /&gt;
| 0,5h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
|0,5h&lt;br /&gt;
| 7,5h&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le réseau LoRa&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8,5h&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le matériel&lt;br /&gt;
| 1h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|11h&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 7,5h&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 7h&lt;br /&gt;
|-&lt;br /&gt;
| Initialisation des registres&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3h&lt;br /&gt;
|3h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 6h&lt;br /&gt;
|-&lt;br /&gt;
| Code 1ère fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1,5h&lt;br /&gt;
|3h&lt;br /&gt;
|3h&lt;br /&gt;
|4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 11,5h&lt;br /&gt;
|-&lt;br /&gt;
| Code 2ème fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 8h&lt;br /&gt;
|-&lt;br /&gt;
| Optimisation/Correction fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 7h&lt;br /&gt;
|-&lt;br /&gt;
| Optimisation/Correction fonction 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 4h&lt;br /&gt;
| 6h&lt;br /&gt;
|-&lt;br /&gt;
| Tests et mesures&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 11h&lt;br /&gt;
|-&lt;br /&gt;
| Modification de la carte&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Avancement du Projet'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Phase préparatoire'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[Jeu 15/12/16]]'' &lt;br /&gt;
*Rendez-vous de mise au point du cahier des charges avec les trois encadrants (M. Boé, M. Vantroys et M. Redon)&lt;br /&gt;
*Elaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 1'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[23/01/17 - 29/01/17]]'' &lt;br /&gt;
*Revue du Cahier des Charges&lt;br /&gt;
*Recherches approfondies sur les modes de transmissions du réseau LoRa&lt;br /&gt;
*Recherche de matériel&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 2'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[30/01/17 - 05/02/17]]''  &lt;br /&gt;
*Précisions sur le cahier des charges&lt;br /&gt;
*Listage du matériel&lt;br /&gt;
*Recherche et détermination de solutions technologiques possibles pour les fonctions demandées&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 3'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[06/02/17 - 12/02/17]]''&lt;br /&gt;
*validation du matériel&lt;br /&gt;
Nous allons utiliser un cc430f5137 (MCU+RF) monté sur une carte optimisée pour les communications autours de 868Mhz.&lt;br /&gt;
Nous pouvons commencer à étudier son fonctionnement, particulièrement celui du module RF (cc1101).&lt;br /&gt;
Nous avons aussi récupéré des exemples de code en c sur le site de Texas Instrument et vu l'utilisation de ces codes sur un projet IMA5 de l'an passé.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 4'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/02/17 - 19/02/17]]''&lt;br /&gt;
*Recherche de solutions pour répondre à la 1ère fonction (brouiller la plage 863-870Mhz).&lt;br /&gt;
&lt;br /&gt;
Après une lecture approfondie de la datasheet du module RF du cc430, nous avons choisi d'utiliser la fréquence de base du module (pouvant être définie grâce aux registres) couplée au registre CHANNR. Cela nous permettra de modifier plus facilement la fréquence de la porteuse, en suivant la formule suivante : [[Fichier:rampe.png]].&lt;br /&gt;
&lt;br /&gt;
Nous pourrons alors balayer la plage de fréquence en changeant la valeur de CHANNR.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 5'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[27/02/17 - 05/03/17]]''&lt;br /&gt;
&lt;br /&gt;
A l'aide de la datasheet du cc1101 ([http://www.ti.com/lit/ds/symlink/cc1101.pdf datasheet_cc1101] pages : 70 à 95), nous avons défini les registres du module RF de la manière suivante (sachant que la fréquence du quartz est de 26MHz, soit Fxosc=26MHz) :&lt;br /&gt;
&lt;br /&gt;
*La fréquence de base a été fixée à 862,999MHz en suivant la formule donnée dans la data sheet[[Fichier:carrier_formula.png]]&lt;br /&gt;
ce qui nous a donné les valeurs FREQ2=0x21, FREQ1=0x31 et FREQ0=0x3A (FREQ=2 175 290)&lt;br /&gt;
&lt;br /&gt;
*Nous avons suivi la formule [[Fichier:chanspace_formula.png]] afin d'avoir un espacement entre les cannaux d'environ 100Khz&lt;br /&gt;
ce qui nous a donné  MDMCFG1=0x02 (CHANSPC_E=2) et MDMCFG0=0x00(CHANSPC_M=0)&lt;br /&gt;
&lt;br /&gt;
*Pour le moment, nous avons choisi le mode de modulation AM, nous avons donc initialisé les registres MDMCFG2=0x30 (mode ASK/OOK) et FREND0=0x50(patable=0 donnant le mode ASK)&lt;br /&gt;
&lt;br /&gt;
*Nous avons créé une bibliothèque RFconfig.h regroupant les valeurs de tous les registres :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal and high VCO recommended&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz stop at 870&lt;br /&gt;
 //FREQ=00 10 00 01 00 11 00 01 00 11 10 10&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //CHANNR from 0 to 69 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 //0 (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x0F //default (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x31 //868Mhz&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0x3A /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x22 //default (data rate)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x30 // ASK/OOK,no sync-word&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x02 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0x00 //chanspc_m=0&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 //default (no effet on ASK/OOK mode)&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset not used)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x03 //default (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x40 //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x50 //patable=0 -&amp;gt; ASK&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosen&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x0B //default&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 6'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[06/03/17 - 12/03/17]]''&lt;br /&gt;
*Nous avons préparé un premier code réalisant une rampe sur la plage 863-870MHz. Ce code est basé sur une boucle infinie qui incrémente le registre chann de 0 à 69 (pour passer de 863 à 870Mhz) et envoie des paquets 0xFF grâce aux fonctions ChangeChannel(chann) et send_comand().&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		1	// maximum size of data sent by rf&lt;br /&gt;
 &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 10000&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFF;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init();&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);	 &lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
     {&lt;br /&gt;
       ChangeChannel(chann);&lt;br /&gt;
       send_cmd();&lt;br /&gt;
       if(chann&amp;gt;=69) &lt;br /&gt;
 	{&lt;br /&gt;
 	  chann=0x00;&lt;br /&gt;
 	}&lt;br /&gt;
       else&lt;br /&gt;
 	{&lt;br /&gt;
 	  chann++;&lt;br /&gt;
 	}&lt;br /&gt;
       __delay_cycles(DELAY);&lt;br /&gt;
     }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Après quelques corrections du code, nous avons pu le compiler grâce au Makefile&lt;br /&gt;
&lt;br /&gt;
*Avec la commande (exécutée en root) et le montage suivants, nous avons upload le main sur le cc430&lt;br /&gt;
 mspdebug rf2500 &amp;quot;prog main&amp;quot;&lt;br /&gt;
[[Fichier:montage001.png]]&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 7'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/03/17 - 19/03/17]]''&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé les premiers tests sur l'analyseur de spectre afin de vérifier que le code fonctionne bien.&lt;br /&gt;
&lt;br /&gt;
*Dans un premier temps, nous avons essayé une fréquence fixe pour voir la calibration du cc430.&lt;br /&gt;
[[Fichier:862.png]]&lt;br /&gt;
Avec un exemple à 862Mhz, on remarque bien que les registres ont bien été initialisés et que la carte émet à la fréquence demandée.&lt;br /&gt;
&lt;br /&gt;
*Ensuite, nous avons testé le code effectuant le balayage sur la plage de fréquence 863-870Mhz, en augmentant le sweep time de l'analyseur de spectre pour voir les différentes fréquences auxquelles la carte émet.&lt;br /&gt;
[[Fichier:sweep.png]]&lt;br /&gt;
En observant de 861 à 872 Mhz sur l'écran de l'analyseur, on peut voir que le code effectue bien le balayage.&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission de la carte étant faible, nous avons essayé de l'augmenter en modifiant certains registres notamment ceux que l'on peut optimiser à l'aide du logiciel smart RF studio. Cependant, nous pensons qu'il faudra changer l'antenne patch actuelle de la carte pour une antenne connectée en SMA.&lt;br /&gt;
&lt;br /&gt;
*Nous avons aussi tenté de brouiller les communications d'autres groupes de projet utilisant des modules LoRa. Ces derniers étant configurés à 433Mhz, nous avons dû changer la fréquence de notre carte. Le brouillage ne fonctionnait pas mais notre carte étant optimisée pour une émission autour de 868Mhz, les résultats n'étaient pas pertinents.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 8'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[20/03/17 - 26/03/17]]'' &lt;br /&gt;
&lt;br /&gt;
*Nous avons emprunté à M. Vantroys 3 modules SX1276 montés sur des cartes NUCLEO-F401RE afin de pouvoir tester notre carte sur une communication LoRa à 868Mhz&lt;br /&gt;
[[Fichier:lorambed.png]]&lt;br /&gt;
*Le code utilisé pour le test a été récupéré sur le forum des développeurs du site mbed.com. C'est un code &amp;quot;ping pong&amp;quot; effectuant une communication continue entre deux modules LoRa à une fréquence de 868Mhz. Il nous a suffit d'utiliser le compilateur du site (qui regroupe toutes les bibliothèques nécessaires) en indiquant que la carte utilisée est une F401RE pour que le binaire produit soit compatible. La carte NUCLEO étant reconnue comme un système de fichier par Linux, pour la flasher il faut la monter en usb à l'aide des commandes fdisk et mount puis de copier le binaire dedans avec la commande cp.&lt;br /&gt;
[[Fichier:lora pingpong.zip]]&lt;br /&gt;
*Une fois les modules NUCLEO flashés, la communication LoRa est établie dès que deux modules sont alimentés. Nous avons donc branché en USB deux modules sur deux machines différentes afin d'observer la communication sur des terminaux. La communication se fait bien, l'un envoie &amp;quot;ping&amp;quot; tandis que l'autre envoie &amp;quot;pong&amp;quot; lorsqu'il reçoit &amp;quot;ping&amp;quot;. Malheureusement, comme nous l'avions prédit, notre carte a une puissance d'émission trop faible et ne parvient pas à brouiller efficacement.&lt;br /&gt;
*Les modules peuvent aussi communiquer en modulation FSK, dans ce cas notre système arrive à effectuer le brouillage. Néanmoins, il serait plus intéressant de parvenir à brouiller la communication LoRa.&lt;br /&gt;
*Après plusieurs changements dans le code du cc430, n'ayant pas de résultats positifs, nous avons diminué la puissance d'émission des modules LoRa en changeant un header dans le code lora_pingpong.cpp. En passant cette puissance de 14dBm à 6dBm, nous sommes parvenus à brouiller la communication entre les deux modules LoRa.&lt;br /&gt;
&lt;br /&gt;
*En parallèle, nous avons commencé à rechercher des solutions pour la fonction 2. Un pseudo code est donné sur le site ti.com ([https://www.ti.com/lit/an/swra315/swra315.pdf pseudo_code_frequency_scanning]) qui permet de faire un scan sur une plage de fréquence et de récupérer la fréquence ou le signal reçu est le plus fort. Ce code pourra être écrit en C puis incorporé dans notre main pour détecter une communication et la brouiller.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 9'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[27/03/17 - 02/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*Même si le brouillage ne s’effectue qu'à puissance réduite, nous avons cherché à l'optimiser&lt;br /&gt;
**Nous avons premièrement réalisé que le mode de modulation choisi au départ (ASK) n'était pas adapté au brouillage d'une communication LoRa. Nous avons donc essayé le mode GFSK qui est le plus proche du format de modulation du réseau LoRa. Nous avons aussi essayé les modes 2FSK et 4FSK qui sont relativement proches du GFSK. Nous en avons conclu que le mode de modulation à utiliser est GFSK (ce mode fonctionne aussi pour brouiller la modulation FSK)&lt;br /&gt;
**Ensuite, nous avons réduit la plage de fréquence balayée par le cc430 afin de voir si il y avait une influence sur le brouillage. Nous avons remarqué que le brouillage était plus efficace pour un balayage de 866 à 870 Mhz (au lieu de 863-870 initialement)&lt;br /&gt;
**Dans le même ordre d'idée, nous avons décidé de réduire le nombre d'incrémentations du registre CHANNR afin d'augmenter la rapidité du balayage. Pour ce faire, nous avons augmenté la taille de chaque canal, passant de 100kHz à 200kHz&lt;br /&gt;
**La puissance d'émission de la carte a été changée dans la fonction WritePATable (appelée par rfinit() dans le main), afin d'être maximale (12dBm)&lt;br /&gt;
**Enfin, nous avons augmenté le nombre de paquets à envoyer&lt;br /&gt;
&lt;br /&gt;
Nouvelle bibliothèque RFconfig.h :&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //high VCO FSCAL2=0x2A&lt;br /&gt;
 &lt;br /&gt;
 //867 : 21589A&lt;br /&gt;
 //866 : 214EC2&lt;br /&gt;
 //865 : 2144EA&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 //for 433Mhz : freq=0x10A766 and low vco (FSCAL2=0x0A)&lt;br /&gt;
 //432 : 0x109D8E&lt;br /&gt;
 &lt;br /&gt;
 //gfsk, 866, chann space ~200k, high vco currently&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 // (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x06 //default 0f (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x4E //866&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0xC2 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x83 // data rate&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x13 // GFSK &lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x22 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0xF8 //chanspc_m=248&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 // default 47khz deviation&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset for demodulation)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x07 // (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x77 //&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x10 //patable=0 (useless for gfsk) &lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosed&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x09 //&lt;br /&gt;
&lt;br /&gt;
Nouveau main.c : &lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;led_commands.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		10	// maximum size of data sent by rf&lt;br /&gt;
  &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 5000 //15ms  &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Any other commands are for RSSI measurement&lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFD;&lt;br /&gt;
   buffer[1] = 0xAA;&lt;br /&gt;
   buffer[2] = 0xFF;&lt;br /&gt;
   buffer[3] = 0x11;&lt;br /&gt;
   buffer[4] = 0xFF;&lt;br /&gt;
   buffer[5] = 0x66;&lt;br /&gt;
   buffer[6] = 0xFF;&lt;br /&gt;
   buffer[7] = 0x33;&lt;br /&gt;
   buffer[8] = 0x1F;&lt;br /&gt;
   buffer[9] = 0xF8;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   unsigned char led2=0x10;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(0x10, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 allumée quand le cc430 est sous tension&lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chann);&lt;br /&gt;
     send_cmd();&lt;br /&gt;
     if(chann&amp;gt;=20) //866-870&lt;br /&gt;
     {&lt;br /&gt;
       chann=0x00;&lt;br /&gt;
       led2=led2^0x10;&lt;br /&gt;
       set_color(0x10, 0x00, 0x00, led2, 0x00, 0x00); //led2 s'allume toutes les 2 rampes&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {&lt;br /&gt;
       chann++;&lt;br /&gt;
     }&lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Fonction WritePATable :&lt;br /&gt;
&lt;br /&gt;
 void WritePATable(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char valueRead = 0;&lt;br /&gt;
   &lt;br /&gt;
   //while(valueRead != 0x03)    // Output Power: -30  [dBm]&lt;br /&gt;
   //while(valueRead != 0x25)    // Output Power: -12  [dBm]&lt;br /&gt;
   //while(valueRead != 0x2D)    // Output Power: -6   [dBm]&lt;br /&gt;
   //while(valueRead != 0x8D)    // Output Power:  0   [dBm]&lt;br /&gt;
   //while(valueRead != 0xC3)    // Output Power:  10  [dBm]&lt;br /&gt;
   while(valueRead != 0xC0)    // Output Power:  Maximum  [dBm]&lt;br /&gt;
   //while(valueRead != 0xC6)    // Output Power(default):  8.8  [dBm]&lt;br /&gt;
   {&lt;br /&gt;
     /* Write the power output to the PA_TABLE and verify the write operation.  */&lt;br /&gt;
     unsigned char i = 0; &lt;br /&gt;
 &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
     //RF1AINSTRW = 0x7E03; // PA Table write (burst), Output Power: -30  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E25; // PA Table write (burst), Output Power: -12  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E2D; // PA Table write (burst), Output Power: -6   [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E8D; // PA Table write (burst), Output Power: 0    [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC3; // PA Table write (burst), Output Power: 10   [dBm]&lt;br /&gt;
     RF1AINSTRW = 0x7EC0; // PA Table write (burst), Output Power: Maximum  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC6; // PA Table write (burst), Output Power(default):  8.8  [dBm]&lt;br /&gt;
     &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
       RF1AINSTR1B = RF_PATABRD;                 // -miguel read &amp;amp; write&lt;br /&gt;
     &lt;br /&gt;
     // Traverse PATABLE pointers to read &lt;br /&gt;
     for (i = 0; i &amp;lt; 7; i++)&lt;br /&gt;
     {&lt;br /&gt;
       while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
       valueRead  = RF1ADOUT1B;     &lt;br /&gt;
     }&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
     valueRead  = RF1ADOUTB;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 10'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[03/04/17 - 09/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission étant trop faible pour brouiller la communication entre les 2 modules LoRa, nous avons décidé de changer l'antenne de la carte. Il a fallu couper l'antenne patch à l'aide d'une scie afin de souder un connecteur SMA.&lt;br /&gt;
[[Fichier:cc430antenne.png]]&lt;br /&gt;
*Grâce à cette nouvelle antenne, la communication peut maintenant être brouillée à une puissance de 10dBm (contre 6 auparavant). Mais il faut que la carte reste relativement proche d'un des modules.&lt;br /&gt;
*Pour réussir le brouillage quand les modules LoRa sont à leur puissance maximale (14dBm), il faudra sûrement ajouter un amplificateur entre la sortie de la carte et son antenne.&lt;br /&gt;
*Nous avons codé la fonction de scan en c et l'avons incorporé dans le main &lt;br /&gt;
**Cette fonction autorise le module à entrer en mode RX pour recevoir les communications. Elle incrémente ensuite le canal pour parcourir la plage 863-870MHz afin de détecter une communication. Toute les incrémentations, la variable rssi récupère la valeur contenue dans le registre qui correspond à la valeur du RSSI. Cette valeur étant en binaire complément 2, elle est convertie en dBm et placée dans un entier. Enfin, si cette valeur est supérieur à la valeur maximale déjà mesuré ou à un palier prédéfini (ici 0dBm), on stocke le numéro du canal correspondant qui sera utilisé dans le main par la suite.&lt;br /&gt;
&lt;br /&gt;
fonction de scan :&lt;br /&gt;
 void freq_scan(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char rssi;&lt;br /&gt;
   long rssi_dbm;&lt;br /&gt;
   unsigned char chan_scan=START_FREQ_CHAN;&lt;br /&gt;
   long rssi_max=0; //scan will take communication above 0dbm&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, led2, 0x00); //led2 blue while scanning&lt;br /&gt;
   &lt;br /&gt;
   ChangeChannel(chan_scan);&lt;br /&gt;
   ReceiveOn();    //enable RX&lt;br /&gt;
   while((Strobe(RF_SNOP) &amp;amp; 0x70) != 0x10); //make sure RX is ready&lt;br /&gt;
   while(chan_scan&amp;lt;STOP_FREQ_CHAN)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chan_scan);&lt;br /&gt;
     __delay_cycles(DELAY_RSSI);       //wait for rssi to be updated&lt;br /&gt;
     rssi = ReadSingleReg(RSSI);  //define in cc430f5137.h RSSI=0x34 corresponding to addr of rssi value&lt;br /&gt;
     if (rssi &amp;gt;= 128) &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (long)((long)( rssi - 256) / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     else &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (rssi / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     if(rssi_dbm&amp;gt;rssi_max)&lt;br /&gt;
     {&lt;br /&gt;
       rssi_max=rssi_dbm;&lt;br /&gt;
       chan_jam=chan_scan-10; //start jamming 2Mhz below max dbm received&lt;br /&gt;
     }&lt;br /&gt;
     chan_scan++;&lt;br /&gt;
     Strobe( RF_SFRX); //flush the RX FIFO&lt;br /&gt;
   }&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
nouveau main :&lt;br /&gt;
&lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chan_main=0x00;&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 on if cc430 powered&lt;br /&gt;
   int i;&lt;br /&gt;
   &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     freq_scan();&lt;br /&gt;
     ReceiveOff();&lt;br /&gt;
     chan_main=chan_jam;&lt;br /&gt;
     if (chan_main != 0)  //jam only if a communication xas detected with freq_scan&lt;br /&gt;
     {&lt;br /&gt;
       for(i=0 ; i&amp;lt;(20*NUM_JAM_RAMP) ; i++) //ramp start 2Mhz below chan_jam and stop 2Mhz above&lt;br /&gt;
       {&lt;br /&gt;
         ChangeChannel(chan_main);&lt;br /&gt;
         if (chan_main&amp;gt;= (chan_jam+20))&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main=0x00;&lt;br /&gt;
           led2=led2^0x10;&lt;br /&gt;
           set_color(led1, 0x00, 0x00, led2, 0x00, 0x00); //led2 blink red every two ramp of jamming&lt;br /&gt;
         }&lt;br /&gt;
         else&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main++;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     chan_main=0x00;  &lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
header :&lt;br /&gt;
 #define DELAY 100 //300us  &lt;br /&gt;
 #define DELAY_RSSI 10 //30us&lt;br /&gt;
 &lt;br /&gt;
 #define START_FREQ_CHAN 15&lt;br /&gt;
 #define STOP_FREQ_CHAN 50     //scanning 863-870Mhz with 200khz steps&lt;br /&gt;
 #define RSSI_OFFSET 74 //cf datasheet&lt;br /&gt;
 &lt;br /&gt;
 #define NUM_JAM_RAMP 50&lt;br /&gt;
 &lt;br /&gt;
 unsigned char chan_jam=0x00;&lt;br /&gt;
 unsigned char led2=0x10;&lt;br /&gt;
 unsigned char led1=0x10;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Après les vacances'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
*Nous avons effectué des tests pour vérifier si la fonction de scan fonctionne. Malheureusement, le cc430 n'a pas l'air de détecter de communications. La fréquence des modules LoRa a été fixée à 868MHz en mettant le header LORA_FHSS_ENABLE à false (ceci désactive le glissement de fréquence) pour faire des tests dans des conditions plus optimales. Cependant, le cc430 ne détecte toujours aucune communication.&lt;br /&gt;
*Nous avons donc vérifié plusieurs éléments du code : la conversion en dBm du registre RSSI, la lecture dans le registre, le temps de mise à jour du registre RSSI.&lt;br /&gt;
**D'après le pseudo-code fourni par texas instrument, et ce que nous avons pu lire sur les forums des développeurs, la conversion fonctionne. Nous avons tout de même essayé d'autre moyen de conversion, mais aucune de ces méthodes n'a permis au cc430 de détecter une communication.&lt;br /&gt;
**En ce qui concerne la lecture dans le registre, nous avons effectué des tests en lisant dans d'autres registres et en allumant une led, nous en avons conclu que la fonction ReadSingleReg fonctionne. Nous nous sommes donc portés sur l'adresse de ce registre, en vérifiant la bibliothèque cc430f5137.h, nous avons constaté que la variable RSSI était bien définie dans les adresses de registres.&lt;br /&gt;
**Enfin, d'après les datasheets du cc430 et du cc1101, le registre RSSI met un certain temps a s'actualiser, ce temps peut être calculé et dépend de la taille des paquets reçu. Ne pouvant pas connaitre pas la taille des paquets de la communication que l'on cherche à brouiller à l'avance, nous avons décidé de fixer un temps d'attente 2 fois supérieur au temps caractéristique (~15us), soit 30 micro seconde.&lt;br /&gt;
*Malgré ces essaies et corrections de code, nous ne sommes pas parvenu à faire fonctionner la détection de communication.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Fichiers Rendus'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[[Fichier:code_fonction_1.zip]]&lt;br /&gt;
*[[Fichier:code_fonction_2.zip]]&lt;br /&gt;
*[[Fichier:compte_rendu.pdf]]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Bibliographie'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[http://www.ti.com/ ti.com]&lt;br /&gt;
*[https://www.mbed.com/en/ mbed.com]&lt;br /&gt;
*[http://www.semtech.com/ semtech.com]&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42441</id>
		<title>IMA4 2016/2017 P32</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42441"/>
				<updated>2017-05-18T11:50:39Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Après les vacances */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Cahier des charges'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;Présentation générale du projet&amp;lt;/span&amp;gt;=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Contexte&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'expansion de l'utilisation des objets connectés permet de nos jours d'accéder à des données ou de contrôler aisément d'autres systèmes connectés à distance. Les objets connectés sont de plus en plus déployés mais leur sécurité n'est pas toujours testée. Par conséquent, de nombreuses informations sensibles sont susceptibles de transiter en permanence par le biais de multiples plages de fréquences. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ceci amène donc un questionnement sur la sécurité des transferts de données entre la multitude d'objets connectés actuellement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Objectif du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de réaliser un brouilleur d'ondes radiofréquence dans la bande des 868 MHz capable de bloquer les communications LoRa.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Description du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
A l'aboutissement du projet, nous devrions être capable de détecter une communication LoRa dans la bande des 868 MHz, et de la brouiller elle seule, sans incidence sur les autres communications sur d'autres fréquences du réseau LoRa.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous devrons réaliser un montage réalisant un brouillage sur la plage 863-870Mhz afin d'empêcher toute communication LoRa, en envoyant du bruit électronique sur toute la plage de fréquence.&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet, nous perfectionnerons ce montage pour qu'il puisse détecter une communication LoRa à une fréquence donnée (grâce au &amp;quot;join-request message&amp;quot; de 18 octets envoyés par le end-point/node, ou bien grâce aux informations données dans le préambule des paquets), afin d'envoyer des données erronées et de bloquer uniquement cette communication.&lt;br /&gt;
&lt;br /&gt;
Si le temps et le budget le permettent, nous pourrons aussi être amenés à brouiller la plage de fréquences autour des 433 MHz (aussi utilisé par le réseau LoRa).&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Choix techniques : matériel et logiciel&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser ce système, nous allons utiliser un microcontrôleur cc430 muni d'un transceiver cc1101, d'un récepteur LoRa(868MHz) communicant via protocole SPI avec le microcontrôleur, 2 antennes, une batterie, quelques LEDs.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Calendrier prévisionnel'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Liste des tâches à effectuer&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
# Documentation sur le réseau LoRa&lt;br /&gt;
##moyen de transmission&lt;br /&gt;
##format de modulation&lt;br /&gt;
##trame des paquets&lt;br /&gt;
# Réalisation du premier montage brouillant toute la plage&lt;br /&gt;
##contrôler l'émetteur RF du cc430&lt;br /&gt;
##programmer un bruitage sur la plage 863-870MHz&lt;br /&gt;
##test et optimisation&lt;br /&gt;
# Ajout d'un récepteur LoRa pour détecter et brouiller une seule communication&lt;br /&gt;
##contrôler le récepteur LoRa avec le cc430 par protocole spi&lt;br /&gt;
##détecter une communication LoRa à une fréquence donnée&lt;br /&gt;
##contrôler l'émetteur RF afin de brouiller cette communication de manière brutale&lt;br /&gt;
##brouiller cette communication en tentant de changer les données du paquet &lt;br /&gt;
##test et optimisation&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Calendrier&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
''[[Avant le 19/12/16]]'' - Élaboration du Cahier des charges et remplissage du Wiki&lt;br /&gt;
&lt;br /&gt;
''[[Avant fin Janvier]]'' - Complément du Cahier des Charges et listage du matériel nécessaire pour le projet&lt;br /&gt;
&lt;br /&gt;
''[[Répartition sur le S8]]'' - 120h: Réalisation de la 1ere fonction (45h) / Réalisation de la 2e fonction (45h) / Test et débuguage (30h)&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Feuille d'heures'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Cahier des charges / Wiki&lt;br /&gt;
| 4h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3,5h&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|1h&lt;br /&gt;
|1h&lt;br /&gt;
|&lt;br /&gt;
|1h&lt;br /&gt;
|0,5h&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le réseau LoRa&lt;br /&gt;
| &lt;br /&gt;
| 6h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 1ère fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1,5h&lt;br /&gt;
|6h&lt;br /&gt;
|6h&lt;br /&gt;
|4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 2ème fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Tests et mesures&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Modification de la carte&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Avancement du Projet'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Phase préparatoire'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[Jeu 15/12/16]]'' &lt;br /&gt;
*Rendez-vous de mise au point du cahier des charges avec les trois encadrants (M. Boé, M. Vantroys et M. Redon)&lt;br /&gt;
*Elaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 1'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[23/01/17 - 29/01/17]]'' &lt;br /&gt;
*Revue du Cahier des Charges&lt;br /&gt;
*Recherches approfondies sur les modes de transmissions du réseau LoRa&lt;br /&gt;
*Recherche de matériel&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 2'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[30/01/17 - 05/02/17]]''  &lt;br /&gt;
*Précisions sur le cahier des charges&lt;br /&gt;
*Listage du matériel&lt;br /&gt;
*Recherche et détermination de solutions technologiques possibles pour les fonctions demandées&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 3'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[06/02/17 - 12/02/17]]''&lt;br /&gt;
*validation du matériel&lt;br /&gt;
Nous allons utiliser un cc430f5137 (MCU+RF) monté sur une carte optimisée pour les communications autours de 868Mhz.&lt;br /&gt;
Nous pouvons commencer à étudier son fonctionnement, particulièrement celui du module RF (cc1101).&lt;br /&gt;
Nous avons aussi récupéré des exemples de code en c sur le site de Texas Instrument et vu l'utilisation de ces codes sur un projet IMA5 de l'an passé.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 4'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/02/17 - 19/02/17]]''&lt;br /&gt;
*Recherche de solutions pour répondre à la 1ère fonction (brouiller la plage 863-870Mhz).&lt;br /&gt;
&lt;br /&gt;
Après une lecture approfondie de la datasheet du module RF du cc430, nous avons choisi d'utiliser la fréquence de base du module (pouvant être définie grâce aux registres) couplée au registre CHANNR. Cela nous permettra de modifier plus facilement la fréquence de la porteuse, en suivant la formule suivante : [[Fichier:rampe.png]].&lt;br /&gt;
&lt;br /&gt;
Nous pourrons alors balayer la plage de fréquence en changeant la valeur de CHANNR.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 5'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[27/02/17 - 05/03/17]]''&lt;br /&gt;
&lt;br /&gt;
A l'aide de la datasheet du cc1101 ([http://www.ti.com/lit/ds/symlink/cc1101.pdf datasheet_cc1101] pages : 70 à 95), nous avons défini les registres du module RF de la manière suivante (sachant que la fréquence du quartz est de 26MHz, soit Fxosc=26MHz) :&lt;br /&gt;
&lt;br /&gt;
*La fréquence de base a été fixée à 862,999MHz en suivant la formule donnée dans la data sheet[[Fichier:carrier_formula.png]]&lt;br /&gt;
ce qui nous a donné les valeurs FREQ2=0x21, FREQ1=0x31 et FREQ0=0x3A (FREQ=2 175 290)&lt;br /&gt;
&lt;br /&gt;
*Nous avons suivi la formule [[Fichier:chanspace_formula.png]] afin d'avoir un espacement entre les cannaux d'environ 100Khz&lt;br /&gt;
ce qui nous a donné  MDMCFG1=0x02 (CHANSPC_E=2) et MDMCFG0=0x00(CHANSPC_M=0)&lt;br /&gt;
&lt;br /&gt;
*Pour le moment, nous avons choisi le mode de modulation AM, nous avons donc initialisé les registres MDMCFG2=0x30 (mode ASK/OOK) et FREND0=0x50(patable=0 donnant le mode ASK)&lt;br /&gt;
&lt;br /&gt;
*Nous avons créé une bibliothèque RFconfig.h regroupant les valeurs de tous les registres :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal and high VCO recommended&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz stop at 870&lt;br /&gt;
 //FREQ=00 10 00 01 00 11 00 01 00 11 10 10&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //CHANNR from 0 to 69 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 //0 (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x0F //default (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x31 //868Mhz&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0x3A /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x22 //default (data rate)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x30 // ASK/OOK,no sync-word&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x02 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0x00 //chanspc_m=0&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 //default (no effet on ASK/OOK mode)&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset not used)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x03 //default (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x40 //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x50 //patable=0 -&amp;gt; ASK&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosen&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x0B //default&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 6'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[06/03/17 - 12/03/17]]''&lt;br /&gt;
*Nous avons préparé un premier code réalisant une rampe sur la plage 863-870MHz. Ce code est basé sur une boucle infinie qui incrémente le registre chann de 0 à 69 (pour passer de 863 à 870Mhz) et envoie des paquets 0xFF grâce aux fonctions ChangeChannel(chann) et send_comand().&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		1	// maximum size of data sent by rf&lt;br /&gt;
 &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 10000&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFF;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init();&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);	 &lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
     {&lt;br /&gt;
       ChangeChannel(chann);&lt;br /&gt;
       send_cmd();&lt;br /&gt;
       if(chann&amp;gt;=69) &lt;br /&gt;
 	{&lt;br /&gt;
 	  chann=0x00;&lt;br /&gt;
 	}&lt;br /&gt;
       else&lt;br /&gt;
 	{&lt;br /&gt;
 	  chann++;&lt;br /&gt;
 	}&lt;br /&gt;
       __delay_cycles(DELAY);&lt;br /&gt;
     }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Après quelques corrections du code, nous avons pu le compiler grâce au Makefile&lt;br /&gt;
&lt;br /&gt;
*Avec la commande (exécutée en root) et le montage suivants, nous avons upload le main sur le cc430&lt;br /&gt;
 mspdebug rf2500 &amp;quot;prog main&amp;quot;&lt;br /&gt;
[[Fichier:montage001.png]]&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 7'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/03/17 - 19/03/17]]''&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé les premiers tests sur l'analyseur de spectre afin de vérifier que le code fonctionne bien.&lt;br /&gt;
&lt;br /&gt;
*Dans un premier temps, nous avons essayé une fréquence fixe pour voir la calibration du cc430.&lt;br /&gt;
[[Fichier:862.png]]&lt;br /&gt;
Avec un exemple à 862Mhz, on remarque bien que les registres ont bien été initialisés et que la carte émet à la fréquence demandée.&lt;br /&gt;
&lt;br /&gt;
*Ensuite, nous avons testé le code effectuant le balayage sur la plage de fréquence 863-870Mhz, en augmentant le sweep time de l'analyseur de spectre pour voir les différentes fréquences auxquelles la carte émet.&lt;br /&gt;
[[Fichier:sweep.png]]&lt;br /&gt;
En observant de 861 à 872 Mhz sur l'écran de l'analyseur, on peut voir que le code effectue bien le balayage.&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission de la carte étant faible, nous avons essayé de l'augmenter en modifiant certains registres notamment ceux que l'on peut optimiser à l'aide du logiciel smart RF studio. Cependant, nous pensons qu'il faudra changer l'antenne patch actuelle de la carte pour une antenne connectée en SMA.&lt;br /&gt;
&lt;br /&gt;
*Nous avons aussi tenté de brouiller les communications d'autres groupes de projet utilisant des modules LoRa. Ces derniers étant configurés à 433Mhz, nous avons dû changer la fréquence de notre carte. Le brouillage ne fonctionnait pas mais notre carte étant optimisée pour une émission autour de 868Mhz, les résultats n'étaient pas pertinents.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 8'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[20/03/17 - 26/03/17]]'' &lt;br /&gt;
&lt;br /&gt;
*Nous avons emprunté à M. Vantroys 3 modules SX1276 montés sur des cartes NUCLEO-F401RE afin de pouvoir tester notre carte sur une communication LoRa à 868Mhz&lt;br /&gt;
[[Fichier:lorambed.png]]&lt;br /&gt;
*Le code utilisé pour le test a été récupéré sur le forum des développeurs du site mbed.com. C'est un code &amp;quot;ping pong&amp;quot; effectuant une communication continue entre deux modules LoRa à une fréquence de 868Mhz. Il nous a suffit d'utiliser le compilateur du site (qui regroupe toutes les bibliothèques nécessaires) en indiquant que la carte utilisée est une F401RE pour que le binaire produit soit compatible. La carte NUCLEO étant reconnue comme un système de fichier par Linux, pour la flasher il faut la monter en usb à l'aide des commandes fdisk et mount puis de copier le binaire dedans avec la commande cp.&lt;br /&gt;
[[Fichier:lora pingpong.zip]]&lt;br /&gt;
*Une fois les modules NUCLEO flashés, la communication LoRa est établie dès que deux modules sont alimentés. Nous avons donc branché en USB deux modules sur deux machines différentes afin d'observer la communication sur des terminaux. La communication se fait bien, l'un envoie &amp;quot;ping&amp;quot; tandis que l'autre envoie &amp;quot;pong&amp;quot; lorsqu'il reçoit &amp;quot;ping&amp;quot;. Malheureusement, comme nous l'avions prédit, notre carte a une puissance d'émission trop faible et ne parvient pas à brouiller efficacement.&lt;br /&gt;
*Les modules peuvent aussi communiquer en modulation FSK, dans ce cas notre système arrive à effectuer le brouillage. Néanmoins, il serait plus intéressant de parvenir à brouiller la communication LoRa.&lt;br /&gt;
*Après plusieurs changements dans le code du cc430, n'ayant pas de résultats positifs, nous avons diminué la puissance d'émission des modules LoRa en changeant un header dans le code lora_pingpong.cpp. En passant cette puissance de 14dBm à 6dBm, nous sommes parvenus à brouiller la communication entre les deux modules LoRa.&lt;br /&gt;
&lt;br /&gt;
*En parallèle, nous avons commencé à rechercher des solutions pour la fonction 2. Un pseudo code est donné sur le site ti.com ([https://www.ti.com/lit/an/swra315/swra315.pdf pseudo_code_frequency_scanning]) qui permet de faire un scan sur une plage de fréquence et de récupérer la fréquence ou le signal reçu est le plus fort. Ce code pourra être écrit en C puis incorporé dans notre main pour détecter une communication et la brouiller.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 9'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[27/03/17 - 02/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*Même si le brouillage ne s’effectue qu'à puissance réduite, nous avons cherché à l'optimiser&lt;br /&gt;
**Nous avons premièrement réalisé que le mode de modulation choisi au départ (ASK) n'était pas adapté au brouillage d'une communication LoRa. Nous avons donc essayé le mode GFSK qui est le plus proche du format de modulation du réseau LoRa. Nous avons aussi essayé les modes 2FSK et 4FSK qui sont relativement proches du GFSK. Nous en avons conclu que le mode de modulation à utiliser est GFSK (ce mode fonctionne aussi pour brouiller la modulation FSK)&lt;br /&gt;
**Ensuite, nous avons réduit la plage de fréquence balayée par le cc430 afin de voir si il y avait une influence sur le brouillage. Nous avons remarqué que le brouillage était plus efficace pour un balayage de 866 à 870 Mhz (au lieu de 863-870 initialement)&lt;br /&gt;
**Dans le même ordre d'idée, nous avons décidé de réduire le nombre d'incrémentations du registre CHANNR afin d'augmenter la rapidité du balayage. Pour ce faire, nous avons augmenté la taille de chaque canal, passant de 100kHz à 200kHz&lt;br /&gt;
**La puissance d'émission de la carte a été changée dans la fonction WritePATable (appelée par rfinit() dans le main), afin d'être maximale (12dBm)&lt;br /&gt;
**Enfin, nous avons augmenté le nombre de paquets à envoyer&lt;br /&gt;
&lt;br /&gt;
Nouvelle bibliothèque RFconfig.h :&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //high VCO FSCAL2=0x2A&lt;br /&gt;
 &lt;br /&gt;
 //867 : 21589A&lt;br /&gt;
 //866 : 214EC2&lt;br /&gt;
 //865 : 2144EA&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 //for 433Mhz : freq=0x10A766 and low vco (FSCAL2=0x0A)&lt;br /&gt;
 //432 : 0x109D8E&lt;br /&gt;
 &lt;br /&gt;
 //gfsk, 866, chann space ~200k, high vco currently&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 // (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x06 //default 0f (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x4E //866&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0xC2 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x83 // data rate&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x13 // GFSK &lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x22 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0xF8 //chanspc_m=248&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 // default 47khz deviation&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset for demodulation)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x07 // (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x77 //&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x10 //patable=0 (useless for gfsk) &lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosed&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x09 //&lt;br /&gt;
&lt;br /&gt;
Nouveau main.c : &lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;led_commands.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		10	// maximum size of data sent by rf&lt;br /&gt;
  &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 5000 //15ms  &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Any other commands are for RSSI measurement&lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFD;&lt;br /&gt;
   buffer[1] = 0xAA;&lt;br /&gt;
   buffer[2] = 0xFF;&lt;br /&gt;
   buffer[3] = 0x11;&lt;br /&gt;
   buffer[4] = 0xFF;&lt;br /&gt;
   buffer[5] = 0x66;&lt;br /&gt;
   buffer[6] = 0xFF;&lt;br /&gt;
   buffer[7] = 0x33;&lt;br /&gt;
   buffer[8] = 0x1F;&lt;br /&gt;
   buffer[9] = 0xF8;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   unsigned char led2=0x10;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(0x10, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 allumée quand le cc430 est sous tension&lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chann);&lt;br /&gt;
     send_cmd();&lt;br /&gt;
     if(chann&amp;gt;=20) //866-870&lt;br /&gt;
     {&lt;br /&gt;
       chann=0x00;&lt;br /&gt;
       led2=led2^0x10;&lt;br /&gt;
       set_color(0x10, 0x00, 0x00, led2, 0x00, 0x00); //led2 s'allume toutes les 2 rampes&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {&lt;br /&gt;
       chann++;&lt;br /&gt;
     }&lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Fonction WritePATable :&lt;br /&gt;
&lt;br /&gt;
 void WritePATable(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char valueRead = 0;&lt;br /&gt;
   &lt;br /&gt;
   //while(valueRead != 0x03)    // Output Power: -30  [dBm]&lt;br /&gt;
   //while(valueRead != 0x25)    // Output Power: -12  [dBm]&lt;br /&gt;
   //while(valueRead != 0x2D)    // Output Power: -6   [dBm]&lt;br /&gt;
   //while(valueRead != 0x8D)    // Output Power:  0   [dBm]&lt;br /&gt;
   //while(valueRead != 0xC3)    // Output Power:  10  [dBm]&lt;br /&gt;
   while(valueRead != 0xC0)    // Output Power:  Maximum  [dBm]&lt;br /&gt;
   //while(valueRead != 0xC6)    // Output Power(default):  8.8  [dBm]&lt;br /&gt;
   {&lt;br /&gt;
     /* Write the power output to the PA_TABLE and verify the write operation.  */&lt;br /&gt;
     unsigned char i = 0; &lt;br /&gt;
 &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
     //RF1AINSTRW = 0x7E03; // PA Table write (burst), Output Power: -30  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E25; // PA Table write (burst), Output Power: -12  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E2D; // PA Table write (burst), Output Power: -6   [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E8D; // PA Table write (burst), Output Power: 0    [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC3; // PA Table write (burst), Output Power: 10   [dBm]&lt;br /&gt;
     RF1AINSTRW = 0x7EC0; // PA Table write (burst), Output Power: Maximum  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC6; // PA Table write (burst), Output Power(default):  8.8  [dBm]&lt;br /&gt;
     &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
       RF1AINSTR1B = RF_PATABRD;                 // -miguel read &amp;amp; write&lt;br /&gt;
     &lt;br /&gt;
     // Traverse PATABLE pointers to read &lt;br /&gt;
     for (i = 0; i &amp;lt; 7; i++)&lt;br /&gt;
     {&lt;br /&gt;
       while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
       valueRead  = RF1ADOUT1B;     &lt;br /&gt;
     }&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
     valueRead  = RF1ADOUTB;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 10'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[03/04/17 - 09/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission étant trop faible pour brouiller la communication entre les 2 modules LoRa, nous avons décidé de changer l'antenne de la carte. Il a fallu couper l'antenne patch à l'aide d'une scie afin de souder un connecteur SMA.&lt;br /&gt;
[[Fichier:cc430antenne.png]]&lt;br /&gt;
*Grâce à cette nouvelle antenne, la communication peut maintenant être brouillée à une puissance de 10dBm (contre 6 auparavant). Mais il faut que la carte reste relativement proche d'un des modules.&lt;br /&gt;
*Pour réussir le brouillage quand les modules LoRa sont à leur puissance maximale (14dBm), il faudra sûrement ajouter un amplificateur entre la sortie de la carte et son antenne.&lt;br /&gt;
*Nous avons codé la fonction de scan en c et l'avons incorporé dans le main &lt;br /&gt;
**Cette fonction autorise le module à entrer en mode RX pour recevoir les communications. Elle incrémente ensuite le canal pour parcourir la plage 863-870MHz afin de détecter une communication. Toute les incrémentations, la variable rssi récupère la valeur contenue dans le registre qui correspond à la valeur du RSSI. Cette valeur étant en binaire complément 2, elle est convertie en dBm et placée dans un entier. Enfin, si cette valeur est supérieur à la valeur maximale déjà mesuré ou à un palier prédéfini (ici 0dBm), on stocke le numéro du canal correspondant qui sera utilisé dans le main par la suite.&lt;br /&gt;
&lt;br /&gt;
fonction de scan :&lt;br /&gt;
 void freq_scan(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char rssi;&lt;br /&gt;
   long rssi_dbm;&lt;br /&gt;
   unsigned char chan_scan=START_FREQ_CHAN;&lt;br /&gt;
   long rssi_max=0; //scan will take communication above 0dbm&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, led2, 0x00); //led2 blue while scanning&lt;br /&gt;
   &lt;br /&gt;
   ChangeChannel(chan_scan);&lt;br /&gt;
   ReceiveOn();    //enable RX&lt;br /&gt;
   while((Strobe(RF_SNOP) &amp;amp; 0x70) != 0x10); //make sure RX is ready&lt;br /&gt;
   while(chan_scan&amp;lt;STOP_FREQ_CHAN)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chan_scan);&lt;br /&gt;
     __delay_cycles(DELAY_RSSI);       //wait for rssi to be updated&lt;br /&gt;
     rssi = ReadSingleReg(RSSI);  //define in cc430f5137.h RSSI=0x34 corresponding to addr of rssi value&lt;br /&gt;
     if (rssi &amp;gt;= 128) &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (long)((long)( rssi - 256) / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     else &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (rssi / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     if(rssi_dbm&amp;gt;rssi_max)&lt;br /&gt;
     {&lt;br /&gt;
       rssi_max=rssi_dbm;&lt;br /&gt;
       chan_jam=chan_scan-10; //start jamming 2Mhz below max dbm received&lt;br /&gt;
     }&lt;br /&gt;
     chan_scan++;&lt;br /&gt;
     Strobe( RF_SFRX); //flush the RX FIFO&lt;br /&gt;
   }&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
nouveau main :&lt;br /&gt;
&lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chan_main=0x00;&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 on if cc430 powered&lt;br /&gt;
   int i;&lt;br /&gt;
   &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     freq_scan();&lt;br /&gt;
     ReceiveOff();&lt;br /&gt;
     chan_main=chan_jam;&lt;br /&gt;
     if (chan_main != 0)  //jam only if a communication xas detected with freq_scan&lt;br /&gt;
     {&lt;br /&gt;
       for(i=0 ; i&amp;lt;(20*NUM_JAM_RAMP) ; i++) //ramp start 2Mhz below chan_jam and stop 2Mhz above&lt;br /&gt;
       {&lt;br /&gt;
         ChangeChannel(chan_main);&lt;br /&gt;
         if (chan_main&amp;gt;= (chan_jam+20))&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main=0x00;&lt;br /&gt;
           led2=led2^0x10;&lt;br /&gt;
           set_color(led1, 0x00, 0x00, led2, 0x00, 0x00); //led2 blink red every two ramp of jamming&lt;br /&gt;
         }&lt;br /&gt;
         else&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main++;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     chan_main=0x00;  &lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
header :&lt;br /&gt;
 #define DELAY 100 //300us  &lt;br /&gt;
 #define DELAY_RSSI 10 //30us&lt;br /&gt;
 &lt;br /&gt;
 #define START_FREQ_CHAN 15&lt;br /&gt;
 #define STOP_FREQ_CHAN 50     //scanning 863-870Mhz with 200khz steps&lt;br /&gt;
 #define RSSI_OFFSET 74 //cf datasheet&lt;br /&gt;
 &lt;br /&gt;
 #define NUM_JAM_RAMP 50&lt;br /&gt;
 &lt;br /&gt;
 unsigned char chan_jam=0x00;&lt;br /&gt;
 unsigned char led2=0x10;&lt;br /&gt;
 unsigned char led1=0x10;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Après les vacances'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
*Nous avons effectué des tests pour vérifier si la fonction de scan fonctionne. Malheureusement, le cc430 n'a pas l'air de détecter de communications. La fréquence des modules LoRa a été fixée à 868MHz en mettant le header LORA_FHSS_ENABLE à false (ceci désactive le glissement de fréquence) pour faire des tests dans des conditions plus optimales. Cependant, le cc430 ne détecte toujours aucune communication.&lt;br /&gt;
*Nous avons donc vérifié plusieurs éléments du code : la conversion en dBm du registre RSSI, la lecture dans le registre, le temps de mise à jour du registre RSSI.&lt;br /&gt;
**D'après le pseudo-code fourni par texas instrument, et ce que nous avons pu lire sur les forums des développeurs, la conversion fonctionne. Nous avons tout de même essayé d'autre moyen de conversion, mais aucune de ces méthodes n'a permis au cc430 de détecter une communication.&lt;br /&gt;
**En ce qui concerne la lecture dans le registre, nous avons effectué des tests en lisant dans d'autres registres et en allumant une led, nous en avons conclu que la fonction ReadSingleReg fonctionne. Nous nous sommes donc portés sur l'adresse de ce registre, en vérifiant la bibliothèque cc430f5137.h, nous avons constaté que la variable RSSI était bien définie dans les adresses de registres.&lt;br /&gt;
**Enfin, d'après les datasheets du cc430 et du cc1101, le registre RSSI met un certain temps a s'actualiser, ce temps peut être calculé et dépend de la taille des paquets reçu. Ne pouvant pas connaitre pas la taille des paquets de la communication que l'on cherche à brouiller à l'avance, nous avons décidé de fixer un temps d'attente 2 fois supérieur au temps caractéristique (~15us), soit 30 micro seconde.&lt;br /&gt;
*Malgré ces essaies et corrections de code, nous ne sommes pas parvenu à faire fonctionner la détection de communication.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Fichiers Rendus'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[[Fichier:code_fonction_1.zip]]&lt;br /&gt;
*[[Fichier:code_fonction_2.zip]]&lt;br /&gt;
*[[Fichier:compte_rendu.pdf]]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Bibliographie'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[http://www.ti.com/ ti.com]&lt;br /&gt;
*[https://www.mbed.com/en/ mbed.com]&lt;br /&gt;
*[http://www.semtech.com/ semtech.com]&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42437</id>
		<title>IMA4 2016/2017 P32</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42437"/>
				<updated>2017-05-18T11:30:56Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Bibliographie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Cahier des charges'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;Présentation générale du projet&amp;lt;/span&amp;gt;=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Contexte&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'expansion de l'utilisation des objets connectés permet de nos jours d'accéder à des données ou de contrôler aisément d'autres systèmes connectés à distance. Les objets connectés sont de plus en plus déployés mais leur sécurité n'est pas toujours testée. Par conséquent, de nombreuses informations sensibles sont susceptibles de transiter en permanence par le biais de multiples plages de fréquences. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ceci amène donc un questionnement sur la sécurité des transferts de données entre la multitude d'objets connectés actuellement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Objectif du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de réaliser un brouilleur d'ondes radiofréquence dans la bande des 868 MHz capable de bloquer les communications LoRa.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Description du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
A l'aboutissement du projet, nous devrions être capable de détecter une communication LoRa dans la bande des 868 MHz, et de la brouiller elle seule, sans incidence sur les autres communications sur d'autres fréquences du réseau LoRa.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous devrons réaliser un montage réalisant un brouillage sur la plage 863-870Mhz afin d'empêcher toute communication LoRa, en envoyant du bruit électronique sur toute la plage de fréquence.&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet, nous perfectionnerons ce montage pour qu'il puisse détecter une communication LoRa à une fréquence donnée (grâce au &amp;quot;join-request message&amp;quot; de 18 octets envoyés par le end-point/node, ou bien grâce aux informations données dans le préambule des paquets), afin d'envoyer des données erronées et de bloquer uniquement cette communication.&lt;br /&gt;
&lt;br /&gt;
Si le temps et le budget le permettent, nous pourrons aussi être amenés à brouiller la plage de fréquences autour des 433 MHz (aussi utilisé par le réseau LoRa).&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Choix techniques : matériel et logiciel&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser ce système, nous allons utiliser un microcontrôleur cc430 muni d'un transceiver cc1101, d'un récepteur LoRa(868MHz) communicant via protocole SPI avec le microcontrôleur, 2 antennes, une batterie, quelques LEDs.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Calendrier prévisionnel'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Liste des tâches à effectuer&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
# Documentation sur le réseau LoRa&lt;br /&gt;
##moyen de transmission&lt;br /&gt;
##format de modulation&lt;br /&gt;
##trame des paquets&lt;br /&gt;
# Réalisation du premier montage brouillant toute la plage&lt;br /&gt;
##contrôler l'émetteur RF du cc430&lt;br /&gt;
##programmer un bruitage sur la plage 863-870MHz&lt;br /&gt;
##test et optimisation&lt;br /&gt;
# Ajout d'un récepteur LoRa pour détecter et brouiller une seule communication&lt;br /&gt;
##contrôler le récepteur LoRa avec le cc430 par protocole spi&lt;br /&gt;
##détecter une communication LoRa à une fréquence donnée&lt;br /&gt;
##contrôler l'émetteur RF afin de brouiller cette communication de manière brutale&lt;br /&gt;
##brouiller cette communication en tentant de changer les données du paquet &lt;br /&gt;
##test et optimisation&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Calendrier&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
''[[Avant le 19/12/16]]'' - Élaboration du Cahier des charges et remplissage du Wiki&lt;br /&gt;
&lt;br /&gt;
''[[Avant fin Janvier]]'' - Complément du Cahier des Charges et listage du matériel nécessaire pour le projet&lt;br /&gt;
&lt;br /&gt;
''[[Répartition sur le S8]]'' - 120h: Réalisation de la 1ere fonction (45h) / Réalisation de la 2e fonction (45h) / Test et débuguage (30h)&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Feuille d'heures'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Cahier des charges / Wiki&lt;br /&gt;
| 4h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3,5h&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|1h&lt;br /&gt;
|1h&lt;br /&gt;
|&lt;br /&gt;
|1h&lt;br /&gt;
|0,5h&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le réseau LoRa&lt;br /&gt;
| &lt;br /&gt;
| 6h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 1ère fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1,5h&lt;br /&gt;
|6h&lt;br /&gt;
|6h&lt;br /&gt;
|4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 2ème fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Tests et mesures&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Modification de la carte&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Avancement du Projet'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Phase préparatoire'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[Jeu 15/12/16]]'' &lt;br /&gt;
*Rendez-vous de mise au point du cahier des charges avec les trois encadrants (M. Boé, M. Vantroys et M. Redon)&lt;br /&gt;
*Elaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 1'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[23/01/17 - 29/01/17]]'' &lt;br /&gt;
*Revue du Cahier des Charges&lt;br /&gt;
*Recherches approfondies sur les modes de transmissions du réseau LoRa&lt;br /&gt;
*Recherche de matériel&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 2'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[30/01/17 - 05/02/17]]''  &lt;br /&gt;
*Précisions sur le cahier des charges&lt;br /&gt;
*Listage du matériel&lt;br /&gt;
*Recherche et détermination de solutions technologiques possibles pour les fonctions demandées&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 3'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[06/02/17 - 12/02/17]]''&lt;br /&gt;
*validation du matériel&lt;br /&gt;
Nous allons utiliser un cc430f5137 (MCU+RF) monté sur une carte optimisée pour les communications autours de 868Mhz.&lt;br /&gt;
Nous pouvons commencer à étudier son fonctionnement, particulièrement celui du module RF (cc1101).&lt;br /&gt;
Nous avons aussi récupéré des exemples de code en c sur le site de Texas Instrument et vu l'utilisation de ces codes sur un projet IMA5 de l'an passé.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 4'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/02/17 - 19/02/17]]''&lt;br /&gt;
*Recherche de solutions pour répondre à la 1ère fonction (brouiller la plage 863-870Mhz).&lt;br /&gt;
&lt;br /&gt;
Après une lecture approfondie de la datasheet du module RF du cc430, nous avons choisi d'utiliser la fréquence de base du module (pouvant être définie grâce aux registres) couplée au registre CHANNR. Cela nous permettra de modifier plus facilement la fréquence de la porteuse, en suivant la formule suivante : [[Fichier:rampe.png]].&lt;br /&gt;
&lt;br /&gt;
Nous pourrons alors balayer la plage de fréquence en changeant la valeur de CHANNR.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 5'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[27/02/17 - 05/03/17]]''&lt;br /&gt;
&lt;br /&gt;
A l'aide de la datasheet du cc1101 ([http://www.ti.com/lit/ds/symlink/cc1101.pdf datasheet_cc1101] pages : 70 à 95), nous avons défini les registres du module RF de la manière suivante (sachant que la fréquence du quartz est de 26MHz, soit Fxosc=26MHz) :&lt;br /&gt;
&lt;br /&gt;
*La fréquence de base a été fixée à 862,999MHz en suivant la formule donnée dans la data sheet[[Fichier:carrier_formula.png]]&lt;br /&gt;
ce qui nous a donné les valeurs FREQ2=0x21, FREQ1=0x31 et FREQ0=0x3A (FREQ=2 175 290)&lt;br /&gt;
&lt;br /&gt;
*Nous avons suivi la formule [[Fichier:chanspace_formula.png]] afin d'avoir un espacement entre les cannaux d'environ 100Khz&lt;br /&gt;
ce qui nous a donné  MDMCFG1=0x02 (CHANSPC_E=2) et MDMCFG0=0x00(CHANSPC_M=0)&lt;br /&gt;
&lt;br /&gt;
*Pour le moment, nous avons choisi le mode de modulation AM, nous avons donc initialisé les registres MDMCFG2=0x30 (mode ASK/OOK) et FREND0=0x50(patable=0 donnant le mode ASK)&lt;br /&gt;
&lt;br /&gt;
*Nous avons créé une bibliothèque RFconfig.h regroupant les valeurs de tous les registres :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal and high VCO recommended&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz stop at 870&lt;br /&gt;
 //FREQ=00 10 00 01 00 11 00 01 00 11 10 10&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //CHANNR from 0 to 69 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 //0 (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x0F //default (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x31 //868Mhz&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0x3A /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x22 //default (data rate)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x30 // ASK/OOK,no sync-word&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x02 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0x00 //chanspc_m=0&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 //default (no effet on ASK/OOK mode)&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset not used)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x03 //default (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x40 //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x50 //patable=0 -&amp;gt; ASK&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosen&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x0B //default&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 6'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[06/03/17 - 12/03/17]]''&lt;br /&gt;
*Nous avons préparé un premier code réalisant une rampe sur la plage 863-870MHz. Ce code est basé sur une boucle infinie qui incrémente le registre chann de 0 à 69 (pour passer de 863 à 870Mhz) et envoie des paquets 0xFF grâce aux fonctions ChangeChannel(chann) et send_comand().&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		1	// maximum size of data sent by rf&lt;br /&gt;
 &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 10000&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFF;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init();&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);	 &lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
     {&lt;br /&gt;
       ChangeChannel(chann);&lt;br /&gt;
       send_cmd();&lt;br /&gt;
       if(chann&amp;gt;=69) &lt;br /&gt;
 	{&lt;br /&gt;
 	  chann=0x00;&lt;br /&gt;
 	}&lt;br /&gt;
       else&lt;br /&gt;
 	{&lt;br /&gt;
 	  chann++;&lt;br /&gt;
 	}&lt;br /&gt;
       __delay_cycles(DELAY);&lt;br /&gt;
     }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Après quelques corrections du code, nous avons pu le compiler grâce au Makefile&lt;br /&gt;
&lt;br /&gt;
*Avec la commande (exécutée en root) et le montage suivants, nous avons upload le main sur le cc430&lt;br /&gt;
 mspdebug rf2500 &amp;quot;prog main&amp;quot;&lt;br /&gt;
[[Fichier:montage001.png]]&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 7'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/03/17 - 19/03/17]]''&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé les premiers tests sur l'analyseur de spectre afin de vérifier que le code fonctionne bien.&lt;br /&gt;
&lt;br /&gt;
*Dans un premier temps, nous avons essayé une fréquence fixe pour voir la calibration du cc430.&lt;br /&gt;
[[Fichier:862.png]]&lt;br /&gt;
Avec un exemple à 862Mhz, on remarque bien que les registres ont bien été initialisés et que la carte émet à la fréquence demandée.&lt;br /&gt;
&lt;br /&gt;
*Ensuite, nous avons testé le code effectuant le balayage sur la plage de fréquence 863-870Mhz, en augmentant le sweep time de l'analyseur de spectre pour voir les différentes fréquences auxquelles la carte émet.&lt;br /&gt;
[[Fichier:sweep.png]]&lt;br /&gt;
En observant de 861 à 872 Mhz sur l'écran de l'analyseur, on peut voir que le code effectue bien le balayage.&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission de la carte étant faible, nous avons essayé de l'augmenter en modifiant certains registres notamment ceux que l'on peut optimiser à l'aide du logiciel smart RF studio. Cependant, nous pensons qu'il faudra changer l'antenne patch actuelle de la carte pour une antenne connectée en SMA.&lt;br /&gt;
&lt;br /&gt;
*Nous avons aussi tenté de brouiller les communications d'autres groupes de projet utilisant des modules LoRa. Ces derniers étant configurés à 433Mhz, nous avons dû changer la fréquence de notre carte. Le brouillage ne fonctionnait pas mais notre carte étant optimisée pour une émission autour de 868Mhz, les résultats n'étaient pas pertinents.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 8'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[20/03/17 - 26/03/17]]'' &lt;br /&gt;
&lt;br /&gt;
*Nous avons emprunté à M. Vantroys 3 modules SX1276 montés sur des cartes NUCLEO-F401RE afin de pouvoir tester notre carte sur une communication LoRa à 868Mhz&lt;br /&gt;
[[Fichier:lorambed.png]]&lt;br /&gt;
*Le code utilisé pour le test a été récupéré sur le forum des développeurs du site mbed.com. C'est un code &amp;quot;ping pong&amp;quot; effectuant une communication continue entre deux modules LoRa à une fréquence de 868Mhz. Il nous a suffit d'utiliser le compilateur du site (qui regroupe toutes les bibliothèques nécessaires) en indiquant que la carte utilisée est une F401RE pour que le binaire produit soit compatible. La carte NUCLEO étant reconnue comme un système de fichier par Linux, pour la flasher il faut la monter en usb à l'aide des commandes fdisk et mount puis de copier le binaire dedans avec la commande cp.&lt;br /&gt;
[[Fichier:lora pingpong.zip]]&lt;br /&gt;
*Une fois les modules NUCLEO flashés, la communication LoRa est établie dès que deux modules sont alimentés. Nous avons donc branché en USB deux modules sur deux machines différentes afin d'observer la communication sur des terminaux. La communication se fait bien, l'un envoie &amp;quot;ping&amp;quot; tandis que l'autre envoie &amp;quot;pong&amp;quot; lorsqu'il reçoit &amp;quot;ping&amp;quot;. Malheureusement, comme nous l'avions prédit, notre carte a une puissance d'émission trop faible et ne parvient pas à brouiller efficacement.&lt;br /&gt;
*Les modules peuvent aussi communiquer en modulation FSK, dans ce cas notre système arrive à effectuer le brouillage. Néanmoins, il serait plus intéressant de parvenir à brouiller la communication LoRa.&lt;br /&gt;
*Après plusieurs changements dans le code du cc430, n'ayant pas de résultats positifs, nous avons diminué la puissance d'émission des modules LoRa en changeant un header dans le code lora_pingpong.cpp. En passant cette puissance de 14dBm à 6dBm, nous sommes parvenus à brouiller la communication entre les deux modules LoRa.&lt;br /&gt;
&lt;br /&gt;
*En parallèle, nous avons commencé à rechercher des solutions pour la fonction 2. Un pseudo code est donné sur le site ti.com ([https://www.ti.com/lit/an/swra315/swra315.pdf pseudo_code_frequency_scanning]) qui permet de faire un scan sur une plage de fréquence et de récupérer la fréquence ou le signal reçu est le plus fort. Ce code pourra être écrit en C puis incorporé dans notre main pour détecter une communication et la brouiller.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 9'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[27/03/17 - 02/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*Même si le brouillage ne s’effectue qu'à puissance réduite, nous avons cherché à l'optimiser&lt;br /&gt;
**Nous avons premièrement réalisé que le mode de modulation choisi au départ (ASK) n'était pas adapté au brouillage d'une communication LoRa. Nous avons donc essayé le mode GFSK qui est le plus proche du format de modulation du réseau LoRa. Nous avons aussi essayé les modes 2FSK et 4FSK qui sont relativement proches du GFSK. Nous en avons conclu que le mode de modulation à utiliser est GFSK (ce mode fonctionne aussi pour brouiller la modulation FSK)&lt;br /&gt;
**Ensuite, nous avons réduit la plage de fréquence balayée par le cc430 afin de voir si il y avait une influence sur le brouillage. Nous avons remarqué que le brouillage était plus efficace pour un balayage de 866 à 870 Mhz (au lieu de 863-870 initialement)&lt;br /&gt;
**Dans le même ordre d'idée, nous avons décidé de réduire le nombre d'incrémentations du registre CHANNR afin d'augmenter la rapidité du balayage. Pour ce faire, nous avons augmenté la taille de chaque canal, passant de 100kHz à 200kHz&lt;br /&gt;
**La puissance d'émission de la carte a été changée dans la fonction WritePATable (appelée par rfinit() dans le main), afin d'être maximale (12dBm)&lt;br /&gt;
**Enfin, nous avons augmenté le nombre de paquets à envoyer&lt;br /&gt;
&lt;br /&gt;
Nouvelle bibliothèque RFconfig.h :&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //high VCO FSCAL2=0x2A&lt;br /&gt;
 &lt;br /&gt;
 //867 : 21589A&lt;br /&gt;
 //866 : 214EC2&lt;br /&gt;
 //865 : 2144EA&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 //for 433Mhz : freq=0x10A766 and low vco (FSCAL2=0x0A)&lt;br /&gt;
 //432 : 0x109D8E&lt;br /&gt;
 &lt;br /&gt;
 //gfsk, 866, chann space ~200k, high vco currently&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 // (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x06 //default 0f (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x4E //866&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0xC2 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x83 // data rate&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x13 // GFSK &lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x22 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0xF8 //chanspc_m=248&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 // default 47khz deviation&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset for demodulation)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x07 // (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x77 //&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x10 //patable=0 (useless for gfsk) &lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosed&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x09 //&lt;br /&gt;
&lt;br /&gt;
Nouveau main.c : &lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;led_commands.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		10	// maximum size of data sent by rf&lt;br /&gt;
  &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 5000 //15ms  &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Any other commands are for RSSI measurement&lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFD;&lt;br /&gt;
   buffer[1] = 0xAA;&lt;br /&gt;
   buffer[2] = 0xFF;&lt;br /&gt;
   buffer[3] = 0x11;&lt;br /&gt;
   buffer[4] = 0xFF;&lt;br /&gt;
   buffer[5] = 0x66;&lt;br /&gt;
   buffer[6] = 0xFF;&lt;br /&gt;
   buffer[7] = 0x33;&lt;br /&gt;
   buffer[8] = 0x1F;&lt;br /&gt;
   buffer[9] = 0xF8;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   unsigned char led2=0x10;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(0x10, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 allumée quand le cc430 est sous tension&lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chann);&lt;br /&gt;
     send_cmd();&lt;br /&gt;
     if(chann&amp;gt;=20) //866-870&lt;br /&gt;
     {&lt;br /&gt;
       chann=0x00;&lt;br /&gt;
       led2=led2^0x10;&lt;br /&gt;
       set_color(0x10, 0x00, 0x00, led2, 0x00, 0x00); //led2 s'allume toutes les 2 rampes&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {&lt;br /&gt;
       chann++;&lt;br /&gt;
     }&lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Fonction WritePATable :&lt;br /&gt;
&lt;br /&gt;
 void WritePATable(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char valueRead = 0;&lt;br /&gt;
   &lt;br /&gt;
   //while(valueRead != 0x03)    // Output Power: -30  [dBm]&lt;br /&gt;
   //while(valueRead != 0x25)    // Output Power: -12  [dBm]&lt;br /&gt;
   //while(valueRead != 0x2D)    // Output Power: -6   [dBm]&lt;br /&gt;
   //while(valueRead != 0x8D)    // Output Power:  0   [dBm]&lt;br /&gt;
   //while(valueRead != 0xC3)    // Output Power:  10  [dBm]&lt;br /&gt;
   while(valueRead != 0xC0)    // Output Power:  Maximum  [dBm]&lt;br /&gt;
   //while(valueRead != 0xC6)    // Output Power(default):  8.8  [dBm]&lt;br /&gt;
   {&lt;br /&gt;
     /* Write the power output to the PA_TABLE and verify the write operation.  */&lt;br /&gt;
     unsigned char i = 0; &lt;br /&gt;
 &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
     //RF1AINSTRW = 0x7E03; // PA Table write (burst), Output Power: -30  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E25; // PA Table write (burst), Output Power: -12  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E2D; // PA Table write (burst), Output Power: -6   [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E8D; // PA Table write (burst), Output Power: 0    [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC3; // PA Table write (burst), Output Power: 10   [dBm]&lt;br /&gt;
     RF1AINSTRW = 0x7EC0; // PA Table write (burst), Output Power: Maximum  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC6; // PA Table write (burst), Output Power(default):  8.8  [dBm]&lt;br /&gt;
     &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
       RF1AINSTR1B = RF_PATABRD;                 // -miguel read &amp;amp; write&lt;br /&gt;
     &lt;br /&gt;
     // Traverse PATABLE pointers to read &lt;br /&gt;
     for (i = 0; i &amp;lt; 7; i++)&lt;br /&gt;
     {&lt;br /&gt;
       while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
       valueRead  = RF1ADOUT1B;     &lt;br /&gt;
     }&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
     valueRead  = RF1ADOUTB;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 10'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[03/04/17 - 09/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission étant trop faible pour brouiller la communication entre les 2 modules LoRa, nous avons décidé de changer l'antenne de la carte. Il a fallu couper l'antenne patch à l'aide d'une scie afin de souder un connecteur SMA.&lt;br /&gt;
[[Fichier:cc430antenne.png]]&lt;br /&gt;
*Grâce à cette nouvelle antenne, la communication peut maintenant être brouillée à une puissance de 10dBm (contre 6 auparavant). Mais il faut que la carte reste relativement proche d'un des modules.&lt;br /&gt;
*Pour réussir le brouillage quand les modules LoRa sont à leur puissance maximale (14dBm), il faudra sûrement ajouter un amplificateur entre la sortie de la carte et son antenne.&lt;br /&gt;
*Nous avons codé la fonction de scan en c et l'avons incorporé dans le main &lt;br /&gt;
**Cette fonction autorise le module à entrer en mode RX pour recevoir les communications. Elle incrémente ensuite le canal pour parcourir la plage 863-870MHz afin de détecter une communication. Toute les incrémentations, la variable rssi récupère la valeur contenue dans le registre qui correspond à la valeur du RSSI. Cette valeur étant en binaire complément 2, elle est convertie en dBm et placée dans un entier. Enfin, si cette valeur est supérieur à la valeur maximale déjà mesuré ou à un palier prédéfini (ici 0dBm), on stocke le numéro du canal correspondant qui sera utilisé dans le main par la suite.&lt;br /&gt;
&lt;br /&gt;
fonction de scan :&lt;br /&gt;
 void freq_scan(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char rssi;&lt;br /&gt;
   long rssi_dbm;&lt;br /&gt;
   unsigned char chan_scan=START_FREQ_CHAN;&lt;br /&gt;
   long rssi_max=0; //scan will take communication above 0dbm&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, led2, 0x00); //led2 blue while scanning&lt;br /&gt;
   &lt;br /&gt;
   ChangeChannel(chan_scan);&lt;br /&gt;
   ReceiveOn();    //enable RX&lt;br /&gt;
   while((Strobe(RF_SNOP) &amp;amp; 0x70) != 0x10); //make sure RX is ready&lt;br /&gt;
   while(chan_scan&amp;lt;STOP_FREQ_CHAN)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chan_scan);&lt;br /&gt;
     __delay_cycles(DELAY_RSSI);       //wait for rssi to be updated&lt;br /&gt;
     rssi = ReadSingleReg(RSSI);  //define in cc430f5137.h RSSI=0x34 corresponding to addr of rssi value&lt;br /&gt;
     if (rssi &amp;gt;= 128) &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (long)((long)( rssi - 256) / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     else &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (rssi / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     if(rssi_dbm&amp;gt;rssi_max)&lt;br /&gt;
     {&lt;br /&gt;
       rssi_max=rssi_dbm;&lt;br /&gt;
       chan_jam=chan_scan-10; //start jamming 2Mhz below max dbm received&lt;br /&gt;
     }&lt;br /&gt;
     chan_scan++;&lt;br /&gt;
     Strobe( RF_SFRX); //flush the RX FIFO&lt;br /&gt;
   }&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
nouveau main :&lt;br /&gt;
&lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chan_main=0x00;&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 on if cc430 powered&lt;br /&gt;
   int i;&lt;br /&gt;
   &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     freq_scan();&lt;br /&gt;
     ReceiveOff();&lt;br /&gt;
     chan_main=chan_jam;&lt;br /&gt;
     if (chan_main != 0)  //jam only if a communication xas detected with freq_scan&lt;br /&gt;
     {&lt;br /&gt;
       for(i=0 ; i&amp;lt;(20*NUM_JAM_RAMP) ; i++) //ramp start 2Mhz below chan_jam and stop 2Mhz above&lt;br /&gt;
       {&lt;br /&gt;
         ChangeChannel(chan_main);&lt;br /&gt;
         if (chan_main&amp;gt;= (chan_jam+20))&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main=0x00;&lt;br /&gt;
           led2=led2^0x10;&lt;br /&gt;
           set_color(led1, 0x00, 0x00, led2, 0x00, 0x00); //led2 blink red every two ramp of jamming&lt;br /&gt;
         }&lt;br /&gt;
         else&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main++;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     chan_main=0x00;  &lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
header :&lt;br /&gt;
 #define DELAY 100 //300us  &lt;br /&gt;
 #define DELAY_RSSI 10 //30us&lt;br /&gt;
 &lt;br /&gt;
 #define START_FREQ_CHAN 15&lt;br /&gt;
 #define STOP_FREQ_CHAN 50     //scanning 863-870Mhz with 200khz steps&lt;br /&gt;
 #define RSSI_OFFSET 74 //cf datasheet&lt;br /&gt;
 &lt;br /&gt;
 #define NUM_JAM_RAMP 50&lt;br /&gt;
 &lt;br /&gt;
 unsigned char chan_jam=0x00;&lt;br /&gt;
 unsigned char led2=0x10;&lt;br /&gt;
 unsigned char led1=0x10;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Après les vacances'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Fichiers Rendus'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[[Fichier:code_fonction_1.zip]]&lt;br /&gt;
*[[Fichier:code_fonction_2.zip]]&lt;br /&gt;
*[[Fichier:compte_rendu.pdf]]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Bibliographie'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[http://www.ti.com/ ti.com]&lt;br /&gt;
*[https://www.mbed.com/en/ mbed.com]&lt;br /&gt;
*[http://www.semtech.com/ semtech.com]&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42436</id>
		<title>IMA4 2016/2017 P32</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42436"/>
				<updated>2017-05-18T11:30:40Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Fichiers Rendus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Cahier des charges'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;Présentation générale du projet&amp;lt;/span&amp;gt;=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Contexte&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'expansion de l'utilisation des objets connectés permet de nos jours d'accéder à des données ou de contrôler aisément d'autres systèmes connectés à distance. Les objets connectés sont de plus en plus déployés mais leur sécurité n'est pas toujours testée. Par conséquent, de nombreuses informations sensibles sont susceptibles de transiter en permanence par le biais de multiples plages de fréquences. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ceci amène donc un questionnement sur la sécurité des transferts de données entre la multitude d'objets connectés actuellement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Objectif du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de réaliser un brouilleur d'ondes radiofréquence dans la bande des 868 MHz capable de bloquer les communications LoRa.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Description du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
A l'aboutissement du projet, nous devrions être capable de détecter une communication LoRa dans la bande des 868 MHz, et de la brouiller elle seule, sans incidence sur les autres communications sur d'autres fréquences du réseau LoRa.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous devrons réaliser un montage réalisant un brouillage sur la plage 863-870Mhz afin d'empêcher toute communication LoRa, en envoyant du bruit électronique sur toute la plage de fréquence.&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet, nous perfectionnerons ce montage pour qu'il puisse détecter une communication LoRa à une fréquence donnée (grâce au &amp;quot;join-request message&amp;quot; de 18 octets envoyés par le end-point/node, ou bien grâce aux informations données dans le préambule des paquets), afin d'envoyer des données erronées et de bloquer uniquement cette communication.&lt;br /&gt;
&lt;br /&gt;
Si le temps et le budget le permettent, nous pourrons aussi être amenés à brouiller la plage de fréquences autour des 433 MHz (aussi utilisé par le réseau LoRa).&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Choix techniques : matériel et logiciel&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser ce système, nous allons utiliser un microcontrôleur cc430 muni d'un transceiver cc1101, d'un récepteur LoRa(868MHz) communicant via protocole SPI avec le microcontrôleur, 2 antennes, une batterie, quelques LEDs.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Calendrier prévisionnel'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Liste des tâches à effectuer&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
# Documentation sur le réseau LoRa&lt;br /&gt;
##moyen de transmission&lt;br /&gt;
##format de modulation&lt;br /&gt;
##trame des paquets&lt;br /&gt;
# Réalisation du premier montage brouillant toute la plage&lt;br /&gt;
##contrôler l'émetteur RF du cc430&lt;br /&gt;
##programmer un bruitage sur la plage 863-870MHz&lt;br /&gt;
##test et optimisation&lt;br /&gt;
# Ajout d'un récepteur LoRa pour détecter et brouiller une seule communication&lt;br /&gt;
##contrôler le récepteur LoRa avec le cc430 par protocole spi&lt;br /&gt;
##détecter une communication LoRa à une fréquence donnée&lt;br /&gt;
##contrôler l'émetteur RF afin de brouiller cette communication de manière brutale&lt;br /&gt;
##brouiller cette communication en tentant de changer les données du paquet &lt;br /&gt;
##test et optimisation&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Calendrier&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
''[[Avant le 19/12/16]]'' - Élaboration du Cahier des charges et remplissage du Wiki&lt;br /&gt;
&lt;br /&gt;
''[[Avant fin Janvier]]'' - Complément du Cahier des Charges et listage du matériel nécessaire pour le projet&lt;br /&gt;
&lt;br /&gt;
''[[Répartition sur le S8]]'' - 120h: Réalisation de la 1ere fonction (45h) / Réalisation de la 2e fonction (45h) / Test et débuguage (30h)&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Feuille d'heures'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Cahier des charges / Wiki&lt;br /&gt;
| 4h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3,5h&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|1h&lt;br /&gt;
|1h&lt;br /&gt;
|&lt;br /&gt;
|1h&lt;br /&gt;
|0,5h&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le réseau LoRa&lt;br /&gt;
| &lt;br /&gt;
| 6h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 1ère fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1,5h&lt;br /&gt;
|6h&lt;br /&gt;
|6h&lt;br /&gt;
|4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 2ème fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Tests et mesures&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Modification de la carte&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Avancement du Projet'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Phase préparatoire'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[Jeu 15/12/16]]'' &lt;br /&gt;
*Rendez-vous de mise au point du cahier des charges avec les trois encadrants (M. Boé, M. Vantroys et M. Redon)&lt;br /&gt;
*Elaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 1'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[23/01/17 - 29/01/17]]'' &lt;br /&gt;
*Revue du Cahier des Charges&lt;br /&gt;
*Recherches approfondies sur les modes de transmissions du réseau LoRa&lt;br /&gt;
*Recherche de matériel&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 2'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[30/01/17 - 05/02/17]]''  &lt;br /&gt;
*Précisions sur le cahier des charges&lt;br /&gt;
*Listage du matériel&lt;br /&gt;
*Recherche et détermination de solutions technologiques possibles pour les fonctions demandées&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 3'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[06/02/17 - 12/02/17]]''&lt;br /&gt;
*validation du matériel&lt;br /&gt;
Nous allons utiliser un cc430f5137 (MCU+RF) monté sur une carte optimisée pour les communications autours de 868Mhz.&lt;br /&gt;
Nous pouvons commencer à étudier son fonctionnement, particulièrement celui du module RF (cc1101).&lt;br /&gt;
Nous avons aussi récupéré des exemples de code en c sur le site de Texas Instrument et vu l'utilisation de ces codes sur un projet IMA5 de l'an passé.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 4'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/02/17 - 19/02/17]]''&lt;br /&gt;
*Recherche de solutions pour répondre à la 1ère fonction (brouiller la plage 863-870Mhz).&lt;br /&gt;
&lt;br /&gt;
Après une lecture approfondie de la datasheet du module RF du cc430, nous avons choisi d'utiliser la fréquence de base du module (pouvant être définie grâce aux registres) couplée au registre CHANNR. Cela nous permettra de modifier plus facilement la fréquence de la porteuse, en suivant la formule suivante : [[Fichier:rampe.png]].&lt;br /&gt;
&lt;br /&gt;
Nous pourrons alors balayer la plage de fréquence en changeant la valeur de CHANNR.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 5'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[27/02/17 - 05/03/17]]''&lt;br /&gt;
&lt;br /&gt;
A l'aide de la datasheet du cc1101 ([http://www.ti.com/lit/ds/symlink/cc1101.pdf datasheet_cc1101] pages : 70 à 95), nous avons défini les registres du module RF de la manière suivante (sachant que la fréquence du quartz est de 26MHz, soit Fxosc=26MHz) :&lt;br /&gt;
&lt;br /&gt;
*La fréquence de base a été fixée à 862,999MHz en suivant la formule donnée dans la data sheet[[Fichier:carrier_formula.png]]&lt;br /&gt;
ce qui nous a donné les valeurs FREQ2=0x21, FREQ1=0x31 et FREQ0=0x3A (FREQ=2 175 290)&lt;br /&gt;
&lt;br /&gt;
*Nous avons suivi la formule [[Fichier:chanspace_formula.png]] afin d'avoir un espacement entre les cannaux d'environ 100Khz&lt;br /&gt;
ce qui nous a donné  MDMCFG1=0x02 (CHANSPC_E=2) et MDMCFG0=0x00(CHANSPC_M=0)&lt;br /&gt;
&lt;br /&gt;
*Pour le moment, nous avons choisi le mode de modulation AM, nous avons donc initialisé les registres MDMCFG2=0x30 (mode ASK/OOK) et FREND0=0x50(patable=0 donnant le mode ASK)&lt;br /&gt;
&lt;br /&gt;
*Nous avons créé une bibliothèque RFconfig.h regroupant les valeurs de tous les registres :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal and high VCO recommended&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz stop at 870&lt;br /&gt;
 //FREQ=00 10 00 01 00 11 00 01 00 11 10 10&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //CHANNR from 0 to 69 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 //0 (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x0F //default (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x31 //868Mhz&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0x3A /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x22 //default (data rate)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x30 // ASK/OOK,no sync-word&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x02 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0x00 //chanspc_m=0&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 //default (no effet on ASK/OOK mode)&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset not used)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x03 //default (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x40 //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x50 //patable=0 -&amp;gt; ASK&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosen&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x0B //default&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 6'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[06/03/17 - 12/03/17]]''&lt;br /&gt;
*Nous avons préparé un premier code réalisant une rampe sur la plage 863-870MHz. Ce code est basé sur une boucle infinie qui incrémente le registre chann de 0 à 69 (pour passer de 863 à 870Mhz) et envoie des paquets 0xFF grâce aux fonctions ChangeChannel(chann) et send_comand().&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		1	// maximum size of data sent by rf&lt;br /&gt;
 &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 10000&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFF;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init();&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);	 &lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
     {&lt;br /&gt;
       ChangeChannel(chann);&lt;br /&gt;
       send_cmd();&lt;br /&gt;
       if(chann&amp;gt;=69) &lt;br /&gt;
 	{&lt;br /&gt;
 	  chann=0x00;&lt;br /&gt;
 	}&lt;br /&gt;
       else&lt;br /&gt;
 	{&lt;br /&gt;
 	  chann++;&lt;br /&gt;
 	}&lt;br /&gt;
       __delay_cycles(DELAY);&lt;br /&gt;
     }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Après quelques corrections du code, nous avons pu le compiler grâce au Makefile&lt;br /&gt;
&lt;br /&gt;
*Avec la commande (exécutée en root) et le montage suivants, nous avons upload le main sur le cc430&lt;br /&gt;
 mspdebug rf2500 &amp;quot;prog main&amp;quot;&lt;br /&gt;
[[Fichier:montage001.png]]&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 7'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/03/17 - 19/03/17]]''&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé les premiers tests sur l'analyseur de spectre afin de vérifier que le code fonctionne bien.&lt;br /&gt;
&lt;br /&gt;
*Dans un premier temps, nous avons essayé une fréquence fixe pour voir la calibration du cc430.&lt;br /&gt;
[[Fichier:862.png]]&lt;br /&gt;
Avec un exemple à 862Mhz, on remarque bien que les registres ont bien été initialisés et que la carte émet à la fréquence demandée.&lt;br /&gt;
&lt;br /&gt;
*Ensuite, nous avons testé le code effectuant le balayage sur la plage de fréquence 863-870Mhz, en augmentant le sweep time de l'analyseur de spectre pour voir les différentes fréquences auxquelles la carte émet.&lt;br /&gt;
[[Fichier:sweep.png]]&lt;br /&gt;
En observant de 861 à 872 Mhz sur l'écran de l'analyseur, on peut voir que le code effectue bien le balayage.&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission de la carte étant faible, nous avons essayé de l'augmenter en modifiant certains registres notamment ceux que l'on peut optimiser à l'aide du logiciel smart RF studio. Cependant, nous pensons qu'il faudra changer l'antenne patch actuelle de la carte pour une antenne connectée en SMA.&lt;br /&gt;
&lt;br /&gt;
*Nous avons aussi tenté de brouiller les communications d'autres groupes de projet utilisant des modules LoRa. Ces derniers étant configurés à 433Mhz, nous avons dû changer la fréquence de notre carte. Le brouillage ne fonctionnait pas mais notre carte étant optimisée pour une émission autour de 868Mhz, les résultats n'étaient pas pertinents.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 8'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[20/03/17 - 26/03/17]]'' &lt;br /&gt;
&lt;br /&gt;
*Nous avons emprunté à M. Vantroys 3 modules SX1276 montés sur des cartes NUCLEO-F401RE afin de pouvoir tester notre carte sur une communication LoRa à 868Mhz&lt;br /&gt;
[[Fichier:lorambed.png]]&lt;br /&gt;
*Le code utilisé pour le test a été récupéré sur le forum des développeurs du site mbed.com. C'est un code &amp;quot;ping pong&amp;quot; effectuant une communication continue entre deux modules LoRa à une fréquence de 868Mhz. Il nous a suffit d'utiliser le compilateur du site (qui regroupe toutes les bibliothèques nécessaires) en indiquant que la carte utilisée est une F401RE pour que le binaire produit soit compatible. La carte NUCLEO étant reconnue comme un système de fichier par Linux, pour la flasher il faut la monter en usb à l'aide des commandes fdisk et mount puis de copier le binaire dedans avec la commande cp.&lt;br /&gt;
[[Fichier:lora pingpong.zip]]&lt;br /&gt;
*Une fois les modules NUCLEO flashés, la communication LoRa est établie dès que deux modules sont alimentés. Nous avons donc branché en USB deux modules sur deux machines différentes afin d'observer la communication sur des terminaux. La communication se fait bien, l'un envoie &amp;quot;ping&amp;quot; tandis que l'autre envoie &amp;quot;pong&amp;quot; lorsqu'il reçoit &amp;quot;ping&amp;quot;. Malheureusement, comme nous l'avions prédit, notre carte a une puissance d'émission trop faible et ne parvient pas à brouiller efficacement.&lt;br /&gt;
*Les modules peuvent aussi communiquer en modulation FSK, dans ce cas notre système arrive à effectuer le brouillage. Néanmoins, il serait plus intéressant de parvenir à brouiller la communication LoRa.&lt;br /&gt;
*Après plusieurs changements dans le code du cc430, n'ayant pas de résultats positifs, nous avons diminué la puissance d'émission des modules LoRa en changeant un header dans le code lora_pingpong.cpp. En passant cette puissance de 14dBm à 6dBm, nous sommes parvenus à brouiller la communication entre les deux modules LoRa.&lt;br /&gt;
&lt;br /&gt;
*En parallèle, nous avons commencé à rechercher des solutions pour la fonction 2. Un pseudo code est donné sur le site ti.com ([https://www.ti.com/lit/an/swra315/swra315.pdf pseudo_code_frequency_scanning]) qui permet de faire un scan sur une plage de fréquence et de récupérer la fréquence ou le signal reçu est le plus fort. Ce code pourra être écrit en C puis incorporé dans notre main pour détecter une communication et la brouiller.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 9'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[27/03/17 - 02/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*Même si le brouillage ne s’effectue qu'à puissance réduite, nous avons cherché à l'optimiser&lt;br /&gt;
**Nous avons premièrement réalisé que le mode de modulation choisi au départ (ASK) n'était pas adapté au brouillage d'une communication LoRa. Nous avons donc essayé le mode GFSK qui est le plus proche du format de modulation du réseau LoRa. Nous avons aussi essayé les modes 2FSK et 4FSK qui sont relativement proches du GFSK. Nous en avons conclu que le mode de modulation à utiliser est GFSK (ce mode fonctionne aussi pour brouiller la modulation FSK)&lt;br /&gt;
**Ensuite, nous avons réduit la plage de fréquence balayée par le cc430 afin de voir si il y avait une influence sur le brouillage. Nous avons remarqué que le brouillage était plus efficace pour un balayage de 866 à 870 Mhz (au lieu de 863-870 initialement)&lt;br /&gt;
**Dans le même ordre d'idée, nous avons décidé de réduire le nombre d'incrémentations du registre CHANNR afin d'augmenter la rapidité du balayage. Pour ce faire, nous avons augmenté la taille de chaque canal, passant de 100kHz à 200kHz&lt;br /&gt;
**La puissance d'émission de la carte a été changée dans la fonction WritePATable (appelée par rfinit() dans le main), afin d'être maximale (12dBm)&lt;br /&gt;
**Enfin, nous avons augmenté le nombre de paquets à envoyer&lt;br /&gt;
&lt;br /&gt;
Nouvelle bibliothèque RFconfig.h :&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //high VCO FSCAL2=0x2A&lt;br /&gt;
 &lt;br /&gt;
 //867 : 21589A&lt;br /&gt;
 //866 : 214EC2&lt;br /&gt;
 //865 : 2144EA&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 //for 433Mhz : freq=0x10A766 and low vco (FSCAL2=0x0A)&lt;br /&gt;
 //432 : 0x109D8E&lt;br /&gt;
 &lt;br /&gt;
 //gfsk, 866, chann space ~200k, high vco currently&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 // (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x06 //default 0f (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x4E //866&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0xC2 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x83 // data rate&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x13 // GFSK &lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x22 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0xF8 //chanspc_m=248&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 // default 47khz deviation&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset for demodulation)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x07 // (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x77 //&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x10 //patable=0 (useless for gfsk) &lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosed&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x09 //&lt;br /&gt;
&lt;br /&gt;
Nouveau main.c : &lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;led_commands.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		10	// maximum size of data sent by rf&lt;br /&gt;
  &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 5000 //15ms  &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Any other commands are for RSSI measurement&lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFD;&lt;br /&gt;
   buffer[1] = 0xAA;&lt;br /&gt;
   buffer[2] = 0xFF;&lt;br /&gt;
   buffer[3] = 0x11;&lt;br /&gt;
   buffer[4] = 0xFF;&lt;br /&gt;
   buffer[5] = 0x66;&lt;br /&gt;
   buffer[6] = 0xFF;&lt;br /&gt;
   buffer[7] = 0x33;&lt;br /&gt;
   buffer[8] = 0x1F;&lt;br /&gt;
   buffer[9] = 0xF8;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   unsigned char led2=0x10;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(0x10, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 allumée quand le cc430 est sous tension&lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chann);&lt;br /&gt;
     send_cmd();&lt;br /&gt;
     if(chann&amp;gt;=20) //866-870&lt;br /&gt;
     {&lt;br /&gt;
       chann=0x00;&lt;br /&gt;
       led2=led2^0x10;&lt;br /&gt;
       set_color(0x10, 0x00, 0x00, led2, 0x00, 0x00); //led2 s'allume toutes les 2 rampes&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {&lt;br /&gt;
       chann++;&lt;br /&gt;
     }&lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Fonction WritePATable :&lt;br /&gt;
&lt;br /&gt;
 void WritePATable(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char valueRead = 0;&lt;br /&gt;
   &lt;br /&gt;
   //while(valueRead != 0x03)    // Output Power: -30  [dBm]&lt;br /&gt;
   //while(valueRead != 0x25)    // Output Power: -12  [dBm]&lt;br /&gt;
   //while(valueRead != 0x2D)    // Output Power: -6   [dBm]&lt;br /&gt;
   //while(valueRead != 0x8D)    // Output Power:  0   [dBm]&lt;br /&gt;
   //while(valueRead != 0xC3)    // Output Power:  10  [dBm]&lt;br /&gt;
   while(valueRead != 0xC0)    // Output Power:  Maximum  [dBm]&lt;br /&gt;
   //while(valueRead != 0xC6)    // Output Power(default):  8.8  [dBm]&lt;br /&gt;
   {&lt;br /&gt;
     /* Write the power output to the PA_TABLE and verify the write operation.  */&lt;br /&gt;
     unsigned char i = 0; &lt;br /&gt;
 &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
     //RF1AINSTRW = 0x7E03; // PA Table write (burst), Output Power: -30  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E25; // PA Table write (burst), Output Power: -12  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E2D; // PA Table write (burst), Output Power: -6   [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E8D; // PA Table write (burst), Output Power: 0    [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC3; // PA Table write (burst), Output Power: 10   [dBm]&lt;br /&gt;
     RF1AINSTRW = 0x7EC0; // PA Table write (burst), Output Power: Maximum  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC6; // PA Table write (burst), Output Power(default):  8.8  [dBm]&lt;br /&gt;
     &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
       RF1AINSTR1B = RF_PATABRD;                 // -miguel read &amp;amp; write&lt;br /&gt;
     &lt;br /&gt;
     // Traverse PATABLE pointers to read &lt;br /&gt;
     for (i = 0; i &amp;lt; 7; i++)&lt;br /&gt;
     {&lt;br /&gt;
       while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
       valueRead  = RF1ADOUT1B;     &lt;br /&gt;
     }&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
     valueRead  = RF1ADOUTB;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 10'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[03/04/17 - 09/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission étant trop faible pour brouiller la communication entre les 2 modules LoRa, nous avons décidé de changer l'antenne de la carte. Il a fallu couper l'antenne patch à l'aide d'une scie afin de souder un connecteur SMA.&lt;br /&gt;
[[Fichier:cc430antenne.png]]&lt;br /&gt;
*Grâce à cette nouvelle antenne, la communication peut maintenant être brouillée à une puissance de 10dBm (contre 6 auparavant). Mais il faut que la carte reste relativement proche d'un des modules.&lt;br /&gt;
*Pour réussir le brouillage quand les modules LoRa sont à leur puissance maximale (14dBm), il faudra sûrement ajouter un amplificateur entre la sortie de la carte et son antenne.&lt;br /&gt;
*Nous avons codé la fonction de scan en c et l'avons incorporé dans le main &lt;br /&gt;
**Cette fonction autorise le module à entrer en mode RX pour recevoir les communications. Elle incrémente ensuite le canal pour parcourir la plage 863-870MHz afin de détecter une communication. Toute les incrémentations, la variable rssi récupère la valeur contenue dans le registre qui correspond à la valeur du RSSI. Cette valeur étant en binaire complément 2, elle est convertie en dBm et placée dans un entier. Enfin, si cette valeur est supérieur à la valeur maximale déjà mesuré ou à un palier prédéfini (ici 0dBm), on stocke le numéro du canal correspondant qui sera utilisé dans le main par la suite.&lt;br /&gt;
&lt;br /&gt;
fonction de scan :&lt;br /&gt;
 void freq_scan(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char rssi;&lt;br /&gt;
   long rssi_dbm;&lt;br /&gt;
   unsigned char chan_scan=START_FREQ_CHAN;&lt;br /&gt;
   long rssi_max=0; //scan will take communication above 0dbm&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, led2, 0x00); //led2 blue while scanning&lt;br /&gt;
   &lt;br /&gt;
   ChangeChannel(chan_scan);&lt;br /&gt;
   ReceiveOn();    //enable RX&lt;br /&gt;
   while((Strobe(RF_SNOP) &amp;amp; 0x70) != 0x10); //make sure RX is ready&lt;br /&gt;
   while(chan_scan&amp;lt;STOP_FREQ_CHAN)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chan_scan);&lt;br /&gt;
     __delay_cycles(DELAY_RSSI);       //wait for rssi to be updated&lt;br /&gt;
     rssi = ReadSingleReg(RSSI);  //define in cc430f5137.h RSSI=0x34 corresponding to addr of rssi value&lt;br /&gt;
     if (rssi &amp;gt;= 128) &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (long)((long)( rssi - 256) / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     else &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (rssi / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     if(rssi_dbm&amp;gt;rssi_max)&lt;br /&gt;
     {&lt;br /&gt;
       rssi_max=rssi_dbm;&lt;br /&gt;
       chan_jam=chan_scan-10; //start jamming 2Mhz below max dbm received&lt;br /&gt;
     }&lt;br /&gt;
     chan_scan++;&lt;br /&gt;
     Strobe( RF_SFRX); //flush the RX FIFO&lt;br /&gt;
   }&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
nouveau main :&lt;br /&gt;
&lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chan_main=0x00;&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 on if cc430 powered&lt;br /&gt;
   int i;&lt;br /&gt;
   &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     freq_scan();&lt;br /&gt;
     ReceiveOff();&lt;br /&gt;
     chan_main=chan_jam;&lt;br /&gt;
     if (chan_main != 0)  //jam only if a communication xas detected with freq_scan&lt;br /&gt;
     {&lt;br /&gt;
       for(i=0 ; i&amp;lt;(20*NUM_JAM_RAMP) ; i++) //ramp start 2Mhz below chan_jam and stop 2Mhz above&lt;br /&gt;
       {&lt;br /&gt;
         ChangeChannel(chan_main);&lt;br /&gt;
         if (chan_main&amp;gt;= (chan_jam+20))&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main=0x00;&lt;br /&gt;
           led2=led2^0x10;&lt;br /&gt;
           set_color(led1, 0x00, 0x00, led2, 0x00, 0x00); //led2 blink red every two ramp of jamming&lt;br /&gt;
         }&lt;br /&gt;
         else&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main++;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     chan_main=0x00;  &lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
header :&lt;br /&gt;
 #define DELAY 100 //300us  &lt;br /&gt;
 #define DELAY_RSSI 10 //30us&lt;br /&gt;
 &lt;br /&gt;
 #define START_FREQ_CHAN 15&lt;br /&gt;
 #define STOP_FREQ_CHAN 50     //scanning 863-870Mhz with 200khz steps&lt;br /&gt;
 #define RSSI_OFFSET 74 //cf datasheet&lt;br /&gt;
 &lt;br /&gt;
 #define NUM_JAM_RAMP 50&lt;br /&gt;
 &lt;br /&gt;
 unsigned char chan_jam=0x00;&lt;br /&gt;
 unsigned char led2=0x10;&lt;br /&gt;
 unsigned char led1=0x10;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Après les vacances'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Fichiers Rendus'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[[Fichier:code_fonction_1.zip]]&lt;br /&gt;
*[[Fichier:code_fonction_2.zip]]&lt;br /&gt;
*[[Fichier:compte_rendu.pdf]]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Bibliographie'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
[http://www.ti.com/ ti.com]&lt;br /&gt;
[https://www.mbed.com/en/ mbed.com]&lt;br /&gt;
[http://www.semtech.com/ semtech.com]&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42435</id>
		<title>IMA4 2016/2017 P32</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42435"/>
				<updated>2017-05-18T11:28:11Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Avancement du Projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Cahier des charges'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;Présentation générale du projet&amp;lt;/span&amp;gt;=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Contexte&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'expansion de l'utilisation des objets connectés permet de nos jours d'accéder à des données ou de contrôler aisément d'autres systèmes connectés à distance. Les objets connectés sont de plus en plus déployés mais leur sécurité n'est pas toujours testée. Par conséquent, de nombreuses informations sensibles sont susceptibles de transiter en permanence par le biais de multiples plages de fréquences. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ceci amène donc un questionnement sur la sécurité des transferts de données entre la multitude d'objets connectés actuellement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Objectif du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de réaliser un brouilleur d'ondes radiofréquence dans la bande des 868 MHz capable de bloquer les communications LoRa.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Description du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
A l'aboutissement du projet, nous devrions être capable de détecter une communication LoRa dans la bande des 868 MHz, et de la brouiller elle seule, sans incidence sur les autres communications sur d'autres fréquences du réseau LoRa.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous devrons réaliser un montage réalisant un brouillage sur la plage 863-870Mhz afin d'empêcher toute communication LoRa, en envoyant du bruit électronique sur toute la plage de fréquence.&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet, nous perfectionnerons ce montage pour qu'il puisse détecter une communication LoRa à une fréquence donnée (grâce au &amp;quot;join-request message&amp;quot; de 18 octets envoyés par le end-point/node, ou bien grâce aux informations données dans le préambule des paquets), afin d'envoyer des données erronées et de bloquer uniquement cette communication.&lt;br /&gt;
&lt;br /&gt;
Si le temps et le budget le permettent, nous pourrons aussi être amenés à brouiller la plage de fréquences autour des 433 MHz (aussi utilisé par le réseau LoRa).&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Choix techniques : matériel et logiciel&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser ce système, nous allons utiliser un microcontrôleur cc430 muni d'un transceiver cc1101, d'un récepteur LoRa(868MHz) communicant via protocole SPI avec le microcontrôleur, 2 antennes, une batterie, quelques LEDs.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Calendrier prévisionnel'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Liste des tâches à effectuer&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
# Documentation sur le réseau LoRa&lt;br /&gt;
##moyen de transmission&lt;br /&gt;
##format de modulation&lt;br /&gt;
##trame des paquets&lt;br /&gt;
# Réalisation du premier montage brouillant toute la plage&lt;br /&gt;
##contrôler l'émetteur RF du cc430&lt;br /&gt;
##programmer un bruitage sur la plage 863-870MHz&lt;br /&gt;
##test et optimisation&lt;br /&gt;
# Ajout d'un récepteur LoRa pour détecter et brouiller une seule communication&lt;br /&gt;
##contrôler le récepteur LoRa avec le cc430 par protocole spi&lt;br /&gt;
##détecter une communication LoRa à une fréquence donnée&lt;br /&gt;
##contrôler l'émetteur RF afin de brouiller cette communication de manière brutale&lt;br /&gt;
##brouiller cette communication en tentant de changer les données du paquet &lt;br /&gt;
##test et optimisation&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Calendrier&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
''[[Avant le 19/12/16]]'' - Élaboration du Cahier des charges et remplissage du Wiki&lt;br /&gt;
&lt;br /&gt;
''[[Avant fin Janvier]]'' - Complément du Cahier des Charges et listage du matériel nécessaire pour le projet&lt;br /&gt;
&lt;br /&gt;
''[[Répartition sur le S8]]'' - 120h: Réalisation de la 1ere fonction (45h) / Réalisation de la 2e fonction (45h) / Test et débuguage (30h)&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Feuille d'heures'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Cahier des charges / Wiki&lt;br /&gt;
| 4h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3,5h&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|1h&lt;br /&gt;
|1h&lt;br /&gt;
|&lt;br /&gt;
|1h&lt;br /&gt;
|0,5h&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le réseau LoRa&lt;br /&gt;
| &lt;br /&gt;
| 6h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 1ère fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1,5h&lt;br /&gt;
|6h&lt;br /&gt;
|6h&lt;br /&gt;
|4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 2ème fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Tests et mesures&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Modification de la carte&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Avancement du Projet'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Phase préparatoire'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[Jeu 15/12/16]]'' &lt;br /&gt;
*Rendez-vous de mise au point du cahier des charges avec les trois encadrants (M. Boé, M. Vantroys et M. Redon)&lt;br /&gt;
*Elaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 1'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[23/01/17 - 29/01/17]]'' &lt;br /&gt;
*Revue du Cahier des Charges&lt;br /&gt;
*Recherches approfondies sur les modes de transmissions du réseau LoRa&lt;br /&gt;
*Recherche de matériel&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 2'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[30/01/17 - 05/02/17]]''  &lt;br /&gt;
*Précisions sur le cahier des charges&lt;br /&gt;
*Listage du matériel&lt;br /&gt;
*Recherche et détermination de solutions technologiques possibles pour les fonctions demandées&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 3'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[06/02/17 - 12/02/17]]''&lt;br /&gt;
*validation du matériel&lt;br /&gt;
Nous allons utiliser un cc430f5137 (MCU+RF) monté sur une carte optimisée pour les communications autours de 868Mhz.&lt;br /&gt;
Nous pouvons commencer à étudier son fonctionnement, particulièrement celui du module RF (cc1101).&lt;br /&gt;
Nous avons aussi récupéré des exemples de code en c sur le site de Texas Instrument et vu l'utilisation de ces codes sur un projet IMA5 de l'an passé.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 4'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/02/17 - 19/02/17]]''&lt;br /&gt;
*Recherche de solutions pour répondre à la 1ère fonction (brouiller la plage 863-870Mhz).&lt;br /&gt;
&lt;br /&gt;
Après une lecture approfondie de la datasheet du module RF du cc430, nous avons choisi d'utiliser la fréquence de base du module (pouvant être définie grâce aux registres) couplée au registre CHANNR. Cela nous permettra de modifier plus facilement la fréquence de la porteuse, en suivant la formule suivante : [[Fichier:rampe.png]].&lt;br /&gt;
&lt;br /&gt;
Nous pourrons alors balayer la plage de fréquence en changeant la valeur de CHANNR.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 5'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[27/02/17 - 05/03/17]]''&lt;br /&gt;
&lt;br /&gt;
A l'aide de la datasheet du cc1101 ([http://www.ti.com/lit/ds/symlink/cc1101.pdf datasheet_cc1101] pages : 70 à 95), nous avons défini les registres du module RF de la manière suivante (sachant que la fréquence du quartz est de 26MHz, soit Fxosc=26MHz) :&lt;br /&gt;
&lt;br /&gt;
*La fréquence de base a été fixée à 862,999MHz en suivant la formule donnée dans la data sheet[[Fichier:carrier_formula.png]]&lt;br /&gt;
ce qui nous a donné les valeurs FREQ2=0x21, FREQ1=0x31 et FREQ0=0x3A (FREQ=2 175 290)&lt;br /&gt;
&lt;br /&gt;
*Nous avons suivi la formule [[Fichier:chanspace_formula.png]] afin d'avoir un espacement entre les cannaux d'environ 100Khz&lt;br /&gt;
ce qui nous a donné  MDMCFG1=0x02 (CHANSPC_E=2) et MDMCFG0=0x00(CHANSPC_M=0)&lt;br /&gt;
&lt;br /&gt;
*Pour le moment, nous avons choisi le mode de modulation AM, nous avons donc initialisé les registres MDMCFG2=0x30 (mode ASK/OOK) et FREND0=0x50(patable=0 donnant le mode ASK)&lt;br /&gt;
&lt;br /&gt;
*Nous avons créé une bibliothèque RFconfig.h regroupant les valeurs de tous les registres :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal and high VCO recommended&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz stop at 870&lt;br /&gt;
 //FREQ=00 10 00 01 00 11 00 01 00 11 10 10&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //CHANNR from 0 to 69 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 //0 (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x0F //default (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x31 //868Mhz&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0x3A /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x22 //default (data rate)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x30 // ASK/OOK,no sync-word&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x02 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0x00 //chanspc_m=0&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 //default (no effet on ASK/OOK mode)&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset not used)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x03 //default (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x40 //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x50 //patable=0 -&amp;gt; ASK&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosen&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x0B //default&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 6'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[06/03/17 - 12/03/17]]''&lt;br /&gt;
*Nous avons préparé un premier code réalisant une rampe sur la plage 863-870MHz. Ce code est basé sur une boucle infinie qui incrémente le registre chann de 0 à 69 (pour passer de 863 à 870Mhz) et envoie des paquets 0xFF grâce aux fonctions ChangeChannel(chann) et send_comand().&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		1	// maximum size of data sent by rf&lt;br /&gt;
 &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 10000&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFF;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init();&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);	 &lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
     {&lt;br /&gt;
       ChangeChannel(chann);&lt;br /&gt;
       send_cmd();&lt;br /&gt;
       if(chann&amp;gt;=69) &lt;br /&gt;
 	{&lt;br /&gt;
 	  chann=0x00;&lt;br /&gt;
 	}&lt;br /&gt;
       else&lt;br /&gt;
 	{&lt;br /&gt;
 	  chann++;&lt;br /&gt;
 	}&lt;br /&gt;
       __delay_cycles(DELAY);&lt;br /&gt;
     }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Après quelques corrections du code, nous avons pu le compiler grâce au Makefile&lt;br /&gt;
&lt;br /&gt;
*Avec la commande (exécutée en root) et le montage suivants, nous avons upload le main sur le cc430&lt;br /&gt;
 mspdebug rf2500 &amp;quot;prog main&amp;quot;&lt;br /&gt;
[[Fichier:montage001.png]]&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 7'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/03/17 - 19/03/17]]''&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé les premiers tests sur l'analyseur de spectre afin de vérifier que le code fonctionne bien.&lt;br /&gt;
&lt;br /&gt;
*Dans un premier temps, nous avons essayé une fréquence fixe pour voir la calibration du cc430.&lt;br /&gt;
[[Fichier:862.png]]&lt;br /&gt;
Avec un exemple à 862Mhz, on remarque bien que les registres ont bien été initialisés et que la carte émet à la fréquence demandée.&lt;br /&gt;
&lt;br /&gt;
*Ensuite, nous avons testé le code effectuant le balayage sur la plage de fréquence 863-870Mhz, en augmentant le sweep time de l'analyseur de spectre pour voir les différentes fréquences auxquelles la carte émet.&lt;br /&gt;
[[Fichier:sweep.png]]&lt;br /&gt;
En observant de 861 à 872 Mhz sur l'écran de l'analyseur, on peut voir que le code effectue bien le balayage.&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission de la carte étant faible, nous avons essayé de l'augmenter en modifiant certains registres notamment ceux que l'on peut optimiser à l'aide du logiciel smart RF studio. Cependant, nous pensons qu'il faudra changer l'antenne patch actuelle de la carte pour une antenne connectée en SMA.&lt;br /&gt;
&lt;br /&gt;
*Nous avons aussi tenté de brouiller les communications d'autres groupes de projet utilisant des modules LoRa. Ces derniers étant configurés à 433Mhz, nous avons dû changer la fréquence de notre carte. Le brouillage ne fonctionnait pas mais notre carte étant optimisée pour une émission autour de 868Mhz, les résultats n'étaient pas pertinents.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 8'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[20/03/17 - 26/03/17]]'' &lt;br /&gt;
&lt;br /&gt;
*Nous avons emprunté à M. Vantroys 3 modules SX1276 montés sur des cartes NUCLEO-F401RE afin de pouvoir tester notre carte sur une communication LoRa à 868Mhz&lt;br /&gt;
[[Fichier:lorambed.png]]&lt;br /&gt;
*Le code utilisé pour le test a été récupéré sur le forum des développeurs du site mbed.com. C'est un code &amp;quot;ping pong&amp;quot; effectuant une communication continue entre deux modules LoRa à une fréquence de 868Mhz. Il nous a suffit d'utiliser le compilateur du site (qui regroupe toutes les bibliothèques nécessaires) en indiquant que la carte utilisée est une F401RE pour que le binaire produit soit compatible. La carte NUCLEO étant reconnue comme un système de fichier par Linux, pour la flasher il faut la monter en usb à l'aide des commandes fdisk et mount puis de copier le binaire dedans avec la commande cp.&lt;br /&gt;
[[Fichier:lora pingpong.zip]]&lt;br /&gt;
*Une fois les modules NUCLEO flashés, la communication LoRa est établie dès que deux modules sont alimentés. Nous avons donc branché en USB deux modules sur deux machines différentes afin d'observer la communication sur des terminaux. La communication se fait bien, l'un envoie &amp;quot;ping&amp;quot; tandis que l'autre envoie &amp;quot;pong&amp;quot; lorsqu'il reçoit &amp;quot;ping&amp;quot;. Malheureusement, comme nous l'avions prédit, notre carte a une puissance d'émission trop faible et ne parvient pas à brouiller efficacement.&lt;br /&gt;
*Les modules peuvent aussi communiquer en modulation FSK, dans ce cas notre système arrive à effectuer le brouillage. Néanmoins, il serait plus intéressant de parvenir à brouiller la communication LoRa.&lt;br /&gt;
*Après plusieurs changements dans le code du cc430, n'ayant pas de résultats positifs, nous avons diminué la puissance d'émission des modules LoRa en changeant un header dans le code lora_pingpong.cpp. En passant cette puissance de 14dBm à 6dBm, nous sommes parvenus à brouiller la communication entre les deux modules LoRa.&lt;br /&gt;
&lt;br /&gt;
*En parallèle, nous avons commencé à rechercher des solutions pour la fonction 2. Un pseudo code est donné sur le site ti.com ([https://www.ti.com/lit/an/swra315/swra315.pdf pseudo_code_frequency_scanning]) qui permet de faire un scan sur une plage de fréquence et de récupérer la fréquence ou le signal reçu est le plus fort. Ce code pourra être écrit en C puis incorporé dans notre main pour détecter une communication et la brouiller.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 9'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[27/03/17 - 02/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*Même si le brouillage ne s’effectue qu'à puissance réduite, nous avons cherché à l'optimiser&lt;br /&gt;
**Nous avons premièrement réalisé que le mode de modulation choisi au départ (ASK) n'était pas adapté au brouillage d'une communication LoRa. Nous avons donc essayé le mode GFSK qui est le plus proche du format de modulation du réseau LoRa. Nous avons aussi essayé les modes 2FSK et 4FSK qui sont relativement proches du GFSK. Nous en avons conclu que le mode de modulation à utiliser est GFSK (ce mode fonctionne aussi pour brouiller la modulation FSK)&lt;br /&gt;
**Ensuite, nous avons réduit la plage de fréquence balayée par le cc430 afin de voir si il y avait une influence sur le brouillage. Nous avons remarqué que le brouillage était plus efficace pour un balayage de 866 à 870 Mhz (au lieu de 863-870 initialement)&lt;br /&gt;
**Dans le même ordre d'idée, nous avons décidé de réduire le nombre d'incrémentations du registre CHANNR afin d'augmenter la rapidité du balayage. Pour ce faire, nous avons augmenté la taille de chaque canal, passant de 100kHz à 200kHz&lt;br /&gt;
**La puissance d'émission de la carte a été changée dans la fonction WritePATable (appelée par rfinit() dans le main), afin d'être maximale (12dBm)&lt;br /&gt;
**Enfin, nous avons augmenté le nombre de paquets à envoyer&lt;br /&gt;
&lt;br /&gt;
Nouvelle bibliothèque RFconfig.h :&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //high VCO FSCAL2=0x2A&lt;br /&gt;
 &lt;br /&gt;
 //867 : 21589A&lt;br /&gt;
 //866 : 214EC2&lt;br /&gt;
 //865 : 2144EA&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 //for 433Mhz : freq=0x10A766 and low vco (FSCAL2=0x0A)&lt;br /&gt;
 //432 : 0x109D8E&lt;br /&gt;
 &lt;br /&gt;
 //gfsk, 866, chann space ~200k, high vco currently&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 // (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x06 //default 0f (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x4E //866&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0xC2 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x83 // data rate&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x13 // GFSK &lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x22 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0xF8 //chanspc_m=248&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 // default 47khz deviation&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset for demodulation)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x07 // (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x77 //&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x10 //patable=0 (useless for gfsk) &lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosed&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x09 //&lt;br /&gt;
&lt;br /&gt;
Nouveau main.c : &lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;led_commands.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		10	// maximum size of data sent by rf&lt;br /&gt;
  &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 5000 //15ms  &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Any other commands are for RSSI measurement&lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFD;&lt;br /&gt;
   buffer[1] = 0xAA;&lt;br /&gt;
   buffer[2] = 0xFF;&lt;br /&gt;
   buffer[3] = 0x11;&lt;br /&gt;
   buffer[4] = 0xFF;&lt;br /&gt;
   buffer[5] = 0x66;&lt;br /&gt;
   buffer[6] = 0xFF;&lt;br /&gt;
   buffer[7] = 0x33;&lt;br /&gt;
   buffer[8] = 0x1F;&lt;br /&gt;
   buffer[9] = 0xF8;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   unsigned char led2=0x10;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(0x10, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 allumée quand le cc430 est sous tension&lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chann);&lt;br /&gt;
     send_cmd();&lt;br /&gt;
     if(chann&amp;gt;=20) //866-870&lt;br /&gt;
     {&lt;br /&gt;
       chann=0x00;&lt;br /&gt;
       led2=led2^0x10;&lt;br /&gt;
       set_color(0x10, 0x00, 0x00, led2, 0x00, 0x00); //led2 s'allume toutes les 2 rampes&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {&lt;br /&gt;
       chann++;&lt;br /&gt;
     }&lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Fonction WritePATable :&lt;br /&gt;
&lt;br /&gt;
 void WritePATable(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char valueRead = 0;&lt;br /&gt;
   &lt;br /&gt;
   //while(valueRead != 0x03)    // Output Power: -30  [dBm]&lt;br /&gt;
   //while(valueRead != 0x25)    // Output Power: -12  [dBm]&lt;br /&gt;
   //while(valueRead != 0x2D)    // Output Power: -6   [dBm]&lt;br /&gt;
   //while(valueRead != 0x8D)    // Output Power:  0   [dBm]&lt;br /&gt;
   //while(valueRead != 0xC3)    // Output Power:  10  [dBm]&lt;br /&gt;
   while(valueRead != 0xC0)    // Output Power:  Maximum  [dBm]&lt;br /&gt;
   //while(valueRead != 0xC6)    // Output Power(default):  8.8  [dBm]&lt;br /&gt;
   {&lt;br /&gt;
     /* Write the power output to the PA_TABLE and verify the write operation.  */&lt;br /&gt;
     unsigned char i = 0; &lt;br /&gt;
 &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
     //RF1AINSTRW = 0x7E03; // PA Table write (burst), Output Power: -30  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E25; // PA Table write (burst), Output Power: -12  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E2D; // PA Table write (burst), Output Power: -6   [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E8D; // PA Table write (burst), Output Power: 0    [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC3; // PA Table write (burst), Output Power: 10   [dBm]&lt;br /&gt;
     RF1AINSTRW = 0x7EC0; // PA Table write (burst), Output Power: Maximum  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC6; // PA Table write (burst), Output Power(default):  8.8  [dBm]&lt;br /&gt;
     &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
       RF1AINSTR1B = RF_PATABRD;                 // -miguel read &amp;amp; write&lt;br /&gt;
     &lt;br /&gt;
     // Traverse PATABLE pointers to read &lt;br /&gt;
     for (i = 0; i &amp;lt; 7; i++)&lt;br /&gt;
     {&lt;br /&gt;
       while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
       valueRead  = RF1ADOUT1B;     &lt;br /&gt;
     }&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
     valueRead  = RF1ADOUTB;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 10'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[03/04/17 - 09/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission étant trop faible pour brouiller la communication entre les 2 modules LoRa, nous avons décidé de changer l'antenne de la carte. Il a fallu couper l'antenne patch à l'aide d'une scie afin de souder un connecteur SMA.&lt;br /&gt;
[[Fichier:cc430antenne.png]]&lt;br /&gt;
*Grâce à cette nouvelle antenne, la communication peut maintenant être brouillée à une puissance de 10dBm (contre 6 auparavant). Mais il faut que la carte reste relativement proche d'un des modules.&lt;br /&gt;
*Pour réussir le brouillage quand les modules LoRa sont à leur puissance maximale (14dBm), il faudra sûrement ajouter un amplificateur entre la sortie de la carte et son antenne.&lt;br /&gt;
*Nous avons codé la fonction de scan en c et l'avons incorporé dans le main &lt;br /&gt;
**Cette fonction autorise le module à entrer en mode RX pour recevoir les communications. Elle incrémente ensuite le canal pour parcourir la plage 863-870MHz afin de détecter une communication. Toute les incrémentations, la variable rssi récupère la valeur contenue dans le registre qui correspond à la valeur du RSSI. Cette valeur étant en binaire complément 2, elle est convertie en dBm et placée dans un entier. Enfin, si cette valeur est supérieur à la valeur maximale déjà mesuré ou à un palier prédéfini (ici 0dBm), on stocke le numéro du canal correspondant qui sera utilisé dans le main par la suite.&lt;br /&gt;
&lt;br /&gt;
fonction de scan :&lt;br /&gt;
 void freq_scan(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char rssi;&lt;br /&gt;
   long rssi_dbm;&lt;br /&gt;
   unsigned char chan_scan=START_FREQ_CHAN;&lt;br /&gt;
   long rssi_max=0; //scan will take communication above 0dbm&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, led2, 0x00); //led2 blue while scanning&lt;br /&gt;
   &lt;br /&gt;
   ChangeChannel(chan_scan);&lt;br /&gt;
   ReceiveOn();    //enable RX&lt;br /&gt;
   while((Strobe(RF_SNOP) &amp;amp; 0x70) != 0x10); //make sure RX is ready&lt;br /&gt;
   while(chan_scan&amp;lt;STOP_FREQ_CHAN)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chan_scan);&lt;br /&gt;
     __delay_cycles(DELAY_RSSI);       //wait for rssi to be updated&lt;br /&gt;
     rssi = ReadSingleReg(RSSI);  //define in cc430f5137.h RSSI=0x34 corresponding to addr of rssi value&lt;br /&gt;
     if (rssi &amp;gt;= 128) &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (long)((long)( rssi - 256) / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     else &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (rssi / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     if(rssi_dbm&amp;gt;rssi_max)&lt;br /&gt;
     {&lt;br /&gt;
       rssi_max=rssi_dbm;&lt;br /&gt;
       chan_jam=chan_scan-10; //start jamming 2Mhz below max dbm received&lt;br /&gt;
     }&lt;br /&gt;
     chan_scan++;&lt;br /&gt;
     Strobe( RF_SFRX); //flush the RX FIFO&lt;br /&gt;
   }&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
nouveau main :&lt;br /&gt;
&lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chan_main=0x00;&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 on if cc430 powered&lt;br /&gt;
   int i;&lt;br /&gt;
   &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     freq_scan();&lt;br /&gt;
     ReceiveOff();&lt;br /&gt;
     chan_main=chan_jam;&lt;br /&gt;
     if (chan_main != 0)  //jam only if a communication xas detected with freq_scan&lt;br /&gt;
     {&lt;br /&gt;
       for(i=0 ; i&amp;lt;(20*NUM_JAM_RAMP) ; i++) //ramp start 2Mhz below chan_jam and stop 2Mhz above&lt;br /&gt;
       {&lt;br /&gt;
         ChangeChannel(chan_main);&lt;br /&gt;
         if (chan_main&amp;gt;= (chan_jam+20))&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main=0x00;&lt;br /&gt;
           led2=led2^0x10;&lt;br /&gt;
           set_color(led1, 0x00, 0x00, led2, 0x00, 0x00); //led2 blink red every two ramp of jamming&lt;br /&gt;
         }&lt;br /&gt;
         else&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main++;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     chan_main=0x00;  &lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
header :&lt;br /&gt;
 #define DELAY 100 //300us  &lt;br /&gt;
 #define DELAY_RSSI 10 //30us&lt;br /&gt;
 &lt;br /&gt;
 #define START_FREQ_CHAN 15&lt;br /&gt;
 #define STOP_FREQ_CHAN 50     //scanning 863-870Mhz with 200khz steps&lt;br /&gt;
 #define RSSI_OFFSET 74 //cf datasheet&lt;br /&gt;
 &lt;br /&gt;
 #define NUM_JAM_RAMP 50&lt;br /&gt;
 &lt;br /&gt;
 unsigned char chan_jam=0x00;&lt;br /&gt;
 unsigned char led2=0x10;&lt;br /&gt;
 unsigned char led1=0x10;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Après les vacances'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Fichiers Rendus'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[[Fichier:code_fonction_1.zip]]&lt;br /&gt;
*[[Fichier:code_fonction_2.zip]]&lt;br /&gt;
*[[Fichier:compte_rendu.pdf]]&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42434</id>
		<title>IMA4 2016/2017 P32</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42434"/>
				<updated>2017-05-18T11:27:11Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Cahier des charges'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;Présentation générale du projet&amp;lt;/span&amp;gt;=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Contexte&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'expansion de l'utilisation des objets connectés permet de nos jours d'accéder à des données ou de contrôler aisément d'autres systèmes connectés à distance. Les objets connectés sont de plus en plus déployés mais leur sécurité n'est pas toujours testée. Par conséquent, de nombreuses informations sensibles sont susceptibles de transiter en permanence par le biais de multiples plages de fréquences. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ceci amène donc un questionnement sur la sécurité des transferts de données entre la multitude d'objets connectés actuellement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Objectif du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de réaliser un brouilleur d'ondes radiofréquence dans la bande des 868 MHz capable de bloquer les communications LoRa.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Description du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
A l'aboutissement du projet, nous devrions être capable de détecter une communication LoRa dans la bande des 868 MHz, et de la brouiller elle seule, sans incidence sur les autres communications sur d'autres fréquences du réseau LoRa.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous devrons réaliser un montage réalisant un brouillage sur la plage 863-870Mhz afin d'empêcher toute communication LoRa, en envoyant du bruit électronique sur toute la plage de fréquence.&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet, nous perfectionnerons ce montage pour qu'il puisse détecter une communication LoRa à une fréquence donnée (grâce au &amp;quot;join-request message&amp;quot; de 18 octets envoyés par le end-point/node, ou bien grâce aux informations données dans le préambule des paquets), afin d'envoyer des données erronées et de bloquer uniquement cette communication.&lt;br /&gt;
&lt;br /&gt;
Si le temps et le budget le permettent, nous pourrons aussi être amenés à brouiller la plage de fréquences autour des 433 MHz (aussi utilisé par le réseau LoRa).&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Choix techniques : matériel et logiciel&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser ce système, nous allons utiliser un microcontrôleur cc430 muni d'un transceiver cc1101, d'un récepteur LoRa(868MHz) communicant via protocole SPI avec le microcontrôleur, 2 antennes, une batterie, quelques LEDs.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Calendrier prévisionnel'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Liste des tâches à effectuer&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
# Documentation sur le réseau LoRa&lt;br /&gt;
##moyen de transmission&lt;br /&gt;
##format de modulation&lt;br /&gt;
##trame des paquets&lt;br /&gt;
# Réalisation du premier montage brouillant toute la plage&lt;br /&gt;
##contrôler l'émetteur RF du cc430&lt;br /&gt;
##programmer un bruitage sur la plage 863-870MHz&lt;br /&gt;
##test et optimisation&lt;br /&gt;
# Ajout d'un récepteur LoRa pour détecter et brouiller une seule communication&lt;br /&gt;
##contrôler le récepteur LoRa avec le cc430 par protocole spi&lt;br /&gt;
##détecter une communication LoRa à une fréquence donnée&lt;br /&gt;
##contrôler l'émetteur RF afin de brouiller cette communication de manière brutale&lt;br /&gt;
##brouiller cette communication en tentant de changer les données du paquet &lt;br /&gt;
##test et optimisation&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Calendrier&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
''[[Avant le 19/12/16]]'' - Élaboration du Cahier des charges et remplissage du Wiki&lt;br /&gt;
&lt;br /&gt;
''[[Avant fin Janvier]]'' - Complément du Cahier des Charges et listage du matériel nécessaire pour le projet&lt;br /&gt;
&lt;br /&gt;
''[[Répartition sur le S8]]'' - 120h: Réalisation de la 1ere fonction (45h) / Réalisation de la 2e fonction (45h) / Test et débuguage (30h)&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Feuille d'heures'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Cahier des charges / Wiki&lt;br /&gt;
| 4h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3,5h&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|1h&lt;br /&gt;
|1h&lt;br /&gt;
|&lt;br /&gt;
|1h&lt;br /&gt;
|0,5h&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le réseau LoRa&lt;br /&gt;
| &lt;br /&gt;
| 6h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 1ère fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1,5h&lt;br /&gt;
|6h&lt;br /&gt;
|6h&lt;br /&gt;
|4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 2ème fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Tests et mesures&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Modification de la carte&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Avancement du Projet'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Phase préparatoire'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[Jeu 15/12/16]]'' &lt;br /&gt;
*Rendez-vous de mise au point du cahier des charges avec les trois encadrants (M. Boé, M. Vantroys et M. Redon)&lt;br /&gt;
*Elaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 1'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[23/01/17 - 29/01/17]]'' &lt;br /&gt;
*Revue du Cahier des Charges&lt;br /&gt;
*Recherches approfondies sur les modes de transmissions du réseau LoRa&lt;br /&gt;
*Recherche de matériel&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 2'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[30/01/17 - 05/02/17]]''  &lt;br /&gt;
*Précisions sur le cahier des charges&lt;br /&gt;
*Listage du matériel&lt;br /&gt;
*Recherche et détermination de solutions technologiques possibles pour les fonctions demandées&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 3'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[06/02/17 - 12/02/17]]''&lt;br /&gt;
*validation du matériel&lt;br /&gt;
Nous allons utiliser un cc430f5137 (MCU+RF) monté sur une carte optimisée pour les communications autours de 868Mhz.&lt;br /&gt;
Nous pouvons commencer à étudier son fonctionnement, particulièrement celui du module RF (cc1101).&lt;br /&gt;
Nous avons aussi récupéré des exemples de code en c sur le site de Texas Instrument et vu l'utilisation de ces codes sur un projet IMA5 de l'an passé.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 4'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/02/17 - 19/02/17]]''&lt;br /&gt;
*Recherche de solutions pour répondre à la 1ère fonction (brouiller la plage 863-870Mhz).&lt;br /&gt;
&lt;br /&gt;
Après une lecture approfondie de la datasheet du module RF du cc430, nous avons choisi d'utiliser la fréquence de base du module (pouvant être définie grâce aux registres) couplée au registre CHANNR. Cela nous permettra de modifier plus facilement la fréquence de la porteuse, en suivant la formule suivante : [[Fichier:rampe.png]].&lt;br /&gt;
&lt;br /&gt;
Nous pourrons alors balayer la plage de fréquence en changeant la valeur de CHANNR.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 5'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[27/02/17 - 05/03/17]]''&lt;br /&gt;
&lt;br /&gt;
A l'aide de la datasheet du cc1101 ([http://www.ti.com/lit/ds/symlink/cc1101.pdf datasheet_cc1101] pages : 70 à 95), nous avons défini les registres du module RF de la manière suivante (sachant que la fréquence du quartz est de 26MHz, soit Fxosc=26MHz) :&lt;br /&gt;
&lt;br /&gt;
*La fréquence de base a été fixée à 862,999MHz en suivant la formule donnée dans la data sheet[[Fichier:carrier_formula.png]]&lt;br /&gt;
ce qui nous a donné les valeurs FREQ2=0x21, FREQ1=0x31 et FREQ0=0x3A (FREQ=2 175 290)&lt;br /&gt;
&lt;br /&gt;
*Nous avons suivi la formule [[Fichier:chanspace_formula.png]] afin d'avoir un espacement entre les cannaux d'environ 100Khz&lt;br /&gt;
ce qui nous a donné  MDMCFG1=0x02 (CHANSPC_E=2) et MDMCFG0=0x00(CHANSPC_M=0)&lt;br /&gt;
&lt;br /&gt;
*Pour le moment, nous avons choisi le mode de modulation AM, nous avons donc initialisé les registres MDMCFG2=0x30 (mode ASK/OOK) et FREND0=0x50(patable=0 donnant le mode ASK)&lt;br /&gt;
&lt;br /&gt;
*Nous avons créé une bibliothèque RFconfig.h regroupant les valeurs de tous les registres :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal and high VCO recommended&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz stop at 870&lt;br /&gt;
 //FREQ=00 10 00 01 00 11 00 01 00 11 10 10&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //CHANNR from 0 to 69 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 //0 (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x0F //default (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x31 //868Mhz&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0x3A /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x22 //default (data rate)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x30 // ASK/OOK,no sync-word&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x02 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0x00 //chanspc_m=0&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 //default (no effet on ASK/OOK mode)&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset not used)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x03 //default (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x40 //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x50 //patable=0 -&amp;gt; ASK&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosen&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x0B //default&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 6'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[06/03/17 - 12/03/17]]''&lt;br /&gt;
*Nous avons préparé un premier code réalisant une rampe sur la plage 863-870MHz. Ce code est basé sur une boucle infinie qui incrémente le registre chann de 0 à 69 (pour passer de 863 à 870Mhz) et envoie des paquets 0xFF grâce aux fonctions ChangeChannel(chann) et send_comand().&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		1	// maximum size of data sent by rf&lt;br /&gt;
 &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 10000&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFF;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init();&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);	 &lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
     {&lt;br /&gt;
       ChangeChannel(chann);&lt;br /&gt;
       send_cmd();&lt;br /&gt;
       if(chann&amp;gt;=69) &lt;br /&gt;
 	{&lt;br /&gt;
 	  chann=0x00;&lt;br /&gt;
 	}&lt;br /&gt;
       else&lt;br /&gt;
 	{&lt;br /&gt;
 	  chann++;&lt;br /&gt;
 	}&lt;br /&gt;
       __delay_cycles(DELAY);&lt;br /&gt;
     }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Après quelques corrections du code, nous avons pu le compiler grâce au Makefile&lt;br /&gt;
&lt;br /&gt;
*Avec la commande (exécutée en root) et le montage suivants, nous avons upload le main sur le cc430&lt;br /&gt;
 mspdebug rf2500 &amp;quot;prog main&amp;quot;&lt;br /&gt;
[[Fichier:montage001.png]]&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 7'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/03/17 - 19/03/17]]''&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé les premiers tests sur l'analyseur de spectre afin de vérifier que le code fonctionne bien.&lt;br /&gt;
&lt;br /&gt;
*Dans un premier temps, nous avons essayé une fréquence fixe pour voir la calibration du cc430.&lt;br /&gt;
[[Fichier:862.png]]&lt;br /&gt;
Avec un exemple à 862Mhz, on remarque bien que les registres ont bien été initialisés et que la carte émet à la fréquence demandée.&lt;br /&gt;
&lt;br /&gt;
*Ensuite, nous avons testé le code effectuant le balayage sur la plage de fréquence 863-870Mhz, en augmentant le sweep time de l'analyseur de spectre pour voir les différentes fréquences auxquelles la carte émet.&lt;br /&gt;
[[Fichier:sweep.png]]&lt;br /&gt;
En observant de 861 à 872 Mhz sur l'écran de l'analyseur, on peut voir que le code effectue bien le balayage.&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission de la carte étant faible, nous avons essayé de l'augmenter en modifiant certains registres notamment ceux que l'on peut optimiser à l'aide du logiciel smart RF studio. Cependant, nous pensons qu'il faudra changer l'antenne patch actuelle de la carte pour une antenne connectée en SMA.&lt;br /&gt;
&lt;br /&gt;
*Nous avons aussi tenté de brouiller les communications d'autres groupes de projet utilisant des modules LoRa. Ces derniers étant configurés à 433Mhz, nous avons dû changer la fréquence de notre carte. Le brouillage ne fonctionnait pas mais notre carte étant optimisée pour une émission autour de 868Mhz, les résultats n'étaient pas pertinents.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 8'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[20/03/17 - 26/03/17]]'' &lt;br /&gt;
&lt;br /&gt;
*Nous avons emprunté à M. Vantroys 3 modules SX1276 montés sur des cartes NUCLEO-F401RE afin de pouvoir tester notre carte sur une communication LoRa à 868Mhz&lt;br /&gt;
[[Fichier:lorambed.png]]&lt;br /&gt;
*Le code utilisé pour le test a été récupéré sur le forum des développeurs du site mbed.com. C'est un code &amp;quot;ping pong&amp;quot; effectuant une communication continue entre deux modules LoRa à une fréquence de 868Mhz. Il nous a suffit d'utiliser le compilateur du site (qui regroupe toutes les bibliothèques nécessaires) en indiquant que la carte utilisée est une F401RE pour que le binaire produit soit compatible. La carte NUCLEO étant reconnue comme un système de fichier par Linux, pour la flasher il faut la monter en usb à l'aide des commandes fdisk et mount puis de copier le binaire dedans avec la commande cp.&lt;br /&gt;
[[Fichier:lora pingpong.zip]]&lt;br /&gt;
*Une fois les modules NUCLEO flashés, la communication LoRa est établie dès que deux modules sont alimentés. Nous avons donc branché en USB deux modules sur deux machines différentes afin d'observer la communication sur des terminaux. La communication se fait bien, l'un envoie &amp;quot;ping&amp;quot; tandis que l'autre envoie &amp;quot;pong&amp;quot; lorsqu'il reçoit &amp;quot;ping&amp;quot;. Malheureusement, comme nous l'avions prédit, notre carte a une puissance d'émission trop faible et ne parvient pas à brouiller efficacement.&lt;br /&gt;
*Les modules peuvent aussi communiquer en modulation FSK, dans ce cas notre système arrive à effectuer le brouillage. Néanmoins, il serait plus intéressant de parvenir à brouiller la communication LoRa.&lt;br /&gt;
*Après plusieurs changements dans le code du cc430, n'ayant pas de résultats positifs, nous avons diminué la puissance d'émission des modules LoRa en changeant un header dans le code lora_pingpong.cpp. En passant cette puissance de 14dBm à 6dBm, nous sommes parvenus à brouiller la communication entre les deux modules LoRa.&lt;br /&gt;
&lt;br /&gt;
*En parallèle, nous avons commencé à rechercher des solutions pour la fonction 2. Un pseudo code est donné sur le site ti.com ([https://www.ti.com/lit/an/swra315/swra315.pdf pseudo_code_frequency_scanning]) qui permet de faire un scan sur une plage de fréquence et de récupérer la fréquence ou le signal reçu est le plus fort. Ce code pourra être écrit en C puis incorporé dans notre main pour détecter une communication et la brouiller.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 9'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[27/03/17 - 02/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*Même si le brouillage ne s’effectue qu'à puissance réduite, nous avons cherché à l'optimiser&lt;br /&gt;
**Nous avons premièrement réalisé que le mode de modulation choisi au départ (ASK) n'était pas adapté au brouillage d'une communication LoRa. Nous avons donc essayé le mode GFSK qui est le plus proche du format de modulation du réseau LoRa. Nous avons aussi essayé les modes 2FSK et 4FSK qui sont relativement proches du GFSK. Nous en avons conclu que le mode de modulation à utiliser est GFSK (ce mode fonctionne aussi pour brouiller la modulation FSK)&lt;br /&gt;
**Ensuite, nous avons réduit la plage de fréquence balayée par le cc430 afin de voir si il y avait une influence sur le brouillage. Nous avons remarqué que le brouillage était plus efficace pour un balayage de 866 à 870 Mhz (au lieu de 863-870 initialement)&lt;br /&gt;
**Dans le même ordre d'idée, nous avons décidé de réduire le nombre d'incrémentations du registre CHANNR afin d'augmenter la rapidité du balayage. Pour ce faire, nous avons augmenté la taille de chaque canal, passant de 100kHz à 200kHz&lt;br /&gt;
**La puissance d'émission de la carte a été changée dans la fonction WritePATable (appelée par rfinit() dans le main), afin d'être maximale (12dBm)&lt;br /&gt;
**Enfin, nous avons augmenté le nombre de paquets à envoyer&lt;br /&gt;
&lt;br /&gt;
Nouvelle bibliothèque RFconfig.h :&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //high VCO FSCAL2=0x2A&lt;br /&gt;
 &lt;br /&gt;
 //867 : 21589A&lt;br /&gt;
 //866 : 214EC2&lt;br /&gt;
 //865 : 2144EA&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 //for 433Mhz : freq=0x10A766 and low vco (FSCAL2=0x0A)&lt;br /&gt;
 //432 : 0x109D8E&lt;br /&gt;
 &lt;br /&gt;
 //gfsk, 866, chann space ~200k, high vco currently&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 // (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x06 //default 0f (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x4E //866&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0xC2 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x83 // data rate&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x13 // GFSK &lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x22 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0xF8 //chanspc_m=248&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 // default 47khz deviation&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset for demodulation)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x07 // (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x77 //&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x10 //patable=0 (useless for gfsk) &lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosed&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x09 //&lt;br /&gt;
&lt;br /&gt;
Nouveau main.c : &lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;led_commands.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		10	// maximum size of data sent by rf&lt;br /&gt;
  &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 5000 //15ms  &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Any other commands are for RSSI measurement&lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFD;&lt;br /&gt;
   buffer[1] = 0xAA;&lt;br /&gt;
   buffer[2] = 0xFF;&lt;br /&gt;
   buffer[3] = 0x11;&lt;br /&gt;
   buffer[4] = 0xFF;&lt;br /&gt;
   buffer[5] = 0x66;&lt;br /&gt;
   buffer[6] = 0xFF;&lt;br /&gt;
   buffer[7] = 0x33;&lt;br /&gt;
   buffer[8] = 0x1F;&lt;br /&gt;
   buffer[9] = 0xF8;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   unsigned char led2=0x10;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(0x10, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 allumée quand le cc430 est sous tension&lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chann);&lt;br /&gt;
     send_cmd();&lt;br /&gt;
     if(chann&amp;gt;=20) //866-870&lt;br /&gt;
     {&lt;br /&gt;
       chann=0x00;&lt;br /&gt;
       led2=led2^0x10;&lt;br /&gt;
       set_color(0x10, 0x00, 0x00, led2, 0x00, 0x00); //led2 s'allume toutes les 2 rampes&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {&lt;br /&gt;
       chann++;&lt;br /&gt;
     }&lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Fonction WritePATable :&lt;br /&gt;
&lt;br /&gt;
 void WritePATable(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char valueRead = 0;&lt;br /&gt;
   &lt;br /&gt;
   //while(valueRead != 0x03)    // Output Power: -30  [dBm]&lt;br /&gt;
   //while(valueRead != 0x25)    // Output Power: -12  [dBm]&lt;br /&gt;
   //while(valueRead != 0x2D)    // Output Power: -6   [dBm]&lt;br /&gt;
   //while(valueRead != 0x8D)    // Output Power:  0   [dBm]&lt;br /&gt;
   //while(valueRead != 0xC3)    // Output Power:  10  [dBm]&lt;br /&gt;
   while(valueRead != 0xC0)    // Output Power:  Maximum  [dBm]&lt;br /&gt;
   //while(valueRead != 0xC6)    // Output Power(default):  8.8  [dBm]&lt;br /&gt;
   {&lt;br /&gt;
     /* Write the power output to the PA_TABLE and verify the write operation.  */&lt;br /&gt;
     unsigned char i = 0; &lt;br /&gt;
 &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
     //RF1AINSTRW = 0x7E03; // PA Table write (burst), Output Power: -30  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E25; // PA Table write (burst), Output Power: -12  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E2D; // PA Table write (burst), Output Power: -6   [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E8D; // PA Table write (burst), Output Power: 0    [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC3; // PA Table write (burst), Output Power: 10   [dBm]&lt;br /&gt;
     RF1AINSTRW = 0x7EC0; // PA Table write (burst), Output Power: Maximum  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC6; // PA Table write (burst), Output Power(default):  8.8  [dBm]&lt;br /&gt;
     &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
       RF1AINSTR1B = RF_PATABRD;                 // -miguel read &amp;amp; write&lt;br /&gt;
     &lt;br /&gt;
     // Traverse PATABLE pointers to read &lt;br /&gt;
     for (i = 0; i &amp;lt; 7; i++)&lt;br /&gt;
     {&lt;br /&gt;
       while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
       valueRead  = RF1ADOUT1B;     &lt;br /&gt;
     }&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
     valueRead  = RF1ADOUTB;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 10'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[03/04/17 - 09/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission étant trop faible pour brouiller la communication entre les 2 modules LoRa, nous avons décidé de changer l'antenne de la carte. Il a fallu couper l'antenne patch à l'aide d'une scie afin de souder un connecteur SMA.&lt;br /&gt;
[[Fichier:cc430antenne.png]]&lt;br /&gt;
*Grâce à cette nouvelle antenne, la communication peut maintenant être brouillée à une puissance de 10dBm (contre 6 auparavant). Mais il faut que la carte reste relativement proche d'un des modules.&lt;br /&gt;
*Pour réussir le brouillage quand les modules LoRa sont à leur puissance maximale (14dBm), il faudra sûrement ajouter un amplificateur entre la sortie de la carte et son antenne.&lt;br /&gt;
*Nous avons codé la fonction de scan en c et l'avons incorporé dans le main &lt;br /&gt;
**Cette fonction autorise le module à entrer en mode RX pour recevoir les communications. Elle incrémente ensuite le canal pour parcourir la plage 863-870MHz afin de détecter une communication. Toute les incrémentations, la variable rssi récupère la valeur contenue dans le registre qui correspond à la valeur du RSSI. Cette valeur étant en binaire complément 2, elle est convertie en dBm et placée dans un entier. Enfin, si cette valeur est supérieur à la valeur maximale déjà mesuré ou à un palier prédéfini (ici 0dBm), on stocke le numéro du canal correspondant qui sera utilisé dans le main par la suite.&lt;br /&gt;
&lt;br /&gt;
fonction de scan :&lt;br /&gt;
 void freq_scan(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char rssi;&lt;br /&gt;
   long rssi_dbm;&lt;br /&gt;
   unsigned char chan_scan=START_FREQ_CHAN;&lt;br /&gt;
   long rssi_max=0; //scan will take communication above 0dbm&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, led2, 0x00); //led2 blue while scanning&lt;br /&gt;
   &lt;br /&gt;
   ChangeChannel(chan_scan);&lt;br /&gt;
   ReceiveOn();    //enable RX&lt;br /&gt;
   while((Strobe(RF_SNOP) &amp;amp; 0x70) != 0x10); //make sure RX is ready&lt;br /&gt;
   while(chan_scan&amp;lt;STOP_FREQ_CHAN)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chan_scan);&lt;br /&gt;
     __delay_cycles(DELAY_RSSI);       //wait for rssi to be updated&lt;br /&gt;
     rssi = ReadSingleReg(RSSI);  //define in cc430f5137.h RSSI=0x34 corresponding to addr of rssi value&lt;br /&gt;
     if (rssi &amp;gt;= 128) &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (long)((long)( rssi - 256) / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     else &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (rssi / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     if(rssi_dbm&amp;gt;rssi_max)&lt;br /&gt;
     {&lt;br /&gt;
       rssi_max=rssi_dbm;&lt;br /&gt;
       chan_jam=chan_scan-10; //start jamming 2Mhz below max dbm received&lt;br /&gt;
     }&lt;br /&gt;
     chan_scan++;&lt;br /&gt;
     Strobe( RF_SFRX); //flush the RX FIFO&lt;br /&gt;
   }&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
nouveau main :&lt;br /&gt;
&lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chan_main=0x00;&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 on if cc430 powered&lt;br /&gt;
   int i;&lt;br /&gt;
   &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     freq_scan();&lt;br /&gt;
     ReceiveOff();&lt;br /&gt;
     chan_main=chan_jam;&lt;br /&gt;
     if (chan_main != 0)  //jam only if a communication xas detected with freq_scan&lt;br /&gt;
     {&lt;br /&gt;
       for(i=0 ; i&amp;lt;(20*NUM_JAM_RAMP) ; i++) //ramp start 2Mhz below chan_jam and stop 2Mhz above&lt;br /&gt;
       {&lt;br /&gt;
         ChangeChannel(chan_main);&lt;br /&gt;
         if (chan_main&amp;gt;= (chan_jam+20))&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main=0x00;&lt;br /&gt;
           led2=led2^0x10;&lt;br /&gt;
           set_color(led1, 0x00, 0x00, led2, 0x00, 0x00); //led2 blink red every two ramp of jamming&lt;br /&gt;
         }&lt;br /&gt;
         else&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main++;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     chan_main=0x00;  &lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
header :&lt;br /&gt;
 #define DELAY 100 //300us  &lt;br /&gt;
 #define DELAY_RSSI 10 //30us&lt;br /&gt;
 &lt;br /&gt;
 #define START_FREQ_CHAN 15&lt;br /&gt;
 #define STOP_FREQ_CHAN 50     //scanning 863-870Mhz with 200khz steps&lt;br /&gt;
 #define RSSI_OFFSET 74 //cf datasheet&lt;br /&gt;
 &lt;br /&gt;
 #define NUM_JAM_RAMP 50&lt;br /&gt;
 &lt;br /&gt;
 unsigned char chan_jam=0x00;&lt;br /&gt;
 unsigned char led2=0x10;&lt;br /&gt;
 unsigned char led1=0x10;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Fichiers Rendus'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[[Fichier:code_fonction_1.zip]]&lt;br /&gt;
*[[Fichier:code_fonction_2.zip]]&lt;br /&gt;
*[[Fichier:compte_rendu.pdf]]&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Compte_rendu.pdf&amp;diff=42134</id>
		<title>Fichier:Compte rendu.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Compte_rendu.pdf&amp;diff=42134"/>
				<updated>2017-05-12T08:26:29Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : a téléversé une nouvelle version de « Fichier:Compte rendu.pdf »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Compte_rendu.pdf&amp;diff=42133</id>
		<title>Fichier:Compte rendu.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Compte_rendu.pdf&amp;diff=42133"/>
				<updated>2017-05-12T08:12:10Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42132</id>
		<title>IMA4 2016/2017 P32</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42132"/>
				<updated>2017-05-12T08:11:57Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Fichiers Rendus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Cahier des charges'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;Présentation générale du projet&amp;lt;/span&amp;gt;=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Contexte&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'expansion de l'utilisation des objets connectés permet de nos jours d'accéder à des données ou de contrôler aisément d'autres systèmes connectés à distance. Les objets connectés sont de plus en plus déployés mais leur sécurité n'est pas toujours testée. Par conséquent, de nombreuses informations sensibles sont susceptibles de transiter en permanence par le biais de multiples plages de fréquences. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ceci amène donc un questionnement sur la sécurité des transferts de données entre la multitude d'objets connectés actuellement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Objectif du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de réaliser un brouilleur d'ondes radiofréquence dans la bande des 868 MHz capable de bloquer les communications LoRa.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Description du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
A l'aboutissement du projet, nous devrions être capable de détecter une communication LoRa dans la bande des 868 MHz, et de la brouiller elle seule, sans incidence sur les autres communications sur d'autres fréquences du réseau LoRa.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous devrons réaliser un montage réalisant un brouillage sur la plage 863-870Mhz afin d'empêcher toute communication LoRa, en envoyant du bruit électronique sur toute la plage de fréquence.&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet, nous perfectionnerons ce montage pour qu'il puisse détecter une communication LoRa à une fréquence donnée (grâce au &amp;quot;join-request message&amp;quot; de 18 octets envoyés par le end-point/node, ou bien grâce aux informations données dans le préambule des paquets), afin d'envoyer des données erronées et de bloquer uniquement cette communication.&lt;br /&gt;
&lt;br /&gt;
Si le temps et le budget le permettent, nous pourrons aussi être amenés à brouiller la plage de fréquences autour des 433 MHz (aussi utilisé par le réseau LoRa).&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Choix techniques : matériel et logiciel&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser ce système, nous allons utiliser un microcontrôleur cc430 muni d'un transceiver cc1101, d'un récepteur LoRa(868MHz) communicant via protocole SPI avec le microcontrôleur, 2 antennes, une batterie, quelques LEDs.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Calendrier prévisionnel'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Liste des tâches à effectuer&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
# Documentation sur le réseau LoRa&lt;br /&gt;
##moyen de transmission&lt;br /&gt;
##format de modulation&lt;br /&gt;
##trame des paquets&lt;br /&gt;
# Réalisation du premier montage brouillant toute la plage&lt;br /&gt;
##contrôler l'émetteur RF du cc430&lt;br /&gt;
##programmer un bruitage sur la plage 863-870MHz&lt;br /&gt;
##test et optimisation&lt;br /&gt;
# Ajout d'un récepteur LoRa pour détecter et brouiller une seule communication&lt;br /&gt;
##contrôler le récepteur LoRa avec le cc430 par protocole spi&lt;br /&gt;
##détecter une communication LoRa à une fréquence donnée&lt;br /&gt;
##contrôler l'émetteur RF afin de brouiller cette communication de manière brutale&lt;br /&gt;
##brouiller cette communication en tentant de changer les données du paquet &lt;br /&gt;
##test et optimisation&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Calendrier&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
''[[Avant le 19/12/16]]'' - Élaboration du Cahier des charges et remplissage du Wiki&lt;br /&gt;
&lt;br /&gt;
''[[Avant fin Janvier]]'' - Complément du Cahier des Charges et listage du matériel nécessaire pour le projet&lt;br /&gt;
&lt;br /&gt;
''[[Répartition sur le S8]]'' - 120h: Réalisation de la 1ere fonction (45h) / Réalisation de la 2e fonction (45h) / Test et débuguage (30h)&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Feuille d'heures'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Cahier des charges / Wiki&lt;br /&gt;
| 4h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3,5h&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|1h&lt;br /&gt;
|1h&lt;br /&gt;
|&lt;br /&gt;
|1h&lt;br /&gt;
|0,5h&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le réseau LoRa&lt;br /&gt;
| &lt;br /&gt;
| 6h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 1ère fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1,5h&lt;br /&gt;
|6h&lt;br /&gt;
|6h&lt;br /&gt;
|4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 2ème fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Tests et mesures&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Modification de la carte&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Avancement du Projet'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Phase préparatoire'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[Jeu 15/12/16]]'' &lt;br /&gt;
*Rendez-vous de mise au point du cahier des charges avec les trois encadrants (M. Boé, M. Vantroys et M. Redon)&lt;br /&gt;
*Elaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 1'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[23/01/17 - 29/01/17]]'' &lt;br /&gt;
*Revue du Cahier des Charges&lt;br /&gt;
*Recherches approfondies sur les modes de transmissions du réseau LoRa&lt;br /&gt;
*Recherche de matériel&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 2'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[30/01/17 - 05/02/17]]''  &lt;br /&gt;
*Précisions sur le cahier des charges&lt;br /&gt;
*Listage du matériel&lt;br /&gt;
*Recherche et détermination de solutions technologiques possibles pour les fonctions demandées&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 3'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[06/02/17 - 12/02/17]]''&lt;br /&gt;
*validation du matériel&lt;br /&gt;
Nous allons utiliser un cc430f5137 (MCU+RF) monté sur une carte optimisée pour les communications autours de 868Mhz.&lt;br /&gt;
Nous pouvons commencer à étudier son fonctionnement, particulièrement celui du module RF (cc1101).&lt;br /&gt;
Nous avons aussi récupéré des exemples de code en c sur le site de Texas Instrument et vu l'utilisation de ces codes sur un projet IMA5 de l'an passé.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 4'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/02/17 - 19/02/17]]''&lt;br /&gt;
*Recherche de solutions pour répondre à la 1ère fonction (brouiller la plage 863-870Mhz).&lt;br /&gt;
&lt;br /&gt;
Après une lecture approfondie de la datasheet du module RF du cc430, nous avons choisi d'utiliser la fréquence de base du module (pouvant être définie grâce aux registres) couplée au registre CHANNR. Cela nous permettra de modifier plus facilement la fréquence de la porteuse, en suivant la formule suivante : [[Fichier:rampe.png]].&lt;br /&gt;
&lt;br /&gt;
Nous pourrons alors balayer la plage de fréquence en changeant la valeur de CHANNR.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 5'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[27/02/17 - 05/03/17]]''&lt;br /&gt;
&lt;br /&gt;
A l'aide de la datasheet du cc1101 ([http://www.ti.com/lit/ds/symlink/cc1101.pdf datasheet_cc1101] pages : 70 à 95), nous avons défini les registres du module RF de la manière suivante (sachant que la fréquence du quartz est de 26MHz, soit Fxosc=26MHz) :&lt;br /&gt;
&lt;br /&gt;
*La fréquence de base a été fixée à 862,999MHz en suivant la formule donnée dans la data sheet[[Fichier:carrier_formula.png]]&lt;br /&gt;
ce qui nous a donné les valeurs FREQ2=0x21, FREQ1=0x31 et FREQ0=0x3A (FREQ=2 175 290)&lt;br /&gt;
&lt;br /&gt;
*Nous avons suivi la formule [[Fichier:chanspace_formula.png]] afin d'avoir un espacement entre les cannaux d'environ 100Khz&lt;br /&gt;
ce qui nous a donné  MDMCFG1=0x02 (CHANSPC_E=2) et MDMCFG0=0x00(CHANSPC_M=0)&lt;br /&gt;
&lt;br /&gt;
*Pour le moment, nous avons choisi le mode de modulation AM, nous avons donc initialisé les registres MDMCFG2=0x30 (mode ASK/OOK) et FREND0=0x50(patable=0 donnant le mode ASK)&lt;br /&gt;
&lt;br /&gt;
*Nous avons créé une bibliothèque RFconfig.h regroupant les valeurs de tous les registres :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal and high VCO recommended&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz stop at 870&lt;br /&gt;
 //FREQ=00 10 00 01 00 11 00 01 00 11 10 10&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //CHANNR from 0 to 69 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 //0 (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x0F //default (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x31 //868Mhz&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0x3A /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x22 //default (data rate)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x30 // ASK/OOK,no sync-word&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x02 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0x00 //chanspc_m=0&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 //default (no effet on ASK/OOK mode)&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset not used)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x03 //default (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x40 //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x50 //patable=0 -&amp;gt; ASK&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosen&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x0B //default&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 6'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[06/03/17 - 12/03/17]]''&lt;br /&gt;
*Nous avons préparé un premier code réalisant une rampe sur la plage 863-870MHz. Ce code est basé sur une boucle infinie qui incrémente le registre chann de 0 à 69 (pour passer de 863 à 870Mhz) et envoie des paquets 0xFF grâce aux fonctions ChangeChannel(chann) et send_comand().&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		1	// maximum size of data sent by rf&lt;br /&gt;
 &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 10000&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFF;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init();&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);	 &lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
     {&lt;br /&gt;
       ChangeChannel(chann);&lt;br /&gt;
       send_cmd();&lt;br /&gt;
       if(chann&amp;gt;=69) &lt;br /&gt;
 	{&lt;br /&gt;
 	  chann=0x00;&lt;br /&gt;
 	}&lt;br /&gt;
       else&lt;br /&gt;
 	{&lt;br /&gt;
 	  chann++;&lt;br /&gt;
 	}&lt;br /&gt;
       __delay_cycles(DELAY);&lt;br /&gt;
     }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Après quelques corrections du code, nous avons pu le compiler grâce au Makefile&lt;br /&gt;
&lt;br /&gt;
*Avec la commande (exécutée en root) et le montage suivants, nous avons upload le main sur le cc430&lt;br /&gt;
 mspdebug rf2500 &amp;quot;prog main&amp;quot;&lt;br /&gt;
[[Fichier:montage001.png]]&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 7'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/03/17 - 19/03/17]]''&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé les premiers tests sur l'analyseur de spectre afin de vérifier que le code fonctionne bien.&lt;br /&gt;
&lt;br /&gt;
*Dans un premier temps, nous avons essayé une fréquence fixe pour voir la calibration du cc430.&lt;br /&gt;
[[Fichier:862.png]]&lt;br /&gt;
Avec un exemple à 862Mhz, on remarque bien que les registres ont bien été initialisés et que la carte émet à la fréquence demandée.&lt;br /&gt;
&lt;br /&gt;
*Ensuite, nous avons testé le code effectuant le balayage sur la plage de fréquence 863-870Mhz, en augmentant le sweep time de l'analyseur de spectre pour voir les différentes fréquences auxquelles la carte émet.&lt;br /&gt;
[[Fichier:sweep.png]]&lt;br /&gt;
En observant de 861 à 872 Mhz sur l'écran de l'analyseur, on peut voir que le code effectue bien le balayage.&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission de la carte étant faible, nous avons essayé de l'augmenter en modifiant certains registres notamment ceux que l'on peut optimiser à l'aide du logiciel smart RF studio. Cependant, nous pensons qu'il faudra changer l'antenne patch actuelle de la carte pour une antenne connectée en SMA.&lt;br /&gt;
&lt;br /&gt;
*Nous avons aussi tenté de brouiller les communications d'autres groupes de projet utilisant des modules LoRa. Ces derniers étant configurés à 433Mhz, nous avons dû changer la fréquence de notre carte. Le brouillage ne fonctionnait pas mais notre carte étant optimisée pour une émission autour de 868Mhz, les résultats n'étaient pas pertinents.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 8'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[20/03/17 - 26/03/17]]'' &lt;br /&gt;
&lt;br /&gt;
*Nous avons emprunté à M. Vantroys 3 modules SX1276 montés sur des cartes NUCLEO-F401RE afin de pouvoir tester notre carte sur une communication LoRa à 868Mhz&lt;br /&gt;
[[Fichier:lorambed.png]]&lt;br /&gt;
*Le code utilisé pour le test a été récupéré sur le forum des développeurs du site mbed.com. C'est un code &amp;quot;ping pong&amp;quot; effectuant une communication continue entre deux modules LoRa à une fréquence de 868Mhz. Il nous a suffit d'utiliser le compilateur du site (qui regroupe toutes les bibliothèques nécessaires) en indiquant que la carte utilisée est une F401RE pour que le binaire produit soit compatible. La carte NUCLEO étant reconnue comme un système de fichier par Linux, pour la flasher il faut la monter en usb à l'aide des commandes fdisk et mount puis de copier le binaire dedans avec la commande cp.&lt;br /&gt;
[[Fichier:lora pingpong.zip]]&lt;br /&gt;
*Une fois les modules NUCLEO flashés, la communication LoRa est établie dès que deux modules sont alimentés. Nous avons donc branché en USB deux modules sur deux machines différentes afin d'observer la communication sur des terminaux. La communication se fait bien, l'un envoie &amp;quot;ping&amp;quot; tandis que l'autre envoie &amp;quot;pong&amp;quot; lorsqu'il reçoit &amp;quot;ping&amp;quot;. Malheureusement, comme nous l'avions prédit, notre carte a une puissance d'émission trop faible et ne parvient pas à brouiller efficacement.&lt;br /&gt;
*Les modules peuvent aussi communiquer en modulation FSK, dans ce cas notre système arrive à effectuer le brouillage. Néanmoins, il serait plus intéressant de parvenir à brouiller la communication LoRa.&lt;br /&gt;
*Après plusieurs changements dans le code du cc430, n'ayant pas de résultats positifs, nous avons diminué la puissance d'émission des modules LoRa en changeant un header dans le code lora_pingpong.cpp. En passant cette puissance de 14dBm à 6dBm, nous sommes parvenus à brouiller la communication entre les deux modules LoRa.&lt;br /&gt;
&lt;br /&gt;
*En parallèle, nous avons commencé à rechercher des solutions pour la fonction 2. Un pseudo code est donné sur le site ti.com ([https://www.ti.com/lit/an/swra315/swra315.pdf pseudo_code_frequency_scanning]) qui permet de faire un scan sur une plage de fréquence et de récupérer la fréquence ou le signal reçu est le plus fort. Ce code pourra être écrit en C puis incorporé dans notre main pour détecter une communication et la brouiller.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 9'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[27/03/17 - 02/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*Même si le brouillage ne s’effectue qu'à puissance réduite, nous avons cherché à l'optimiser&lt;br /&gt;
**Nous avons premièrement réalisé que le mode de modulation choisi au départ (ASK) n'était pas adapté au brouillage d'une communication LoRa. Nous avons donc essayé le mode GFSK qui est le plus proche du format de modulation du réseau LoRa. Nous avons aussi essayé les modes 2FSK et 4FSK qui sont relativement proches du GFSK. Nous en avons conclu que le mode de modulation à utiliser est GFSK (ce mode fonctionne aussi pour brouiller la modulation FSK)&lt;br /&gt;
**Ensuite, nous avons réduit la plage de fréquence balayée par le cc430 afin de voir si il y avait une influence sur le brouillage. Nous avons remarqué que le brouillage était plus efficace pour un balayage de 866 à 870 Mhz (au lieu de 863-870 initialement)&lt;br /&gt;
**Dans le même ordre d'idée, nous avons décidé de réduire le nombre d'incrémentations du registre CHANNR afin d'augmenter la rapidité du balayage. Pour ce faire, nous avons augmenté la taille de chaque canal, passant de 100kHz à 200kHz&lt;br /&gt;
**La puissance d'émission de la carte a été changée dans la fonction WritePATable (appelée par rfinit() dans le main), afin d'être maximale (12dBm)&lt;br /&gt;
**Enfin, nous avons augmenté le nombre de paquets à envoyer&lt;br /&gt;
&lt;br /&gt;
Nouvelle bibliothèque RFconfig.h :&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //high VCO FSCAL2=0x2A&lt;br /&gt;
 &lt;br /&gt;
 //867 : 21589A&lt;br /&gt;
 //866 : 214EC2&lt;br /&gt;
 //865 : 2144EA&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 //for 433Mhz : freq=0x10A766 and low vco (FSCAL2=0x0A)&lt;br /&gt;
 //432 : 0x109D8E&lt;br /&gt;
 &lt;br /&gt;
 //gfsk, 866, chann space ~200k, high vco currently&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 // (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x06 //default 0f (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x4E //866&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0xC2 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x83 // data rate&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x13 // GFSK &lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x22 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0xF8 //chanspc_m=248&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 // default 47khz deviation&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset for demodulation)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x07 // (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x77 //&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x10 //patable=0 (useless for gfsk) &lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosed&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x09 //&lt;br /&gt;
&lt;br /&gt;
Nouveau main.c : &lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;led_commands.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		10	// maximum size of data sent by rf&lt;br /&gt;
  &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 5000 //15ms  &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Any other commands are for RSSI measurement&lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFD;&lt;br /&gt;
   buffer[1] = 0xAA;&lt;br /&gt;
   buffer[2] = 0xFF;&lt;br /&gt;
   buffer[3] = 0x11;&lt;br /&gt;
   buffer[4] = 0xFF;&lt;br /&gt;
   buffer[5] = 0x66;&lt;br /&gt;
   buffer[6] = 0xFF;&lt;br /&gt;
   buffer[7] = 0x33;&lt;br /&gt;
   buffer[8] = 0x1F;&lt;br /&gt;
   buffer[9] = 0xF8;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   unsigned char led2=0x10;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(0x10, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 allumée quand le cc430 est sous tension&lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chann);&lt;br /&gt;
     send_cmd();&lt;br /&gt;
     if(chann&amp;gt;=20) //866-870&lt;br /&gt;
     {&lt;br /&gt;
       chann=0x00;&lt;br /&gt;
       led2=led2^0x10;&lt;br /&gt;
       set_color(0x10, 0x00, 0x00, led2, 0x00, 0x00); //led2 s'allume toutes les 2 rampes&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {&lt;br /&gt;
       chann++;&lt;br /&gt;
     }&lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Fonction WritePATable :&lt;br /&gt;
&lt;br /&gt;
 void WritePATable(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char valueRead = 0;&lt;br /&gt;
   &lt;br /&gt;
   //while(valueRead != 0x03)    // Output Power: -30  [dBm]&lt;br /&gt;
   //while(valueRead != 0x25)    // Output Power: -12  [dBm]&lt;br /&gt;
   //while(valueRead != 0x2D)    // Output Power: -6   [dBm]&lt;br /&gt;
   //while(valueRead != 0x8D)    // Output Power:  0   [dBm]&lt;br /&gt;
   //while(valueRead != 0xC3)    // Output Power:  10  [dBm]&lt;br /&gt;
   while(valueRead != 0xC0)    // Output Power:  Maximum  [dBm]&lt;br /&gt;
   //while(valueRead != 0xC6)    // Output Power(default):  8.8  [dBm]&lt;br /&gt;
   {&lt;br /&gt;
     /* Write the power output to the PA_TABLE and verify the write operation.  */&lt;br /&gt;
     unsigned char i = 0; &lt;br /&gt;
 &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
     //RF1AINSTRW = 0x7E03; // PA Table write (burst), Output Power: -30  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E25; // PA Table write (burst), Output Power: -12  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E2D; // PA Table write (burst), Output Power: -6   [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E8D; // PA Table write (burst), Output Power: 0    [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC3; // PA Table write (burst), Output Power: 10   [dBm]&lt;br /&gt;
     RF1AINSTRW = 0x7EC0; // PA Table write (burst), Output Power: Maximum  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC6; // PA Table write (burst), Output Power(default):  8.8  [dBm]&lt;br /&gt;
     &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
       RF1AINSTR1B = RF_PATABRD;                 // -miguel read &amp;amp; write&lt;br /&gt;
     &lt;br /&gt;
     // Traverse PATABLE pointers to read &lt;br /&gt;
     for (i = 0; i &amp;lt; 7; i++)&lt;br /&gt;
     {&lt;br /&gt;
       while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
       valueRead  = RF1ADOUT1B;     &lt;br /&gt;
     }&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
     valueRead  = RF1ADOUTB;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 10'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[03/04/17 - 09/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission étant trop faible pour brouiller la communication entre les 2 modules LoRa, nous avons décidé de changer l'antenne de la carte. Il a fallu couper l'antenne patch à l'aide d'une scie afin de souder un connecteur SMA.&lt;br /&gt;
[[Fichier:cc430antenne.png]]&lt;br /&gt;
*Grâce à cette nouvelle antenne, la communication peut maintenant être brouillée à une puissance de 10dBm (contre 6 auparavant). Mais il faut que la carte reste relativement proche d'un des modules.&lt;br /&gt;
*Pour réussir le brouillage quand les modules LoRa sont à leur puissance maximale (14dBm), il faudra sûrement ajouter un amplificateur entre la sortie de la carte et son antenne.&lt;br /&gt;
*Nous avons codé la fonction de scan en c et l'avons incorporé dans le main &lt;br /&gt;
**Cette fonction autorise le module à entrer en mode RX pour recevoir les communications. Elle incrémente ensuite le canal pour parcourir la plage 863-870MHz afin de détecter une communication. Toute les incrémentations, la variable rssi récupère la valeur contenue dans le registre qui correspond à la valeur du RSSI. Cette valeur étant en binaire complément 2, elle est convertie en dBm et placée dans un entier. Enfin, si cette valeur est supérieur à la valeur maximale déjà mesuré ou à un palier prédéfini (ici 0dBm), on stocke le numéro du canal correspondant qui sera utilisé dans le main par la suite.&lt;br /&gt;
&lt;br /&gt;
fonction de scan :&lt;br /&gt;
 void freq_scan(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char rssi;&lt;br /&gt;
   long rssi_dbm;&lt;br /&gt;
   unsigned char chan_scan=START_FREQ_CHAN;&lt;br /&gt;
   long rssi_max=0; //scan will take communication above 0dbm&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, led2, 0x00); //led2 blue while scanning&lt;br /&gt;
   &lt;br /&gt;
   ChangeChannel(chan_scan);&lt;br /&gt;
   ReceiveOn();    //enable RX&lt;br /&gt;
   while((Strobe(RF_SNOP) &amp;amp; 0x70) != 0x10); //make sure RX is ready&lt;br /&gt;
   while(chan_scan&amp;lt;STOP_FREQ_CHAN)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chan_scan);&lt;br /&gt;
     __delay_cycles(DELAY_RSSI);       //wait for rssi to be updated&lt;br /&gt;
     rssi = ReadSingleReg(RSSI);  //define in cc430f5137.h RSSI=0x34 corresponding to addr of rssi value&lt;br /&gt;
     if (rssi &amp;gt;= 128) &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (long)((long)( rssi - 256) / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     else &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (rssi / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     if(rssi_dbm&amp;gt;rssi_max)&lt;br /&gt;
     {&lt;br /&gt;
       rssi_max=rssi_dbm;&lt;br /&gt;
       chan_jam=chan_scan-10; //start jamming 2Mhz below max dbm received&lt;br /&gt;
     }&lt;br /&gt;
     chan_scan++;&lt;br /&gt;
     Strobe( RF_SFRX); //flush the RX FIFO&lt;br /&gt;
   }&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
nouveau main :&lt;br /&gt;
&lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chan_main=0x00;&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 on if cc430 powered&lt;br /&gt;
   int i;&lt;br /&gt;
   &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     freq_scan();&lt;br /&gt;
     ReceiveOff();&lt;br /&gt;
     chan_main=chan_jam;&lt;br /&gt;
     if (chan_main != 0)  //jam only if a communication xas detected with freq_scan&lt;br /&gt;
     {&lt;br /&gt;
       for(i=0 ; i&amp;lt;(20*NUM_JAM_RAMP) ; i++) //ramp start 2Mhz below chan_jam and stop 2Mhz above&lt;br /&gt;
       {&lt;br /&gt;
         ChangeChannel(chan_main);&lt;br /&gt;
         if (chan_main&amp;gt;= (chan_jam+20))&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main=0x00;&lt;br /&gt;
           led2=led2^0x10;&lt;br /&gt;
           set_color(led1, 0x00, 0x00, led2, 0x00, 0x00); //led2 blink red every two ramp of jamming&lt;br /&gt;
         }&lt;br /&gt;
         else&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main++;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     chan_main=0x00;  &lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
header :&lt;br /&gt;
 #define DELAY 100 //300us  &lt;br /&gt;
 #define DELAY_RSSI 10 //30us&lt;br /&gt;
 &lt;br /&gt;
 #define START_FREQ_CHAN 15&lt;br /&gt;
 #define STOP_FREQ_CHAN 50     //scanning 863-870Mhz with 200khz steps&lt;br /&gt;
 #define RSSI_OFFSET 74 //cf datasheet&lt;br /&gt;
 &lt;br /&gt;
 #define NUM_JAM_RAMP 50&lt;br /&gt;
 &lt;br /&gt;
 unsigned char chan_jam=0x00;&lt;br /&gt;
 unsigned char led2=0x10;&lt;br /&gt;
 unsigned char led1=0x10;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Fichiers Rendus'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[[Fichier:code_fonction_1.zip]]&lt;br /&gt;
*[[Fichier:code_fonction_2.zip]]&lt;br /&gt;
*[[Fichier:compte_rendu.pdf]]&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42131</id>
		<title>IMA4 2016/2017 P32</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42131"/>
				<updated>2017-05-12T08:09:59Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Fichiers Rendus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Cahier des charges'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;Présentation générale du projet&amp;lt;/span&amp;gt;=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Contexte&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'expansion de l'utilisation des objets connectés permet de nos jours d'accéder à des données ou de contrôler aisément d'autres systèmes connectés à distance. Les objets connectés sont de plus en plus déployés mais leur sécurité n'est pas toujours testée. Par conséquent, de nombreuses informations sensibles sont susceptibles de transiter en permanence par le biais de multiples plages de fréquences. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ceci amène donc un questionnement sur la sécurité des transferts de données entre la multitude d'objets connectés actuellement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Objectif du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de réaliser un brouilleur d'ondes radiofréquence dans la bande des 868 MHz capable de bloquer les communications LoRa.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Description du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
A l'aboutissement du projet, nous devrions être capable de détecter une communication LoRa dans la bande des 868 MHz, et de la brouiller elle seule, sans incidence sur les autres communications sur d'autres fréquences du réseau LoRa.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous devrons réaliser un montage réalisant un brouillage sur la plage 863-870Mhz afin d'empêcher toute communication LoRa, en envoyant du bruit électronique sur toute la plage de fréquence.&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet, nous perfectionnerons ce montage pour qu'il puisse détecter une communication LoRa à une fréquence donnée (grâce au &amp;quot;join-request message&amp;quot; de 18 octets envoyés par le end-point/node, ou bien grâce aux informations données dans le préambule des paquets), afin d'envoyer des données erronées et de bloquer uniquement cette communication.&lt;br /&gt;
&lt;br /&gt;
Si le temps et le budget le permettent, nous pourrons aussi être amenés à brouiller la plage de fréquences autour des 433 MHz (aussi utilisé par le réseau LoRa).&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Choix techniques : matériel et logiciel&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser ce système, nous allons utiliser un microcontrôleur cc430 muni d'un transceiver cc1101, d'un récepteur LoRa(868MHz) communicant via protocole SPI avec le microcontrôleur, 2 antennes, une batterie, quelques LEDs.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Calendrier prévisionnel'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Liste des tâches à effectuer&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
# Documentation sur le réseau LoRa&lt;br /&gt;
##moyen de transmission&lt;br /&gt;
##format de modulation&lt;br /&gt;
##trame des paquets&lt;br /&gt;
# Réalisation du premier montage brouillant toute la plage&lt;br /&gt;
##contrôler l'émetteur RF du cc430&lt;br /&gt;
##programmer un bruitage sur la plage 863-870MHz&lt;br /&gt;
##test et optimisation&lt;br /&gt;
# Ajout d'un récepteur LoRa pour détecter et brouiller une seule communication&lt;br /&gt;
##contrôler le récepteur LoRa avec le cc430 par protocole spi&lt;br /&gt;
##détecter une communication LoRa à une fréquence donnée&lt;br /&gt;
##contrôler l'émetteur RF afin de brouiller cette communication de manière brutale&lt;br /&gt;
##brouiller cette communication en tentant de changer les données du paquet &lt;br /&gt;
##test et optimisation&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Calendrier&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
''[[Avant le 19/12/16]]'' - Élaboration du Cahier des charges et remplissage du Wiki&lt;br /&gt;
&lt;br /&gt;
''[[Avant fin Janvier]]'' - Complément du Cahier des Charges et listage du matériel nécessaire pour le projet&lt;br /&gt;
&lt;br /&gt;
''[[Répartition sur le S8]]'' - 120h: Réalisation de la 1ere fonction (45h) / Réalisation de la 2e fonction (45h) / Test et débuguage (30h)&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Feuille d'heures'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Cahier des charges / Wiki&lt;br /&gt;
| 4h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3,5h&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|1h&lt;br /&gt;
|1h&lt;br /&gt;
|&lt;br /&gt;
|1h&lt;br /&gt;
|0,5h&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le réseau LoRa&lt;br /&gt;
| &lt;br /&gt;
| 6h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 1ère fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1,5h&lt;br /&gt;
|6h&lt;br /&gt;
|6h&lt;br /&gt;
|4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 2ème fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Tests et mesures&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Modification de la carte&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Avancement du Projet'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Phase préparatoire'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[Jeu 15/12/16]]'' &lt;br /&gt;
*Rendez-vous de mise au point du cahier des charges avec les trois encadrants (M. Boé, M. Vantroys et M. Redon)&lt;br /&gt;
*Elaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 1'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[23/01/17 - 29/01/17]]'' &lt;br /&gt;
*Revue du Cahier des Charges&lt;br /&gt;
*Recherches approfondies sur les modes de transmissions du réseau LoRa&lt;br /&gt;
*Recherche de matériel&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 2'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[30/01/17 - 05/02/17]]''  &lt;br /&gt;
*Précisions sur le cahier des charges&lt;br /&gt;
*Listage du matériel&lt;br /&gt;
*Recherche et détermination de solutions technologiques possibles pour les fonctions demandées&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 3'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[06/02/17 - 12/02/17]]''&lt;br /&gt;
*validation du matériel&lt;br /&gt;
Nous allons utiliser un cc430f5137 (MCU+RF) monté sur une carte optimisée pour les communications autours de 868Mhz.&lt;br /&gt;
Nous pouvons commencer à étudier son fonctionnement, particulièrement celui du module RF (cc1101).&lt;br /&gt;
Nous avons aussi récupéré des exemples de code en c sur le site de Texas Instrument et vu l'utilisation de ces codes sur un projet IMA5 de l'an passé.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 4'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/02/17 - 19/02/17]]''&lt;br /&gt;
*Recherche de solutions pour répondre à la 1ère fonction (brouiller la plage 863-870Mhz).&lt;br /&gt;
&lt;br /&gt;
Après une lecture approfondie de la datasheet du module RF du cc430, nous avons choisi d'utiliser la fréquence de base du module (pouvant être définie grâce aux registres) couplée au registre CHANNR. Cela nous permettra de modifier plus facilement la fréquence de la porteuse, en suivant la formule suivante : [[Fichier:rampe.png]].&lt;br /&gt;
&lt;br /&gt;
Nous pourrons alors balayer la plage de fréquence en changeant la valeur de CHANNR.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 5'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[27/02/17 - 05/03/17]]''&lt;br /&gt;
&lt;br /&gt;
A l'aide de la datasheet du cc1101 ([http://www.ti.com/lit/ds/symlink/cc1101.pdf datasheet_cc1101] pages : 70 à 95), nous avons défini les registres du module RF de la manière suivante (sachant que la fréquence du quartz est de 26MHz, soit Fxosc=26MHz) :&lt;br /&gt;
&lt;br /&gt;
*La fréquence de base a été fixée à 862,999MHz en suivant la formule donnée dans la data sheet[[Fichier:carrier_formula.png]]&lt;br /&gt;
ce qui nous a donné les valeurs FREQ2=0x21, FREQ1=0x31 et FREQ0=0x3A (FREQ=2 175 290)&lt;br /&gt;
&lt;br /&gt;
*Nous avons suivi la formule [[Fichier:chanspace_formula.png]] afin d'avoir un espacement entre les cannaux d'environ 100Khz&lt;br /&gt;
ce qui nous a donné  MDMCFG1=0x02 (CHANSPC_E=2) et MDMCFG0=0x00(CHANSPC_M=0)&lt;br /&gt;
&lt;br /&gt;
*Pour le moment, nous avons choisi le mode de modulation AM, nous avons donc initialisé les registres MDMCFG2=0x30 (mode ASK/OOK) et FREND0=0x50(patable=0 donnant le mode ASK)&lt;br /&gt;
&lt;br /&gt;
*Nous avons créé une bibliothèque RFconfig.h regroupant les valeurs de tous les registres :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal and high VCO recommended&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz stop at 870&lt;br /&gt;
 //FREQ=00 10 00 01 00 11 00 01 00 11 10 10&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //CHANNR from 0 to 69 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 //0 (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x0F //default (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x31 //868Mhz&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0x3A /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x22 //default (data rate)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x30 // ASK/OOK,no sync-word&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x02 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0x00 //chanspc_m=0&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 //default (no effet on ASK/OOK mode)&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset not used)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x03 //default (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x40 //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x50 //patable=0 -&amp;gt; ASK&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosen&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x0B //default&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 6'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[06/03/17 - 12/03/17]]''&lt;br /&gt;
*Nous avons préparé un premier code réalisant une rampe sur la plage 863-870MHz. Ce code est basé sur une boucle infinie qui incrémente le registre chann de 0 à 69 (pour passer de 863 à 870Mhz) et envoie des paquets 0xFF grâce aux fonctions ChangeChannel(chann) et send_comand().&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		1	// maximum size of data sent by rf&lt;br /&gt;
 &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 10000&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFF;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init();&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);	 &lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
     {&lt;br /&gt;
       ChangeChannel(chann);&lt;br /&gt;
       send_cmd();&lt;br /&gt;
       if(chann&amp;gt;=69) &lt;br /&gt;
 	{&lt;br /&gt;
 	  chann=0x00;&lt;br /&gt;
 	}&lt;br /&gt;
       else&lt;br /&gt;
 	{&lt;br /&gt;
 	  chann++;&lt;br /&gt;
 	}&lt;br /&gt;
       __delay_cycles(DELAY);&lt;br /&gt;
     }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Après quelques corrections du code, nous avons pu le compiler grâce au Makefile&lt;br /&gt;
&lt;br /&gt;
*Avec la commande (exécutée en root) et le montage suivants, nous avons upload le main sur le cc430&lt;br /&gt;
 mspdebug rf2500 &amp;quot;prog main&amp;quot;&lt;br /&gt;
[[Fichier:montage001.png]]&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 7'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/03/17 - 19/03/17]]''&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé les premiers tests sur l'analyseur de spectre afin de vérifier que le code fonctionne bien.&lt;br /&gt;
&lt;br /&gt;
*Dans un premier temps, nous avons essayé une fréquence fixe pour voir la calibration du cc430.&lt;br /&gt;
[[Fichier:862.png]]&lt;br /&gt;
Avec un exemple à 862Mhz, on remarque bien que les registres ont bien été initialisés et que la carte émet à la fréquence demandée.&lt;br /&gt;
&lt;br /&gt;
*Ensuite, nous avons testé le code effectuant le balayage sur la plage de fréquence 863-870Mhz, en augmentant le sweep time de l'analyseur de spectre pour voir les différentes fréquences auxquelles la carte émet.&lt;br /&gt;
[[Fichier:sweep.png]]&lt;br /&gt;
En observant de 861 à 872 Mhz sur l'écran de l'analyseur, on peut voir que le code effectue bien le balayage.&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission de la carte étant faible, nous avons essayé de l'augmenter en modifiant certains registres notamment ceux que l'on peut optimiser à l'aide du logiciel smart RF studio. Cependant, nous pensons qu'il faudra changer l'antenne patch actuelle de la carte pour une antenne connectée en SMA.&lt;br /&gt;
&lt;br /&gt;
*Nous avons aussi tenté de brouiller les communications d'autres groupes de projet utilisant des modules LoRa. Ces derniers étant configurés à 433Mhz, nous avons dû changer la fréquence de notre carte. Le brouillage ne fonctionnait pas mais notre carte étant optimisée pour une émission autour de 868Mhz, les résultats n'étaient pas pertinents.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 8'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[20/03/17 - 26/03/17]]'' &lt;br /&gt;
&lt;br /&gt;
*Nous avons emprunté à M. Vantroys 3 modules SX1276 montés sur des cartes NUCLEO-F401RE afin de pouvoir tester notre carte sur une communication LoRa à 868Mhz&lt;br /&gt;
[[Fichier:lorambed.png]]&lt;br /&gt;
*Le code utilisé pour le test a été récupéré sur le forum des développeurs du site mbed.com. C'est un code &amp;quot;ping pong&amp;quot; effectuant une communication continue entre deux modules LoRa à une fréquence de 868Mhz. Il nous a suffit d'utiliser le compilateur du site (qui regroupe toutes les bibliothèques nécessaires) en indiquant que la carte utilisée est une F401RE pour que le binaire produit soit compatible. La carte NUCLEO étant reconnue comme un système de fichier par Linux, pour la flasher il faut la monter en usb à l'aide des commandes fdisk et mount puis de copier le binaire dedans avec la commande cp.&lt;br /&gt;
[[Fichier:lora pingpong.zip]]&lt;br /&gt;
*Une fois les modules NUCLEO flashés, la communication LoRa est établie dès que deux modules sont alimentés. Nous avons donc branché en USB deux modules sur deux machines différentes afin d'observer la communication sur des terminaux. La communication se fait bien, l'un envoie &amp;quot;ping&amp;quot; tandis que l'autre envoie &amp;quot;pong&amp;quot; lorsqu'il reçoit &amp;quot;ping&amp;quot;. Malheureusement, comme nous l'avions prédit, notre carte a une puissance d'émission trop faible et ne parvient pas à brouiller efficacement.&lt;br /&gt;
*Les modules peuvent aussi communiquer en modulation FSK, dans ce cas notre système arrive à effectuer le brouillage. Néanmoins, il serait plus intéressant de parvenir à brouiller la communication LoRa.&lt;br /&gt;
*Après plusieurs changements dans le code du cc430, n'ayant pas de résultats positifs, nous avons diminué la puissance d'émission des modules LoRa en changeant un header dans le code lora_pingpong.cpp. En passant cette puissance de 14dBm à 6dBm, nous sommes parvenus à brouiller la communication entre les deux modules LoRa.&lt;br /&gt;
&lt;br /&gt;
*En parallèle, nous avons commencé à rechercher des solutions pour la fonction 2. Un pseudo code est donné sur le site ti.com ([https://www.ti.com/lit/an/swra315/swra315.pdf pseudo_code_frequency_scanning]) qui permet de faire un scan sur une plage de fréquence et de récupérer la fréquence ou le signal reçu est le plus fort. Ce code pourra être écrit en C puis incorporé dans notre main pour détecter une communication et la brouiller.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 9'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[27/03/17 - 02/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*Même si le brouillage ne s’effectue qu'à puissance réduite, nous avons cherché à l'optimiser&lt;br /&gt;
**Nous avons premièrement réalisé que le mode de modulation choisi au départ (ASK) n'était pas adapté au brouillage d'une communication LoRa. Nous avons donc essayé le mode GFSK qui est le plus proche du format de modulation du réseau LoRa. Nous avons aussi essayé les modes 2FSK et 4FSK qui sont relativement proches du GFSK. Nous en avons conclu que le mode de modulation à utiliser est GFSK (ce mode fonctionne aussi pour brouiller la modulation FSK)&lt;br /&gt;
**Ensuite, nous avons réduit la plage de fréquence balayée par le cc430 afin de voir si il y avait une influence sur le brouillage. Nous avons remarqué que le brouillage était plus efficace pour un balayage de 866 à 870 Mhz (au lieu de 863-870 initialement)&lt;br /&gt;
**Dans le même ordre d'idée, nous avons décidé de réduire le nombre d'incrémentations du registre CHANNR afin d'augmenter la rapidité du balayage. Pour ce faire, nous avons augmenté la taille de chaque canal, passant de 100kHz à 200kHz&lt;br /&gt;
**La puissance d'émission de la carte a été changée dans la fonction WritePATable (appelée par rfinit() dans le main), afin d'être maximale (12dBm)&lt;br /&gt;
**Enfin, nous avons augmenté le nombre de paquets à envoyer&lt;br /&gt;
&lt;br /&gt;
Nouvelle bibliothèque RFconfig.h :&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //high VCO FSCAL2=0x2A&lt;br /&gt;
 &lt;br /&gt;
 //867 : 21589A&lt;br /&gt;
 //866 : 214EC2&lt;br /&gt;
 //865 : 2144EA&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 //for 433Mhz : freq=0x10A766 and low vco (FSCAL2=0x0A)&lt;br /&gt;
 //432 : 0x109D8E&lt;br /&gt;
 &lt;br /&gt;
 //gfsk, 866, chann space ~200k, high vco currently&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 // (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x06 //default 0f (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x4E //866&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0xC2 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x83 // data rate&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x13 // GFSK &lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x22 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0xF8 //chanspc_m=248&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 // default 47khz deviation&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset for demodulation)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x07 // (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x77 //&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x10 //patable=0 (useless for gfsk) &lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosed&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x09 //&lt;br /&gt;
&lt;br /&gt;
Nouveau main.c : &lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;led_commands.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		10	// maximum size of data sent by rf&lt;br /&gt;
  &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 5000 //15ms  &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Any other commands are for RSSI measurement&lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFD;&lt;br /&gt;
   buffer[1] = 0xAA;&lt;br /&gt;
   buffer[2] = 0xFF;&lt;br /&gt;
   buffer[3] = 0x11;&lt;br /&gt;
   buffer[4] = 0xFF;&lt;br /&gt;
   buffer[5] = 0x66;&lt;br /&gt;
   buffer[6] = 0xFF;&lt;br /&gt;
   buffer[7] = 0x33;&lt;br /&gt;
   buffer[8] = 0x1F;&lt;br /&gt;
   buffer[9] = 0xF8;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   unsigned char led2=0x10;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(0x10, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 allumée quand le cc430 est sous tension&lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chann);&lt;br /&gt;
     send_cmd();&lt;br /&gt;
     if(chann&amp;gt;=20) //866-870&lt;br /&gt;
     {&lt;br /&gt;
       chann=0x00;&lt;br /&gt;
       led2=led2^0x10;&lt;br /&gt;
       set_color(0x10, 0x00, 0x00, led2, 0x00, 0x00); //led2 s'allume toutes les 2 rampes&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {&lt;br /&gt;
       chann++;&lt;br /&gt;
     }&lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Fonction WritePATable :&lt;br /&gt;
&lt;br /&gt;
 void WritePATable(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char valueRead = 0;&lt;br /&gt;
   &lt;br /&gt;
   //while(valueRead != 0x03)    // Output Power: -30  [dBm]&lt;br /&gt;
   //while(valueRead != 0x25)    // Output Power: -12  [dBm]&lt;br /&gt;
   //while(valueRead != 0x2D)    // Output Power: -6   [dBm]&lt;br /&gt;
   //while(valueRead != 0x8D)    // Output Power:  0   [dBm]&lt;br /&gt;
   //while(valueRead != 0xC3)    // Output Power:  10  [dBm]&lt;br /&gt;
   while(valueRead != 0xC0)    // Output Power:  Maximum  [dBm]&lt;br /&gt;
   //while(valueRead != 0xC6)    // Output Power(default):  8.8  [dBm]&lt;br /&gt;
   {&lt;br /&gt;
     /* Write the power output to the PA_TABLE and verify the write operation.  */&lt;br /&gt;
     unsigned char i = 0; &lt;br /&gt;
 &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
     //RF1AINSTRW = 0x7E03; // PA Table write (burst), Output Power: -30  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E25; // PA Table write (burst), Output Power: -12  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E2D; // PA Table write (burst), Output Power: -6   [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E8D; // PA Table write (burst), Output Power: 0    [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC3; // PA Table write (burst), Output Power: 10   [dBm]&lt;br /&gt;
     RF1AINSTRW = 0x7EC0; // PA Table write (burst), Output Power: Maximum  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC6; // PA Table write (burst), Output Power(default):  8.8  [dBm]&lt;br /&gt;
     &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
       RF1AINSTR1B = RF_PATABRD;                 // -miguel read &amp;amp; write&lt;br /&gt;
     &lt;br /&gt;
     // Traverse PATABLE pointers to read &lt;br /&gt;
     for (i = 0; i &amp;lt; 7; i++)&lt;br /&gt;
     {&lt;br /&gt;
       while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
       valueRead  = RF1ADOUT1B;     &lt;br /&gt;
     }&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
     valueRead  = RF1ADOUTB;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 10'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[03/04/17 - 09/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission étant trop faible pour brouiller la communication entre les 2 modules LoRa, nous avons décidé de changer l'antenne de la carte. Il a fallu couper l'antenne patch à l'aide d'une scie afin de souder un connecteur SMA.&lt;br /&gt;
[[Fichier:cc430antenne.png]]&lt;br /&gt;
*Grâce à cette nouvelle antenne, la communication peut maintenant être brouillée à une puissance de 10dBm (contre 6 auparavant). Mais il faut que la carte reste relativement proche d'un des modules.&lt;br /&gt;
*Pour réussir le brouillage quand les modules LoRa sont à leur puissance maximale (14dBm), il faudra sûrement ajouter un amplificateur entre la sortie de la carte et son antenne.&lt;br /&gt;
*Nous avons codé la fonction de scan en c et l'avons incorporé dans le main &lt;br /&gt;
**Cette fonction autorise le module à entrer en mode RX pour recevoir les communications. Elle incrémente ensuite le canal pour parcourir la plage 863-870MHz afin de détecter une communication. Toute les incrémentations, la variable rssi récupère la valeur contenue dans le registre qui correspond à la valeur du RSSI. Cette valeur étant en binaire complément 2, elle est convertie en dBm et placée dans un entier. Enfin, si cette valeur est supérieur à la valeur maximale déjà mesuré ou à un palier prédéfini (ici 0dBm), on stocke le numéro du canal correspondant qui sera utilisé dans le main par la suite.&lt;br /&gt;
&lt;br /&gt;
fonction de scan :&lt;br /&gt;
 void freq_scan(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char rssi;&lt;br /&gt;
   long rssi_dbm;&lt;br /&gt;
   unsigned char chan_scan=START_FREQ_CHAN;&lt;br /&gt;
   long rssi_max=0; //scan will take communication above 0dbm&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, led2, 0x00); //led2 blue while scanning&lt;br /&gt;
   &lt;br /&gt;
   ChangeChannel(chan_scan);&lt;br /&gt;
   ReceiveOn();    //enable RX&lt;br /&gt;
   while((Strobe(RF_SNOP) &amp;amp; 0x70) != 0x10); //make sure RX is ready&lt;br /&gt;
   while(chan_scan&amp;lt;STOP_FREQ_CHAN)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chan_scan);&lt;br /&gt;
     __delay_cycles(DELAY_RSSI);       //wait for rssi to be updated&lt;br /&gt;
     rssi = ReadSingleReg(RSSI);  //define in cc430f5137.h RSSI=0x34 corresponding to addr of rssi value&lt;br /&gt;
     if (rssi &amp;gt;= 128) &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (long)((long)( rssi - 256) / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     else &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (rssi / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     if(rssi_dbm&amp;gt;rssi_max)&lt;br /&gt;
     {&lt;br /&gt;
       rssi_max=rssi_dbm;&lt;br /&gt;
       chan_jam=chan_scan-10; //start jamming 2Mhz below max dbm received&lt;br /&gt;
     }&lt;br /&gt;
     chan_scan++;&lt;br /&gt;
     Strobe( RF_SFRX); //flush the RX FIFO&lt;br /&gt;
   }&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
nouveau main :&lt;br /&gt;
&lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chan_main=0x00;&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 on if cc430 powered&lt;br /&gt;
   int i;&lt;br /&gt;
   &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     freq_scan();&lt;br /&gt;
     ReceiveOff();&lt;br /&gt;
     chan_main=chan_jam;&lt;br /&gt;
     if (chan_main != 0)  //jam only if a communication xas detected with freq_scan&lt;br /&gt;
     {&lt;br /&gt;
       for(i=0 ; i&amp;lt;(20*NUM_JAM_RAMP) ; i++) //ramp start 2Mhz below chan_jam and stop 2Mhz above&lt;br /&gt;
       {&lt;br /&gt;
         ChangeChannel(chan_main);&lt;br /&gt;
         if (chan_main&amp;gt;= (chan_jam+20))&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main=0x00;&lt;br /&gt;
           led2=led2^0x10;&lt;br /&gt;
           set_color(led1, 0x00, 0x00, led2, 0x00, 0x00); //led2 blink red every two ramp of jamming&lt;br /&gt;
         }&lt;br /&gt;
         else&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main++;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     chan_main=0x00;  &lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
header :&lt;br /&gt;
 #define DELAY 100 //300us  &lt;br /&gt;
 #define DELAY_RSSI 10 //30us&lt;br /&gt;
 &lt;br /&gt;
 #define START_FREQ_CHAN 15&lt;br /&gt;
 #define STOP_FREQ_CHAN 50     //scanning 863-870Mhz with 200khz steps&lt;br /&gt;
 #define RSSI_OFFSET 74 //cf datasheet&lt;br /&gt;
 &lt;br /&gt;
 #define NUM_JAM_RAMP 50&lt;br /&gt;
 &lt;br /&gt;
 unsigned char chan_jam=0x00;&lt;br /&gt;
 unsigned char led2=0x10;&lt;br /&gt;
 unsigned char led1=0x10;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Fichiers Rendus'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[[Fichier:code_fonction_1.zip]]&lt;br /&gt;
*[[Fichier:code_fonction_2.zip]]&lt;br /&gt;
*[[Fichier:compte_rendu]]&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42071</id>
		<title>IMA4 2016/2017 P32</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42071"/>
				<updated>2017-05-11T12:46:00Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Cahier des charges'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;Présentation générale du projet&amp;lt;/span&amp;gt;=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Contexte&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'expansion de l'utilisation des objets connectés permet de nos jours d'accéder à des données ou de contrôler aisément d'autres systèmes connectés à distance. Les objets connectés sont de plus en plus déployés mais leur sécurité n'est pas toujours testée. Par conséquent, de nombreuses informations sensibles sont susceptibles de transiter en permanence par le biais de multiples plages de fréquences. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ceci amène donc un questionnement sur la sécurité des transferts de données entre la multitude d'objets connectés actuellement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Objectif du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de réaliser un brouilleur d'ondes radiofréquence dans la bande des 868 MHz capable de bloquer les communications LoRa.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Description du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
A l'aboutissement du projet, nous devrions être capable de détecter une communication LoRa dans la bande des 868 MHz, et de la brouiller elle seule, sans incidence sur les autres communications sur d'autres fréquences du réseau LoRa.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous devrons réaliser un montage réalisant un brouillage sur la plage 863-870Mhz afin d'empêcher toute communication LoRa, en envoyant du bruit électronique sur toute la plage de fréquence.&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet, nous perfectionnerons ce montage pour qu'il puisse détecter une communication LoRa à une fréquence donnée (grâce au &amp;quot;join-request message&amp;quot; de 18 octets envoyés par le end-point/node, ou bien grâce aux informations données dans le préambule des paquets), afin d'envoyer des données erronées et de bloquer uniquement cette communication.&lt;br /&gt;
&lt;br /&gt;
Si le temps et le budget le permettent, nous pourrons aussi être amenés à brouiller la plage de fréquences autour des 433 MHz (aussi utilisé par le réseau LoRa).&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Choix techniques : matériel et logiciel&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser ce système, nous allons utiliser un microcontrôleur cc430 muni d'un transceiver cc1101, d'un récepteur LoRa(868MHz) communicant via protocole SPI avec le microcontrôleur, 2 antennes, une batterie, quelques LEDs.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Calendrier prévisionnel'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Liste des tâches à effectuer&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
# Documentation sur le réseau LoRa&lt;br /&gt;
##moyen de transmission&lt;br /&gt;
##format de modulation&lt;br /&gt;
##trame des paquets&lt;br /&gt;
# Réalisation du premier montage brouillant toute la plage&lt;br /&gt;
##contrôler l'émetteur RF du cc430&lt;br /&gt;
##programmer un bruitage sur la plage 863-870MHz&lt;br /&gt;
##test et optimisation&lt;br /&gt;
# Ajout d'un récepteur LoRa pour détecter et brouiller une seule communication&lt;br /&gt;
##contrôler le récepteur LoRa avec le cc430 par protocole spi&lt;br /&gt;
##détecter une communication LoRa à une fréquence donnée&lt;br /&gt;
##contrôler l'émetteur RF afin de brouiller cette communication de manière brutale&lt;br /&gt;
##brouiller cette communication en tentant de changer les données du paquet &lt;br /&gt;
##test et optimisation&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Calendrier&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
''[[Avant le 19/12/16]]'' - Élaboration du Cahier des charges et remplissage du Wiki&lt;br /&gt;
&lt;br /&gt;
''[[Avant fin Janvier]]'' - Complément du Cahier des Charges et listage du matériel nécessaire pour le projet&lt;br /&gt;
&lt;br /&gt;
''[[Répartition sur le S8]]'' - 120h: Réalisation de la 1ere fonction (45h) / Réalisation de la 2e fonction (45h) / Test et débuguage (30h)&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Feuille d'heures'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Cahier des charges / Wiki&lt;br /&gt;
| 4h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3,5h&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|1h&lt;br /&gt;
|1h&lt;br /&gt;
|&lt;br /&gt;
|1h&lt;br /&gt;
|0,5h&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le réseau LoRa&lt;br /&gt;
| &lt;br /&gt;
| 6h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 1ère fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1,5h&lt;br /&gt;
|6h&lt;br /&gt;
|6h&lt;br /&gt;
|4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 2ème fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Tests et mesures&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Modification de la carte&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Avancement du Projet'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Phase préparatoire'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[Jeu 15/12/16]]'' &lt;br /&gt;
*Rendez-vous de mise au point du cahier des charges avec les trois encadrants (M. Boé, M. Vantroys et M. Redon)&lt;br /&gt;
*Elaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 1'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[23/01/17 - 29/01/17]]'' &lt;br /&gt;
*Revue du Cahier des Charges&lt;br /&gt;
*Recherches approfondies sur les modes de transmissions du réseau LoRa&lt;br /&gt;
*Recherche de matériel&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 2'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[30/01/17 - 05/02/17]]''  &lt;br /&gt;
*Précisions sur le cahier des charges&lt;br /&gt;
*Listage du matériel&lt;br /&gt;
*Recherche et détermination de solutions technologiques possibles pour les fonctions demandées&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 3'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[06/02/17 - 12/02/17]]''&lt;br /&gt;
*validation du matériel&lt;br /&gt;
Nous allons utiliser un cc430f5137 (MCU+RF) monté sur une carte optimisée pour les communications autours de 868Mhz.&lt;br /&gt;
Nous pouvons commencer à étudier son fonctionnement, particulièrement celui du module RF (cc1101).&lt;br /&gt;
Nous avons aussi récupéré des exemples de code en c sur le site de Texas Instrument et vu l'utilisation de ces codes sur un projet IMA5 de l'an passé.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 4'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/02/17 - 19/02/17]]''&lt;br /&gt;
*Recherche de solutions pour répondre à la 1ère fonction (brouiller la plage 863-870Mhz).&lt;br /&gt;
&lt;br /&gt;
Après une lecture approfondie de la datasheet du module RF du cc430, nous avons choisi d'utiliser la fréquence de base du module (pouvant être définie grâce aux registres) couplée au registre CHANNR. Cela nous permettra de modifier plus facilement la fréquence de la porteuse, en suivant la formule suivante : [[Fichier:rampe.png]].&lt;br /&gt;
&lt;br /&gt;
Nous pourrons alors balayer la plage de fréquence en changeant la valeur de CHANNR.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 5'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[27/02/17 - 05/03/17]]''&lt;br /&gt;
&lt;br /&gt;
A l'aide de la datasheet du cc1101 ([http://www.ti.com/lit/ds/symlink/cc1101.pdf datasheet_cc1101] pages : 70 à 95), nous avons défini les registres du module RF de la manière suivante (sachant que la fréquence du quartz est de 26MHz, soit Fxosc=26MHz) :&lt;br /&gt;
&lt;br /&gt;
*La fréquence de base a été fixée à 862,999MHz en suivant la formule donnée dans la data sheet[[Fichier:carrier_formula.png]]&lt;br /&gt;
ce qui nous a donné les valeurs FREQ2=0x21, FREQ1=0x31 et FREQ0=0x3A (FREQ=2 175 290)&lt;br /&gt;
&lt;br /&gt;
*Nous avons suivi la formule [[Fichier:chanspace_formula.png]] afin d'avoir un espacement entre les cannaux d'environ 100Khz&lt;br /&gt;
ce qui nous a donné  MDMCFG1=0x02 (CHANSPC_E=2) et MDMCFG0=0x00(CHANSPC_M=0)&lt;br /&gt;
&lt;br /&gt;
*Pour le moment, nous avons choisi le mode de modulation AM, nous avons donc initialisé les registres MDMCFG2=0x30 (mode ASK/OOK) et FREND0=0x50(patable=0 donnant le mode ASK)&lt;br /&gt;
&lt;br /&gt;
*Nous avons créé une bibliothèque RFconfig.h regroupant les valeurs de tous les registres :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal and high VCO recommended&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz stop at 870&lt;br /&gt;
 //FREQ=00 10 00 01 00 11 00 01 00 11 10 10&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //CHANNR from 0 to 69 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 //0 (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x0F //default (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x31 //868Mhz&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0x3A /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x22 //default (data rate)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x30 // ASK/OOK,no sync-word&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x02 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0x00 //chanspc_m=0&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 //default (no effet on ASK/OOK mode)&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset not used)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x03 //default (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x40 //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x50 //patable=0 -&amp;gt; ASK&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosen&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x0B //default&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 6'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[06/03/17 - 12/03/17]]''&lt;br /&gt;
*Nous avons préparé un premier code réalisant une rampe sur la plage 863-870MHz. Ce code est basé sur une boucle infinie qui incrémente le registre chann de 0 à 69 (pour passer de 863 à 870Mhz) et envoie des paquets 0xFF grâce aux fonctions ChangeChannel(chann) et send_comand().&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		1	// maximum size of data sent by rf&lt;br /&gt;
 &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 10000&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFF;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init();&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);	 &lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
     {&lt;br /&gt;
       ChangeChannel(chann);&lt;br /&gt;
       send_cmd();&lt;br /&gt;
       if(chann&amp;gt;=69) &lt;br /&gt;
 	{&lt;br /&gt;
 	  chann=0x00;&lt;br /&gt;
 	}&lt;br /&gt;
       else&lt;br /&gt;
 	{&lt;br /&gt;
 	  chann++;&lt;br /&gt;
 	}&lt;br /&gt;
       __delay_cycles(DELAY);&lt;br /&gt;
     }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Après quelques corrections du code, nous avons pu le compiler grâce au Makefile&lt;br /&gt;
&lt;br /&gt;
*Avec la commande (exécutée en root) et le montage suivants, nous avons upload le main sur le cc430&lt;br /&gt;
 mspdebug rf2500 &amp;quot;prog main&amp;quot;&lt;br /&gt;
[[Fichier:montage001.png]]&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 7'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/03/17 - 19/03/17]]''&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé les premiers tests sur l'analyseur de spectre afin de vérifier que le code fonctionne bien.&lt;br /&gt;
&lt;br /&gt;
*Dans un premier temps, nous avons essayé une fréquence fixe pour voir la calibration du cc430.&lt;br /&gt;
[[Fichier:862.png]]&lt;br /&gt;
Avec un exemple à 862Mhz, on remarque bien que les registres ont bien été initialisés et que la carte émet à la fréquence demandée.&lt;br /&gt;
&lt;br /&gt;
*Ensuite, nous avons testé le code effectuant le balayage sur la plage de fréquence 863-870Mhz, en augmentant le sweep time de l'analyseur de spectre pour voir les différentes fréquences auxquelles la carte émet.&lt;br /&gt;
[[Fichier:sweep.png]]&lt;br /&gt;
En observant de 861 à 872 Mhz sur l'écran de l'analyseur, on peut voir que le code effectue bien le balayage.&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission de la carte étant faible, nous avons essayé de l'augmenter en modifiant certains registres notamment ceux que l'on peut optimiser à l'aide du logiciel smart RF studio. Cependant, nous pensons qu'il faudra changer l'antenne patch actuelle de la carte pour une antenne connectée en SMA.&lt;br /&gt;
&lt;br /&gt;
*Nous avons aussi tenté de brouiller les communications d'autres groupes de projet utilisant des modules LoRa. Ces derniers étant configurés à 433Mhz, nous avons dû changer la fréquence de notre carte. Le brouillage ne fonctionnait pas mais notre carte étant optimisée pour une émission autour de 868Mhz, les résultats n'étaient pas pertinents.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 8'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[20/03/17 - 26/03/17]]'' &lt;br /&gt;
&lt;br /&gt;
*Nous avons emprunté à M. Vantroys 3 modules SX1276 montés sur des cartes NUCLEO-F401RE afin de pouvoir tester notre carte sur une communication LoRa à 868Mhz&lt;br /&gt;
[[Fichier:lorambed.png]]&lt;br /&gt;
*Le code utilisé pour le test a été récupéré sur le forum des développeurs du site mbed.com. C'est un code &amp;quot;ping pong&amp;quot; effectuant une communication continue entre deux modules LoRa à une fréquence de 868Mhz. Il nous a suffit d'utiliser le compilateur du site (qui regroupe toutes les bibliothèques nécessaires) en indiquant que la carte utilisée est une F401RE pour que le binaire produit soit compatible. La carte NUCLEO étant reconnue comme un système de fichier par Linux, pour la flasher il faut la monter en usb à l'aide des commandes fdisk et mount puis de copier le binaire dedans avec la commande cp.&lt;br /&gt;
[[Fichier:lora pingpong.zip]]&lt;br /&gt;
*Une fois les modules NUCLEO flashés, la communication LoRa est établie dès que deux modules sont alimentés. Nous avons donc branché en USB deux modules sur deux machines différentes afin d'observer la communication sur des terminaux. La communication se fait bien, l'un envoie &amp;quot;ping&amp;quot; tandis que l'autre envoie &amp;quot;pong&amp;quot; lorsqu'il reçoit &amp;quot;ping&amp;quot;. Malheureusement, comme nous l'avions prédit, notre carte a une puissance d'émission trop faible et ne parvient pas à brouiller efficacement.&lt;br /&gt;
*Les modules peuvent aussi communiquer en modulation FSK, dans ce cas notre système arrive à effectuer le brouillage. Néanmoins, il serait plus intéressant de parvenir à brouiller la communication LoRa.&lt;br /&gt;
*Après plusieurs changements dans le code du cc430, n'ayant pas de résultats positifs, nous avons diminué la puissance d'émission des modules LoRa en changeant un header dans le code lora_pingpong.cpp. En passant cette puissance de 14dBm à 6dBm, nous sommes parvenus à brouiller la communication entre les deux modules LoRa.&lt;br /&gt;
&lt;br /&gt;
*En parallèle, nous avons commencé à rechercher des solutions pour la fonction 2. Un pseudo code est donné sur le site ti.com ([https://www.ti.com/lit/an/swra315/swra315.pdf pseudo_code_frequency_scanning]) qui permet de faire un scan sur une plage de fréquence et de récupérer la fréquence ou le signal reçu est le plus fort. Ce code pourra être écrit en C puis incorporé dans notre main pour détecter une communication et la brouiller.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 9'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[27/03/17 - 02/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*Même si le brouillage ne s’effectue qu'à puissance réduite, nous avons cherché à l'optimiser&lt;br /&gt;
**Nous avons premièrement réalisé que le mode de modulation choisi au départ (ASK) n'était pas adapté au brouillage d'une communication LoRa. Nous avons donc essayé le mode GFSK qui est le plus proche du format de modulation du réseau LoRa. Nous avons aussi essayé les modes 2FSK et 4FSK qui sont relativement proches du GFSK. Nous en avons conclu que le mode de modulation à utiliser est GFSK (ce mode fonctionne aussi pour brouiller la modulation FSK)&lt;br /&gt;
**Ensuite, nous avons réduit la plage de fréquence balayée par le cc430 afin de voir si il y avait une influence sur le brouillage. Nous avons remarqué que le brouillage était plus efficace pour un balayage de 866 à 870 Mhz (au lieu de 863-870 initialement)&lt;br /&gt;
**Dans le même ordre d'idée, nous avons décidé de réduire le nombre d'incrémentations du registre CHANNR afin d'augmenter la rapidité du balayage. Pour ce faire, nous avons augmenté la taille de chaque canal, passant de 100kHz à 200kHz&lt;br /&gt;
**La puissance d'émission de la carte a été changée dans la fonction WritePATable (appelée par rfinit() dans le main), afin d'être maximale (12dBm)&lt;br /&gt;
**Enfin, nous avons augmenté le nombre de paquets à envoyer&lt;br /&gt;
&lt;br /&gt;
Nouvelle bibliothèque RFconfig.h :&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //high VCO FSCAL2=0x2A&lt;br /&gt;
 &lt;br /&gt;
 //867 : 21589A&lt;br /&gt;
 //866 : 214EC2&lt;br /&gt;
 //865 : 2144EA&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 //for 433Mhz : freq=0x10A766 and low vco (FSCAL2=0x0A)&lt;br /&gt;
 //432 : 0x109D8E&lt;br /&gt;
 &lt;br /&gt;
 //gfsk, 866, chann space ~200k, high vco currently&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 // (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x06 //default 0f (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x4E //866&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0xC2 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x83 // data rate&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x13 // GFSK &lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x22 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0xF8 //chanspc_m=248&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 // default 47khz deviation&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset for demodulation)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x07 // (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x77 //&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x10 //patable=0 (useless for gfsk) &lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosed&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x09 //&lt;br /&gt;
&lt;br /&gt;
Nouveau main.c : &lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;led_commands.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		10	// maximum size of data sent by rf&lt;br /&gt;
  &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 5000 //15ms  &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Any other commands are for RSSI measurement&lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFD;&lt;br /&gt;
   buffer[1] = 0xAA;&lt;br /&gt;
   buffer[2] = 0xFF;&lt;br /&gt;
   buffer[3] = 0x11;&lt;br /&gt;
   buffer[4] = 0xFF;&lt;br /&gt;
   buffer[5] = 0x66;&lt;br /&gt;
   buffer[6] = 0xFF;&lt;br /&gt;
   buffer[7] = 0x33;&lt;br /&gt;
   buffer[8] = 0x1F;&lt;br /&gt;
   buffer[9] = 0xF8;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   unsigned char led2=0x10;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(0x10, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 allumée quand le cc430 est sous tension&lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chann);&lt;br /&gt;
     send_cmd();&lt;br /&gt;
     if(chann&amp;gt;=20) //866-870&lt;br /&gt;
     {&lt;br /&gt;
       chann=0x00;&lt;br /&gt;
       led2=led2^0x10;&lt;br /&gt;
       set_color(0x10, 0x00, 0x00, led2, 0x00, 0x00); //led2 s'allume toutes les 2 rampes&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {&lt;br /&gt;
       chann++;&lt;br /&gt;
     }&lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Fonction WritePATable :&lt;br /&gt;
&lt;br /&gt;
 void WritePATable(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char valueRead = 0;&lt;br /&gt;
   &lt;br /&gt;
   //while(valueRead != 0x03)    // Output Power: -30  [dBm]&lt;br /&gt;
   //while(valueRead != 0x25)    // Output Power: -12  [dBm]&lt;br /&gt;
   //while(valueRead != 0x2D)    // Output Power: -6   [dBm]&lt;br /&gt;
   //while(valueRead != 0x8D)    // Output Power:  0   [dBm]&lt;br /&gt;
   //while(valueRead != 0xC3)    // Output Power:  10  [dBm]&lt;br /&gt;
   while(valueRead != 0xC0)    // Output Power:  Maximum  [dBm]&lt;br /&gt;
   //while(valueRead != 0xC6)    // Output Power(default):  8.8  [dBm]&lt;br /&gt;
   {&lt;br /&gt;
     /* Write the power output to the PA_TABLE and verify the write operation.  */&lt;br /&gt;
     unsigned char i = 0; &lt;br /&gt;
 &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
     //RF1AINSTRW = 0x7E03; // PA Table write (burst), Output Power: -30  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E25; // PA Table write (burst), Output Power: -12  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E2D; // PA Table write (burst), Output Power: -6   [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E8D; // PA Table write (burst), Output Power: 0    [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC3; // PA Table write (burst), Output Power: 10   [dBm]&lt;br /&gt;
     RF1AINSTRW = 0x7EC0; // PA Table write (burst), Output Power: Maximum  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC6; // PA Table write (burst), Output Power(default):  8.8  [dBm]&lt;br /&gt;
     &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
       RF1AINSTR1B = RF_PATABRD;                 // -miguel read &amp;amp; write&lt;br /&gt;
     &lt;br /&gt;
     // Traverse PATABLE pointers to read &lt;br /&gt;
     for (i = 0; i &amp;lt; 7; i++)&lt;br /&gt;
     {&lt;br /&gt;
       while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
       valueRead  = RF1ADOUT1B;     &lt;br /&gt;
     }&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
     valueRead  = RF1ADOUTB;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 10'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[03/04/17 - 09/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission étant trop faible pour brouiller la communication entre les 2 modules LoRa, nous avons décidé de changer l'antenne de la carte. Il a fallu couper l'antenne patch à l'aide d'une scie afin de souder un connecteur SMA.&lt;br /&gt;
[[Fichier:cc430antenne.png]]&lt;br /&gt;
*Grâce à cette nouvelle antenne, la communication peut maintenant être brouillée à une puissance de 10dBm (contre 6 auparavant). Mais il faut que la carte reste relativement proche d'un des modules.&lt;br /&gt;
*Pour réussir le brouillage quand les modules LoRa sont à leur puissance maximale (14dBm), il faudra sûrement ajouter un amplificateur entre la sortie de la carte et son antenne.&lt;br /&gt;
*Nous avons codé la fonction de scan en c et l'avons incorporé dans le main &lt;br /&gt;
**Cette fonction autorise le module à entrer en mode RX pour recevoir les communications. Elle incrémente ensuite le canal pour parcourir la plage 863-870MHz afin de détecter une communication. Toute les incrémentations, la variable rssi récupère la valeur contenue dans le registre qui correspond à la valeur du RSSI. Cette valeur étant en binaire complément 2, elle est convertie en dBm et placée dans un entier. Enfin, si cette valeur est supérieur à la valeur maximale déjà mesuré ou à un palier prédéfini (ici 0dBm), on stocke le numéro du canal correspondant qui sera utilisé dans le main par la suite.&lt;br /&gt;
&lt;br /&gt;
fonction de scan :&lt;br /&gt;
 void freq_scan(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char rssi;&lt;br /&gt;
   long rssi_dbm;&lt;br /&gt;
   unsigned char chan_scan=START_FREQ_CHAN;&lt;br /&gt;
   long rssi_max=0; //scan will take communication above 0dbm&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, led2, 0x00); //led2 blue while scanning&lt;br /&gt;
   &lt;br /&gt;
   ChangeChannel(chan_scan);&lt;br /&gt;
   ReceiveOn();    //enable RX&lt;br /&gt;
   while((Strobe(RF_SNOP) &amp;amp; 0x70) != 0x10); //make sure RX is ready&lt;br /&gt;
   while(chan_scan&amp;lt;STOP_FREQ_CHAN)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chan_scan);&lt;br /&gt;
     __delay_cycles(DELAY_RSSI);       //wait for rssi to be updated&lt;br /&gt;
     rssi = ReadSingleReg(RSSI);  //define in cc430f5137.h RSSI=0x34 corresponding to addr of rssi value&lt;br /&gt;
     if (rssi &amp;gt;= 128) &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (long)((long)( rssi - 256) / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     else &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (rssi / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     if(rssi_dbm&amp;gt;rssi_max)&lt;br /&gt;
     {&lt;br /&gt;
       rssi_max=rssi_dbm;&lt;br /&gt;
       chan_jam=chan_scan-10; //start jamming 2Mhz below max dbm received&lt;br /&gt;
     }&lt;br /&gt;
     chan_scan++;&lt;br /&gt;
     Strobe( RF_SFRX); //flush the RX FIFO&lt;br /&gt;
   }&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
nouveau main :&lt;br /&gt;
&lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chan_main=0x00;&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 on if cc430 powered&lt;br /&gt;
   int i;&lt;br /&gt;
   &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     freq_scan();&lt;br /&gt;
     ReceiveOff();&lt;br /&gt;
     chan_main=chan_jam;&lt;br /&gt;
     if (chan_main != 0)  //jam only if a communication xas detected with freq_scan&lt;br /&gt;
     {&lt;br /&gt;
       for(i=0 ; i&amp;lt;(20*NUM_JAM_RAMP) ; i++) //ramp start 2Mhz below chan_jam and stop 2Mhz above&lt;br /&gt;
       {&lt;br /&gt;
         ChangeChannel(chan_main);&lt;br /&gt;
         if (chan_main&amp;gt;= (chan_jam+20))&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main=0x00;&lt;br /&gt;
           led2=led2^0x10;&lt;br /&gt;
           set_color(led1, 0x00, 0x00, led2, 0x00, 0x00); //led2 blink red every two ramp of jamming&lt;br /&gt;
         }&lt;br /&gt;
         else&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main++;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     chan_main=0x00;  &lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
header :&lt;br /&gt;
 #define DELAY 100 //300us  &lt;br /&gt;
 #define DELAY_RSSI 10 //30us&lt;br /&gt;
 &lt;br /&gt;
 #define START_FREQ_CHAN 15&lt;br /&gt;
 #define STOP_FREQ_CHAN 50     //scanning 863-870Mhz with 200khz steps&lt;br /&gt;
 #define RSSI_OFFSET 74 //cf datasheet&lt;br /&gt;
 &lt;br /&gt;
 #define NUM_JAM_RAMP 50&lt;br /&gt;
 &lt;br /&gt;
 unsigned char chan_jam=0x00;&lt;br /&gt;
 unsigned char led2=0x10;&lt;br /&gt;
 unsigned char led1=0x10;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Fichiers Rendus'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[[Fichier:code_fonction_1.zip]]&lt;br /&gt;
*[[Fichier:code_fonction_2.zip]]&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42070</id>
		<title>IMA4 2016/2017 P32</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42070"/>
				<updated>2017-05-11T12:41:27Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Semaine 10 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Cahier des charges'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;Présentation générale du projet&amp;lt;/span&amp;gt;=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Contexte&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'expansion de l'utilisation des objets connectés permet de nos jours d'accéder à des données ou de contrôler aisément d'autres systèmes connectés à distance. Les objets connectés sont de plus en plus déployés mais leur sécurité n'est pas toujours testée. Par conséquent, de nombreuses informations sensibles sont susceptibles de transiter en permanence par le biais de multiples plages de fréquences. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ceci amène donc un questionnement sur la sécurité des transferts de données entre la multitude d'objets connectés actuellement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Objectif du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de réaliser un brouilleur d'ondes radiofréquence dans la bande des 868 MHz capable de bloquer les communications LoRa.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Description du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
A l'aboutissement du projet, nous devrions être capable de détecter une communication LoRa dans la bande des 868 MHz, et de la brouiller elle seule, sans incidence sur les autres communications sur d'autres fréquences du réseau LoRa.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous devrons réaliser un montage réalisant un brouillage sur la plage 863-870Mhz afin d'empêcher toute communication LoRa, en envoyant du bruit électronique sur toute la plage de fréquence.&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet, nous perfectionnerons ce montage pour qu'il puisse détecter une communication LoRa à une fréquence donnée (grâce au &amp;quot;join-request message&amp;quot; de 18 octets envoyés par le end-point/node, ou bien grâce aux informations données dans le préambule des paquets), afin d'envoyer des données erronées et de bloquer uniquement cette communication.&lt;br /&gt;
&lt;br /&gt;
Si le temps et le budget le permettent, nous pourrons aussi être amenés à brouiller la plage de fréquences autour des 433 MHz (aussi utilisé par le réseau LoRa).&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Choix techniques : matériel et logiciel&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser ce système, nous allons utiliser un microcontrôleur cc430 muni d'un transceiver cc1101, d'un récepteur LoRa(868MHz) communicant via protocole SPI avec le microcontrôleur, 2 antennes, une batterie, quelques LEDs.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Calendrier prévisionnel'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Liste des tâches à effectuer&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
# Documentation sur le réseau LoRa&lt;br /&gt;
##moyen de transmission&lt;br /&gt;
##format de modulation&lt;br /&gt;
##trame des paquets&lt;br /&gt;
# Réalisation du premier montage brouillant toute la plage&lt;br /&gt;
##contrôler l'émetteur RF du cc430&lt;br /&gt;
##programmer un bruitage sur la plage 863-870MHz&lt;br /&gt;
##test et optimisation&lt;br /&gt;
# Ajout d'un récepteur LoRa pour détecter et brouiller une seule communication&lt;br /&gt;
##contrôler le récepteur LoRa avec le cc430 par protocole spi&lt;br /&gt;
##détecter une communication LoRa à une fréquence donnée&lt;br /&gt;
##contrôler l'émetteur RF afin de brouiller cette communication de manière brutale&lt;br /&gt;
##brouiller cette communication en tentant de changer les données du paquet &lt;br /&gt;
##test et optimisation&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Calendrier&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
''[[Avant le 19/12/16]]'' - Élaboration du Cahier des charges et remplissage du Wiki&lt;br /&gt;
&lt;br /&gt;
''[[Avant fin Janvier]]'' - Complément du Cahier des Charges et listage du matériel nécessaire pour le projet&lt;br /&gt;
&lt;br /&gt;
''[[Répartition sur le S8]]'' - 120h: Réalisation de la 1ere fonction (45h) / Réalisation de la 2e fonction (45h) / Test et débuguage (30h)&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Feuille d'heures'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Cahier des charges / Wiki&lt;br /&gt;
| 4h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3,5h&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|1h&lt;br /&gt;
|1h&lt;br /&gt;
|&lt;br /&gt;
|1h&lt;br /&gt;
|0,5h&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le réseau LoRa&lt;br /&gt;
| &lt;br /&gt;
| 6h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 1ère fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|2h&lt;br /&gt;
|1,5h&lt;br /&gt;
|6h&lt;br /&gt;
|6h&lt;br /&gt;
|4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 2ème fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Tests et mesures&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Modification de la carte&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Avancement du Projet'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Phase préparatoire'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[Jeu 15/12/16]]'' &lt;br /&gt;
*Rendez-vous de mise au point du cahier des charges avec les trois encadrants (M. Boé, M. Vantroys et M. Redon)&lt;br /&gt;
*Elaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 1'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[23/01/17 - 29/01/17]]'' &lt;br /&gt;
*Revue du Cahier des Charges&lt;br /&gt;
*Recherches approfondies sur les modes de transmissions du réseau LoRa&lt;br /&gt;
*Recherche de matériel&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 2'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[30/01/17 - 05/02/17]]''  &lt;br /&gt;
*Précisions sur le cahier des charges&lt;br /&gt;
*Listage du matériel&lt;br /&gt;
*Recherche et détermination de solutions technologiques possibles pour les fonctions demandées&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 3'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[06/02/17 - 12/02/17]]''&lt;br /&gt;
*validation du matériel&lt;br /&gt;
Nous allons utiliser un cc430f5137 (MCU+RF) monté sur une carte optimisée pour les communications autours de 868Mhz.&lt;br /&gt;
Nous pouvons commencer à étudier son fonctionnement, particulièrement celui du module RF (cc1101).&lt;br /&gt;
Nous avons aussi récupéré des exemples de code en c sur le site de Texas Instrument et vu l'utilisation de ces codes sur un projet IMA5 de l'an passé.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 4'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/02/17 - 19/02/17]]''&lt;br /&gt;
*Recherche de solutions pour répondre à la 1ère fonction (brouiller la plage 863-870Mhz).&lt;br /&gt;
&lt;br /&gt;
Après une lecture approfondie de la datasheet du module RF du cc430, nous avons choisi d'utiliser la fréquence de base du module (pouvant être définie grâce aux registres) couplée au registre CHANNR. Cela nous permettra de modifier plus facilement la fréquence de la porteuse, en suivant la formule suivante : [[Fichier:rampe.png]].&lt;br /&gt;
&lt;br /&gt;
Nous pourrons alors balayer la plage de fréquence en changeant la valeur de CHANNR.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 5'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[27/02/17 - 05/03/17]]''&lt;br /&gt;
&lt;br /&gt;
A l'aide de la datasheet du cc1101 ([http://www.ti.com/lit/ds/symlink/cc1101.pdf datasheet_cc1101] pages : 70 à 95), nous avons défini les registres du module RF de la manière suivante (sachant que la fréquence du quartz est de 26MHz, soit Fxosc=26MHz) :&lt;br /&gt;
&lt;br /&gt;
*La fréquence de base a été fixée à 862,999MHz en suivant la formule donnée dans la data sheet[[Fichier:carrier_formula.png]]&lt;br /&gt;
ce qui nous a donné les valeurs FREQ2=0x21, FREQ1=0x31 et FREQ0=0x3A (FREQ=2 175 290)&lt;br /&gt;
&lt;br /&gt;
*Nous avons suivi la formule [[Fichier:chanspace_formula.png]] afin d'avoir un espacement entre les cannaux d'environ 100Khz&lt;br /&gt;
ce qui nous a donné  MDMCFG1=0x02 (CHANSPC_E=2) et MDMCFG0=0x00(CHANSPC_M=0)&lt;br /&gt;
&lt;br /&gt;
*Pour le moment, nous avons choisi le mode de modulation AM, nous avons donc initialisé les registres MDMCFG2=0x30 (mode ASK/OOK) et FREND0=0x50(patable=0 donnant le mode ASK)&lt;br /&gt;
&lt;br /&gt;
*Nous avons créé une bibliothèque RFconfig.h regroupant les valeurs de tous les registres :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal and high VCO recommended&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz stop at 870&lt;br /&gt;
 //FREQ=00 10 00 01 00 11 00 01 00 11 10 10&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //CHANNR from 0 to 69 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 //0 (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x0F //default (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x31 //868Mhz&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0x3A /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x22 //default (data rate)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x30 // ASK/OOK,no sync-word&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x02 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0x00 //chanspc_m=0&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 //default (no effet on ASK/OOK mode)&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset not used)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x03 //default (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x40 //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x50 //patable=0 -&amp;gt; ASK&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosen&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x0B //default&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 6'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[06/03/17 - 12/03/17]]''&lt;br /&gt;
*Nous avons préparé un premier code réalisant une rampe sur la plage 863-870MHz. Ce code est basé sur une boucle infinie qui incrémente le registre chann de 0 à 69 (pour passer de 863 à 870Mhz) et envoie des paquets 0xFF grâce aux fonctions ChangeChannel(chann) et send_comand().&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		1	// maximum size of data sent by rf&lt;br /&gt;
 &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 10000&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFF;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init();&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);	 &lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
     {&lt;br /&gt;
       ChangeChannel(chann);&lt;br /&gt;
       send_cmd();&lt;br /&gt;
       if(chann&amp;gt;=69) &lt;br /&gt;
 	{&lt;br /&gt;
 	  chann=0x00;&lt;br /&gt;
 	}&lt;br /&gt;
       else&lt;br /&gt;
 	{&lt;br /&gt;
 	  chann++;&lt;br /&gt;
 	}&lt;br /&gt;
       __delay_cycles(DELAY);&lt;br /&gt;
     }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Après quelques corrections du code, nous avons pu le compiler grâce au Makefile&lt;br /&gt;
&lt;br /&gt;
*Avec la commande (exécutée en root) et le montage suivants, nous avons upload le main sur le cc430&lt;br /&gt;
 mspdebug rf2500 &amp;quot;prog main&amp;quot;&lt;br /&gt;
[[Fichier:montage001.png]]&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 7'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/03/17 - 19/03/17]]''&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé les premiers tests sur l'analyseur de spectre afin de vérifier que le code fonctionne bien.&lt;br /&gt;
&lt;br /&gt;
*Dans un premier temps, nous avons essayé une fréquence fixe pour voir la calibration du cc430.&lt;br /&gt;
[[Fichier:862.png]]&lt;br /&gt;
Avec un exemple à 862Mhz, on remarque bien que les registres ont bien été initialisés et que la carte émet à la fréquence demandée.&lt;br /&gt;
&lt;br /&gt;
*Ensuite, nous avons testé le code effectuant le balayage sur la plage de fréquence 863-870Mhz, en augmentant le sweep time de l'analyseur de spectre pour voir les différentes fréquences auxquelles la carte émet.&lt;br /&gt;
[[Fichier:sweep.png]]&lt;br /&gt;
En observant de 861 à 872 Mhz sur l'écran de l'analyseur, on peut voir que le code effectue bien le balayage.&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission de la carte étant faible, nous avons essayé de l'augmenter en modifiant certains registres notamment ceux que l'on peut optimiser à l'aide du logiciel smart RF studio. Cependant, nous pensons qu'il faudra changer l'antenne patch actuelle de la carte pour une antenne connectée en SMA.&lt;br /&gt;
&lt;br /&gt;
*Nous avons aussi tenté de brouiller les communications d'autres groupes de projet utilisant des modules LoRa. Ces derniers étant configurés à 433Mhz, nous avons dû changer la fréquence de notre carte. Le brouillage ne fonctionnait pas mais notre carte étant optimisée pour une émission autour de 868Mhz, les résultats n'étaient pas pertinents.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 8'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[20/03/17 - 26/03/17]]'' &lt;br /&gt;
&lt;br /&gt;
*Nous avons emprunté à M. Vantroys 3 modules SX1276 montés sur des cartes NUCLEO-F401RE afin de pouvoir tester notre carte sur une communication LoRa à 868Mhz&lt;br /&gt;
[[Fichier:lorambed.png]]&lt;br /&gt;
*Le code utilisé pour le test a été récupéré sur le forum des développeurs du site mbed.com. C'est un code &amp;quot;ping pong&amp;quot; effectuant une communication continue entre deux modules LoRa à une fréquence de 868Mhz. Il nous a suffit d'utiliser le compilateur du site (qui regroupe toutes les bibliothèques nécessaires) en indiquant que la carte utilisée est une F401RE pour que le binaire produit soit compatible. La carte NUCLEO étant reconnue comme un système de fichier par Linux, pour la flasher il faut la monter en usb à l'aide des commandes fdisk et mount puis de copier le binaire dedans avec la commande cp.&lt;br /&gt;
[[Fichier:lora pingpong.zip]]&lt;br /&gt;
*Une fois les modules NUCLEO flashés, la communication LoRa est établie dès que deux modules sont alimentés. Nous avons donc branché en USB deux modules sur deux machines différentes afin d'observer la communication sur des terminaux. La communication se fait bien, l'un envoie &amp;quot;ping&amp;quot; tandis que l'autre envoie &amp;quot;pong&amp;quot; lorsqu'il reçoit &amp;quot;ping&amp;quot;. Malheureusement, comme nous l'avions prédit, notre carte a une puissance d'émission trop faible et ne parvient pas à brouiller efficacement.&lt;br /&gt;
*Les modules peuvent aussi communiquer en modulation FSK, dans ce cas notre système arrive à effectuer le brouillage. Néanmoins, il serait plus intéressant de parvenir à brouiller la communication LoRa.&lt;br /&gt;
*Après plusieurs changements dans le code du cc430, n'ayant pas de résultats positifs, nous avons diminué la puissance d'émission des modules LoRa en changeant un header dans le code lora_pingpong.cpp. En passant cette puissance de 14dBm à 6dBm, nous sommes parvenus à brouiller la communication entre les deux modules LoRa.&lt;br /&gt;
&lt;br /&gt;
*En parallèle, nous avons commencé à rechercher des solutions pour la fonction 2. Un pseudo code est donné sur le site ti.com ([https://www.ti.com/lit/an/swra315/swra315.pdf pseudo_code_frequency_scanning]) qui permet de faire un scan sur une plage de fréquence et de récupérer la fréquence ou le signal reçu est le plus fort. Ce code pourra être écrit en C puis incorporé dans notre main pour détecter une communication et la brouiller.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 9'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[27/03/17 - 02/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*Même si le brouillage ne s’effectue qu'à puissance réduite, nous avons cherché à l'optimiser&lt;br /&gt;
**Nous avons premièrement réalisé que le mode de modulation choisi au départ (ASK) n'était pas adapté au brouillage d'une communication LoRa. Nous avons donc essayé le mode GFSK qui est le plus proche du format de modulation du réseau LoRa. Nous avons aussi essayé les modes 2FSK et 4FSK qui sont relativement proches du GFSK. Nous en avons conclu que le mode de modulation à utiliser est GFSK (ce mode fonctionne aussi pour brouiller la modulation FSK)&lt;br /&gt;
**Ensuite, nous avons réduit la plage de fréquence balayée par le cc430 afin de voir si il y avait une influence sur le brouillage. Nous avons remarqué que le brouillage était plus efficace pour un balayage de 866 à 870 Mhz (au lieu de 863-870 initialement)&lt;br /&gt;
**Dans le même ordre d'idée, nous avons décidé de réduire le nombre d'incrémentations du registre CHANNR afin d'augmenter la rapidité du balayage. Pour ce faire, nous avons augmenté la taille de chaque canal, passant de 100kHz à 200kHz&lt;br /&gt;
**La puissance d'émission de la carte a été changée dans la fonction WritePATable (appelée par rfinit() dans le main), afin d'être maximale (12dBm)&lt;br /&gt;
**Enfin, nous avons augmenté le nombre de paquets à envoyer&lt;br /&gt;
&lt;br /&gt;
Nouvelle bibliothèque RFconfig.h :&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //high VCO FSCAL2=0x2A&lt;br /&gt;
 &lt;br /&gt;
 //867 : 21589A&lt;br /&gt;
 //866 : 214EC2&lt;br /&gt;
 //865 : 2144EA&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 //for 433Mhz : freq=0x10A766 and low vco (FSCAL2=0x0A)&lt;br /&gt;
 //432 : 0x109D8E&lt;br /&gt;
 &lt;br /&gt;
 //gfsk, 866, chann space ~200k, high vco currently&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 // (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x06 //default 0f (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x4E //866&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0xC2 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x83 // data rate&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x13 // GFSK &lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x22 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0xF8 //chanspc_m=248&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 // default 47khz deviation&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset for demodulation)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x07 // (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x77 //&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x10 //patable=0 (useless for gfsk) &lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosed&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x09 //&lt;br /&gt;
&lt;br /&gt;
Nouveau main.c : &lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;led_commands.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		10	// maximum size of data sent by rf&lt;br /&gt;
  &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 5000 //15ms  &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Any other commands are for RSSI measurement&lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFD;&lt;br /&gt;
   buffer[1] = 0xAA;&lt;br /&gt;
   buffer[2] = 0xFF;&lt;br /&gt;
   buffer[3] = 0x11;&lt;br /&gt;
   buffer[4] = 0xFF;&lt;br /&gt;
   buffer[5] = 0x66;&lt;br /&gt;
   buffer[6] = 0xFF;&lt;br /&gt;
   buffer[7] = 0x33;&lt;br /&gt;
   buffer[8] = 0x1F;&lt;br /&gt;
   buffer[9] = 0xF8;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   unsigned char led2=0x10;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(0x10, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 allumée quand le cc430 est sous tension&lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chann);&lt;br /&gt;
     send_cmd();&lt;br /&gt;
     if(chann&amp;gt;=20) //866-870&lt;br /&gt;
     {&lt;br /&gt;
       chann=0x00;&lt;br /&gt;
       led2=led2^0x10;&lt;br /&gt;
       set_color(0x10, 0x00, 0x00, led2, 0x00, 0x00); //led2 s'allume toutes les 2 rampes&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {&lt;br /&gt;
       chann++;&lt;br /&gt;
     }&lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Fonction WritePATable :&lt;br /&gt;
&lt;br /&gt;
 void WritePATable(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char valueRead = 0;&lt;br /&gt;
   &lt;br /&gt;
   //while(valueRead != 0x03)    // Output Power: -30  [dBm]&lt;br /&gt;
   //while(valueRead != 0x25)    // Output Power: -12  [dBm]&lt;br /&gt;
   //while(valueRead != 0x2D)    // Output Power: -6   [dBm]&lt;br /&gt;
   //while(valueRead != 0x8D)    // Output Power:  0   [dBm]&lt;br /&gt;
   //while(valueRead != 0xC3)    // Output Power:  10  [dBm]&lt;br /&gt;
   while(valueRead != 0xC0)    // Output Power:  Maximum  [dBm]&lt;br /&gt;
   //while(valueRead != 0xC6)    // Output Power(default):  8.8  [dBm]&lt;br /&gt;
   {&lt;br /&gt;
     /* Write the power output to the PA_TABLE and verify the write operation.  */&lt;br /&gt;
     unsigned char i = 0; &lt;br /&gt;
 &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
     //RF1AINSTRW = 0x7E03; // PA Table write (burst), Output Power: -30  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E25; // PA Table write (burst), Output Power: -12  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E2D; // PA Table write (burst), Output Power: -6   [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E8D; // PA Table write (burst), Output Power: 0    [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC3; // PA Table write (burst), Output Power: 10   [dBm]&lt;br /&gt;
     RF1AINSTRW = 0x7EC0; // PA Table write (burst), Output Power: Maximum  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC6; // PA Table write (burst), Output Power(default):  8.8  [dBm]&lt;br /&gt;
     &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
       RF1AINSTR1B = RF_PATABRD;                 // -miguel read &amp;amp; write&lt;br /&gt;
     &lt;br /&gt;
     // Traverse PATABLE pointers to read &lt;br /&gt;
     for (i = 0; i &amp;lt; 7; i++)&lt;br /&gt;
     {&lt;br /&gt;
       while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
       valueRead  = RF1ADOUT1B;     &lt;br /&gt;
     }&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
     valueRead  = RF1ADOUTB;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 10'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[03/04/17 - 09/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission étant trop faible pour brouiller la communication entre les 2 modules LoRa, nous avons décidé de changer l'antenne de la carte. Il a fallu couper l'antenne patch à l'aide d'une scie afin de souder un connecteur SMA.&lt;br /&gt;
[[Fichier:cc430antenne.png]]&lt;br /&gt;
*Grâce à cette nouvelle antenne, la communication peut maintenant être brouillée à une puissance de 10dBm (contre 6 auparavant). Mais il faut que la carte reste relativement proche d'un des modules.&lt;br /&gt;
*Pour réussir le brouillage quand les modules LoRa sont à leur puissance maximale (14dBm), il faudra sûrement ajouter un amplificateur entre la sortie de la carte et son antenne.&lt;br /&gt;
*Nous avons codé la fonction de scan en c et l'avons incorporé dans le main &lt;br /&gt;
**Cette fonction autorise le module à entrer en mode RX pour recevoir les communications. Elle incrémente ensuite le canal pour parcourir la plage 863-870MHz afin de détecter une communication. Toute les incrémentations, la variable rssi récupère la valeur contenue dans le registre qui correspond à la valeur du RSSI. Cette valeur étant en binaire complément 2, elle est convertie en dBm et placée dans un entier. Enfin, si cette valeur est supérieur à la valeur maximale déjà mesuré ou à un palier prédéfini (ici 0dBm), on stocke le numéro du canal correspondant qui sera utilisé dans le main par la suite.&lt;br /&gt;
&lt;br /&gt;
fonction de scan :&lt;br /&gt;
 void freq_scan(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char rssi;&lt;br /&gt;
   long rssi_dbm;&lt;br /&gt;
   unsigned char chan_scan=START_FREQ_CHAN;&lt;br /&gt;
   long rssi_max=0; //scan will take communication above 0dbm&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, led2, 0x00); //led2 blue while scanning&lt;br /&gt;
   &lt;br /&gt;
   ChangeChannel(chan_scan);&lt;br /&gt;
   ReceiveOn();    //enable RX&lt;br /&gt;
   while((Strobe(RF_SNOP) &amp;amp; 0x70) != 0x10); //make sure RX is ready&lt;br /&gt;
   while(chan_scan&amp;lt;STOP_FREQ_CHAN)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chan_scan);&lt;br /&gt;
     __delay_cycles(DELAY_RSSI);       //wait for rssi to be updated&lt;br /&gt;
     rssi = ReadSingleReg(RSSI);  //define in cc430f5137.h RSSI=0x34 corresponding to addr of rssi value&lt;br /&gt;
     if (rssi &amp;gt;= 128) &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (long)((long)( rssi - 256) / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     else &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (rssi / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     if(rssi_dbm&amp;gt;rssi_max)&lt;br /&gt;
     {&lt;br /&gt;
       rssi_max=rssi_dbm;&lt;br /&gt;
       chan_jam=chan_scan-10; //start jamming 2Mhz below max dbm received&lt;br /&gt;
     }&lt;br /&gt;
     chan_scan++;&lt;br /&gt;
     Strobe( RF_SFRX); //flush the RX FIFO&lt;br /&gt;
   }&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
nouveau main :&lt;br /&gt;
&lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chan_main=0x00;&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 on if cc430 powered&lt;br /&gt;
   int i;&lt;br /&gt;
   &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     freq_scan();&lt;br /&gt;
     ReceiveOff();&lt;br /&gt;
     chan_main=chan_jam;&lt;br /&gt;
     if (chan_main != 0)  //jam only if a communication xas detected with freq_scan&lt;br /&gt;
     {&lt;br /&gt;
       for(i=0 ; i&amp;lt;(20*NUM_JAM_RAMP) ; i++) //ramp start 2Mhz below chan_jam and stop 2Mhz above&lt;br /&gt;
       {&lt;br /&gt;
         ChangeChannel(chan_main);&lt;br /&gt;
         if (chan_main&amp;gt;= (chan_jam+20))&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main=0x00;&lt;br /&gt;
           led2=led2^0x10;&lt;br /&gt;
           set_color(led1, 0x00, 0x00, led2, 0x00, 0x00); //led2 blink red every two ramp of jamming&lt;br /&gt;
         }&lt;br /&gt;
         else&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main++;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     chan_main=0x00;  &lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
header :&lt;br /&gt;
 #define DELAY 100 //300us  &lt;br /&gt;
 #define DELAY_RSSI 10 //30us&lt;br /&gt;
 &lt;br /&gt;
 #define START_FREQ_CHAN 15&lt;br /&gt;
 #define STOP_FREQ_CHAN 50     //scanning 863-870Mhz with 200khz steps&lt;br /&gt;
 #define RSSI_OFFSET 74 //cf datasheet&lt;br /&gt;
 &lt;br /&gt;
 #define NUM_JAM_RAMP 50&lt;br /&gt;
 &lt;br /&gt;
 unsigned char chan_jam=0x00;&lt;br /&gt;
 unsigned char led2=0x10;&lt;br /&gt;
 unsigned char led1=0x10;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Fichiers Rendus'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[[Fichier:code_fonction_1.zip]]&lt;br /&gt;
*[[Fichier:code_fonction_2.zip]]&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42069</id>
		<title>IMA4 2016/2017 P32</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42069"/>
				<updated>2017-05-11T12:40:46Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Semaine 10 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Cahier des charges'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;Présentation générale du projet&amp;lt;/span&amp;gt;=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Contexte&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'expansion de l'utilisation des objets connectés permet de nos jours d'accéder à des données ou de contrôler aisément d'autres systèmes connectés à distance. Les objets connectés sont de plus en plus déployés mais leur sécurité n'est pas toujours testée. Par conséquent, de nombreuses informations sensibles sont susceptibles de transiter en permanence par le biais de multiples plages de fréquences. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ceci amène donc un questionnement sur la sécurité des transferts de données entre la multitude d'objets connectés actuellement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Objectif du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de réaliser un brouilleur d'ondes radiofréquence dans la bande des 868 MHz capable de bloquer les communications LoRa.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Description du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
A l'aboutissement du projet, nous devrions être capable de détecter une communication LoRa dans la bande des 868 MHz, et de la brouiller elle seule, sans incidence sur les autres communications sur d'autres fréquences du réseau LoRa.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous devrons réaliser un montage réalisant un brouillage sur la plage 863-870Mhz afin d'empêcher toute communication LoRa, en envoyant du bruit électronique sur toute la plage de fréquence.&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet, nous perfectionnerons ce montage pour qu'il puisse détecter une communication LoRa à une fréquence donnée (grâce au &amp;quot;join-request message&amp;quot; de 18 octets envoyés par le end-point/node, ou bien grâce aux informations données dans le préambule des paquets), afin d'envoyer des données erronées et de bloquer uniquement cette communication.&lt;br /&gt;
&lt;br /&gt;
Si le temps et le budget le permettent, nous pourrons aussi être amenés à brouiller la plage de fréquences autour des 433 MHz (aussi utilisé par le réseau LoRa).&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Choix techniques : matériel et logiciel&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser ce système, nous allons utiliser un microcontrôleur cc430 muni d'un transceiver cc1101, d'un récepteur LoRa(868MHz) communicant via protocole SPI avec le microcontrôleur, 2 antennes, une batterie, quelques LEDs.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Calendrier prévisionnel'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Liste des tâches à effectuer&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
# Documentation sur le réseau LoRa&lt;br /&gt;
##moyen de transmission&lt;br /&gt;
##format de modulation&lt;br /&gt;
##trame des paquets&lt;br /&gt;
# Réalisation du premier montage brouillant toute la plage&lt;br /&gt;
##contrôler l'émetteur RF du cc430&lt;br /&gt;
##programmer un bruitage sur la plage 863-870MHz&lt;br /&gt;
##test et optimisation&lt;br /&gt;
# Ajout d'un récepteur LoRa pour détecter et brouiller une seule communication&lt;br /&gt;
##contrôler le récepteur LoRa avec le cc430 par protocole spi&lt;br /&gt;
##détecter une communication LoRa à une fréquence donnée&lt;br /&gt;
##contrôler l'émetteur RF afin de brouiller cette communication de manière brutale&lt;br /&gt;
##brouiller cette communication en tentant de changer les données du paquet &lt;br /&gt;
##test et optimisation&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Calendrier&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
''[[Avant le 19/12/16]]'' - Élaboration du Cahier des charges et remplissage du Wiki&lt;br /&gt;
&lt;br /&gt;
''[[Avant fin Janvier]]'' - Complément du Cahier des Charges et listage du matériel nécessaire pour le projet&lt;br /&gt;
&lt;br /&gt;
''[[Répartition sur le S8]]'' - 120h: Réalisation de la 1ere fonction (45h) / Réalisation de la 2e fonction (45h) / Test et débuguage (30h)&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Feuille d'heures'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Cahier des charges / Wiki&lt;br /&gt;
| 4h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3,5h&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|1h&lt;br /&gt;
|1h&lt;br /&gt;
|&lt;br /&gt;
|1h&lt;br /&gt;
|0,5h&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le réseau LoRa&lt;br /&gt;
| &lt;br /&gt;
| 6h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 1ère fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|2h&lt;br /&gt;
|1,5h&lt;br /&gt;
|6h&lt;br /&gt;
|6h&lt;br /&gt;
|4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 2ème fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Tests et mesures&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Modification de la carte&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Avancement du Projet'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Phase préparatoire'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[Jeu 15/12/16]]'' &lt;br /&gt;
*Rendez-vous de mise au point du cahier des charges avec les trois encadrants (M. Boé, M. Vantroys et M. Redon)&lt;br /&gt;
*Elaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 1'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[23/01/17 - 29/01/17]]'' &lt;br /&gt;
*Revue du Cahier des Charges&lt;br /&gt;
*Recherches approfondies sur les modes de transmissions du réseau LoRa&lt;br /&gt;
*Recherche de matériel&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 2'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[30/01/17 - 05/02/17]]''  &lt;br /&gt;
*Précisions sur le cahier des charges&lt;br /&gt;
*Listage du matériel&lt;br /&gt;
*Recherche et détermination de solutions technologiques possibles pour les fonctions demandées&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 3'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[06/02/17 - 12/02/17]]''&lt;br /&gt;
*validation du matériel&lt;br /&gt;
Nous allons utiliser un cc430f5137 (MCU+RF) monté sur une carte optimisée pour les communications autours de 868Mhz.&lt;br /&gt;
Nous pouvons commencer à étudier son fonctionnement, particulièrement celui du module RF (cc1101).&lt;br /&gt;
Nous avons aussi récupéré des exemples de code en c sur le site de Texas Instrument et vu l'utilisation de ces codes sur un projet IMA5 de l'an passé.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 4'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/02/17 - 19/02/17]]''&lt;br /&gt;
*Recherche de solutions pour répondre à la 1ère fonction (brouiller la plage 863-870Mhz).&lt;br /&gt;
&lt;br /&gt;
Après une lecture approfondie de la datasheet du module RF du cc430, nous avons choisi d'utiliser la fréquence de base du module (pouvant être définie grâce aux registres) couplée au registre CHANNR. Cela nous permettra de modifier plus facilement la fréquence de la porteuse, en suivant la formule suivante : [[Fichier:rampe.png]].&lt;br /&gt;
&lt;br /&gt;
Nous pourrons alors balayer la plage de fréquence en changeant la valeur de CHANNR.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 5'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[27/02/17 - 05/03/17]]''&lt;br /&gt;
&lt;br /&gt;
A l'aide de la datasheet du cc1101 ([http://www.ti.com/lit/ds/symlink/cc1101.pdf datasheet_cc1101] pages : 70 à 95), nous avons défini les registres du module RF de la manière suivante (sachant que la fréquence du quartz est de 26MHz, soit Fxosc=26MHz) :&lt;br /&gt;
&lt;br /&gt;
*La fréquence de base a été fixée à 862,999MHz en suivant la formule donnée dans la data sheet[[Fichier:carrier_formula.png]]&lt;br /&gt;
ce qui nous a donné les valeurs FREQ2=0x21, FREQ1=0x31 et FREQ0=0x3A (FREQ=2 175 290)&lt;br /&gt;
&lt;br /&gt;
*Nous avons suivi la formule [[Fichier:chanspace_formula.png]] afin d'avoir un espacement entre les cannaux d'environ 100Khz&lt;br /&gt;
ce qui nous a donné  MDMCFG1=0x02 (CHANSPC_E=2) et MDMCFG0=0x00(CHANSPC_M=0)&lt;br /&gt;
&lt;br /&gt;
*Pour le moment, nous avons choisi le mode de modulation AM, nous avons donc initialisé les registres MDMCFG2=0x30 (mode ASK/OOK) et FREND0=0x50(patable=0 donnant le mode ASK)&lt;br /&gt;
&lt;br /&gt;
*Nous avons créé une bibliothèque RFconfig.h regroupant les valeurs de tous les registres :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal and high VCO recommended&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz stop at 870&lt;br /&gt;
 //FREQ=00 10 00 01 00 11 00 01 00 11 10 10&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //CHANNR from 0 to 69 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 //0 (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x0F //default (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x31 //868Mhz&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0x3A /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x22 //default (data rate)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x30 // ASK/OOK,no sync-word&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x02 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0x00 //chanspc_m=0&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 //default (no effet on ASK/OOK mode)&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset not used)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x03 //default (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x40 //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x50 //patable=0 -&amp;gt; ASK&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosen&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x0B //default&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 6'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[06/03/17 - 12/03/17]]''&lt;br /&gt;
*Nous avons préparé un premier code réalisant une rampe sur la plage 863-870MHz. Ce code est basé sur une boucle infinie qui incrémente le registre chann de 0 à 69 (pour passer de 863 à 870Mhz) et envoie des paquets 0xFF grâce aux fonctions ChangeChannel(chann) et send_comand().&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		1	// maximum size of data sent by rf&lt;br /&gt;
 &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 10000&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFF;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init();&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);	 &lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
     {&lt;br /&gt;
       ChangeChannel(chann);&lt;br /&gt;
       send_cmd();&lt;br /&gt;
       if(chann&amp;gt;=69) &lt;br /&gt;
 	{&lt;br /&gt;
 	  chann=0x00;&lt;br /&gt;
 	}&lt;br /&gt;
       else&lt;br /&gt;
 	{&lt;br /&gt;
 	  chann++;&lt;br /&gt;
 	}&lt;br /&gt;
       __delay_cycles(DELAY);&lt;br /&gt;
     }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Après quelques corrections du code, nous avons pu le compiler grâce au Makefile&lt;br /&gt;
&lt;br /&gt;
*Avec la commande (exécutée en root) et le montage suivants, nous avons upload le main sur le cc430&lt;br /&gt;
 mspdebug rf2500 &amp;quot;prog main&amp;quot;&lt;br /&gt;
[[Fichier:montage001.png]]&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 7'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/03/17 - 19/03/17]]''&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé les premiers tests sur l'analyseur de spectre afin de vérifier que le code fonctionne bien.&lt;br /&gt;
&lt;br /&gt;
*Dans un premier temps, nous avons essayé une fréquence fixe pour voir la calibration du cc430.&lt;br /&gt;
[[Fichier:862.png]]&lt;br /&gt;
Avec un exemple à 862Mhz, on remarque bien que les registres ont bien été initialisés et que la carte émet à la fréquence demandée.&lt;br /&gt;
&lt;br /&gt;
*Ensuite, nous avons testé le code effectuant le balayage sur la plage de fréquence 863-870Mhz, en augmentant le sweep time de l'analyseur de spectre pour voir les différentes fréquences auxquelles la carte émet.&lt;br /&gt;
[[Fichier:sweep.png]]&lt;br /&gt;
En observant de 861 à 872 Mhz sur l'écran de l'analyseur, on peut voir que le code effectue bien le balayage.&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission de la carte étant faible, nous avons essayé de l'augmenter en modifiant certains registres notamment ceux que l'on peut optimiser à l'aide du logiciel smart RF studio. Cependant, nous pensons qu'il faudra changer l'antenne patch actuelle de la carte pour une antenne connectée en SMA.&lt;br /&gt;
&lt;br /&gt;
*Nous avons aussi tenté de brouiller les communications d'autres groupes de projet utilisant des modules LoRa. Ces derniers étant configurés à 433Mhz, nous avons dû changer la fréquence de notre carte. Le brouillage ne fonctionnait pas mais notre carte étant optimisée pour une émission autour de 868Mhz, les résultats n'étaient pas pertinents.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 8'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[20/03/17 - 26/03/17]]'' &lt;br /&gt;
&lt;br /&gt;
*Nous avons emprunté à M. Vantroys 3 modules SX1276 montés sur des cartes NUCLEO-F401RE afin de pouvoir tester notre carte sur une communication LoRa à 868Mhz&lt;br /&gt;
[[Fichier:lorambed.png]]&lt;br /&gt;
*Le code utilisé pour le test a été récupéré sur le forum des développeurs du site mbed.com. C'est un code &amp;quot;ping pong&amp;quot; effectuant une communication continue entre deux modules LoRa à une fréquence de 868Mhz. Il nous a suffit d'utiliser le compilateur du site (qui regroupe toutes les bibliothèques nécessaires) en indiquant que la carte utilisée est une F401RE pour que le binaire produit soit compatible. La carte NUCLEO étant reconnue comme un système de fichier par Linux, pour la flasher il faut la monter en usb à l'aide des commandes fdisk et mount puis de copier le binaire dedans avec la commande cp.&lt;br /&gt;
[[Fichier:lora pingpong.zip]]&lt;br /&gt;
*Une fois les modules NUCLEO flashés, la communication LoRa est établie dès que deux modules sont alimentés. Nous avons donc branché en USB deux modules sur deux machines différentes afin d'observer la communication sur des terminaux. La communication se fait bien, l'un envoie &amp;quot;ping&amp;quot; tandis que l'autre envoie &amp;quot;pong&amp;quot; lorsqu'il reçoit &amp;quot;ping&amp;quot;. Malheureusement, comme nous l'avions prédit, notre carte a une puissance d'émission trop faible et ne parvient pas à brouiller efficacement.&lt;br /&gt;
*Les modules peuvent aussi communiquer en modulation FSK, dans ce cas notre système arrive à effectuer le brouillage. Néanmoins, il serait plus intéressant de parvenir à brouiller la communication LoRa.&lt;br /&gt;
*Après plusieurs changements dans le code du cc430, n'ayant pas de résultats positifs, nous avons diminué la puissance d'émission des modules LoRa en changeant un header dans le code lora_pingpong.cpp. En passant cette puissance de 14dBm à 6dBm, nous sommes parvenus à brouiller la communication entre les deux modules LoRa.&lt;br /&gt;
&lt;br /&gt;
*En parallèle, nous avons commencé à rechercher des solutions pour la fonction 2. Un pseudo code est donné sur le site ti.com ([https://www.ti.com/lit/an/swra315/swra315.pdf pseudo_code_frequency_scanning]) qui permet de faire un scan sur une plage de fréquence et de récupérer la fréquence ou le signal reçu est le plus fort. Ce code pourra être écrit en C puis incorporé dans notre main pour détecter une communication et la brouiller.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 9'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[27/03/17 - 02/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*Même si le brouillage ne s’effectue qu'à puissance réduite, nous avons cherché à l'optimiser&lt;br /&gt;
**Nous avons premièrement réalisé que le mode de modulation choisi au départ (ASK) n'était pas adapté au brouillage d'une communication LoRa. Nous avons donc essayé le mode GFSK qui est le plus proche du format de modulation du réseau LoRa. Nous avons aussi essayé les modes 2FSK et 4FSK qui sont relativement proches du GFSK. Nous en avons conclu que le mode de modulation à utiliser est GFSK (ce mode fonctionne aussi pour brouiller la modulation FSK)&lt;br /&gt;
**Ensuite, nous avons réduit la plage de fréquence balayée par le cc430 afin de voir si il y avait une influence sur le brouillage. Nous avons remarqué que le brouillage était plus efficace pour un balayage de 866 à 870 Mhz (au lieu de 863-870 initialement)&lt;br /&gt;
**Dans le même ordre d'idée, nous avons décidé de réduire le nombre d'incrémentations du registre CHANNR afin d'augmenter la rapidité du balayage. Pour ce faire, nous avons augmenté la taille de chaque canal, passant de 100kHz à 200kHz&lt;br /&gt;
**La puissance d'émission de la carte a été changée dans la fonction WritePATable (appelée par rfinit() dans le main), afin d'être maximale (12dBm)&lt;br /&gt;
**Enfin, nous avons augmenté le nombre de paquets à envoyer&lt;br /&gt;
&lt;br /&gt;
Nouvelle bibliothèque RFconfig.h :&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //high VCO FSCAL2=0x2A&lt;br /&gt;
 &lt;br /&gt;
 //867 : 21589A&lt;br /&gt;
 //866 : 214EC2&lt;br /&gt;
 //865 : 2144EA&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 //for 433Mhz : freq=0x10A766 and low vco (FSCAL2=0x0A)&lt;br /&gt;
 //432 : 0x109D8E&lt;br /&gt;
 &lt;br /&gt;
 //gfsk, 866, chann space ~200k, high vco currently&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 // (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x06 //default 0f (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x4E //866&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0xC2 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x83 // data rate&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x13 // GFSK &lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x22 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0xF8 //chanspc_m=248&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 // default 47khz deviation&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset for demodulation)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x07 // (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x77 //&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x10 //patable=0 (useless for gfsk) &lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosed&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x09 //&lt;br /&gt;
&lt;br /&gt;
Nouveau main.c : &lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;led_commands.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		10	// maximum size of data sent by rf&lt;br /&gt;
  &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 5000 //15ms  &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Any other commands are for RSSI measurement&lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFD;&lt;br /&gt;
   buffer[1] = 0xAA;&lt;br /&gt;
   buffer[2] = 0xFF;&lt;br /&gt;
   buffer[3] = 0x11;&lt;br /&gt;
   buffer[4] = 0xFF;&lt;br /&gt;
   buffer[5] = 0x66;&lt;br /&gt;
   buffer[6] = 0xFF;&lt;br /&gt;
   buffer[7] = 0x33;&lt;br /&gt;
   buffer[8] = 0x1F;&lt;br /&gt;
   buffer[9] = 0xF8;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   unsigned char led2=0x10;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(0x10, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 allumée quand le cc430 est sous tension&lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chann);&lt;br /&gt;
     send_cmd();&lt;br /&gt;
     if(chann&amp;gt;=20) //866-870&lt;br /&gt;
     {&lt;br /&gt;
       chann=0x00;&lt;br /&gt;
       led2=led2^0x10;&lt;br /&gt;
       set_color(0x10, 0x00, 0x00, led2, 0x00, 0x00); //led2 s'allume toutes les 2 rampes&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {&lt;br /&gt;
       chann++;&lt;br /&gt;
     }&lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Fonction WritePATable :&lt;br /&gt;
&lt;br /&gt;
 void WritePATable(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char valueRead = 0;&lt;br /&gt;
   &lt;br /&gt;
   //while(valueRead != 0x03)    // Output Power: -30  [dBm]&lt;br /&gt;
   //while(valueRead != 0x25)    // Output Power: -12  [dBm]&lt;br /&gt;
   //while(valueRead != 0x2D)    // Output Power: -6   [dBm]&lt;br /&gt;
   //while(valueRead != 0x8D)    // Output Power:  0   [dBm]&lt;br /&gt;
   //while(valueRead != 0xC3)    // Output Power:  10  [dBm]&lt;br /&gt;
   while(valueRead != 0xC0)    // Output Power:  Maximum  [dBm]&lt;br /&gt;
   //while(valueRead != 0xC6)    // Output Power(default):  8.8  [dBm]&lt;br /&gt;
   {&lt;br /&gt;
     /* Write the power output to the PA_TABLE and verify the write operation.  */&lt;br /&gt;
     unsigned char i = 0; &lt;br /&gt;
 &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
     //RF1AINSTRW = 0x7E03; // PA Table write (burst), Output Power: -30  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E25; // PA Table write (burst), Output Power: -12  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E2D; // PA Table write (burst), Output Power: -6   [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E8D; // PA Table write (burst), Output Power: 0    [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC3; // PA Table write (burst), Output Power: 10   [dBm]&lt;br /&gt;
     RF1AINSTRW = 0x7EC0; // PA Table write (burst), Output Power: Maximum  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC6; // PA Table write (burst), Output Power(default):  8.8  [dBm]&lt;br /&gt;
     &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
       RF1AINSTR1B = RF_PATABRD;                 // -miguel read &amp;amp; write&lt;br /&gt;
     &lt;br /&gt;
     // Traverse PATABLE pointers to read &lt;br /&gt;
     for (i = 0; i &amp;lt; 7; i++)&lt;br /&gt;
     {&lt;br /&gt;
       while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
       valueRead  = RF1ADOUT1B;     &lt;br /&gt;
     }&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
     valueRead  = RF1ADOUTB;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 10'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[03/04/17 - 09/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission étant trop faible pour brouiller la communication entre les 2 modules LoRa, nous avons décidé de changer l'antenne de la carte. Il a fallu couper l'antenne patch à l'aide d'une scie afin de souder un connecteur SMA.&lt;br /&gt;
[[Fichier:cc430antenne.png]]&lt;br /&gt;
*Grâce à cette nouvelle antenne, la communication peut maintenant être brouillée à une puissance de 10dBm (contre 6 auparavant). Mais il faut que la carte reste relativement proche d'un des modules.&lt;br /&gt;
*Pour réussir le brouillage quand les modules LoRa sont à leur puissance maximale (14dBm), il faudra sûrement ajouter un amplificateur entre la sortie de la carte et son antenne.&lt;br /&gt;
*Nous avons codé la fonction de scan en c et l'avons incorporé dans le main &lt;br /&gt;
**Cette fonction autorise le module à entrer en mode RX pour recevoir les communications. Elle incrémente ensuite le canal pour parcourir la plage 863-870MHz afin de détecter une communication. Toute les incrémentations, la variable rssi récupère la valeur contenue dans le registre qui correspond à la valeur du RSSI. Cette valeur étant en binaire complément 2, elle est convertie en dBm et placée dans un entier. Enfin, si cette valeur est supérieur à la valeur maximale déjà mesuré ou à un palier prédéfinie (ici 0dBm), on stocke le numéro du canal correspondant qui sera utilisé dans le main par la suite.&lt;br /&gt;
&lt;br /&gt;
fonction de scan :&lt;br /&gt;
 void freq_scan(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char rssi;&lt;br /&gt;
   long rssi_dbm;&lt;br /&gt;
   unsigned char chan_scan=START_FREQ_CHAN;&lt;br /&gt;
   long rssi_max=0; //scan will take communication above 0dbm&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, led2, 0x00); //led2 blue while scanning&lt;br /&gt;
   &lt;br /&gt;
   ChangeChannel(chan_scan);&lt;br /&gt;
   ReceiveOn();    //enable RX&lt;br /&gt;
   while((Strobe(RF_SNOP) &amp;amp; 0x70) != 0x10); //make sure RX is ready&lt;br /&gt;
   while(chan_scan&amp;lt;STOP_FREQ_CHAN)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chan_scan);&lt;br /&gt;
     __delay_cycles(DELAY_RSSI);       //wait for rssi to be updated&lt;br /&gt;
     rssi = ReadSingleReg(RSSI);  //define in cc430f5137.h RSSI=0x34 corresponding to addr of rssi value&lt;br /&gt;
     if (rssi &amp;gt;= 128) &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (long)((long)( rssi - 256) / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     else &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (rssi / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     if(rssi_dbm&amp;gt;rssi_max)&lt;br /&gt;
     {&lt;br /&gt;
       rssi_max=rssi_dbm;&lt;br /&gt;
       chan_jam=chan_scan-10; //start jamming 2Mhz below max dbm received&lt;br /&gt;
     }&lt;br /&gt;
     chan_scan++;&lt;br /&gt;
     Strobe( RF_SFRX); //flush the RX FIFO&lt;br /&gt;
   }&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
nouveau main :&lt;br /&gt;
&lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chan_main=0x00;&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 on if cc430 powered&lt;br /&gt;
   int i;&lt;br /&gt;
   &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     freq_scan();&lt;br /&gt;
     ReceiveOff();&lt;br /&gt;
     chan_main=chan_jam;&lt;br /&gt;
     if (chan_main != 0)  //jam only if a communication xas detected with freq_scan&lt;br /&gt;
     {&lt;br /&gt;
       for(i=0 ; i&amp;lt;(20*NUM_JAM_RAMP) ; i++) //ramp start 2Mhz below chan_jam and stop 2Mhz above&lt;br /&gt;
       {&lt;br /&gt;
         ChangeChannel(chan_main);&lt;br /&gt;
         if (chan_main&amp;gt;= (chan_jam+20))&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main=0x00;&lt;br /&gt;
           led2=led2^0x10;&lt;br /&gt;
           set_color(led1, 0x00, 0x00, led2, 0x00, 0x00); //led2 blink red every two ramp of jamming&lt;br /&gt;
         }&lt;br /&gt;
         else&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main++;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     chan_main=0x00;  &lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
header :&lt;br /&gt;
 #define DELAY 100 //300us  &lt;br /&gt;
 #define DELAY_RSSI 10 //30us&lt;br /&gt;
 &lt;br /&gt;
 #define START_FREQ_CHAN 15&lt;br /&gt;
 #define STOP_FREQ_CHAN 50     //scanning 863-870Mhz with 200khz steps&lt;br /&gt;
 #define RSSI_OFFSET 74 //cf datasheet&lt;br /&gt;
 &lt;br /&gt;
 #define NUM_JAM_RAMP 50&lt;br /&gt;
 &lt;br /&gt;
 unsigned char chan_jam=0x00;&lt;br /&gt;
 unsigned char led2=0x10;&lt;br /&gt;
 unsigned char led1=0x10;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Fichiers Rendus'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[[Fichier:code_fonction_1.zip]]&lt;br /&gt;
*[[Fichier:code_fonction_2.zip]]&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42068</id>
		<title>IMA4 2016/2017 P32</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42068"/>
				<updated>2017-05-11T12:39:52Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Semaine 10 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Cahier des charges'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;Présentation générale du projet&amp;lt;/span&amp;gt;=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Contexte&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'expansion de l'utilisation des objets connectés permet de nos jours d'accéder à des données ou de contrôler aisément d'autres systèmes connectés à distance. Les objets connectés sont de plus en plus déployés mais leur sécurité n'est pas toujours testée. Par conséquent, de nombreuses informations sensibles sont susceptibles de transiter en permanence par le biais de multiples plages de fréquences. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ceci amène donc un questionnement sur la sécurité des transferts de données entre la multitude d'objets connectés actuellement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Objectif du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de réaliser un brouilleur d'ondes radiofréquence dans la bande des 868 MHz capable de bloquer les communications LoRa.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Description du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
A l'aboutissement du projet, nous devrions être capable de détecter une communication LoRa dans la bande des 868 MHz, et de la brouiller elle seule, sans incidence sur les autres communications sur d'autres fréquences du réseau LoRa.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous devrons réaliser un montage réalisant un brouillage sur la plage 863-870Mhz afin d'empêcher toute communication LoRa, en envoyant du bruit électronique sur toute la plage de fréquence.&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet, nous perfectionnerons ce montage pour qu'il puisse détecter une communication LoRa à une fréquence donnée (grâce au &amp;quot;join-request message&amp;quot; de 18 octets envoyés par le end-point/node, ou bien grâce aux informations données dans le préambule des paquets), afin d'envoyer des données erronées et de bloquer uniquement cette communication.&lt;br /&gt;
&lt;br /&gt;
Si le temps et le budget le permettent, nous pourrons aussi être amenés à brouiller la plage de fréquences autour des 433 MHz (aussi utilisé par le réseau LoRa).&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Choix techniques : matériel et logiciel&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser ce système, nous allons utiliser un microcontrôleur cc430 muni d'un transceiver cc1101, d'un récepteur LoRa(868MHz) communicant via protocole SPI avec le microcontrôleur, 2 antennes, une batterie, quelques LEDs.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Calendrier prévisionnel'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Liste des tâches à effectuer&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
# Documentation sur le réseau LoRa&lt;br /&gt;
##moyen de transmission&lt;br /&gt;
##format de modulation&lt;br /&gt;
##trame des paquets&lt;br /&gt;
# Réalisation du premier montage brouillant toute la plage&lt;br /&gt;
##contrôler l'émetteur RF du cc430&lt;br /&gt;
##programmer un bruitage sur la plage 863-870MHz&lt;br /&gt;
##test et optimisation&lt;br /&gt;
# Ajout d'un récepteur LoRa pour détecter et brouiller une seule communication&lt;br /&gt;
##contrôler le récepteur LoRa avec le cc430 par protocole spi&lt;br /&gt;
##détecter une communication LoRa à une fréquence donnée&lt;br /&gt;
##contrôler l'émetteur RF afin de brouiller cette communication de manière brutale&lt;br /&gt;
##brouiller cette communication en tentant de changer les données du paquet &lt;br /&gt;
##test et optimisation&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Calendrier&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
''[[Avant le 19/12/16]]'' - Élaboration du Cahier des charges et remplissage du Wiki&lt;br /&gt;
&lt;br /&gt;
''[[Avant fin Janvier]]'' - Complément du Cahier des Charges et listage du matériel nécessaire pour le projet&lt;br /&gt;
&lt;br /&gt;
''[[Répartition sur le S8]]'' - 120h: Réalisation de la 1ere fonction (45h) / Réalisation de la 2e fonction (45h) / Test et débuguage (30h)&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Feuille d'heures'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Cahier des charges / Wiki&lt;br /&gt;
| 4h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3,5h&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|1h&lt;br /&gt;
|1h&lt;br /&gt;
|&lt;br /&gt;
|1h&lt;br /&gt;
|0,5h&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le réseau LoRa&lt;br /&gt;
| &lt;br /&gt;
| 6h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 1ère fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|2h&lt;br /&gt;
|1,5h&lt;br /&gt;
|6h&lt;br /&gt;
|6h&lt;br /&gt;
|4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 2ème fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Tests et mesures&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Modification de la carte&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Avancement du Projet'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Phase préparatoire'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[Jeu 15/12/16]]'' &lt;br /&gt;
*Rendez-vous de mise au point du cahier des charges avec les trois encadrants (M. Boé, M. Vantroys et M. Redon)&lt;br /&gt;
*Elaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 1'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[23/01/17 - 29/01/17]]'' &lt;br /&gt;
*Revue du Cahier des Charges&lt;br /&gt;
*Recherches approfondies sur les modes de transmissions du réseau LoRa&lt;br /&gt;
*Recherche de matériel&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 2'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[30/01/17 - 05/02/17]]''  &lt;br /&gt;
*Précisions sur le cahier des charges&lt;br /&gt;
*Listage du matériel&lt;br /&gt;
*Recherche et détermination de solutions technologiques possibles pour les fonctions demandées&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 3'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[06/02/17 - 12/02/17]]''&lt;br /&gt;
*validation du matériel&lt;br /&gt;
Nous allons utiliser un cc430f5137 (MCU+RF) monté sur une carte optimisée pour les communications autours de 868Mhz.&lt;br /&gt;
Nous pouvons commencer à étudier son fonctionnement, particulièrement celui du module RF (cc1101).&lt;br /&gt;
Nous avons aussi récupéré des exemples de code en c sur le site de Texas Instrument et vu l'utilisation de ces codes sur un projet IMA5 de l'an passé.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 4'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/02/17 - 19/02/17]]''&lt;br /&gt;
*Recherche de solutions pour répondre à la 1ère fonction (brouiller la plage 863-870Mhz).&lt;br /&gt;
&lt;br /&gt;
Après une lecture approfondie de la datasheet du module RF du cc430, nous avons choisi d'utiliser la fréquence de base du module (pouvant être définie grâce aux registres) couplée au registre CHANNR. Cela nous permettra de modifier plus facilement la fréquence de la porteuse, en suivant la formule suivante : [[Fichier:rampe.png]].&lt;br /&gt;
&lt;br /&gt;
Nous pourrons alors balayer la plage de fréquence en changeant la valeur de CHANNR.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 5'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[27/02/17 - 05/03/17]]''&lt;br /&gt;
&lt;br /&gt;
A l'aide de la datasheet du cc1101 ([http://www.ti.com/lit/ds/symlink/cc1101.pdf datasheet_cc1101] pages : 70 à 95), nous avons défini les registres du module RF de la manière suivante (sachant que la fréquence du quartz est de 26MHz, soit Fxosc=26MHz) :&lt;br /&gt;
&lt;br /&gt;
*La fréquence de base a été fixée à 862,999MHz en suivant la formule donnée dans la data sheet[[Fichier:carrier_formula.png]]&lt;br /&gt;
ce qui nous a donné les valeurs FREQ2=0x21, FREQ1=0x31 et FREQ0=0x3A (FREQ=2 175 290)&lt;br /&gt;
&lt;br /&gt;
*Nous avons suivi la formule [[Fichier:chanspace_formula.png]] afin d'avoir un espacement entre les cannaux d'environ 100Khz&lt;br /&gt;
ce qui nous a donné  MDMCFG1=0x02 (CHANSPC_E=2) et MDMCFG0=0x00(CHANSPC_M=0)&lt;br /&gt;
&lt;br /&gt;
*Pour le moment, nous avons choisi le mode de modulation AM, nous avons donc initialisé les registres MDMCFG2=0x30 (mode ASK/OOK) et FREND0=0x50(patable=0 donnant le mode ASK)&lt;br /&gt;
&lt;br /&gt;
*Nous avons créé une bibliothèque RFconfig.h regroupant les valeurs de tous les registres :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal and high VCO recommended&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz stop at 870&lt;br /&gt;
 //FREQ=00 10 00 01 00 11 00 01 00 11 10 10&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //CHANNR from 0 to 69 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 //0 (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x0F //default (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x31 //868Mhz&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0x3A /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x22 //default (data rate)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x30 // ASK/OOK,no sync-word&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x02 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0x00 //chanspc_m=0&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 //default (no effet on ASK/OOK mode)&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset not used)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x03 //default (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x40 //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x50 //patable=0 -&amp;gt; ASK&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosen&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x0B //default&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 6'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[06/03/17 - 12/03/17]]''&lt;br /&gt;
*Nous avons préparé un premier code réalisant une rampe sur la plage 863-870MHz. Ce code est basé sur une boucle infinie qui incrémente le registre chann de 0 à 69 (pour passer de 863 à 870Mhz) et envoie des paquets 0xFF grâce aux fonctions ChangeChannel(chann) et send_comand().&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		1	// maximum size of data sent by rf&lt;br /&gt;
 &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 10000&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFF;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init();&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);	 &lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
     {&lt;br /&gt;
       ChangeChannel(chann);&lt;br /&gt;
       send_cmd();&lt;br /&gt;
       if(chann&amp;gt;=69) &lt;br /&gt;
 	{&lt;br /&gt;
 	  chann=0x00;&lt;br /&gt;
 	}&lt;br /&gt;
       else&lt;br /&gt;
 	{&lt;br /&gt;
 	  chann++;&lt;br /&gt;
 	}&lt;br /&gt;
       __delay_cycles(DELAY);&lt;br /&gt;
     }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Après quelques corrections du code, nous avons pu le compiler grâce au Makefile&lt;br /&gt;
&lt;br /&gt;
*Avec la commande (exécutée en root) et le montage suivants, nous avons upload le main sur le cc430&lt;br /&gt;
 mspdebug rf2500 &amp;quot;prog main&amp;quot;&lt;br /&gt;
[[Fichier:montage001.png]]&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 7'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/03/17 - 19/03/17]]''&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé les premiers tests sur l'analyseur de spectre afin de vérifier que le code fonctionne bien.&lt;br /&gt;
&lt;br /&gt;
*Dans un premier temps, nous avons essayé une fréquence fixe pour voir la calibration du cc430.&lt;br /&gt;
[[Fichier:862.png]]&lt;br /&gt;
Avec un exemple à 862Mhz, on remarque bien que les registres ont bien été initialisés et que la carte émet à la fréquence demandée.&lt;br /&gt;
&lt;br /&gt;
*Ensuite, nous avons testé le code effectuant le balayage sur la plage de fréquence 863-870Mhz, en augmentant le sweep time de l'analyseur de spectre pour voir les différentes fréquences auxquelles la carte émet.&lt;br /&gt;
[[Fichier:sweep.png]]&lt;br /&gt;
En observant de 861 à 872 Mhz sur l'écran de l'analyseur, on peut voir que le code effectue bien le balayage.&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission de la carte étant faible, nous avons essayé de l'augmenter en modifiant certains registres notamment ceux que l'on peut optimiser à l'aide du logiciel smart RF studio. Cependant, nous pensons qu'il faudra changer l'antenne patch actuelle de la carte pour une antenne connectée en SMA.&lt;br /&gt;
&lt;br /&gt;
*Nous avons aussi tenté de brouiller les communications d'autres groupes de projet utilisant des modules LoRa. Ces derniers étant configurés à 433Mhz, nous avons dû changer la fréquence de notre carte. Le brouillage ne fonctionnait pas mais notre carte étant optimisée pour une émission autour de 868Mhz, les résultats n'étaient pas pertinents.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 8'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[20/03/17 - 26/03/17]]'' &lt;br /&gt;
&lt;br /&gt;
*Nous avons emprunté à M. Vantroys 3 modules SX1276 montés sur des cartes NUCLEO-F401RE afin de pouvoir tester notre carte sur une communication LoRa à 868Mhz&lt;br /&gt;
[[Fichier:lorambed.png]]&lt;br /&gt;
*Le code utilisé pour le test a été récupéré sur le forum des développeurs du site mbed.com. C'est un code &amp;quot;ping pong&amp;quot; effectuant une communication continue entre deux modules LoRa à une fréquence de 868Mhz. Il nous a suffit d'utiliser le compilateur du site (qui regroupe toutes les bibliothèques nécessaires) en indiquant que la carte utilisée est une F401RE pour que le binaire produit soit compatible. La carte NUCLEO étant reconnue comme un système de fichier par Linux, pour la flasher il faut la monter en usb à l'aide des commandes fdisk et mount puis de copier le binaire dedans avec la commande cp.&lt;br /&gt;
[[Fichier:lora pingpong.zip]]&lt;br /&gt;
*Une fois les modules NUCLEO flashés, la communication LoRa est établie dès que deux modules sont alimentés. Nous avons donc branché en USB deux modules sur deux machines différentes afin d'observer la communication sur des terminaux. La communication se fait bien, l'un envoie &amp;quot;ping&amp;quot; tandis que l'autre envoie &amp;quot;pong&amp;quot; lorsqu'il reçoit &amp;quot;ping&amp;quot;. Malheureusement, comme nous l'avions prédit, notre carte a une puissance d'émission trop faible et ne parvient pas à brouiller efficacement.&lt;br /&gt;
*Les modules peuvent aussi communiquer en modulation FSK, dans ce cas notre système arrive à effectuer le brouillage. Néanmoins, il serait plus intéressant de parvenir à brouiller la communication LoRa.&lt;br /&gt;
*Après plusieurs changements dans le code du cc430, n'ayant pas de résultats positifs, nous avons diminué la puissance d'émission des modules LoRa en changeant un header dans le code lora_pingpong.cpp. En passant cette puissance de 14dBm à 6dBm, nous sommes parvenus à brouiller la communication entre les deux modules LoRa.&lt;br /&gt;
&lt;br /&gt;
*En parallèle, nous avons commencé à rechercher des solutions pour la fonction 2. Un pseudo code est donné sur le site ti.com ([https://www.ti.com/lit/an/swra315/swra315.pdf pseudo_code_frequency_scanning]) qui permet de faire un scan sur une plage de fréquence et de récupérer la fréquence ou le signal reçu est le plus fort. Ce code pourra être écrit en C puis incorporé dans notre main pour détecter une communication et la brouiller.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 9'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[27/03/17 - 02/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*Même si le brouillage ne s’effectue qu'à puissance réduite, nous avons cherché à l'optimiser&lt;br /&gt;
**Nous avons premièrement réalisé que le mode de modulation choisi au départ (ASK) n'était pas adapté au brouillage d'une communication LoRa. Nous avons donc essayé le mode GFSK qui est le plus proche du format de modulation du réseau LoRa. Nous avons aussi essayé les modes 2FSK et 4FSK qui sont relativement proches du GFSK. Nous en avons conclu que le mode de modulation à utiliser est GFSK (ce mode fonctionne aussi pour brouiller la modulation FSK)&lt;br /&gt;
**Ensuite, nous avons réduit la plage de fréquence balayée par le cc430 afin de voir si il y avait une influence sur le brouillage. Nous avons remarqué que le brouillage était plus efficace pour un balayage de 866 à 870 Mhz (au lieu de 863-870 initialement)&lt;br /&gt;
**Dans le même ordre d'idée, nous avons décidé de réduire le nombre d'incrémentations du registre CHANNR afin d'augmenter la rapidité du balayage. Pour ce faire, nous avons augmenté la taille de chaque canal, passant de 100kHz à 200kHz&lt;br /&gt;
**La puissance d'émission de la carte a été changée dans la fonction WritePATable (appelée par rfinit() dans le main), afin d'être maximale (12dBm)&lt;br /&gt;
**Enfin, nous avons augmenté le nombre de paquets à envoyer&lt;br /&gt;
&lt;br /&gt;
Nouvelle bibliothèque RFconfig.h :&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //high VCO FSCAL2=0x2A&lt;br /&gt;
 &lt;br /&gt;
 //867 : 21589A&lt;br /&gt;
 //866 : 214EC2&lt;br /&gt;
 //865 : 2144EA&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 //for 433Mhz : freq=0x10A766 and low vco (FSCAL2=0x0A)&lt;br /&gt;
 //432 : 0x109D8E&lt;br /&gt;
 &lt;br /&gt;
 //gfsk, 866, chann space ~200k, high vco currently&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 // (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x06 //default 0f (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x4E //866&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0xC2 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x83 // data rate&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x13 // GFSK &lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x22 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0xF8 //chanspc_m=248&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 // default 47khz deviation&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset for demodulation)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x07 // (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x77 //&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x10 //patable=0 (useless for gfsk) &lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosed&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x09 //&lt;br /&gt;
&lt;br /&gt;
Nouveau main.c : &lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;led_commands.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		10	// maximum size of data sent by rf&lt;br /&gt;
  &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 5000 //15ms  &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Any other commands are for RSSI measurement&lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFD;&lt;br /&gt;
   buffer[1] = 0xAA;&lt;br /&gt;
   buffer[2] = 0xFF;&lt;br /&gt;
   buffer[3] = 0x11;&lt;br /&gt;
   buffer[4] = 0xFF;&lt;br /&gt;
   buffer[5] = 0x66;&lt;br /&gt;
   buffer[6] = 0xFF;&lt;br /&gt;
   buffer[7] = 0x33;&lt;br /&gt;
   buffer[8] = 0x1F;&lt;br /&gt;
   buffer[9] = 0xF8;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   unsigned char led2=0x10;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(0x10, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 allumée quand le cc430 est sous tension&lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chann);&lt;br /&gt;
     send_cmd();&lt;br /&gt;
     if(chann&amp;gt;=20) //866-870&lt;br /&gt;
     {&lt;br /&gt;
       chann=0x00;&lt;br /&gt;
       led2=led2^0x10;&lt;br /&gt;
       set_color(0x10, 0x00, 0x00, led2, 0x00, 0x00); //led2 s'allume toutes les 2 rampes&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {&lt;br /&gt;
       chann++;&lt;br /&gt;
     }&lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Fonction WritePATable :&lt;br /&gt;
&lt;br /&gt;
 void WritePATable(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char valueRead = 0;&lt;br /&gt;
   &lt;br /&gt;
   //while(valueRead != 0x03)    // Output Power: -30  [dBm]&lt;br /&gt;
   //while(valueRead != 0x25)    // Output Power: -12  [dBm]&lt;br /&gt;
   //while(valueRead != 0x2D)    // Output Power: -6   [dBm]&lt;br /&gt;
   //while(valueRead != 0x8D)    // Output Power:  0   [dBm]&lt;br /&gt;
   //while(valueRead != 0xC3)    // Output Power:  10  [dBm]&lt;br /&gt;
   while(valueRead != 0xC0)    // Output Power:  Maximum  [dBm]&lt;br /&gt;
   //while(valueRead != 0xC6)    // Output Power(default):  8.8  [dBm]&lt;br /&gt;
   {&lt;br /&gt;
     /* Write the power output to the PA_TABLE and verify the write operation.  */&lt;br /&gt;
     unsigned char i = 0; &lt;br /&gt;
 &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
     //RF1AINSTRW = 0x7E03; // PA Table write (burst), Output Power: -30  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E25; // PA Table write (burst), Output Power: -12  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E2D; // PA Table write (burst), Output Power: -6   [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E8D; // PA Table write (burst), Output Power: 0    [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC3; // PA Table write (burst), Output Power: 10   [dBm]&lt;br /&gt;
     RF1AINSTRW = 0x7EC0; // PA Table write (burst), Output Power: Maximum  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC6; // PA Table write (burst), Output Power(default):  8.8  [dBm]&lt;br /&gt;
     &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
       RF1AINSTR1B = RF_PATABRD;                 // -miguel read &amp;amp; write&lt;br /&gt;
     &lt;br /&gt;
     // Traverse PATABLE pointers to read &lt;br /&gt;
     for (i = 0; i &amp;lt; 7; i++)&lt;br /&gt;
     {&lt;br /&gt;
       while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
       valueRead  = RF1ADOUT1B;     &lt;br /&gt;
     }&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
     valueRead  = RF1ADOUTB;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 10'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[03/04/17 - 09/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission étant trop faible pour brouiller la communication entre les 2 modules LoRa, nous avons décidé de changer l'antenne de la carte. Il a fallu couper l'antenne patch à l'aide d'une scie afin de souder un connecteur SMA.&lt;br /&gt;
[[Fichier:cc430antenne.png]]&lt;br /&gt;
*Grâce à cette nouvelle antenne, la communication peut maintenant être brouillée à une puissance de 10dBm (contre 6 auparavant). Mais il faut que la carte reste relativement proche d'un des modules.&lt;br /&gt;
*Pour réussir le brouillage quand les modules LoRa sont à leur puissance maximale (14dBm), il faudra sûrement ajouter un amplificateur entre la sortie de la carte et son antenne.&lt;br /&gt;
*Nous avons codé la fonction de scan en c et l'avons incorporé dans le main &lt;br /&gt;
**Cette fonction autorise le module à entrer en mode RX pour recevoir les communications. Elle incrémente ensuite le canal pour parcourir la plage 863-870MHz afin de détecter une communication. Toute les incrémentation la variable rssi récupère la valeur contenue dans le registre correspond à la valeur du RSSI. Cette valeur étant en binaire complément 2, elle est convertie en dBm et placée dans un entier. Enfin, si cette valeur est supérieur à la valeur maximale déjà mesuré ou à un palier prédéfinie (ici 0dBm), on stocke le numéro du canal correspondant qui sera utilisé dans le main par la suite.&lt;br /&gt;
&lt;br /&gt;
fonction de scan :&lt;br /&gt;
 void freq_scan(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char rssi;&lt;br /&gt;
   long rssi_dbm;&lt;br /&gt;
   unsigned char chan_scan=START_FREQ_CHAN;&lt;br /&gt;
   long rssi_max=0; //scan will take communication above 0dbm&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, led2, 0x00); //led2 blue while scanning&lt;br /&gt;
   &lt;br /&gt;
   ChangeChannel(chan_scan);&lt;br /&gt;
   ReceiveOn();    //enable RX&lt;br /&gt;
   while((Strobe(RF_SNOP) &amp;amp; 0x70) != 0x10); //make sure RX is ready&lt;br /&gt;
   while(chan_scan&amp;lt;STOP_FREQ_CHAN)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chan_scan);&lt;br /&gt;
     __delay_cycles(DELAY_RSSI);       //wait for rssi to be updated&lt;br /&gt;
     rssi = ReadSingleReg(RSSI);  //define in cc430f5137.h RSSI=0x34 corresponding to addr of rssi value&lt;br /&gt;
     if (rssi &amp;gt;= 128) &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (long)((long)( rssi - 256) / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     else &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (rssi / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     if(rssi_dbm&amp;gt;rssi_max)&lt;br /&gt;
     {&lt;br /&gt;
       rssi_max=rssi_dbm;&lt;br /&gt;
       chan_jam=chan_scan-10; //start jamming 2Mhz below max dbm received&lt;br /&gt;
     }&lt;br /&gt;
     chan_scan++;&lt;br /&gt;
     Strobe( RF_SFRX); //flush the RX FIFO&lt;br /&gt;
   }&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
nouveau main :&lt;br /&gt;
&lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chan_main=0x00;&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 on if cc430 powered&lt;br /&gt;
   int i;&lt;br /&gt;
   &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     freq_scan();&lt;br /&gt;
     ReceiveOff();&lt;br /&gt;
     chan_main=chan_jam;&lt;br /&gt;
     if (chan_main != 0)  //jam only if a communication xas detected with freq_scan&lt;br /&gt;
     {&lt;br /&gt;
       for(i=0 ; i&amp;lt;(20*NUM_JAM_RAMP) ; i++) //ramp start 2Mhz below chan_jam and stop 2Mhz above&lt;br /&gt;
       {&lt;br /&gt;
         ChangeChannel(chan_main);&lt;br /&gt;
         if (chan_main&amp;gt;= (chan_jam+20))&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main=0x00;&lt;br /&gt;
           led2=led2^0x10;&lt;br /&gt;
           set_color(led1, 0x00, 0x00, led2, 0x00, 0x00); //led2 blink red every two ramp of jamming&lt;br /&gt;
         }&lt;br /&gt;
         else&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main++;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     chan_main=0x00;  &lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
header :&lt;br /&gt;
 #define DELAY 100 //300us  &lt;br /&gt;
 #define DELAY_RSSI 10 //30us&lt;br /&gt;
 &lt;br /&gt;
 #define START_FREQ_CHAN 15&lt;br /&gt;
 #define STOP_FREQ_CHAN 50     //scanning 863-870Mhz with 200khz steps&lt;br /&gt;
 #define RSSI_OFFSET 74 //cf datasheet&lt;br /&gt;
 &lt;br /&gt;
 #define NUM_JAM_RAMP 50&lt;br /&gt;
 &lt;br /&gt;
 unsigned char chan_jam=0x00;&lt;br /&gt;
 unsigned char led2=0x10;&lt;br /&gt;
 unsigned char led1=0x10;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Fichiers Rendus'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[[Fichier:code_fonction_1.zip]]&lt;br /&gt;
*[[Fichier:code_fonction_2.zip]]&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42067</id>
		<title>IMA4 2016/2017 P32</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42067"/>
				<updated>2017-05-11T12:39:26Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : ari&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Cahier des charges'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;Présentation générale du projet&amp;lt;/span&amp;gt;=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Contexte&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'expansion de l'utilisation des objets connectés permet de nos jours d'accéder à des données ou de contrôler aisément d'autres systèmes connectés à distance. Les objets connectés sont de plus en plus déployés mais leur sécurité n'est pas toujours testée. Par conséquent, de nombreuses informations sensibles sont susceptibles de transiter en permanence par le biais de multiples plages de fréquences. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ceci amène donc un questionnement sur la sécurité des transferts de données entre la multitude d'objets connectés actuellement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Objectif du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de réaliser un brouilleur d'ondes radiofréquence dans la bande des 868 MHz capable de bloquer les communications LoRa.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Description du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
A l'aboutissement du projet, nous devrions être capable de détecter une communication LoRa dans la bande des 868 MHz, et de la brouiller elle seule, sans incidence sur les autres communications sur d'autres fréquences du réseau LoRa.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous devrons réaliser un montage réalisant un brouillage sur la plage 863-870Mhz afin d'empêcher toute communication LoRa, en envoyant du bruit électronique sur toute la plage de fréquence.&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet, nous perfectionnerons ce montage pour qu'il puisse détecter une communication LoRa à une fréquence donnée (grâce au &amp;quot;join-request message&amp;quot; de 18 octets envoyés par le end-point/node, ou bien grâce aux informations données dans le préambule des paquets), afin d'envoyer des données erronées et de bloquer uniquement cette communication.&lt;br /&gt;
&lt;br /&gt;
Si le temps et le budget le permettent, nous pourrons aussi être amenés à brouiller la plage de fréquences autour des 433 MHz (aussi utilisé par le réseau LoRa).&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Choix techniques : matériel et logiciel&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser ce système, nous allons utiliser un microcontrôleur cc430 muni d'un transceiver cc1101, d'un récepteur LoRa(868MHz) communicant via protocole SPI avec le microcontrôleur, 2 antennes, une batterie, quelques LEDs.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Calendrier prévisionnel'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Liste des tâches à effectuer&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
# Documentation sur le réseau LoRa&lt;br /&gt;
##moyen de transmission&lt;br /&gt;
##format de modulation&lt;br /&gt;
##trame des paquets&lt;br /&gt;
# Réalisation du premier montage brouillant toute la plage&lt;br /&gt;
##contrôler l'émetteur RF du cc430&lt;br /&gt;
##programmer un bruitage sur la plage 863-870MHz&lt;br /&gt;
##test et optimisation&lt;br /&gt;
# Ajout d'un récepteur LoRa pour détecter et brouiller une seule communication&lt;br /&gt;
##contrôler le récepteur LoRa avec le cc430 par protocole spi&lt;br /&gt;
##détecter une communication LoRa à une fréquence donnée&lt;br /&gt;
##contrôler l'émetteur RF afin de brouiller cette communication de manière brutale&lt;br /&gt;
##brouiller cette communication en tentant de changer les données du paquet &lt;br /&gt;
##test et optimisation&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Calendrier&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
''[[Avant le 19/12/16]]'' - Élaboration du Cahier des charges et remplissage du Wiki&lt;br /&gt;
&lt;br /&gt;
''[[Avant fin Janvier]]'' - Complément du Cahier des Charges et listage du matériel nécessaire pour le projet&lt;br /&gt;
&lt;br /&gt;
''[[Répartition sur le S8]]'' - 120h: Réalisation de la 1ere fonction (45h) / Réalisation de la 2e fonction (45h) / Test et débuguage (30h)&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Feuille d'heures'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Cahier des charges / Wiki&lt;br /&gt;
| 4h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3,5h&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|1h&lt;br /&gt;
|1h&lt;br /&gt;
|&lt;br /&gt;
|1h&lt;br /&gt;
|0,5h&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le réseau LoRa&lt;br /&gt;
| &lt;br /&gt;
| 6h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 1ère fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|2h&lt;br /&gt;
|1,5h&lt;br /&gt;
|6h&lt;br /&gt;
|6h&lt;br /&gt;
|4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 2ème fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Tests et mesures&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Modification de la carte&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Avancement du Projet'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Phase préparatoire'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[Jeu 15/12/16]]'' &lt;br /&gt;
*Rendez-vous de mise au point du cahier des charges avec les trois encadrants (M. Boé, M. Vantroys et M. Redon)&lt;br /&gt;
*Elaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 1'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[23/01/17 - 29/01/17]]'' &lt;br /&gt;
*Revue du Cahier des Charges&lt;br /&gt;
*Recherches approfondies sur les modes de transmissions du réseau LoRa&lt;br /&gt;
*Recherche de matériel&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 2'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[30/01/17 - 05/02/17]]''  &lt;br /&gt;
*Précisions sur le cahier des charges&lt;br /&gt;
*Listage du matériel&lt;br /&gt;
*Recherche et détermination de solutions technologiques possibles pour les fonctions demandées&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 3'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[06/02/17 - 12/02/17]]''&lt;br /&gt;
*validation du matériel&lt;br /&gt;
Nous allons utiliser un cc430f5137 (MCU+RF) monté sur une carte optimisée pour les communications autours de 868Mhz.&lt;br /&gt;
Nous pouvons commencer à étudier son fonctionnement, particulièrement celui du module RF (cc1101).&lt;br /&gt;
Nous avons aussi récupéré des exemples de code en c sur le site de Texas Instrument et vu l'utilisation de ces codes sur un projet IMA5 de l'an passé.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 4'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/02/17 - 19/02/17]]''&lt;br /&gt;
*Recherche de solutions pour répondre à la 1ère fonction (brouiller la plage 863-870Mhz).&lt;br /&gt;
&lt;br /&gt;
Après une lecture approfondie de la datasheet du module RF du cc430, nous avons choisi d'utiliser la fréquence de base du module (pouvant être définie grâce aux registres) couplée au registre CHANNR. Cela nous permettra de modifier plus facilement la fréquence de la porteuse, en suivant la formule suivante : [[Fichier:rampe.png]].&lt;br /&gt;
&lt;br /&gt;
Nous pourrons alors balayer la plage de fréquence en changeant la valeur de CHANNR.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 5'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[27/02/17 - 05/03/17]]''&lt;br /&gt;
&lt;br /&gt;
A l'aide de la datasheet du cc1101 ([http://www.ti.com/lit/ds/symlink/cc1101.pdf datasheet_cc1101] pages : 70 à 95), nous avons défini les registres du module RF de la manière suivante (sachant que la fréquence du quartz est de 26MHz, soit Fxosc=26MHz) :&lt;br /&gt;
&lt;br /&gt;
*La fréquence de base a été fixée à 862,999MHz en suivant la formule donnée dans la data sheet[[Fichier:carrier_formula.png]]&lt;br /&gt;
ce qui nous a donné les valeurs FREQ2=0x21, FREQ1=0x31 et FREQ0=0x3A (FREQ=2 175 290)&lt;br /&gt;
&lt;br /&gt;
*Nous avons suivi la formule [[Fichier:chanspace_formula.png]] afin d'avoir un espacement entre les cannaux d'environ 100Khz&lt;br /&gt;
ce qui nous a donné  MDMCFG1=0x02 (CHANSPC_E=2) et MDMCFG0=0x00(CHANSPC_M=0)&lt;br /&gt;
&lt;br /&gt;
*Pour le moment, nous avons choisi le mode de modulation AM, nous avons donc initialisé les registres MDMCFG2=0x30 (mode ASK/OOK) et FREND0=0x50(patable=0 donnant le mode ASK)&lt;br /&gt;
&lt;br /&gt;
*Nous avons créé une bibliothèque RFconfig.h regroupant les valeurs de tous les registres :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal and high VCO recommended&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz stop at 870&lt;br /&gt;
 //FREQ=00 10 00 01 00 11 00 01 00 11 10 10&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //CHANNR from 0 to 69 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 //0 (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x0F //default (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x31 //868Mhz&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0x3A /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x22 //default (data rate)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x30 // ASK/OOK,no sync-word&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x02 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0x00 //chanspc_m=0&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 //default (no effet on ASK/OOK mode)&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset not used)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x03 //default (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x40 //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x50 //patable=0 -&amp;gt; ASK&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosen&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x0B //default&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 6'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[06/03/17 - 12/03/17]]''&lt;br /&gt;
*Nous avons préparé un premier code réalisant une rampe sur la plage 863-870MHz. Ce code est basé sur une boucle infinie qui incrémente le registre chann de 0 à 69 (pour passer de 863 à 870Mhz) et envoie des paquets 0xFF grâce aux fonctions ChangeChannel(chann) et send_comand().&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		1	// maximum size of data sent by rf&lt;br /&gt;
 &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 10000&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFF;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init();&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);	 &lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
     {&lt;br /&gt;
       ChangeChannel(chann);&lt;br /&gt;
       send_cmd();&lt;br /&gt;
       if(chann&amp;gt;=69) &lt;br /&gt;
 	{&lt;br /&gt;
 	  chann=0x00;&lt;br /&gt;
 	}&lt;br /&gt;
       else&lt;br /&gt;
 	{&lt;br /&gt;
 	  chann++;&lt;br /&gt;
 	}&lt;br /&gt;
       __delay_cycles(DELAY);&lt;br /&gt;
     }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Après quelques corrections du code, nous avons pu le compiler grâce au Makefile&lt;br /&gt;
&lt;br /&gt;
*Avec la commande (exécutée en root) et le montage suivants, nous avons upload le main sur le cc430&lt;br /&gt;
 mspdebug rf2500 &amp;quot;prog main&amp;quot;&lt;br /&gt;
[[Fichier:montage001.png]]&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 7'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/03/17 - 19/03/17]]''&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé les premiers tests sur l'analyseur de spectre afin de vérifier que le code fonctionne bien.&lt;br /&gt;
&lt;br /&gt;
*Dans un premier temps, nous avons essayé une fréquence fixe pour voir la calibration du cc430.&lt;br /&gt;
[[Fichier:862.png]]&lt;br /&gt;
Avec un exemple à 862Mhz, on remarque bien que les registres ont bien été initialisés et que la carte émet à la fréquence demandée.&lt;br /&gt;
&lt;br /&gt;
*Ensuite, nous avons testé le code effectuant le balayage sur la plage de fréquence 863-870Mhz, en augmentant le sweep time de l'analyseur de spectre pour voir les différentes fréquences auxquelles la carte émet.&lt;br /&gt;
[[Fichier:sweep.png]]&lt;br /&gt;
En observant de 861 à 872 Mhz sur l'écran de l'analyseur, on peut voir que le code effectue bien le balayage.&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission de la carte étant faible, nous avons essayé de l'augmenter en modifiant certains registres notamment ceux que l'on peut optimiser à l'aide du logiciel smart RF studio. Cependant, nous pensons qu'il faudra changer l'antenne patch actuelle de la carte pour une antenne connectée en SMA.&lt;br /&gt;
&lt;br /&gt;
*Nous avons aussi tenté de brouiller les communications d'autres groupes de projet utilisant des modules LoRa. Ces derniers étant configurés à 433Mhz, nous avons dû changer la fréquence de notre carte. Le brouillage ne fonctionnait pas mais notre carte étant optimisée pour une émission autour de 868Mhz, les résultats n'étaient pas pertinents.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 8'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[20/03/17 - 26/03/17]]'' &lt;br /&gt;
&lt;br /&gt;
*Nous avons emprunté à M. Vantroys 3 modules SX1276 montés sur des cartes NUCLEO-F401RE afin de pouvoir tester notre carte sur une communication LoRa à 868Mhz&lt;br /&gt;
[[Fichier:lorambed.png]]&lt;br /&gt;
*Le code utilisé pour le test a été récupéré sur le forum des développeurs du site mbed.com. C'est un code &amp;quot;ping pong&amp;quot; effectuant une communication continue entre deux modules LoRa à une fréquence de 868Mhz. Il nous a suffit d'utiliser le compilateur du site (qui regroupe toutes les bibliothèques nécessaires) en indiquant que la carte utilisée est une F401RE pour que le binaire produit soit compatible. La carte NUCLEO étant reconnue comme un système de fichier par Linux, pour la flasher il faut la monter en usb à l'aide des commandes fdisk et mount puis de copier le binaire dedans avec la commande cp.&lt;br /&gt;
[[Fichier:lora pingpong.zip]]&lt;br /&gt;
*Une fois les modules NUCLEO flashés, la communication LoRa est établie dès que deux modules sont alimentés. Nous avons donc branché en USB deux modules sur deux machines différentes afin d'observer la communication sur des terminaux. La communication se fait bien, l'un envoie &amp;quot;ping&amp;quot; tandis que l'autre envoie &amp;quot;pong&amp;quot; lorsqu'il reçoit &amp;quot;ping&amp;quot;. Malheureusement, comme nous l'avions prédit, notre carte a une puissance d'émission trop faible et ne parvient pas à brouiller efficacement.&lt;br /&gt;
*Les modules peuvent aussi communiquer en modulation FSK, dans ce cas notre système arrive à effectuer le brouillage. Néanmoins, il serait plus intéressant de parvenir à brouiller la communication LoRa.&lt;br /&gt;
*Après plusieurs changements dans le code du cc430, n'ayant pas de résultats positifs, nous avons diminué la puissance d'émission des modules LoRa en changeant un header dans le code lora_pingpong.cpp. En passant cette puissance de 14dBm à 6dBm, nous sommes parvenus à brouiller la communication entre les deux modules LoRa.&lt;br /&gt;
&lt;br /&gt;
*En parallèle, nous avons commencé à rechercher des solutions pour la fonction 2. Un pseudo code est donné sur le site ti.com ([https://www.ti.com/lit/an/swra315/swra315.pdf pseudo_code_frequency_scanning]) qui permet de faire un scan sur une plage de fréquence et de récupérer la fréquence ou le signal reçu est le plus fort. Ce code pourra être écrit en C puis incorporé dans notre main pour détecter une communication et la brouiller.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 9'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[27/03/17 - 02/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*Même si le brouillage ne s’effectue qu'à puissance réduite, nous avons cherché à l'optimiser&lt;br /&gt;
**Nous avons premièrement réalisé que le mode de modulation choisi au départ (ASK) n'était pas adapté au brouillage d'une communication LoRa. Nous avons donc essayé le mode GFSK qui est le plus proche du format de modulation du réseau LoRa. Nous avons aussi essayé les modes 2FSK et 4FSK qui sont relativement proches du GFSK. Nous en avons conclu que le mode de modulation à utiliser est GFSK (ce mode fonctionne aussi pour brouiller la modulation FSK)&lt;br /&gt;
**Ensuite, nous avons réduit la plage de fréquence balayée par le cc430 afin de voir si il y avait une influence sur le brouillage. Nous avons remarqué que le brouillage était plus efficace pour un balayage de 866 à 870 Mhz (au lieu de 863-870 initialement)&lt;br /&gt;
**Dans le même ordre d'idée, nous avons décidé de réduire le nombre d'incrémentations du registre CHANNR afin d'augmenter la rapidité du balayage. Pour ce faire, nous avons augmenté la taille de chaque canal, passant de 100kHz à 200kHz&lt;br /&gt;
**La puissance d'émission de la carte a été changée dans la fonction WritePATable (appelée par rfinit() dans le main), afin d'être maximale (12dBm)&lt;br /&gt;
**Enfin, nous avons augmenté le nombre de paquets à envoyer&lt;br /&gt;
&lt;br /&gt;
Nouvelle bibliothèque RFconfig.h :&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //high VCO FSCAL2=0x2A&lt;br /&gt;
 &lt;br /&gt;
 //867 : 21589A&lt;br /&gt;
 //866 : 214EC2&lt;br /&gt;
 //865 : 2144EA&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 //for 433Mhz : freq=0x10A766 and low vco (FSCAL2=0x0A)&lt;br /&gt;
 //432 : 0x109D8E&lt;br /&gt;
 &lt;br /&gt;
 //gfsk, 866, chann space ~200k, high vco currently&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 // (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x06 //default 0f (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x4E //866&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0xC2 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x83 // data rate&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x13 // GFSK &lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x22 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0xF8 //chanspc_m=248&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 // default 47khz deviation&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset for demodulation)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x07 // (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x77 //&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x10 //patable=0 (useless for gfsk) &lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosed&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x09 //&lt;br /&gt;
&lt;br /&gt;
Nouveau main.c : &lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;led_commands.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		10	// maximum size of data sent by rf&lt;br /&gt;
  &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 5000 //15ms  &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Any other commands are for RSSI measurement&lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFD;&lt;br /&gt;
   buffer[1] = 0xAA;&lt;br /&gt;
   buffer[2] = 0xFF;&lt;br /&gt;
   buffer[3] = 0x11;&lt;br /&gt;
   buffer[4] = 0xFF;&lt;br /&gt;
   buffer[5] = 0x66;&lt;br /&gt;
   buffer[6] = 0xFF;&lt;br /&gt;
   buffer[7] = 0x33;&lt;br /&gt;
   buffer[8] = 0x1F;&lt;br /&gt;
   buffer[9] = 0xF8;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   unsigned char led2=0x10;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(0x10, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 allumée quand le cc430 est sous tension&lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chann);&lt;br /&gt;
     send_cmd();&lt;br /&gt;
     if(chann&amp;gt;=20) //866-870&lt;br /&gt;
     {&lt;br /&gt;
       chann=0x00;&lt;br /&gt;
       led2=led2^0x10;&lt;br /&gt;
       set_color(0x10, 0x00, 0x00, led2, 0x00, 0x00); //led2 s'allume toutes les 2 rampes&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {&lt;br /&gt;
       chann++;&lt;br /&gt;
     }&lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Fonction WritePATable :&lt;br /&gt;
&lt;br /&gt;
 void WritePATable(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char valueRead = 0;&lt;br /&gt;
   &lt;br /&gt;
   //while(valueRead != 0x03)    // Output Power: -30  [dBm]&lt;br /&gt;
   //while(valueRead != 0x25)    // Output Power: -12  [dBm]&lt;br /&gt;
   //while(valueRead != 0x2D)    // Output Power: -6   [dBm]&lt;br /&gt;
   //while(valueRead != 0x8D)    // Output Power:  0   [dBm]&lt;br /&gt;
   //while(valueRead != 0xC3)    // Output Power:  10  [dBm]&lt;br /&gt;
   while(valueRead != 0xC0)    // Output Power:  Maximum  [dBm]&lt;br /&gt;
   //while(valueRead != 0xC6)    // Output Power(default):  8.8  [dBm]&lt;br /&gt;
   {&lt;br /&gt;
     /* Write the power output to the PA_TABLE and verify the write operation.  */&lt;br /&gt;
     unsigned char i = 0; &lt;br /&gt;
 &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
     //RF1AINSTRW = 0x7E03; // PA Table write (burst), Output Power: -30  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E25; // PA Table write (burst), Output Power: -12  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E2D; // PA Table write (burst), Output Power: -6   [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E8D; // PA Table write (burst), Output Power: 0    [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC3; // PA Table write (burst), Output Power: 10   [dBm]&lt;br /&gt;
     RF1AINSTRW = 0x7EC0; // PA Table write (burst), Output Power: Maximum  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC6; // PA Table write (burst), Output Power(default):  8.8  [dBm]&lt;br /&gt;
     &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
       RF1AINSTR1B = RF_PATABRD;                 // -miguel read &amp;amp; write&lt;br /&gt;
     &lt;br /&gt;
     // Traverse PATABLE pointers to read &lt;br /&gt;
     for (i = 0; i &amp;lt; 7; i++)&lt;br /&gt;
     {&lt;br /&gt;
       while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
       valueRead  = RF1ADOUT1B;     &lt;br /&gt;
     }&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
     valueRead  = RF1ADOUTB;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 10'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[03/04/17 - 09/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission étant trop faible pour brouiller la communication entre les 2 modules LoRa, nous avons décidé de changer l'antenne de la carte. Il a fallu couper l'antenne patch à l'aide d'une scie afin de souder un connecteur SMA.&lt;br /&gt;
[[Fichier:cc430antenne.png]]&lt;br /&gt;
*Grâce à cette nouvelle antenne, la communication peut maintenant être brouillée à une puissance de 10dBm (contre 6 auparavant). Mais il faut que la carte reste relativement proche d'un des modules.&lt;br /&gt;
*Pour réussir le brouillage quand les modules LoRa sont à leur puissance maximale (14dBm), il faudra sûrement ajouter un amplificateur entre la sortie de la carte et son antenne.&lt;br /&gt;
*Nous avons codé la fonction de scan en c et l'avons incorporé dans le main &lt;br /&gt;
**Cette fonction autorise le module à entrer en mode RX pour recevoir les communication. Elle incrémente ensuite le canal pour parcourir la plage 863-870MHz afin de détecter une communication. Toute les incrémentation la variable rssi récupère la valeur contenue dans le registre correspond à la valeur du RSSI. Cette valeur étant en binaire complément 2, elle est convertie en dBm et placée dans un entier. Enfin, si cette valeur est supérieur à la valeur maximale déjà mesuré ou à un palier prédéfinie (ici 0dBm), on stocke le numéro du canal correspondant qui sera utilisé dans le main par la suite.&lt;br /&gt;
&lt;br /&gt;
fonction de scan :&lt;br /&gt;
 void freq_scan(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char rssi;&lt;br /&gt;
   long rssi_dbm;&lt;br /&gt;
   unsigned char chan_scan=START_FREQ_CHAN;&lt;br /&gt;
   long rssi_max=0; //scan will take communication above 0dbm&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, led2, 0x00); //led2 blue while scanning&lt;br /&gt;
   &lt;br /&gt;
   ChangeChannel(chan_scan);&lt;br /&gt;
   ReceiveOn();    //enable RX&lt;br /&gt;
   while((Strobe(RF_SNOP) &amp;amp; 0x70) != 0x10); //make sure RX is ready&lt;br /&gt;
   while(chan_scan&amp;lt;STOP_FREQ_CHAN)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chan_scan);&lt;br /&gt;
     __delay_cycles(DELAY_RSSI);       //wait for rssi to be updated&lt;br /&gt;
     rssi = ReadSingleReg(RSSI);  //define in cc430f5137.h RSSI=0x34 corresponding to addr of rssi value&lt;br /&gt;
     if (rssi &amp;gt;= 128) &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (long)((long)( rssi - 256) / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     else &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (rssi / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     if(rssi_dbm&amp;gt;rssi_max)&lt;br /&gt;
     {&lt;br /&gt;
       rssi_max=rssi_dbm;&lt;br /&gt;
       chan_jam=chan_scan-10; //start jamming 2Mhz below max dbm received&lt;br /&gt;
     }&lt;br /&gt;
     chan_scan++;&lt;br /&gt;
     Strobe( RF_SFRX); //flush the RX FIFO&lt;br /&gt;
   }&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
nouveau main :&lt;br /&gt;
&lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chan_main=0x00;&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 on if cc430 powered&lt;br /&gt;
   int i;&lt;br /&gt;
   &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     freq_scan();&lt;br /&gt;
     ReceiveOff();&lt;br /&gt;
     chan_main=chan_jam;&lt;br /&gt;
     if (chan_main != 0)  //jam only if a communication xas detected with freq_scan&lt;br /&gt;
     {&lt;br /&gt;
       for(i=0 ; i&amp;lt;(20*NUM_JAM_RAMP) ; i++) //ramp start 2Mhz below chan_jam and stop 2Mhz above&lt;br /&gt;
       {&lt;br /&gt;
         ChangeChannel(chan_main);&lt;br /&gt;
         if (chan_main&amp;gt;= (chan_jam+20))&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main=0x00;&lt;br /&gt;
           led2=led2^0x10;&lt;br /&gt;
           set_color(led1, 0x00, 0x00, led2, 0x00, 0x00); //led2 blink red every two ramp of jamming&lt;br /&gt;
         }&lt;br /&gt;
         else&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main++;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     chan_main=0x00;  &lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
header :&lt;br /&gt;
 #define DELAY 100 //300us  &lt;br /&gt;
 #define DELAY_RSSI 10 //30us&lt;br /&gt;
 &lt;br /&gt;
 #define START_FREQ_CHAN 15&lt;br /&gt;
 #define STOP_FREQ_CHAN 50     //scanning 863-870Mhz with 200khz steps&lt;br /&gt;
 #define RSSI_OFFSET 74 //cf datasheet&lt;br /&gt;
 &lt;br /&gt;
 #define NUM_JAM_RAMP 50&lt;br /&gt;
 &lt;br /&gt;
 unsigned char chan_jam=0x00;&lt;br /&gt;
 unsigned char led2=0x10;&lt;br /&gt;
 unsigned char led1=0x10;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Fichiers Rendus'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[[Fichier:code_fonction_1.zip]]&lt;br /&gt;
*[[Fichier:code_fonction_2.zip]]&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42066</id>
		<title>IMA4 2016/2017 P32</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42066"/>
				<updated>2017-05-11T12:33:01Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Semaine 9 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Cahier des charges'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;Présentation générale du projet&amp;lt;/span&amp;gt;=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Contexte&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'expansion de l'utilisation des objets connectés permet de nos jours d'accéder à des données ou de contrôler aisément d'autres systèmes connectés à distance. Les objets connectés sont de plus en plus déployés mais leur sécurité n'est pas toujours testée. Par conséquent, de nombreuses informations sensibles sont susceptibles de transiter en permanence par le biais de multiples plages de fréquences. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ceci amène donc un questionnement sur la sécurité des transferts de données entre la multitude d'objets connectés actuellement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Objectif du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de réaliser un brouilleur d'ondes radiofréquence dans la bande des 868 MHz capable de bloquer les communications LoRa.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Description du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
A l'aboutissement du projet, nous devrions être capable de détecter une communication LoRa dans la bande des 868 MHz, et de la brouiller elle seule, sans incidence sur les autres communications sur d'autres fréquences du réseau LoRa.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous devrons réaliser un montage réalisant un brouillage sur la plage 863-870Mhz afin d'empêcher toute communication LoRa, en envoyant du bruit électronique sur toute la plage de fréquence.&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet, nous perfectionnerons ce montage pour qu'il puisse détecter une communication LoRa à une fréquence donnée (grâce au &amp;quot;join-request message&amp;quot; de 18 octets envoyés par le end-point/node, ou bien grâce aux informations données dans le préambule des paquets), afin d'envoyer des données erronées et de bloquer uniquement cette communication.&lt;br /&gt;
&lt;br /&gt;
Si le temps et le budget le permettent, nous pourrons aussi être amenés à brouiller la plage de fréquences autour des 433 MHz (aussi utilisé par le réseau LoRa).&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Choix techniques : matériel et logiciel&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser ce système, nous allons utiliser un microcontrôleur cc430 muni d'un transceiver cc1101, d'un récepteur LoRa(868MHz) communicant via protocole SPI avec le microcontrôleur, 2 antennes, une batterie, quelques LEDs.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Calendrier prévisionnel'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Liste des tâches à effectuer&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
# Documentation sur le réseau LoRa&lt;br /&gt;
##moyen de transmission&lt;br /&gt;
##format de modulation&lt;br /&gt;
##trame des paquets&lt;br /&gt;
# Réalisation du premier montage brouillant toute la plage&lt;br /&gt;
##contrôler l'émetteur RF du cc430&lt;br /&gt;
##programmer un bruitage sur la plage 863-870MHz&lt;br /&gt;
##test et optimisation&lt;br /&gt;
# Ajout d'un récepteur LoRa pour détecter et brouiller une seule communication&lt;br /&gt;
##contrôler le récepteur LoRa avec le cc430 par protocole spi&lt;br /&gt;
##détecter une communication LoRa à une fréquence donnée&lt;br /&gt;
##contrôler l'émetteur RF afin de brouiller cette communication de manière brutale&lt;br /&gt;
##brouiller cette communication en tentant de changer les données du paquet &lt;br /&gt;
##test et optimisation&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Calendrier&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
''[[Avant le 19/12/16]]'' - Élaboration du Cahier des charges et remplissage du Wiki&lt;br /&gt;
&lt;br /&gt;
''[[Avant fin Janvier]]'' - Complément du Cahier des Charges et listage du matériel nécessaire pour le projet&lt;br /&gt;
&lt;br /&gt;
''[[Répartition sur le S8]]'' - 120h: Réalisation de la 1ere fonction (45h) / Réalisation de la 2e fonction (45h) / Test et débuguage (30h)&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Feuille d'heures'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Cahier des charges / Wiki&lt;br /&gt;
| 4h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3,5h&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|1h&lt;br /&gt;
|1h&lt;br /&gt;
|&lt;br /&gt;
|1h&lt;br /&gt;
|0,5h&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le réseau LoRa&lt;br /&gt;
| &lt;br /&gt;
| 6h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 1ère fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|2h&lt;br /&gt;
|1,5h&lt;br /&gt;
|6h&lt;br /&gt;
|6h&lt;br /&gt;
|4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 2ème fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Tests et mesures&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Modification de la carte&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Avancement du Projet'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Phase préparatoire'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[Jeu 15/12/16]]'' &lt;br /&gt;
*Rendez-vous de mise au point du cahier des charges avec les trois encadrants (M. Boé, M. Vantroys et M. Redon)&lt;br /&gt;
*Elaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 1'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[23/01/17 - 29/01/17]]'' &lt;br /&gt;
*Revue du Cahier des Charges&lt;br /&gt;
*Recherches approfondies sur les modes de transmissions du réseau LoRa&lt;br /&gt;
*Recherche de matériel&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 2'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[30/01/17 - 05/02/17]]''  &lt;br /&gt;
*Précisions sur le cahier des charges&lt;br /&gt;
*Listage du matériel&lt;br /&gt;
*Recherche et détermination de solutions technologiques possibles pour les fonctions demandées&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 3'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[06/02/17 - 12/02/17]]''&lt;br /&gt;
*validation du matériel&lt;br /&gt;
Nous allons utiliser un cc430f5137 (MCU+RF) monté sur une carte optimisée pour les communications autours de 868Mhz.&lt;br /&gt;
Nous pouvons commencer à étudier son fonctionnement, particulièrement celui du module RF (cc1101).&lt;br /&gt;
Nous avons aussi récupéré des exemples de code en c sur le site de Texas Instrument et vu l'utilisation de ces codes sur un projet IMA5 de l'an passé.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 4'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/02/17 - 19/02/17]]''&lt;br /&gt;
*Recherche de solutions pour répondre à la 1ère fonction (brouiller la plage 863-870Mhz).&lt;br /&gt;
&lt;br /&gt;
Après une lecture approfondie de la datasheet du module RF du cc430, nous avons choisi d'utiliser la fréquence de base du module (pouvant être définie grâce aux registres) couplée au registre CHANNR. Cela nous permettra de modifier plus facilement la fréquence de la porteuse, en suivant la formule suivante : [[Fichier:rampe.png]].&lt;br /&gt;
&lt;br /&gt;
Nous pourrons alors balayer la plage de fréquence en changeant la valeur de CHANNR.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 5'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[27/02/17 - 05/03/17]]''&lt;br /&gt;
&lt;br /&gt;
A l'aide de la datasheet du cc1101 ([http://www.ti.com/lit/ds/symlink/cc1101.pdf datasheet_cc1101] pages : 70 à 95), nous avons défini les registres du module RF de la manière suivante (sachant que la fréquence du quartz est de 26MHz, soit Fxosc=26MHz) :&lt;br /&gt;
&lt;br /&gt;
*La fréquence de base a été fixée à 862,999MHz en suivant la formule donnée dans la data sheet[[Fichier:carrier_formula.png]]&lt;br /&gt;
ce qui nous a donné les valeurs FREQ2=0x21, FREQ1=0x31 et FREQ0=0x3A (FREQ=2 175 290)&lt;br /&gt;
&lt;br /&gt;
*Nous avons suivi la formule [[Fichier:chanspace_formula.png]] afin d'avoir un espacement entre les cannaux d'environ 100Khz&lt;br /&gt;
ce qui nous a donné  MDMCFG1=0x02 (CHANSPC_E=2) et MDMCFG0=0x00(CHANSPC_M=0)&lt;br /&gt;
&lt;br /&gt;
*Pour le moment, nous avons choisi le mode de modulation AM, nous avons donc initialisé les registres MDMCFG2=0x30 (mode ASK/OOK) et FREND0=0x50(patable=0 donnant le mode ASK)&lt;br /&gt;
&lt;br /&gt;
*Nous avons créé une bibliothèque RFconfig.h regroupant les valeurs de tous les registres :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal and high VCO recommended&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz stop at 870&lt;br /&gt;
 //FREQ=00 10 00 01 00 11 00 01 00 11 10 10&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //CHANNR from 0 to 69 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 //0 (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x0F //default (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x31 //868Mhz&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0x3A /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x22 //default (data rate)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x30 // ASK/OOK,no sync-word&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x02 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0x00 //chanspc_m=0&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 //default (no effet on ASK/OOK mode)&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset not used)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x03 //default (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x40 //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x50 //patable=0 -&amp;gt; ASK&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosen&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x0B //default&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 6'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[06/03/17 - 12/03/17]]''&lt;br /&gt;
*Nous avons préparé un premier code réalisant une rampe sur la plage 863-870MHz. Ce code est basé sur une boucle infinie qui incrémente le registre chann de 0 à 69 (pour passer de 863 à 870Mhz) et envoie des paquets 0xFF grâce aux fonctions ChangeChannel(chann) et send_comand().&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		1	// maximum size of data sent by rf&lt;br /&gt;
 &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 10000&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFF;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init();&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);	 &lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
     {&lt;br /&gt;
       ChangeChannel(chann);&lt;br /&gt;
       send_cmd();&lt;br /&gt;
       if(chann&amp;gt;=69) &lt;br /&gt;
 	{&lt;br /&gt;
 	  chann=0x00;&lt;br /&gt;
 	}&lt;br /&gt;
       else&lt;br /&gt;
 	{&lt;br /&gt;
 	  chann++;&lt;br /&gt;
 	}&lt;br /&gt;
       __delay_cycles(DELAY);&lt;br /&gt;
     }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Après quelques corrections du code, nous avons pu le compiler grâce au Makefile&lt;br /&gt;
&lt;br /&gt;
*Avec la commande (exécutée en root) et le montage suivants, nous avons upload le main sur le cc430&lt;br /&gt;
 mspdebug rf2500 &amp;quot;prog main&amp;quot;&lt;br /&gt;
[[Fichier:montage001.png]]&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 7'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/03/17 - 19/03/17]]''&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé les premiers tests sur l'analyseur de spectre afin de vérifier que le code fonctionne bien.&lt;br /&gt;
&lt;br /&gt;
*Dans un premier temps, nous avons essayé une fréquence fixe pour voir la calibration du cc430.&lt;br /&gt;
[[Fichier:862.png]]&lt;br /&gt;
Avec un exemple à 862Mhz, on remarque bien que les registres ont bien été initialisés et que la carte émet à la fréquence demandée.&lt;br /&gt;
&lt;br /&gt;
*Ensuite, nous avons testé le code effectuant le balayage sur la plage de fréquence 863-870Mhz, en augmentant le sweep time de l'analyseur de spectre pour voir les différentes fréquences auxquelles la carte émet.&lt;br /&gt;
[[Fichier:sweep.png]]&lt;br /&gt;
En observant de 861 à 872 Mhz sur l'écran de l'analyseur, on peut voir que le code effectue bien le balayage.&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission de la carte étant faible, nous avons essayé de l'augmenter en modifiant certains registres notamment ceux que l'on peut optimiser à l'aide du logiciel smart RF studio. Cependant, nous pensons qu'il faudra changer l'antenne patch actuelle de la carte pour une antenne connectée en SMA.&lt;br /&gt;
&lt;br /&gt;
*Nous avons aussi tenté de brouiller les communications d'autres groupes de projet utilisant des modules LoRa. Ces derniers étant configurés à 433Mhz, nous avons dû changer la fréquence de notre carte. Le brouillage ne fonctionnait pas mais notre carte étant optimisée pour une émission autour de 868Mhz, les résultats n'étaient pas pertinents.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 8'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[20/03/17 - 26/03/17]]'' &lt;br /&gt;
&lt;br /&gt;
*Nous avons emprunté à M. Vantroys 3 modules SX1276 montés sur des cartes NUCLEO-F401RE afin de pouvoir tester notre carte sur une communication LoRa à 868Mhz&lt;br /&gt;
[[Fichier:lorambed.png]]&lt;br /&gt;
*Le code utilisé pour le test a été récupéré sur le forum des développeurs du site mbed.com. C'est un code &amp;quot;ping pong&amp;quot; effectuant une communication continue entre deux modules LoRa à une fréquence de 868Mhz. Il nous a suffit d'utiliser le compilateur du site (qui regroupe toutes les bibliothèques nécessaires) en indiquant que la carte utilisée est une F401RE pour que le binaire produit soit compatible. La carte NUCLEO étant reconnue comme un système de fichier par Linux, pour la flasher il faut la monter en usb à l'aide des commandes fdisk et mount puis de copier le binaire dedans avec la commande cp.&lt;br /&gt;
[[Fichier:lora pingpong.zip]]&lt;br /&gt;
*Une fois les modules NUCLEO flashés, la communication LoRa est établie dès que deux modules sont alimentés. Nous avons donc branché en USB deux modules sur deux machines différentes afin d'observer la communication sur des terminaux. La communication se fait bien, l'un envoie &amp;quot;ping&amp;quot; tandis que l'autre envoie &amp;quot;pong&amp;quot; lorsqu'il reçoit &amp;quot;ping&amp;quot;. Malheureusement, comme nous l'avions prédit, notre carte a une puissance d'émission trop faible et ne parvient pas à brouiller efficacement.&lt;br /&gt;
*Les modules peuvent aussi communiquer en modulation FSK, dans ce cas notre système arrive à effectuer le brouillage. Néanmoins, il serait plus intéressant de parvenir à brouiller la communication LoRa.&lt;br /&gt;
*Après plusieurs changements dans le code du cc430, n'ayant pas de résultats positifs, nous avons diminué la puissance d'émission des modules LoRa en changeant un header dans le code lora_pingpong.cpp. En passant cette puissance de 14dBm à 6dBm, nous sommes parvenus à brouiller la communication entre les deux modules LoRa.&lt;br /&gt;
&lt;br /&gt;
*En parallèle, nous avons commencé à rechercher des solutions pour la fonction 2. Un pseudo code est donné sur le site ti.com ([https://www.ti.com/lit/an/swra315/swra315.pdf pseudo_code_frequency_scanning]) qui permet de faire un scan sur une plage de fréquence et de récupérer la fréquence ou le signal reçu est le plus fort. Ce code pourra être écrit en C puis incorporé dans notre main pour détecter une communication et la brouiller.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 9'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[27/03/17 - 02/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*Même si le brouillage ne s’effectue qu'à puissance réduite, nous avons cherché à l'optimiser&lt;br /&gt;
**Nous avons premièrement réalisé que le mode de modulation choisi au départ (ASK) n'était pas adapté au brouillage d'une communication LoRa. Nous avons donc essayé le mode GFSK qui est le plus proche du format de modulation du réseau LoRa. Nous avons aussi essayé les modes 2FSK et 4FSK qui sont relativement proches du GFSK. Nous en avons conclu que le mode de modulation à utiliser est GFSK (ce mode fonctionne aussi pour brouiller la modulation FSK)&lt;br /&gt;
**Ensuite, nous avons réduit la plage de fréquence balayée par le cc430 afin de voir si il y avait une influence sur le brouillage. Nous avons remarqué que le brouillage était plus efficace pour un balayage de 866 à 870 Mhz (au lieu de 863-870 initialement)&lt;br /&gt;
**Dans le même ordre d'idée, nous avons décidé de réduire le nombre d'incrémentations du registre CHANNR afin d'augmenter la rapidité du balayage. Pour ce faire, nous avons augmenté la taille de chaque canal, passant de 100kHz à 200kHz&lt;br /&gt;
**La puissance d'émission de la carte a été changée dans la fonction WritePATable (appelée par rfinit() dans le main), afin d'être maximale (12dBm)&lt;br /&gt;
**Enfin, nous avons augmenté le nombre de paquets à envoyer&lt;br /&gt;
&lt;br /&gt;
Nouvelle bibliothèque RFconfig.h :&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //high VCO FSCAL2=0x2A&lt;br /&gt;
 &lt;br /&gt;
 //867 : 21589A&lt;br /&gt;
 //866 : 214EC2&lt;br /&gt;
 //865 : 2144EA&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 //for 433Mhz : freq=0x10A766 and low vco (FSCAL2=0x0A)&lt;br /&gt;
 //432 : 0x109D8E&lt;br /&gt;
 &lt;br /&gt;
 //gfsk, 866, chann space ~200k, high vco currently&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 // (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x06 //default 0f (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x4E //866&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0xC2 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x83 // data rate&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x13 // GFSK &lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x22 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0xF8 //chanspc_m=248&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 // default 47khz deviation&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset for demodulation)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x07 // (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x77 //&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x10 //patable=0 (useless for gfsk) &lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosed&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x09 //&lt;br /&gt;
&lt;br /&gt;
Nouveau main.c : &lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;led_commands.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		10	// maximum size of data sent by rf&lt;br /&gt;
  &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 5000 //15ms  &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Any other commands are for RSSI measurement&lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFD;&lt;br /&gt;
   buffer[1] = 0xAA;&lt;br /&gt;
   buffer[2] = 0xFF;&lt;br /&gt;
   buffer[3] = 0x11;&lt;br /&gt;
   buffer[4] = 0xFF;&lt;br /&gt;
   buffer[5] = 0x66;&lt;br /&gt;
   buffer[6] = 0xFF;&lt;br /&gt;
   buffer[7] = 0x33;&lt;br /&gt;
   buffer[8] = 0x1F;&lt;br /&gt;
   buffer[9] = 0xF8;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   unsigned char led2=0x10;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(0x10, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 allumée quand le cc430 est sous tension&lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chann);&lt;br /&gt;
     send_cmd();&lt;br /&gt;
     if(chann&amp;gt;=20) //866-870&lt;br /&gt;
     {&lt;br /&gt;
       chann=0x00;&lt;br /&gt;
       led2=led2^0x10;&lt;br /&gt;
       set_color(0x10, 0x00, 0x00, led2, 0x00, 0x00); //led2 s'allume toutes les 2 rampes&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {&lt;br /&gt;
       chann++;&lt;br /&gt;
     }&lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Fonction WritePATable :&lt;br /&gt;
&lt;br /&gt;
 void WritePATable(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char valueRead = 0;&lt;br /&gt;
   &lt;br /&gt;
   //while(valueRead != 0x03)    // Output Power: -30  [dBm]&lt;br /&gt;
   //while(valueRead != 0x25)    // Output Power: -12  [dBm]&lt;br /&gt;
   //while(valueRead != 0x2D)    // Output Power: -6   [dBm]&lt;br /&gt;
   //while(valueRead != 0x8D)    // Output Power:  0   [dBm]&lt;br /&gt;
   //while(valueRead != 0xC3)    // Output Power:  10  [dBm]&lt;br /&gt;
   while(valueRead != 0xC0)    // Output Power:  Maximum  [dBm]&lt;br /&gt;
   //while(valueRead != 0xC6)    // Output Power(default):  8.8  [dBm]&lt;br /&gt;
   {&lt;br /&gt;
     /* Write the power output to the PA_TABLE and verify the write operation.  */&lt;br /&gt;
     unsigned char i = 0; &lt;br /&gt;
 &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
     //RF1AINSTRW = 0x7E03; // PA Table write (burst), Output Power: -30  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E25; // PA Table write (burst), Output Power: -12  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E2D; // PA Table write (burst), Output Power: -6   [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E8D; // PA Table write (burst), Output Power: 0    [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC3; // PA Table write (burst), Output Power: 10   [dBm]&lt;br /&gt;
     RF1AINSTRW = 0x7EC0; // PA Table write (burst), Output Power: Maximum  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC6; // PA Table write (burst), Output Power(default):  8.8  [dBm]&lt;br /&gt;
     &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
       RF1AINSTR1B = RF_PATABRD;                 // -miguel read &amp;amp; write&lt;br /&gt;
     &lt;br /&gt;
     // Traverse PATABLE pointers to read &lt;br /&gt;
     for (i = 0; i &amp;lt; 7; i++)&lt;br /&gt;
     {&lt;br /&gt;
       while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
       valueRead  = RF1ADOUT1B;     &lt;br /&gt;
     }&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
     valueRead  = RF1ADOUTB;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 10'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[03/04/17 - 09/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission étant trop faible pour brouiller la communication entre les 2 modules LoRa, nous avons décidé de changer l'antenne de la carte. Il a fallu couper l'antenne patch à l'aide d'une scie afin de souder un connecteur SMA.&lt;br /&gt;
[[Fichier:cc430antenne.png]]&lt;br /&gt;
*Grâce à cette nouvelle antenne, la communication peut maintenant être brouillée à une puissance de 10dBm (contre 6 auparavant). Mais il faut que la carte reste relativement proche d'un des modules.&lt;br /&gt;
*Pour réussir le brouillage quand les modules LoRa sont à leur puissance maximale (14dBm), il faudra sûrement ajouter un amplificateur entre la sortie de la carte et son antenne.&lt;br /&gt;
*Nous avons codé la fonction de scan en c et l'avons incorporé dans le main &lt;br /&gt;
&lt;br /&gt;
fonction de scan :&lt;br /&gt;
 void freq_scan(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char rssi;&lt;br /&gt;
   long rssi_dbm;&lt;br /&gt;
   unsigned char chan_scan=START_FREQ_CHAN;&lt;br /&gt;
   long rssi_max=0; //scan will take communication above 0dbm&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, led2, 0x00); //led2 blue while scanning&lt;br /&gt;
   &lt;br /&gt;
   ChangeChannel(chan_scan);&lt;br /&gt;
   ReceiveOn();    //enable RX&lt;br /&gt;
   while((Strobe(RF_SNOP) &amp;amp; 0x70) != 0x10); //make sure RX is ready&lt;br /&gt;
   while(chan_scan&amp;lt;STOP_FREQ_CHAN)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chan_scan);&lt;br /&gt;
     __delay_cycles(DELAY_RSSI);       //wait for rssi to be updated&lt;br /&gt;
     rssi = ReadSingleReg(RSSI);  //define in cc430f5137.h RSSI=0x34 corresponding to addr of rssi value&lt;br /&gt;
     if (rssi &amp;gt;= 128) &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (long)((long)( rssi - 256) / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     else &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (rssi / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     if(rssi_dbm&amp;gt;rssi_max)&lt;br /&gt;
     {&lt;br /&gt;
       rssi_max=rssi_dbm;&lt;br /&gt;
       chan_jam=chan_scan-10; //start jamming 2Mhz below max dbm received&lt;br /&gt;
     }&lt;br /&gt;
     chan_scan++;&lt;br /&gt;
     Strobe( RF_SFRX); //flush the RX FIFO&lt;br /&gt;
   }&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
nouveau main :&lt;br /&gt;
&lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chan_main=0x00;&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 on if cc430 powered&lt;br /&gt;
   int i;&lt;br /&gt;
   &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     freq_scan();&lt;br /&gt;
     ReceiveOff();&lt;br /&gt;
     chan_main=chan_jam;&lt;br /&gt;
     if (chan_main != 0)  //jam only if a communication xas detected with freq_scan&lt;br /&gt;
     {&lt;br /&gt;
       for(i=0 ; i&amp;lt;(20*NUM_JAM_RAMP) ; i++) //ramp start 2Mhz below chan_jam and stop 2Mhz above&lt;br /&gt;
       {&lt;br /&gt;
         ChangeChannel(chan_main);&lt;br /&gt;
         if (chan_main&amp;gt;= (chan_jam+20))&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main=0x00;&lt;br /&gt;
           led2=led2^0x10;&lt;br /&gt;
           set_color(led1, 0x00, 0x00, led2, 0x00, 0x00); //led2 blink red every two ramp of jamming&lt;br /&gt;
         }&lt;br /&gt;
         else&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main++;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     chan_main=0x00;  &lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
header :&lt;br /&gt;
 #define DELAY 100 //300us  &lt;br /&gt;
 #define DELAY_RSSI 10 //30us&lt;br /&gt;
 &lt;br /&gt;
 #define START_FREQ_CHAN 15&lt;br /&gt;
 #define STOP_FREQ_CHAN 50     //scanning 863-870Mhz with 200khz steps&lt;br /&gt;
 #define RSSI_OFFSET 74 //cf datasheet&lt;br /&gt;
 &lt;br /&gt;
 #define NUM_JAM_RAMP 50&lt;br /&gt;
 &lt;br /&gt;
 unsigned char chan_jam=0x00;&lt;br /&gt;
 unsigned char led2=0x10;&lt;br /&gt;
 unsigned char led1=0x10;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Fichiers Rendus'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[[Fichier:code_fonction_1.zip]]&lt;br /&gt;
*[[Fichier:code_fonction_2.zip]]&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42065</id>
		<title>IMA4 2016/2017 P32</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42065"/>
				<updated>2017-05-11T12:31:37Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Semaine 8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Cahier des charges'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;Présentation générale du projet&amp;lt;/span&amp;gt;=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Contexte&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'expansion de l'utilisation des objets connectés permet de nos jours d'accéder à des données ou de contrôler aisément d'autres systèmes connectés à distance. Les objets connectés sont de plus en plus déployés mais leur sécurité n'est pas toujours testée. Par conséquent, de nombreuses informations sensibles sont susceptibles de transiter en permanence par le biais de multiples plages de fréquences. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ceci amène donc un questionnement sur la sécurité des transferts de données entre la multitude d'objets connectés actuellement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Objectif du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de réaliser un brouilleur d'ondes radiofréquence dans la bande des 868 MHz capable de bloquer les communications LoRa.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Description du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
A l'aboutissement du projet, nous devrions être capable de détecter une communication LoRa dans la bande des 868 MHz, et de la brouiller elle seule, sans incidence sur les autres communications sur d'autres fréquences du réseau LoRa.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous devrons réaliser un montage réalisant un brouillage sur la plage 863-870Mhz afin d'empêcher toute communication LoRa, en envoyant du bruit électronique sur toute la plage de fréquence.&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet, nous perfectionnerons ce montage pour qu'il puisse détecter une communication LoRa à une fréquence donnée (grâce au &amp;quot;join-request message&amp;quot; de 18 octets envoyés par le end-point/node, ou bien grâce aux informations données dans le préambule des paquets), afin d'envoyer des données erronées et de bloquer uniquement cette communication.&lt;br /&gt;
&lt;br /&gt;
Si le temps et le budget le permettent, nous pourrons aussi être amenés à brouiller la plage de fréquences autour des 433 MHz (aussi utilisé par le réseau LoRa).&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Choix techniques : matériel et logiciel&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser ce système, nous allons utiliser un microcontrôleur cc430 muni d'un transceiver cc1101, d'un récepteur LoRa(868MHz) communicant via protocole SPI avec le microcontrôleur, 2 antennes, une batterie, quelques LEDs.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Calendrier prévisionnel'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Liste des tâches à effectuer&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
# Documentation sur le réseau LoRa&lt;br /&gt;
##moyen de transmission&lt;br /&gt;
##format de modulation&lt;br /&gt;
##trame des paquets&lt;br /&gt;
# Réalisation du premier montage brouillant toute la plage&lt;br /&gt;
##contrôler l'émetteur RF du cc430&lt;br /&gt;
##programmer un bruitage sur la plage 863-870MHz&lt;br /&gt;
##test et optimisation&lt;br /&gt;
# Ajout d'un récepteur LoRa pour détecter et brouiller une seule communication&lt;br /&gt;
##contrôler le récepteur LoRa avec le cc430 par protocole spi&lt;br /&gt;
##détecter une communication LoRa à une fréquence donnée&lt;br /&gt;
##contrôler l'émetteur RF afin de brouiller cette communication de manière brutale&lt;br /&gt;
##brouiller cette communication en tentant de changer les données du paquet &lt;br /&gt;
##test et optimisation&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Calendrier&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
''[[Avant le 19/12/16]]'' - Élaboration du Cahier des charges et remplissage du Wiki&lt;br /&gt;
&lt;br /&gt;
''[[Avant fin Janvier]]'' - Complément du Cahier des Charges et listage du matériel nécessaire pour le projet&lt;br /&gt;
&lt;br /&gt;
''[[Répartition sur le S8]]'' - 120h: Réalisation de la 1ere fonction (45h) / Réalisation de la 2e fonction (45h) / Test et débuguage (30h)&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Feuille d'heures'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Cahier des charges / Wiki&lt;br /&gt;
| 4h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3,5h&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|1h&lt;br /&gt;
|1h&lt;br /&gt;
|&lt;br /&gt;
|1h&lt;br /&gt;
|0,5h&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le réseau LoRa&lt;br /&gt;
| &lt;br /&gt;
| 6h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 1ère fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|2h&lt;br /&gt;
|1,5h&lt;br /&gt;
|6h&lt;br /&gt;
|6h&lt;br /&gt;
|4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 2ème fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Tests et mesures&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Modification de la carte&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Avancement du Projet'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Phase préparatoire'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[Jeu 15/12/16]]'' &lt;br /&gt;
*Rendez-vous de mise au point du cahier des charges avec les trois encadrants (M. Boé, M. Vantroys et M. Redon)&lt;br /&gt;
*Elaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 1'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[23/01/17 - 29/01/17]]'' &lt;br /&gt;
*Revue du Cahier des Charges&lt;br /&gt;
*Recherches approfondies sur les modes de transmissions du réseau LoRa&lt;br /&gt;
*Recherche de matériel&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 2'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[30/01/17 - 05/02/17]]''  &lt;br /&gt;
*Précisions sur le cahier des charges&lt;br /&gt;
*Listage du matériel&lt;br /&gt;
*Recherche et détermination de solutions technologiques possibles pour les fonctions demandées&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 3'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[06/02/17 - 12/02/17]]''&lt;br /&gt;
*validation du matériel&lt;br /&gt;
Nous allons utiliser un cc430f5137 (MCU+RF) monté sur une carte optimisée pour les communications autours de 868Mhz.&lt;br /&gt;
Nous pouvons commencer à étudier son fonctionnement, particulièrement celui du module RF (cc1101).&lt;br /&gt;
Nous avons aussi récupéré des exemples de code en c sur le site de Texas Instrument et vu l'utilisation de ces codes sur un projet IMA5 de l'an passé.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 4'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/02/17 - 19/02/17]]''&lt;br /&gt;
*Recherche de solutions pour répondre à la 1ère fonction (brouiller la plage 863-870Mhz).&lt;br /&gt;
&lt;br /&gt;
Après une lecture approfondie de la datasheet du module RF du cc430, nous avons choisi d'utiliser la fréquence de base du module (pouvant être définie grâce aux registres) couplée au registre CHANNR. Cela nous permettra de modifier plus facilement la fréquence de la porteuse, en suivant la formule suivante : [[Fichier:rampe.png]].&lt;br /&gt;
&lt;br /&gt;
Nous pourrons alors balayer la plage de fréquence en changeant la valeur de CHANNR.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 5'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[27/02/17 - 05/03/17]]''&lt;br /&gt;
&lt;br /&gt;
A l'aide de la datasheet du cc1101 ([http://www.ti.com/lit/ds/symlink/cc1101.pdf datasheet_cc1101] pages : 70 à 95), nous avons défini les registres du module RF de la manière suivante (sachant que la fréquence du quartz est de 26MHz, soit Fxosc=26MHz) :&lt;br /&gt;
&lt;br /&gt;
*La fréquence de base a été fixée à 862,999MHz en suivant la formule donnée dans la data sheet[[Fichier:carrier_formula.png]]&lt;br /&gt;
ce qui nous a donné les valeurs FREQ2=0x21, FREQ1=0x31 et FREQ0=0x3A (FREQ=2 175 290)&lt;br /&gt;
&lt;br /&gt;
*Nous avons suivi la formule [[Fichier:chanspace_formula.png]] afin d'avoir un espacement entre les cannaux d'environ 100Khz&lt;br /&gt;
ce qui nous a donné  MDMCFG1=0x02 (CHANSPC_E=2) et MDMCFG0=0x00(CHANSPC_M=0)&lt;br /&gt;
&lt;br /&gt;
*Pour le moment, nous avons choisi le mode de modulation AM, nous avons donc initialisé les registres MDMCFG2=0x30 (mode ASK/OOK) et FREND0=0x50(patable=0 donnant le mode ASK)&lt;br /&gt;
&lt;br /&gt;
*Nous avons créé une bibliothèque RFconfig.h regroupant les valeurs de tous les registres :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal and high VCO recommended&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz stop at 870&lt;br /&gt;
 //FREQ=00 10 00 01 00 11 00 01 00 11 10 10&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //CHANNR from 0 to 69 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 //0 (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x0F //default (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x31 //868Mhz&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0x3A /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x22 //default (data rate)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x30 // ASK/OOK,no sync-word&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x02 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0x00 //chanspc_m=0&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 //default (no effet on ASK/OOK mode)&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset not used)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x03 //default (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x40 //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x50 //patable=0 -&amp;gt; ASK&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosen&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x0B //default&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 6'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[06/03/17 - 12/03/17]]''&lt;br /&gt;
*Nous avons préparé un premier code réalisant une rampe sur la plage 863-870MHz. Ce code est basé sur une boucle infinie qui incrémente le registre chann de 0 à 69 (pour passer de 863 à 870Mhz) et envoie des paquets 0xFF grâce aux fonctions ChangeChannel(chann) et send_comand().&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		1	// maximum size of data sent by rf&lt;br /&gt;
 &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 10000&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFF;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init();&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);	 &lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
     {&lt;br /&gt;
       ChangeChannel(chann);&lt;br /&gt;
       send_cmd();&lt;br /&gt;
       if(chann&amp;gt;=69) &lt;br /&gt;
 	{&lt;br /&gt;
 	  chann=0x00;&lt;br /&gt;
 	}&lt;br /&gt;
       else&lt;br /&gt;
 	{&lt;br /&gt;
 	  chann++;&lt;br /&gt;
 	}&lt;br /&gt;
       __delay_cycles(DELAY);&lt;br /&gt;
     }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Après quelques corrections du code, nous avons pu le compiler grâce au Makefile&lt;br /&gt;
&lt;br /&gt;
*Avec la commande (exécutée en root) et le montage suivants, nous avons upload le main sur le cc430&lt;br /&gt;
 mspdebug rf2500 &amp;quot;prog main&amp;quot;&lt;br /&gt;
[[Fichier:montage001.png]]&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 7'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/03/17 - 19/03/17]]''&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé les premiers tests sur l'analyseur de spectre afin de vérifier que le code fonctionne bien.&lt;br /&gt;
&lt;br /&gt;
*Dans un premier temps, nous avons essayé une fréquence fixe pour voir la calibration du cc430.&lt;br /&gt;
[[Fichier:862.png]]&lt;br /&gt;
Avec un exemple à 862Mhz, on remarque bien que les registres ont bien été initialisés et que la carte émet à la fréquence demandée.&lt;br /&gt;
&lt;br /&gt;
*Ensuite, nous avons testé le code effectuant le balayage sur la plage de fréquence 863-870Mhz, en augmentant le sweep time de l'analyseur de spectre pour voir les différentes fréquences auxquelles la carte émet.&lt;br /&gt;
[[Fichier:sweep.png]]&lt;br /&gt;
En observant de 861 à 872 Mhz sur l'écran de l'analyseur, on peut voir que le code effectue bien le balayage.&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission de la carte étant faible, nous avons essayé de l'augmenter en modifiant certains registres notamment ceux que l'on peut optimiser à l'aide du logiciel smart RF studio. Cependant, nous pensons qu'il faudra changer l'antenne patch actuelle de la carte pour une antenne connectée en SMA.&lt;br /&gt;
&lt;br /&gt;
*Nous avons aussi tenté de brouiller les communications d'autres groupes de projet utilisant des modules LoRa. Ces derniers étant configurés à 433Mhz, nous avons dû changer la fréquence de notre carte. Le brouillage ne fonctionnait pas mais notre carte étant optimisée pour une émission autour de 868Mhz, les résultats n'étaient pas pertinents.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 8'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[20/03/17 - 26/03/17]]'' &lt;br /&gt;
&lt;br /&gt;
*Nous avons emprunté à M. Vantroys 3 modules SX1276 montés sur des cartes NUCLEO-F401RE afin de pouvoir tester notre carte sur une communication LoRa à 868Mhz&lt;br /&gt;
[[Fichier:lorambed.png]]&lt;br /&gt;
*Le code utilisé pour le test a été récupéré sur le forum des développeurs du site mbed.com. C'est un code &amp;quot;ping pong&amp;quot; effectuant une communication continue entre deux modules LoRa à une fréquence de 868Mhz. Il nous a suffit d'utiliser le compilateur du site (qui regroupe toutes les bibliothèques nécessaires) en indiquant que la carte utilisée est une F401RE pour que le binaire produit soit compatible. La carte NUCLEO étant reconnue comme un système de fichier par Linux, pour la flasher il faut la monter en usb à l'aide des commandes fdisk et mount puis de copier le binaire dedans avec la commande cp.&lt;br /&gt;
[[Fichier:lora pingpong.zip]]&lt;br /&gt;
*Une fois les modules NUCLEO flashés, la communication LoRa est établie dès que deux modules sont alimentés. Nous avons donc branché en USB deux modules sur deux machines différentes afin d'observer la communication sur des terminaux. La communication se fait bien, l'un envoie &amp;quot;ping&amp;quot; tandis que l'autre envoie &amp;quot;pong&amp;quot; lorsqu'il reçoit &amp;quot;ping&amp;quot;. Malheureusement, comme nous l'avions prédit, notre carte a une puissance d'émission trop faible et ne parvient pas à brouiller efficacement.&lt;br /&gt;
*Les modules peuvent aussi communiquer en modulation FSK, dans ce cas notre système arrive à effectuer le brouillage. Néanmoins, il serait plus intéressant de parvenir à brouiller la communication LoRa.&lt;br /&gt;
*Après plusieurs changements dans le code du cc430, n'ayant pas de résultats positifs, nous avons diminué la puissance d'émission des modules LoRa en changeant un header dans le code lora_pingpong.cpp. En passant cette puissance de 14dBm à 6dBm, nous sommes parvenus à brouiller la communication entre les deux modules LoRa.&lt;br /&gt;
&lt;br /&gt;
*En parallèle, nous avons commencé à rechercher des solutions pour la fonction 2. Un pseudo code est donné sur le site ti.com ([https://www.ti.com/lit/an/swra315/swra315.pdf pseudo_code_frequency_scanning]) qui permet de faire un scan sur une plage de fréquence et de récupérer la fréquence ou le signal reçu est le plus fort. Ce code pourra être écrit en C puis incorporé dans notre main pour détecter une communication et la brouiller.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 9'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[27/03/17 - 02/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*Même si le brouillage ne s’effectue qu'à puissance réduite, nous avons cherché à l'optimiser&lt;br /&gt;
**Nous avons premièrement réalisé que le mode de modulation choisi au départ (ASK) n'était pas adapté au brouillage d'une communication LoRa. Nous avons donc essayé le mode GFSK qui est le plus proche du format de modulation du réseau LoRa. Nous avons aussi essayé les modes 2FSK et 4FSK qui sont relativement proches du GFSK. Nous en avons conclu que le mode de modulation à utiliser est GFSK&lt;br /&gt;
**Ensuite, nous avons réduit la plage de fréquence balayée par le cc430 afin de voir si il y avait une influence sur le brouillage. Nous avons remarqué que le brouillage était plus efficace pour un balayage de 866 à 870 Mhz (au lieu de 863-870 initialement)&lt;br /&gt;
**Dans le même ordre d'idée, nous avons décidé de réduire le nombre d'incrémentations du registre CHANNR afin d'augmenter la rapidité du balayage. Pour ce faire, nous avons augmenté la taille de chaque canal, passant de 100kHz à 200kHz&lt;br /&gt;
**La puissance d'émission de la carte a été changée dans la fonction WritePATable (appelée par rfinit() dans le main), afin d'être maximale (12dBm)&lt;br /&gt;
**Enfin, nous avons augmenté le nombre de paquets à envoyer&lt;br /&gt;
&lt;br /&gt;
Nouvelle bibliothèque RFconfig.h :&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //high VCO FSCAL2=0x2A&lt;br /&gt;
 &lt;br /&gt;
 //867 : 21589A&lt;br /&gt;
 //866 : 214EC2&lt;br /&gt;
 //865 : 2144EA&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 //for 433Mhz : freq=0x10A766 and low vco (FSCAL2=0x0A)&lt;br /&gt;
 //432 : 0x109D8E&lt;br /&gt;
 &lt;br /&gt;
 //gfsk, 866, chann space ~200k, high vco currently&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 // (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x06 //default 0f (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x4E //866&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0xC2 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x83 // data rate&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x13 // GFSK &lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x22 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0xF8 //chanspc_m=248&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 // default 47khz deviation&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset for demodulation)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x07 // (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x77 //&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x10 //patable=0 (useless for gfsk) &lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosed&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x09 //&lt;br /&gt;
&lt;br /&gt;
Nouveau main.c : &lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;led_commands.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		10	// maximum size of data sent by rf&lt;br /&gt;
  &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 5000 //15ms  &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Any other commands are for RSSI measurement&lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFD;&lt;br /&gt;
   buffer[1] = 0xAA;&lt;br /&gt;
   buffer[2] = 0xFF;&lt;br /&gt;
   buffer[3] = 0x11;&lt;br /&gt;
   buffer[4] = 0xFF;&lt;br /&gt;
   buffer[5] = 0x66;&lt;br /&gt;
   buffer[6] = 0xFF;&lt;br /&gt;
   buffer[7] = 0x33;&lt;br /&gt;
   buffer[8] = 0x1F;&lt;br /&gt;
   buffer[9] = 0xF8;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   unsigned char led2=0x10;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(0x10, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 allumée quand le cc430 est sous tension&lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chann);&lt;br /&gt;
     send_cmd();&lt;br /&gt;
     if(chann&amp;gt;=20) //866-870&lt;br /&gt;
     {&lt;br /&gt;
       chann=0x00;&lt;br /&gt;
       led2=led2^0x10;&lt;br /&gt;
       set_color(0x10, 0x00, 0x00, led2, 0x00, 0x00); //led2 s'allume toutes les 2 rampes&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {&lt;br /&gt;
       chann++;&lt;br /&gt;
     }&lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Fonction WritePATable :&lt;br /&gt;
&lt;br /&gt;
 void WritePATable(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char valueRead = 0;&lt;br /&gt;
   &lt;br /&gt;
   //while(valueRead != 0x03)    // Output Power: -30  [dBm]&lt;br /&gt;
   //while(valueRead != 0x25)    // Output Power: -12  [dBm]&lt;br /&gt;
   //while(valueRead != 0x2D)    // Output Power: -6   [dBm]&lt;br /&gt;
   //while(valueRead != 0x8D)    // Output Power:  0   [dBm]&lt;br /&gt;
   //while(valueRead != 0xC3)    // Output Power:  10  [dBm]&lt;br /&gt;
   while(valueRead != 0xC0)    // Output Power:  Maximum  [dBm]&lt;br /&gt;
   //while(valueRead != 0xC6)    // Output Power(default):  8.8  [dBm]&lt;br /&gt;
   {&lt;br /&gt;
     /* Write the power output to the PA_TABLE and verify the write operation.  */&lt;br /&gt;
     unsigned char i = 0; &lt;br /&gt;
 &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
     //RF1AINSTRW = 0x7E03; // PA Table write (burst), Output Power: -30  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E25; // PA Table write (burst), Output Power: -12  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E2D; // PA Table write (burst), Output Power: -6   [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E8D; // PA Table write (burst), Output Power: 0    [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC3; // PA Table write (burst), Output Power: 10   [dBm]&lt;br /&gt;
     RF1AINSTRW = 0x7EC0; // PA Table write (burst), Output Power: Maximum  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC6; // PA Table write (burst), Output Power(default):  8.8  [dBm]&lt;br /&gt;
     &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
       RF1AINSTR1B = RF_PATABRD;                 // -miguel read &amp;amp; write&lt;br /&gt;
     &lt;br /&gt;
     // Traverse PATABLE pointers to read &lt;br /&gt;
     for (i = 0; i &amp;lt; 7; i++)&lt;br /&gt;
     {&lt;br /&gt;
       while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
       valueRead  = RF1ADOUT1B;     &lt;br /&gt;
     }&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
     valueRead  = RF1ADOUTB;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 10'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[03/04/17 - 09/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission étant trop faible pour brouiller la communication entre les 2 modules LoRa, nous avons décidé de changer l'antenne de la carte. Il a fallu couper l'antenne patch à l'aide d'une scie afin de souder un connecteur SMA.&lt;br /&gt;
[[Fichier:cc430antenne.png]]&lt;br /&gt;
*Grâce à cette nouvelle antenne, la communication peut maintenant être brouillée à une puissance de 10dBm (contre 6 auparavant). Mais il faut que la carte reste relativement proche d'un des modules.&lt;br /&gt;
*Pour réussir le brouillage quand les modules LoRa sont à leur puissance maximale (14dBm), il faudra sûrement ajouter un amplificateur entre la sortie de la carte et son antenne.&lt;br /&gt;
*Nous avons codé la fonction de scan en c et l'avons incorporé dans le main &lt;br /&gt;
&lt;br /&gt;
fonction de scan :&lt;br /&gt;
 void freq_scan(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char rssi;&lt;br /&gt;
   long rssi_dbm;&lt;br /&gt;
   unsigned char chan_scan=START_FREQ_CHAN;&lt;br /&gt;
   long rssi_max=0; //scan will take communication above 0dbm&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, led2, 0x00); //led2 blue while scanning&lt;br /&gt;
   &lt;br /&gt;
   ChangeChannel(chan_scan);&lt;br /&gt;
   ReceiveOn();    //enable RX&lt;br /&gt;
   while((Strobe(RF_SNOP) &amp;amp; 0x70) != 0x10); //make sure RX is ready&lt;br /&gt;
   while(chan_scan&amp;lt;STOP_FREQ_CHAN)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chan_scan);&lt;br /&gt;
     __delay_cycles(DELAY_RSSI);       //wait for rssi to be updated&lt;br /&gt;
     rssi = ReadSingleReg(RSSI);  //define in cc430f5137.h RSSI=0x34 corresponding to addr of rssi value&lt;br /&gt;
     if (rssi &amp;gt;= 128) &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (long)((long)( rssi - 256) / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     else &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (rssi / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     if(rssi_dbm&amp;gt;rssi_max)&lt;br /&gt;
     {&lt;br /&gt;
       rssi_max=rssi_dbm;&lt;br /&gt;
       chan_jam=chan_scan-10; //start jamming 2Mhz below max dbm received&lt;br /&gt;
     }&lt;br /&gt;
     chan_scan++;&lt;br /&gt;
     Strobe( RF_SFRX); //flush the RX FIFO&lt;br /&gt;
   }&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
nouveau main :&lt;br /&gt;
&lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chan_main=0x00;&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 on if cc430 powered&lt;br /&gt;
   int i;&lt;br /&gt;
   &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     freq_scan();&lt;br /&gt;
     ReceiveOff();&lt;br /&gt;
     chan_main=chan_jam;&lt;br /&gt;
     if (chan_main != 0)  //jam only if a communication xas detected with freq_scan&lt;br /&gt;
     {&lt;br /&gt;
       for(i=0 ; i&amp;lt;(20*NUM_JAM_RAMP) ; i++) //ramp start 2Mhz below chan_jam and stop 2Mhz above&lt;br /&gt;
       {&lt;br /&gt;
         ChangeChannel(chan_main);&lt;br /&gt;
         if (chan_main&amp;gt;= (chan_jam+20))&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main=0x00;&lt;br /&gt;
           led2=led2^0x10;&lt;br /&gt;
           set_color(led1, 0x00, 0x00, led2, 0x00, 0x00); //led2 blink red every two ramp of jamming&lt;br /&gt;
         }&lt;br /&gt;
         else&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main++;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     chan_main=0x00;  &lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
header :&lt;br /&gt;
 #define DELAY 100 //300us  &lt;br /&gt;
 #define DELAY_RSSI 10 //30us&lt;br /&gt;
 &lt;br /&gt;
 #define START_FREQ_CHAN 15&lt;br /&gt;
 #define STOP_FREQ_CHAN 50     //scanning 863-870Mhz with 200khz steps&lt;br /&gt;
 #define RSSI_OFFSET 74 //cf datasheet&lt;br /&gt;
 &lt;br /&gt;
 #define NUM_JAM_RAMP 50&lt;br /&gt;
 &lt;br /&gt;
 unsigned char chan_jam=0x00;&lt;br /&gt;
 unsigned char led2=0x10;&lt;br /&gt;
 unsigned char led1=0x10;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Fichiers Rendus'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[[Fichier:code_fonction_1.zip]]&lt;br /&gt;
*[[Fichier:code_fonction_2.zip]]&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42064</id>
		<title>IMA4 2016/2017 P32</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42064"/>
				<updated>2017-05-11T12:31:05Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Semaine 8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Cahier des charges'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;Présentation générale du projet&amp;lt;/span&amp;gt;=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Contexte&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'expansion de l'utilisation des objets connectés permet de nos jours d'accéder à des données ou de contrôler aisément d'autres systèmes connectés à distance. Les objets connectés sont de plus en plus déployés mais leur sécurité n'est pas toujours testée. Par conséquent, de nombreuses informations sensibles sont susceptibles de transiter en permanence par le biais de multiples plages de fréquences. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ceci amène donc un questionnement sur la sécurité des transferts de données entre la multitude d'objets connectés actuellement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Objectif du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de réaliser un brouilleur d'ondes radiofréquence dans la bande des 868 MHz capable de bloquer les communications LoRa.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Description du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
A l'aboutissement du projet, nous devrions être capable de détecter une communication LoRa dans la bande des 868 MHz, et de la brouiller elle seule, sans incidence sur les autres communications sur d'autres fréquences du réseau LoRa.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous devrons réaliser un montage réalisant un brouillage sur la plage 863-870Mhz afin d'empêcher toute communication LoRa, en envoyant du bruit électronique sur toute la plage de fréquence.&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet, nous perfectionnerons ce montage pour qu'il puisse détecter une communication LoRa à une fréquence donnée (grâce au &amp;quot;join-request message&amp;quot; de 18 octets envoyés par le end-point/node, ou bien grâce aux informations données dans le préambule des paquets), afin d'envoyer des données erronées et de bloquer uniquement cette communication.&lt;br /&gt;
&lt;br /&gt;
Si le temps et le budget le permettent, nous pourrons aussi être amenés à brouiller la plage de fréquences autour des 433 MHz (aussi utilisé par le réseau LoRa).&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Choix techniques : matériel et logiciel&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser ce système, nous allons utiliser un microcontrôleur cc430 muni d'un transceiver cc1101, d'un récepteur LoRa(868MHz) communicant via protocole SPI avec le microcontrôleur, 2 antennes, une batterie, quelques LEDs.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Calendrier prévisionnel'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Liste des tâches à effectuer&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
# Documentation sur le réseau LoRa&lt;br /&gt;
##moyen de transmission&lt;br /&gt;
##format de modulation&lt;br /&gt;
##trame des paquets&lt;br /&gt;
# Réalisation du premier montage brouillant toute la plage&lt;br /&gt;
##contrôler l'émetteur RF du cc430&lt;br /&gt;
##programmer un bruitage sur la plage 863-870MHz&lt;br /&gt;
##test et optimisation&lt;br /&gt;
# Ajout d'un récepteur LoRa pour détecter et brouiller une seule communication&lt;br /&gt;
##contrôler le récepteur LoRa avec le cc430 par protocole spi&lt;br /&gt;
##détecter une communication LoRa à une fréquence donnée&lt;br /&gt;
##contrôler l'émetteur RF afin de brouiller cette communication de manière brutale&lt;br /&gt;
##brouiller cette communication en tentant de changer les données du paquet &lt;br /&gt;
##test et optimisation&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Calendrier&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
''[[Avant le 19/12/16]]'' - Élaboration du Cahier des charges et remplissage du Wiki&lt;br /&gt;
&lt;br /&gt;
''[[Avant fin Janvier]]'' - Complément du Cahier des Charges et listage du matériel nécessaire pour le projet&lt;br /&gt;
&lt;br /&gt;
''[[Répartition sur le S8]]'' - 120h: Réalisation de la 1ere fonction (45h) / Réalisation de la 2e fonction (45h) / Test et débuguage (30h)&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Feuille d'heures'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Cahier des charges / Wiki&lt;br /&gt;
| 4h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3,5h&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|1h&lt;br /&gt;
|1h&lt;br /&gt;
|&lt;br /&gt;
|1h&lt;br /&gt;
|0,5h&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le réseau LoRa&lt;br /&gt;
| &lt;br /&gt;
| 6h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 1ère fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|2h&lt;br /&gt;
|1,5h&lt;br /&gt;
|6h&lt;br /&gt;
|6h&lt;br /&gt;
|4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 2ème fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Tests et mesures&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Modification de la carte&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Avancement du Projet'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Phase préparatoire'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[Jeu 15/12/16]]'' &lt;br /&gt;
*Rendez-vous de mise au point du cahier des charges avec les trois encadrants (M. Boé, M. Vantroys et M. Redon)&lt;br /&gt;
*Elaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 1'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[23/01/17 - 29/01/17]]'' &lt;br /&gt;
*Revue du Cahier des Charges&lt;br /&gt;
*Recherches approfondies sur les modes de transmissions du réseau LoRa&lt;br /&gt;
*Recherche de matériel&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 2'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[30/01/17 - 05/02/17]]''  &lt;br /&gt;
*Précisions sur le cahier des charges&lt;br /&gt;
*Listage du matériel&lt;br /&gt;
*Recherche et détermination de solutions technologiques possibles pour les fonctions demandées&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 3'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[06/02/17 - 12/02/17]]''&lt;br /&gt;
*validation du matériel&lt;br /&gt;
Nous allons utiliser un cc430f5137 (MCU+RF) monté sur une carte optimisée pour les communications autours de 868Mhz.&lt;br /&gt;
Nous pouvons commencer à étudier son fonctionnement, particulièrement celui du module RF (cc1101).&lt;br /&gt;
Nous avons aussi récupéré des exemples de code en c sur le site de Texas Instrument et vu l'utilisation de ces codes sur un projet IMA5 de l'an passé.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 4'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/02/17 - 19/02/17]]''&lt;br /&gt;
*Recherche de solutions pour répondre à la 1ère fonction (brouiller la plage 863-870Mhz).&lt;br /&gt;
&lt;br /&gt;
Après une lecture approfondie de la datasheet du module RF du cc430, nous avons choisi d'utiliser la fréquence de base du module (pouvant être définie grâce aux registres) couplée au registre CHANNR. Cela nous permettra de modifier plus facilement la fréquence de la porteuse, en suivant la formule suivante : [[Fichier:rampe.png]].&lt;br /&gt;
&lt;br /&gt;
Nous pourrons alors balayer la plage de fréquence en changeant la valeur de CHANNR.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 5'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[27/02/17 - 05/03/17]]''&lt;br /&gt;
&lt;br /&gt;
A l'aide de la datasheet du cc1101 ([http://www.ti.com/lit/ds/symlink/cc1101.pdf datasheet_cc1101] pages : 70 à 95), nous avons défini les registres du module RF de la manière suivante (sachant que la fréquence du quartz est de 26MHz, soit Fxosc=26MHz) :&lt;br /&gt;
&lt;br /&gt;
*La fréquence de base a été fixée à 862,999MHz en suivant la formule donnée dans la data sheet[[Fichier:carrier_formula.png]]&lt;br /&gt;
ce qui nous a donné les valeurs FREQ2=0x21, FREQ1=0x31 et FREQ0=0x3A (FREQ=2 175 290)&lt;br /&gt;
&lt;br /&gt;
*Nous avons suivi la formule [[Fichier:chanspace_formula.png]] afin d'avoir un espacement entre les cannaux d'environ 100Khz&lt;br /&gt;
ce qui nous a donné  MDMCFG1=0x02 (CHANSPC_E=2) et MDMCFG0=0x00(CHANSPC_M=0)&lt;br /&gt;
&lt;br /&gt;
*Pour le moment, nous avons choisi le mode de modulation AM, nous avons donc initialisé les registres MDMCFG2=0x30 (mode ASK/OOK) et FREND0=0x50(patable=0 donnant le mode ASK)&lt;br /&gt;
&lt;br /&gt;
*Nous avons créé une bibliothèque RFconfig.h regroupant les valeurs de tous les registres :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal and high VCO recommended&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz stop at 870&lt;br /&gt;
 //FREQ=00 10 00 01 00 11 00 01 00 11 10 10&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //CHANNR from 0 to 69 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 //0 (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x0F //default (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x31 //868Mhz&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0x3A /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x22 //default (data rate)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x30 // ASK/OOK,no sync-word&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x02 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0x00 //chanspc_m=0&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 //default (no effet on ASK/OOK mode)&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset not used)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x03 //default (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x40 //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x50 //patable=0 -&amp;gt; ASK&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosen&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x0B //default&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 6'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[06/03/17 - 12/03/17]]''&lt;br /&gt;
*Nous avons préparé un premier code réalisant une rampe sur la plage 863-870MHz. Ce code est basé sur une boucle infinie qui incrémente le registre chann de 0 à 69 (pour passer de 863 à 870Mhz) et envoie des paquets 0xFF grâce aux fonctions ChangeChannel(chann) et send_comand().&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		1	// maximum size of data sent by rf&lt;br /&gt;
 &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 10000&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFF;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init();&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);	 &lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
     {&lt;br /&gt;
       ChangeChannel(chann);&lt;br /&gt;
       send_cmd();&lt;br /&gt;
       if(chann&amp;gt;=69) &lt;br /&gt;
 	{&lt;br /&gt;
 	  chann=0x00;&lt;br /&gt;
 	}&lt;br /&gt;
       else&lt;br /&gt;
 	{&lt;br /&gt;
 	  chann++;&lt;br /&gt;
 	}&lt;br /&gt;
       __delay_cycles(DELAY);&lt;br /&gt;
     }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Après quelques corrections du code, nous avons pu le compiler grâce au Makefile&lt;br /&gt;
&lt;br /&gt;
*Avec la commande (exécutée en root) et le montage suivants, nous avons upload le main sur le cc430&lt;br /&gt;
 mspdebug rf2500 &amp;quot;prog main&amp;quot;&lt;br /&gt;
[[Fichier:montage001.png]]&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 7'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/03/17 - 19/03/17]]''&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé les premiers tests sur l'analyseur de spectre afin de vérifier que le code fonctionne bien.&lt;br /&gt;
&lt;br /&gt;
*Dans un premier temps, nous avons essayé une fréquence fixe pour voir la calibration du cc430.&lt;br /&gt;
[[Fichier:862.png]]&lt;br /&gt;
Avec un exemple à 862Mhz, on remarque bien que les registres ont bien été initialisés et que la carte émet à la fréquence demandée.&lt;br /&gt;
&lt;br /&gt;
*Ensuite, nous avons testé le code effectuant le balayage sur la plage de fréquence 863-870Mhz, en augmentant le sweep time de l'analyseur de spectre pour voir les différentes fréquences auxquelles la carte émet.&lt;br /&gt;
[[Fichier:sweep.png]]&lt;br /&gt;
En observant de 861 à 872 Mhz sur l'écran de l'analyseur, on peut voir que le code effectue bien le balayage.&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission de la carte étant faible, nous avons essayé de l'augmenter en modifiant certains registres notamment ceux que l'on peut optimiser à l'aide du logiciel smart RF studio. Cependant, nous pensons qu'il faudra changer l'antenne patch actuelle de la carte pour une antenne connectée en SMA.&lt;br /&gt;
&lt;br /&gt;
*Nous avons aussi tenté de brouiller les communications d'autres groupes de projet utilisant des modules LoRa. Ces derniers étant configurés à 433Mhz, nous avons dû changer la fréquence de notre carte. Le brouillage ne fonctionnait pas mais notre carte étant optimisée pour une émission autour de 868Mhz, les résultats n'étaient pas pertinents.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 8'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[20/03/17 - 26/03/17]]'' &lt;br /&gt;
&lt;br /&gt;
*Nous avons emprunté à M. Vantroys 3 modules SX1276 montés sur des cartes NUCLEO-F401RE afin de pouvoir tester notre carte sur une communication LoRa à 868Mhz&lt;br /&gt;
[[Fichier:lorambed.png]]&lt;br /&gt;
*Le code utilisé pour le test a été récupéré sur le forum des développeurs du site mbed.com. C'est un code &amp;quot;ping pong&amp;quot; effectuant une communication continue entre deux modules LoRa à une fréquence de 868Mhz. Il nous a suffit d'utiliser le compilateur du site (qui regroupe toutes les bibliothèques nécessaires) en indiquant que la carte utilisée est une F401RE pour que le binaire produit soit compatible. La carte NUCLEO étant reconnue comme un système de fichier par Linux, pour la flasher il faut la monter en usb à l'aide des commandes fdisk et mount puis de copier le binaire dedans avec la commande cp.&lt;br /&gt;
[[Fichier:lora pingpong.zip]]&lt;br /&gt;
*Une fois les modules NUCLEO flashés, la communication LoRa est établie dès que deux modules sont alimentés. Nous avons donc branché en USB deux modules sur deux machines différentes afin d'observer la communication sur des terminaux. La communication se fait bien, l'un envoie &amp;quot;ping&amp;quot; tandis que l'autre envoie &amp;quot;pong&amp;quot; lorsqu'il reçoit &amp;quot;ping&amp;quot;. Malheureusement, comme nous l'avions prédit, notre carte a une puissance d'émission trop faible et ne parvient pas à brouiller efficacement.&lt;br /&gt;
*Les modules peuvent aussi communiquer en modulation FSK, dans ce cas notre système arrive a effectuer le brouillage. Néanmoins, il serait plus intéressant de parvenir à brouiller la communication LoRa.&lt;br /&gt;
*Après plusieurs changements dans le code du cc430, n'ayant pas de résultats positifs, nous avons diminué la puissance d'émission des modules LoRa en changeant un header dans le code lora_pingpong.cpp. En passant cette puissance de 14dBm à 6dBm, nous sommes parvenus à brouiller la communication entre les deux modules LoRa.&lt;br /&gt;
&lt;br /&gt;
*En parallèle, nous avons commencé à rechercher des solutions pour la fonction 2. Un pseudo code est donné sur le site ti.com ([https://www.ti.com/lit/an/swra315/swra315.pdf pseudo_code_frequency_scanning]) qui permet de faire un scan sur une plage de fréquence et de récupérer la fréquence ou le signal reçu est le plus fort. Ce code pourra être écrit en C puis incorporé dans notre main pour détecter une communication et la brouiller.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 9'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[27/03/17 - 02/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*Même si le brouillage ne s’effectue qu'à puissance réduite, nous avons cherché à l'optimiser&lt;br /&gt;
**Nous avons premièrement réalisé que le mode de modulation choisi au départ (ASK) n'était pas adapté au brouillage d'une communication LoRa. Nous avons donc essayé le mode GFSK qui est le plus proche du format de modulation du réseau LoRa. Nous avons aussi essayé les modes 2FSK et 4FSK qui sont relativement proches du GFSK. Nous en avons conclu que le mode de modulation à utiliser est GFSK&lt;br /&gt;
**Ensuite, nous avons réduit la plage de fréquence balayée par le cc430 afin de voir si il y avait une influence sur le brouillage. Nous avons remarqué que le brouillage était plus efficace pour un balayage de 866 à 870 Mhz (au lieu de 863-870 initialement)&lt;br /&gt;
**Dans le même ordre d'idée, nous avons décidé de réduire le nombre d'incrémentations du registre CHANNR afin d'augmenter la rapidité du balayage. Pour ce faire, nous avons augmenté la taille de chaque canal, passant de 100kHz à 200kHz&lt;br /&gt;
**La puissance d'émission de la carte a été changée dans la fonction WritePATable (appelée par rfinit() dans le main), afin d'être maximale (12dBm)&lt;br /&gt;
**Enfin, nous avons augmenté le nombre de paquets à envoyer&lt;br /&gt;
&lt;br /&gt;
Nouvelle bibliothèque RFconfig.h :&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //high VCO FSCAL2=0x2A&lt;br /&gt;
 &lt;br /&gt;
 //867 : 21589A&lt;br /&gt;
 //866 : 214EC2&lt;br /&gt;
 //865 : 2144EA&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 //for 433Mhz : freq=0x10A766 and low vco (FSCAL2=0x0A)&lt;br /&gt;
 //432 : 0x109D8E&lt;br /&gt;
 &lt;br /&gt;
 //gfsk, 866, chann space ~200k, high vco currently&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 // (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x06 //default 0f (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x4E //866&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0xC2 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x83 // data rate&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x13 // GFSK &lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x22 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0xF8 //chanspc_m=248&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 // default 47khz deviation&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset for demodulation)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x07 // (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x77 //&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x10 //patable=0 (useless for gfsk) &lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosed&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x09 //&lt;br /&gt;
&lt;br /&gt;
Nouveau main.c : &lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;led_commands.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		10	// maximum size of data sent by rf&lt;br /&gt;
  &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 5000 //15ms  &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Any other commands are for RSSI measurement&lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFD;&lt;br /&gt;
   buffer[1] = 0xAA;&lt;br /&gt;
   buffer[2] = 0xFF;&lt;br /&gt;
   buffer[3] = 0x11;&lt;br /&gt;
   buffer[4] = 0xFF;&lt;br /&gt;
   buffer[5] = 0x66;&lt;br /&gt;
   buffer[6] = 0xFF;&lt;br /&gt;
   buffer[7] = 0x33;&lt;br /&gt;
   buffer[8] = 0x1F;&lt;br /&gt;
   buffer[9] = 0xF8;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   unsigned char led2=0x10;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(0x10, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 allumée quand le cc430 est sous tension&lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chann);&lt;br /&gt;
     send_cmd();&lt;br /&gt;
     if(chann&amp;gt;=20) //866-870&lt;br /&gt;
     {&lt;br /&gt;
       chann=0x00;&lt;br /&gt;
       led2=led2^0x10;&lt;br /&gt;
       set_color(0x10, 0x00, 0x00, led2, 0x00, 0x00); //led2 s'allume toutes les 2 rampes&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {&lt;br /&gt;
       chann++;&lt;br /&gt;
     }&lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Fonction WritePATable :&lt;br /&gt;
&lt;br /&gt;
 void WritePATable(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char valueRead = 0;&lt;br /&gt;
   &lt;br /&gt;
   //while(valueRead != 0x03)    // Output Power: -30  [dBm]&lt;br /&gt;
   //while(valueRead != 0x25)    // Output Power: -12  [dBm]&lt;br /&gt;
   //while(valueRead != 0x2D)    // Output Power: -6   [dBm]&lt;br /&gt;
   //while(valueRead != 0x8D)    // Output Power:  0   [dBm]&lt;br /&gt;
   //while(valueRead != 0xC3)    // Output Power:  10  [dBm]&lt;br /&gt;
   while(valueRead != 0xC0)    // Output Power:  Maximum  [dBm]&lt;br /&gt;
   //while(valueRead != 0xC6)    // Output Power(default):  8.8  [dBm]&lt;br /&gt;
   {&lt;br /&gt;
     /* Write the power output to the PA_TABLE and verify the write operation.  */&lt;br /&gt;
     unsigned char i = 0; &lt;br /&gt;
 &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
     //RF1AINSTRW = 0x7E03; // PA Table write (burst), Output Power: -30  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E25; // PA Table write (burst), Output Power: -12  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E2D; // PA Table write (burst), Output Power: -6   [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E8D; // PA Table write (burst), Output Power: 0    [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC3; // PA Table write (burst), Output Power: 10   [dBm]&lt;br /&gt;
     RF1AINSTRW = 0x7EC0; // PA Table write (burst), Output Power: Maximum  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC6; // PA Table write (burst), Output Power(default):  8.8  [dBm]&lt;br /&gt;
     &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
       RF1AINSTR1B = RF_PATABRD;                 // -miguel read &amp;amp; write&lt;br /&gt;
     &lt;br /&gt;
     // Traverse PATABLE pointers to read &lt;br /&gt;
     for (i = 0; i &amp;lt; 7; i++)&lt;br /&gt;
     {&lt;br /&gt;
       while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
       valueRead  = RF1ADOUT1B;     &lt;br /&gt;
     }&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
     valueRead  = RF1ADOUTB;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 10'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[03/04/17 - 09/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission étant trop faible pour brouiller la communication entre les 2 modules LoRa, nous avons décidé de changer l'antenne de la carte. Il a fallu couper l'antenne patch à l'aide d'une scie afin de souder un connecteur SMA.&lt;br /&gt;
[[Fichier:cc430antenne.png]]&lt;br /&gt;
*Grâce à cette nouvelle antenne, la communication peut maintenant être brouillée à une puissance de 10dBm (contre 6 auparavant). Mais il faut que la carte reste relativement proche d'un des modules.&lt;br /&gt;
*Pour réussir le brouillage quand les modules LoRa sont à leur puissance maximale (14dBm), il faudra sûrement ajouter un amplificateur entre la sortie de la carte et son antenne.&lt;br /&gt;
*Nous avons codé la fonction de scan en c et l'avons incorporé dans le main &lt;br /&gt;
&lt;br /&gt;
fonction de scan :&lt;br /&gt;
 void freq_scan(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char rssi;&lt;br /&gt;
   long rssi_dbm;&lt;br /&gt;
   unsigned char chan_scan=START_FREQ_CHAN;&lt;br /&gt;
   long rssi_max=0; //scan will take communication above 0dbm&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, led2, 0x00); //led2 blue while scanning&lt;br /&gt;
   &lt;br /&gt;
   ChangeChannel(chan_scan);&lt;br /&gt;
   ReceiveOn();    //enable RX&lt;br /&gt;
   while((Strobe(RF_SNOP) &amp;amp; 0x70) != 0x10); //make sure RX is ready&lt;br /&gt;
   while(chan_scan&amp;lt;STOP_FREQ_CHAN)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chan_scan);&lt;br /&gt;
     __delay_cycles(DELAY_RSSI);       //wait for rssi to be updated&lt;br /&gt;
     rssi = ReadSingleReg(RSSI);  //define in cc430f5137.h RSSI=0x34 corresponding to addr of rssi value&lt;br /&gt;
     if (rssi &amp;gt;= 128) &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (long)((long)( rssi - 256) / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     else &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (rssi / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     if(rssi_dbm&amp;gt;rssi_max)&lt;br /&gt;
     {&lt;br /&gt;
       rssi_max=rssi_dbm;&lt;br /&gt;
       chan_jam=chan_scan-10; //start jamming 2Mhz below max dbm received&lt;br /&gt;
     }&lt;br /&gt;
     chan_scan++;&lt;br /&gt;
     Strobe( RF_SFRX); //flush the RX FIFO&lt;br /&gt;
   }&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
nouveau main :&lt;br /&gt;
&lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chan_main=0x00;&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 on if cc430 powered&lt;br /&gt;
   int i;&lt;br /&gt;
   &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     freq_scan();&lt;br /&gt;
     ReceiveOff();&lt;br /&gt;
     chan_main=chan_jam;&lt;br /&gt;
     if (chan_main != 0)  //jam only if a communication xas detected with freq_scan&lt;br /&gt;
     {&lt;br /&gt;
       for(i=0 ; i&amp;lt;(20*NUM_JAM_RAMP) ; i++) //ramp start 2Mhz below chan_jam and stop 2Mhz above&lt;br /&gt;
       {&lt;br /&gt;
         ChangeChannel(chan_main);&lt;br /&gt;
         if (chan_main&amp;gt;= (chan_jam+20))&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main=0x00;&lt;br /&gt;
           led2=led2^0x10;&lt;br /&gt;
           set_color(led1, 0x00, 0x00, led2, 0x00, 0x00); //led2 blink red every two ramp of jamming&lt;br /&gt;
         }&lt;br /&gt;
         else&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main++;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     chan_main=0x00;  &lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
header :&lt;br /&gt;
 #define DELAY 100 //300us  &lt;br /&gt;
 #define DELAY_RSSI 10 //30us&lt;br /&gt;
 &lt;br /&gt;
 #define START_FREQ_CHAN 15&lt;br /&gt;
 #define STOP_FREQ_CHAN 50     //scanning 863-870Mhz with 200khz steps&lt;br /&gt;
 #define RSSI_OFFSET 74 //cf datasheet&lt;br /&gt;
 &lt;br /&gt;
 #define NUM_JAM_RAMP 50&lt;br /&gt;
 &lt;br /&gt;
 unsigned char chan_jam=0x00;&lt;br /&gt;
 unsigned char led2=0x10;&lt;br /&gt;
 unsigned char led1=0x10;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Fichiers Rendus'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[[Fichier:code_fonction_1.zip]]&lt;br /&gt;
*[[Fichier:code_fonction_2.zip]]&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42063</id>
		<title>IMA4 2016/2017 P32</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42063"/>
				<updated>2017-05-11T11:46:44Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Semaine 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Cahier des charges'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;Présentation générale du projet&amp;lt;/span&amp;gt;=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Contexte&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'expansion de l'utilisation des objets connectés permet de nos jours d'accéder à des données ou de contrôler aisément d'autres systèmes connectés à distance. Les objets connectés sont de plus en plus déployés mais leur sécurité n'est pas toujours testée. Par conséquent, de nombreuses informations sensibles sont susceptibles de transiter en permanence par le biais de multiples plages de fréquences. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ceci amène donc un questionnement sur la sécurité des transferts de données entre la multitude d'objets connectés actuellement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Objectif du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de réaliser un brouilleur d'ondes radiofréquence dans la bande des 868 MHz capable de bloquer les communications LoRa.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Description du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
A l'aboutissement du projet, nous devrions être capable de détecter une communication LoRa dans la bande des 868 MHz, et de la brouiller elle seule, sans incidence sur les autres communications sur d'autres fréquences du réseau LoRa.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous devrons réaliser un montage réalisant un brouillage sur la plage 863-870Mhz afin d'empêcher toute communication LoRa, en envoyant du bruit électronique sur toute la plage de fréquence.&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet, nous perfectionnerons ce montage pour qu'il puisse détecter une communication LoRa à une fréquence donnée (grâce au &amp;quot;join-request message&amp;quot; de 18 octets envoyés par le end-point/node, ou bien grâce aux informations données dans le préambule des paquets), afin d'envoyer des données erronées et de bloquer uniquement cette communication.&lt;br /&gt;
&lt;br /&gt;
Si le temps et le budget le permettent, nous pourrons aussi être amenés à brouiller la plage de fréquences autour des 433 MHz (aussi utilisé par le réseau LoRa).&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Choix techniques : matériel et logiciel&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser ce système, nous allons utiliser un microcontrôleur cc430 muni d'un transceiver cc1101, d'un récepteur LoRa(868MHz) communicant via protocole SPI avec le microcontrôleur, 2 antennes, une batterie, quelques LEDs.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Calendrier prévisionnel'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Liste des tâches à effectuer&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
# Documentation sur le réseau LoRa&lt;br /&gt;
##moyen de transmission&lt;br /&gt;
##format de modulation&lt;br /&gt;
##trame des paquets&lt;br /&gt;
# Réalisation du premier montage brouillant toute la plage&lt;br /&gt;
##contrôler l'émetteur RF du cc430&lt;br /&gt;
##programmer un bruitage sur la plage 863-870MHz&lt;br /&gt;
##test et optimisation&lt;br /&gt;
# Ajout d'un récepteur LoRa pour détecter et brouiller une seule communication&lt;br /&gt;
##contrôler le récepteur LoRa avec le cc430 par protocole spi&lt;br /&gt;
##détecter une communication LoRa à une fréquence donnée&lt;br /&gt;
##contrôler l'émetteur RF afin de brouiller cette communication de manière brutale&lt;br /&gt;
##brouiller cette communication en tentant de changer les données du paquet &lt;br /&gt;
##test et optimisation&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Calendrier&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
''[[Avant le 19/12/16]]'' - Élaboration du Cahier des charges et remplissage du Wiki&lt;br /&gt;
&lt;br /&gt;
''[[Avant fin Janvier]]'' - Complément du Cahier des Charges et listage du matériel nécessaire pour le projet&lt;br /&gt;
&lt;br /&gt;
''[[Répartition sur le S8]]'' - 120h: Réalisation de la 1ere fonction (45h) / Réalisation de la 2e fonction (45h) / Test et débuguage (30h)&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Feuille d'heures'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Cahier des charges / Wiki&lt;br /&gt;
| 4h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3,5h&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|1h&lt;br /&gt;
|1h&lt;br /&gt;
|&lt;br /&gt;
|1h&lt;br /&gt;
|0,5h&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le réseau LoRa&lt;br /&gt;
| &lt;br /&gt;
| 6h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 1ère fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|2h&lt;br /&gt;
|1,5h&lt;br /&gt;
|6h&lt;br /&gt;
|6h&lt;br /&gt;
|4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 2ème fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Tests et mesures&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Modification de la carte&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Avancement du Projet'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Phase préparatoire'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[Jeu 15/12/16]]'' &lt;br /&gt;
*Rendez-vous de mise au point du cahier des charges avec les trois encadrants (M. Boé, M. Vantroys et M. Redon)&lt;br /&gt;
*Elaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 1'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[23/01/17 - 29/01/17]]'' &lt;br /&gt;
*Revue du Cahier des Charges&lt;br /&gt;
*Recherches approfondies sur les modes de transmissions du réseau LoRa&lt;br /&gt;
*Recherche de matériel&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 2'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[30/01/17 - 05/02/17]]''  &lt;br /&gt;
*Précisions sur le cahier des charges&lt;br /&gt;
*Listage du matériel&lt;br /&gt;
*Recherche et détermination de solutions technologiques possibles pour les fonctions demandées&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 3'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[06/02/17 - 12/02/17]]''&lt;br /&gt;
*validation du matériel&lt;br /&gt;
Nous allons utiliser un cc430f5137 (MCU+RF) monté sur une carte optimisée pour les communications autours de 868Mhz.&lt;br /&gt;
Nous pouvons commencer à étudier son fonctionnement, particulièrement celui du module RF (cc1101).&lt;br /&gt;
Nous avons aussi récupéré des exemples de code en c sur le site de Texas Instrument et vu l'utilisation de ces codes sur un projet IMA5 de l'an passé.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 4'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/02/17 - 19/02/17]]''&lt;br /&gt;
*Recherche de solutions pour répondre à la 1ère fonction (brouiller la plage 863-870Mhz).&lt;br /&gt;
&lt;br /&gt;
Après une lecture approfondie de la datasheet du module RF du cc430, nous avons choisi d'utiliser la fréquence de base du module (pouvant être définie grâce aux registres) couplée au registre CHANNR. Cela nous permettra de modifier plus facilement la fréquence de la porteuse, en suivant la formule suivante : [[Fichier:rampe.png]].&lt;br /&gt;
&lt;br /&gt;
Nous pourrons alors balayer la plage de fréquence en changeant la valeur de CHANNR.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 5'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[27/02/17 - 05/03/17]]''&lt;br /&gt;
&lt;br /&gt;
A l'aide de la datasheet du cc1101 ([http://www.ti.com/lit/ds/symlink/cc1101.pdf datasheet_cc1101] pages : 70 à 95), nous avons défini les registres du module RF de la manière suivante (sachant que la fréquence du quartz est de 26MHz, soit Fxosc=26MHz) :&lt;br /&gt;
&lt;br /&gt;
*La fréquence de base a été fixée à 862,999MHz en suivant la formule donnée dans la data sheet[[Fichier:carrier_formula.png]]&lt;br /&gt;
ce qui nous a donné les valeurs FREQ2=0x21, FREQ1=0x31 et FREQ0=0x3A (FREQ=2 175 290)&lt;br /&gt;
&lt;br /&gt;
*Nous avons suivi la formule [[Fichier:chanspace_formula.png]] afin d'avoir un espacement entre les cannaux d'environ 100Khz&lt;br /&gt;
ce qui nous a donné  MDMCFG1=0x02 (CHANSPC_E=2) et MDMCFG0=0x00(CHANSPC_M=0)&lt;br /&gt;
&lt;br /&gt;
*Pour le moment, nous avons choisi le mode de modulation AM, nous avons donc initialisé les registres MDMCFG2=0x30 (mode ASK/OOK) et FREND0=0x50(patable=0 donnant le mode ASK)&lt;br /&gt;
&lt;br /&gt;
*Nous avons créé une bibliothèque RFconfig.h regroupant les valeurs de tous les registres :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal and high VCO recommended&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz stop at 870&lt;br /&gt;
 //FREQ=00 10 00 01 00 11 00 01 00 11 10 10&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //CHANNR from 0 to 69 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 //0 (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x0F //default (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x31 //868Mhz&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0x3A /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x22 //default (data rate)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x30 // ASK/OOK,no sync-word&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x02 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0x00 //chanspc_m=0&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 //default (no effet on ASK/OOK mode)&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset not used)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x03 //default (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x40 //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x50 //patable=0 -&amp;gt; ASK&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosen&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x0B //default&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 6'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[06/03/17 - 12/03/17]]''&lt;br /&gt;
*Nous avons préparé un premier code réalisant une rampe sur la plage 863-870MHz. Ce code est basé sur une boucle infinie qui incrémente le registre chann de 0 à 69 (pour passer de 863 à 870Mhz) et envoie des paquets 0xFF grâce aux fonctions ChangeChannel(chann) et send_comand().&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		1	// maximum size of data sent by rf&lt;br /&gt;
 &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 10000&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFF;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init();&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);	 &lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
     {&lt;br /&gt;
       ChangeChannel(chann);&lt;br /&gt;
       send_cmd();&lt;br /&gt;
       if(chann&amp;gt;=69) &lt;br /&gt;
 	{&lt;br /&gt;
 	  chann=0x00;&lt;br /&gt;
 	}&lt;br /&gt;
       else&lt;br /&gt;
 	{&lt;br /&gt;
 	  chann++;&lt;br /&gt;
 	}&lt;br /&gt;
       __delay_cycles(DELAY);&lt;br /&gt;
     }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Après quelques corrections du code, nous avons pu le compiler grâce au Makefile&lt;br /&gt;
&lt;br /&gt;
*Avec la commande (exécutée en root) et le montage suivants, nous avons upload le main sur le cc430&lt;br /&gt;
 mspdebug rf2500 &amp;quot;prog main&amp;quot;&lt;br /&gt;
[[Fichier:montage001.png]]&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 7'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/03/17 - 19/03/17]]''&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé les premiers tests sur l'analyseur de spectre afin de vérifier que le code fonctionne bien.&lt;br /&gt;
&lt;br /&gt;
*Dans un premier temps, nous avons essayé une fréquence fixe pour voir la calibration du cc430.&lt;br /&gt;
[[Fichier:862.png]]&lt;br /&gt;
Avec un exemple à 862Mhz, on remarque bien que les registres ont bien été initialisés et que la carte émet à la fréquence demandée.&lt;br /&gt;
&lt;br /&gt;
*Ensuite, nous avons testé le code effectuant le balayage sur la plage de fréquence 863-870Mhz, en augmentant le sweep time de l'analyseur de spectre pour voir les différentes fréquences auxquelles la carte émet.&lt;br /&gt;
[[Fichier:sweep.png]]&lt;br /&gt;
En observant de 861 à 872 Mhz sur l'écran de l'analyseur, on peut voir que le code effectue bien le balayage.&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission de la carte étant faible, nous avons essayé de l'augmenter en modifiant certains registres notamment ceux que l'on peut optimiser à l'aide du logiciel smart RF studio. Cependant, nous pensons qu'il faudra changer l'antenne patch actuelle de la carte pour une antenne connectée en SMA.&lt;br /&gt;
&lt;br /&gt;
*Nous avons aussi tenté de brouiller les communications d'autres groupes de projet utilisant des modules LoRa. Ces derniers étant configurés à 433Mhz, nous avons dû changer la fréquence de notre carte. Le brouillage ne fonctionnait pas mais notre carte étant optimisée pour une émission autour de 868Mhz, les résultats n'étaient pas pertinents.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 8'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[20/03/17 - 26/03/17]]'' &lt;br /&gt;
&lt;br /&gt;
*Nous avons emprunté à M. Vantroys 3 modules SX1276 montés sur des cartes NUCLEO-F401RE afin de pouvoir tester notre carte sur une communication LoRa à 868Mhz&lt;br /&gt;
[[Fichier:lorambed.png]]&lt;br /&gt;
*Le code utilisé pour le test a été récupéré sur le forum des développeurs du site mbed.com. C'est un code &amp;quot;ping pong&amp;quot; effectuant une communication continue entre deux modules LoRa à une fréquence de 868Mhz. Il nous a suffit d'utiliser le compilateur du site (qui regroupe toutes les bibliothèques nécessaires) en indiquant que la carte utilisée est une F401RE pour que le binaire produit soit compatible. La carte NUCLEO étant reconnue comme un système de fichier par Linux, pour la flasher il faut la monter en usb à l'aide des commandes fdisk et mount puis de copier le binaire dedans avec la commande cp.&lt;br /&gt;
[[Fichier:lora pingpong.zip]]&lt;br /&gt;
*Une fois les modules NUCLEO flashés, la communication LoRa est établie dès que deux modules sont alimentés. Nous avons donc branché en USB deux modules sur deux machines différentes afin d'observer la communication sur des terminaux. La communication se fait bien, l'un envoie &amp;quot;ping&amp;quot; tandis que l'autre envoie &amp;quot;pong&amp;quot; lorsqu'il reçoit &amp;quot;ping&amp;quot;. Malheureusement, comme nous l'avions prédit, notre carte a une puissance d'émission trop faible et ne parvient pas à brouiller efficacement.&lt;br /&gt;
*Après plusieurs changements dans le code du cc430, n'ayant pas de résultats positifs, nous avons diminué la puissance d'émission des modules LoRa en changeant un header dans le code lora_pingpong.cpp. En passant cette puissance de 14dBm à 6dBm, nous sommes parvenus à brouiller la communication entre les deux modules LoRa.&lt;br /&gt;
&lt;br /&gt;
*En parallèle, nous avons commencé à rechercher des solutions pour la fonction 2. Un pseudo code est donné sur le site ti.com ([https://www.ti.com/lit/an/swra315/swra315.pdf pseudo_code_frequency_scanning]) qui permet de faire un scan sur une plage de fréquence et de récupérer la fréquence ou le signal reçu est le plus fort. Ce code pourra être écrit en C puis incorporé dans notre main pour détecter une communication et la brouiller.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 9'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[27/03/17 - 02/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*Même si le brouillage ne s’effectue qu'à puissance réduite, nous avons cherché à l'optimiser&lt;br /&gt;
**Nous avons premièrement réalisé que le mode de modulation choisi au départ (ASK) n'était pas adapté au brouillage d'une communication LoRa. Nous avons donc essayé le mode GFSK qui est le plus proche du format de modulation du réseau LoRa. Nous avons aussi essayé les modes 2FSK et 4FSK qui sont relativement proches du GFSK. Nous en avons conclu que le mode de modulation à utiliser est GFSK&lt;br /&gt;
**Ensuite, nous avons réduit la plage de fréquence balayée par le cc430 afin de voir si il y avait une influence sur le brouillage. Nous avons remarqué que le brouillage était plus efficace pour un balayage de 866 à 870 Mhz (au lieu de 863-870 initialement)&lt;br /&gt;
**Dans le même ordre d'idée, nous avons décidé de réduire le nombre d'incrémentations du registre CHANNR afin d'augmenter la rapidité du balayage. Pour ce faire, nous avons augmenté la taille de chaque canal, passant de 100kHz à 200kHz&lt;br /&gt;
**La puissance d'émission de la carte a été changée dans la fonction WritePATable (appelée par rfinit() dans le main), afin d'être maximale (12dBm)&lt;br /&gt;
**Enfin, nous avons augmenté le nombre de paquets à envoyer&lt;br /&gt;
&lt;br /&gt;
Nouvelle bibliothèque RFconfig.h :&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //high VCO FSCAL2=0x2A&lt;br /&gt;
 &lt;br /&gt;
 //867 : 21589A&lt;br /&gt;
 //866 : 214EC2&lt;br /&gt;
 //865 : 2144EA&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 //for 433Mhz : freq=0x10A766 and low vco (FSCAL2=0x0A)&lt;br /&gt;
 //432 : 0x109D8E&lt;br /&gt;
 &lt;br /&gt;
 //gfsk, 866, chann space ~200k, high vco currently&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 // (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x06 //default 0f (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x4E //866&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0xC2 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x83 // data rate&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x13 // GFSK &lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x22 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0xF8 //chanspc_m=248&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 // default 47khz deviation&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset for demodulation)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x07 // (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x77 //&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x10 //patable=0 (useless for gfsk) &lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosed&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x09 //&lt;br /&gt;
&lt;br /&gt;
Nouveau main.c : &lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;led_commands.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		10	// maximum size of data sent by rf&lt;br /&gt;
  &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 5000 //15ms  &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Any other commands are for RSSI measurement&lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFD;&lt;br /&gt;
   buffer[1] = 0xAA;&lt;br /&gt;
   buffer[2] = 0xFF;&lt;br /&gt;
   buffer[3] = 0x11;&lt;br /&gt;
   buffer[4] = 0xFF;&lt;br /&gt;
   buffer[5] = 0x66;&lt;br /&gt;
   buffer[6] = 0xFF;&lt;br /&gt;
   buffer[7] = 0x33;&lt;br /&gt;
   buffer[8] = 0x1F;&lt;br /&gt;
   buffer[9] = 0xF8;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   unsigned char led2=0x10;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(0x10, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 allumée quand le cc430 est sous tension&lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chann);&lt;br /&gt;
     send_cmd();&lt;br /&gt;
     if(chann&amp;gt;=20) //866-870&lt;br /&gt;
     {&lt;br /&gt;
       chann=0x00;&lt;br /&gt;
       led2=led2^0x10;&lt;br /&gt;
       set_color(0x10, 0x00, 0x00, led2, 0x00, 0x00); //led2 s'allume toutes les 2 rampes&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {&lt;br /&gt;
       chann++;&lt;br /&gt;
     }&lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Fonction WritePATable :&lt;br /&gt;
&lt;br /&gt;
 void WritePATable(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char valueRead = 0;&lt;br /&gt;
   &lt;br /&gt;
   //while(valueRead != 0x03)    // Output Power: -30  [dBm]&lt;br /&gt;
   //while(valueRead != 0x25)    // Output Power: -12  [dBm]&lt;br /&gt;
   //while(valueRead != 0x2D)    // Output Power: -6   [dBm]&lt;br /&gt;
   //while(valueRead != 0x8D)    // Output Power:  0   [dBm]&lt;br /&gt;
   //while(valueRead != 0xC3)    // Output Power:  10  [dBm]&lt;br /&gt;
   while(valueRead != 0xC0)    // Output Power:  Maximum  [dBm]&lt;br /&gt;
   //while(valueRead != 0xC6)    // Output Power(default):  8.8  [dBm]&lt;br /&gt;
   {&lt;br /&gt;
     /* Write the power output to the PA_TABLE and verify the write operation.  */&lt;br /&gt;
     unsigned char i = 0; &lt;br /&gt;
 &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
     //RF1AINSTRW = 0x7E03; // PA Table write (burst), Output Power: -30  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E25; // PA Table write (burst), Output Power: -12  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E2D; // PA Table write (burst), Output Power: -6   [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E8D; // PA Table write (burst), Output Power: 0    [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC3; // PA Table write (burst), Output Power: 10   [dBm]&lt;br /&gt;
     RF1AINSTRW = 0x7EC0; // PA Table write (burst), Output Power: Maximum  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC6; // PA Table write (burst), Output Power(default):  8.8  [dBm]&lt;br /&gt;
     &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
       RF1AINSTR1B = RF_PATABRD;                 // -miguel read &amp;amp; write&lt;br /&gt;
     &lt;br /&gt;
     // Traverse PATABLE pointers to read &lt;br /&gt;
     for (i = 0; i &amp;lt; 7; i++)&lt;br /&gt;
     {&lt;br /&gt;
       while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
       valueRead  = RF1ADOUT1B;     &lt;br /&gt;
     }&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
     valueRead  = RF1ADOUTB;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 10'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[03/04/17 - 09/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission étant trop faible pour brouiller la communication entre les 2 modules LoRa, nous avons décidé de changer l'antenne de la carte. Il a fallu couper l'antenne patch à l'aide d'une scie afin de souder un connecteur SMA.&lt;br /&gt;
[[Fichier:cc430antenne.png]]&lt;br /&gt;
*Grâce à cette nouvelle antenne, la communication peut maintenant être brouillée à une puissance de 10dBm (contre 6 auparavant). Mais il faut que la carte reste relativement proche d'un des modules.&lt;br /&gt;
*Pour réussir le brouillage quand les modules LoRa sont à leur puissance maximale (14dBm), il faudra sûrement ajouter un amplificateur entre la sortie de la carte et son antenne.&lt;br /&gt;
*Nous avons codé la fonction de scan en c et l'avons incorporé dans le main &lt;br /&gt;
&lt;br /&gt;
fonction de scan :&lt;br /&gt;
 void freq_scan(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char rssi;&lt;br /&gt;
   long rssi_dbm;&lt;br /&gt;
   unsigned char chan_scan=START_FREQ_CHAN;&lt;br /&gt;
   long rssi_max=0; //scan will take communication above 0dbm&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, led2, 0x00); //led2 blue while scanning&lt;br /&gt;
   &lt;br /&gt;
   ChangeChannel(chan_scan);&lt;br /&gt;
   ReceiveOn();    //enable RX&lt;br /&gt;
   while((Strobe(RF_SNOP) &amp;amp; 0x70) != 0x10); //make sure RX is ready&lt;br /&gt;
   while(chan_scan&amp;lt;STOP_FREQ_CHAN)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chan_scan);&lt;br /&gt;
     __delay_cycles(DELAY_RSSI);       //wait for rssi to be updated&lt;br /&gt;
     rssi = ReadSingleReg(RSSI);  //define in cc430f5137.h RSSI=0x34 corresponding to addr of rssi value&lt;br /&gt;
     if (rssi &amp;gt;= 128) &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (long)((long)( rssi - 256) / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     else &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (rssi / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     if(rssi_dbm&amp;gt;rssi_max)&lt;br /&gt;
     {&lt;br /&gt;
       rssi_max=rssi_dbm;&lt;br /&gt;
       chan_jam=chan_scan-10; //start jamming 2Mhz below max dbm received&lt;br /&gt;
     }&lt;br /&gt;
     chan_scan++;&lt;br /&gt;
     Strobe( RF_SFRX); //flush the RX FIFO&lt;br /&gt;
   }&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
nouveau main :&lt;br /&gt;
&lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chan_main=0x00;&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 on if cc430 powered&lt;br /&gt;
   int i;&lt;br /&gt;
   &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     freq_scan();&lt;br /&gt;
     ReceiveOff();&lt;br /&gt;
     chan_main=chan_jam;&lt;br /&gt;
     if (chan_main != 0)  //jam only if a communication xas detected with freq_scan&lt;br /&gt;
     {&lt;br /&gt;
       for(i=0 ; i&amp;lt;(20*NUM_JAM_RAMP) ; i++) //ramp start 2Mhz below chan_jam and stop 2Mhz above&lt;br /&gt;
       {&lt;br /&gt;
         ChangeChannel(chan_main);&lt;br /&gt;
         if (chan_main&amp;gt;= (chan_jam+20))&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main=0x00;&lt;br /&gt;
           led2=led2^0x10;&lt;br /&gt;
           set_color(led1, 0x00, 0x00, led2, 0x00, 0x00); //led2 blink red every two ramp of jamming&lt;br /&gt;
         }&lt;br /&gt;
         else&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main++;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     chan_main=0x00;  &lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
header :&lt;br /&gt;
 #define DELAY 100 //300us  &lt;br /&gt;
 #define DELAY_RSSI 10 //30us&lt;br /&gt;
 &lt;br /&gt;
 #define START_FREQ_CHAN 15&lt;br /&gt;
 #define STOP_FREQ_CHAN 50     //scanning 863-870Mhz with 200khz steps&lt;br /&gt;
 #define RSSI_OFFSET 74 //cf datasheet&lt;br /&gt;
 &lt;br /&gt;
 #define NUM_JAM_RAMP 50&lt;br /&gt;
 &lt;br /&gt;
 unsigned char chan_jam=0x00;&lt;br /&gt;
 unsigned char led2=0x10;&lt;br /&gt;
 unsigned char led1=0x10;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Fichiers Rendus'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[[Fichier:code_fonction_1.zip]]&lt;br /&gt;
*[[Fichier:code_fonction_2.zip]]&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42056</id>
		<title>IMA4 2016/2017 P32</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P32&amp;diff=42056"/>
				<updated>2017-05-11T10:48:34Z</updated>
		
		<summary type="html">&lt;p&gt;Amachere : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Cahier des charges'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;Présentation générale du projet&amp;lt;/span&amp;gt;=== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Contexte&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'expansion de l'utilisation des objets connectés permet de nos jours d'accéder à des données ou de contrôler aisément d'autres systèmes connectés à distance. Les objets connectés sont de plus en plus déployés mais leur sécurité n'est pas toujours testée. Par conséquent, de nombreuses informations sensibles sont susceptibles de transiter en permanence par le biais de multiples plages de fréquences. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ceci amène donc un questionnement sur la sécurité des transferts de données entre la multitude d'objets connectés actuellement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Objectif du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce projet est de réaliser un brouilleur d'ondes radiofréquence dans la bande des 868 MHz capable de bloquer les communications LoRa.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Description du projet&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
A l'aboutissement du projet, nous devrions être capable de détecter une communication LoRa dans la bande des 868 MHz, et de la brouiller elle seule, sans incidence sur les autres communications sur d'autres fréquences du réseau LoRa.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous devrons réaliser un montage réalisant un brouillage sur la plage 863-870Mhz afin d'empêcher toute communication LoRa, en envoyant du bruit électronique sur toute la plage de fréquence.&lt;br /&gt;
&lt;br /&gt;
Pour la suite du projet, nous perfectionnerons ce montage pour qu'il puisse détecter une communication LoRa à une fréquence donnée (grâce au &amp;quot;join-request message&amp;quot; de 18 octets envoyés par le end-point/node, ou bien grâce aux informations données dans le préambule des paquets), afin d'envoyer des données erronées et de bloquer uniquement cette communication.&lt;br /&gt;
&lt;br /&gt;
Si le temps et le budget le permettent, nous pourrons aussi être amenés à brouiller la plage de fréquences autour des 433 MHz (aussi utilisé par le réseau LoRa).&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Choix techniques : matériel et logiciel&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Afin de réaliser ce système, nous allons utiliser un microcontrôleur cc430 muni d'un transceiver cc1101, d'un récepteur LoRa(868MHz) communicant via protocole SPI avec le microcontrôleur, 2 antennes, une batterie, quelques LEDs.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Calendrier prévisionnel'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Liste des tâches à effectuer&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
# Documentation sur le réseau LoRa&lt;br /&gt;
##moyen de transmission&lt;br /&gt;
##format de modulation&lt;br /&gt;
##trame des paquets&lt;br /&gt;
# Réalisation du premier montage brouillant toute la plage&lt;br /&gt;
##contrôler l'émetteur RF du cc430&lt;br /&gt;
##programmer un bruitage sur la plage 863-870MHz&lt;br /&gt;
##test et optimisation&lt;br /&gt;
# Ajout d'un récepteur LoRa pour détecter et brouiller une seule communication&lt;br /&gt;
##contrôler le récepteur LoRa avec le cc430 par protocole spi&lt;br /&gt;
##détecter une communication LoRa à une fréquence donnée&lt;br /&gt;
##contrôler l'émetteur RF afin de brouiller cette communication de manière brutale&lt;br /&gt;
##brouiller cette communication en tentant de changer les données du paquet &lt;br /&gt;
##test et optimisation&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span style=&amp;quot;color:#6B8E23&amp;quot;&amp;gt;Calendrier&amp;lt;/span&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
''[[Avant le 19/12/16]]'' - Élaboration du Cahier des charges et remplissage du Wiki&lt;br /&gt;
&lt;br /&gt;
''[[Avant fin Janvier]]'' - Complément du Cahier des Charges et listage du matériel nécessaire pour le projet&lt;br /&gt;
&lt;br /&gt;
''[[Répartition sur le S8]]'' - 120h: Réalisation de la 1ere fonction (45h) / Réalisation de la 2e fonction (45h) / Test et débuguage (30h)&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Feuille d'heures'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Cahier des charges / Wiki&lt;br /&gt;
| 4h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3,5h&lt;br /&gt;
| 4h&lt;br /&gt;
|&lt;br /&gt;
|0,5h&lt;br /&gt;
|1h&lt;br /&gt;
|1h&lt;br /&gt;
|&lt;br /&gt;
|1h&lt;br /&gt;
|0,5h&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Documentation sur le réseau LoRa&lt;br /&gt;
| &lt;br /&gt;
| 6h&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 1h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| 1,5h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Recherche de solution pour la fonction 2&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 1ère fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|2h&lt;br /&gt;
|1,5h&lt;br /&gt;
|6h&lt;br /&gt;
|6h&lt;br /&gt;
|4h&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Code 2ème fonction&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 1&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 2h&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Optimisation fonction 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Tests et mesures&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 1h&lt;br /&gt;
| 2h&lt;br /&gt;
| 3h&lt;br /&gt;
| 2h&lt;br /&gt;
| 1h&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Modification de la carte&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2h&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Avancement du Projet'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Phase préparatoire'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[Jeu 15/12/16]]'' &lt;br /&gt;
*Rendez-vous de mise au point du cahier des charges avec les trois encadrants (M. Boé, M. Vantroys et M. Redon)&lt;br /&gt;
*Elaboration du cahier des charges&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 1'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[23/01/17 - 29/01/17]]'' &lt;br /&gt;
*Revue du Cahier des Charges&lt;br /&gt;
*Recherches approfondies sur les modes de transmissions du réseau LoRa&lt;br /&gt;
*Recherche de matériel&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 2'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[30/01/17 - 05/02/17]]''  &lt;br /&gt;
*Précisions sur le cahier des charges&lt;br /&gt;
*Listage du matériel&lt;br /&gt;
*Recherche et détermination de solutions technologiques possibles pour les fonctions demandées&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 3'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[06/02/17 - 12/02/17]]''&lt;br /&gt;
*validation du matériel&lt;br /&gt;
Nous allons utiliser un cc430f5137 (MCU+RF) monté sur une carte optimisée pour les communications autours de 868Mhz.&lt;br /&gt;
Nous pouvons commencer à étudier son fonctionnement, particulièrement celui du module RF (cc1101).&lt;br /&gt;
Nous avons aussi récupéré des exemples de code en c sur le site de Texas Instrument et d'un projet IMA5 de l'an passé.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 4'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/02/17 - 19/02/17]]''&lt;br /&gt;
*Recherche de solutions pour répondre à la 1ère fonction (brouiller la plage 863-870Mhz).&lt;br /&gt;
&lt;br /&gt;
Après une lecture approfondie de la datasheet du module RF du cc430, nous avons choisi d'utiliser la fréquence de base du module (pouvant être définie grâce aux registres) couplée au registre CHANNR. Cela nous permettra de modifier plus facilement la fréquence de la porteuse, en suivant la formule suivante : [[Fichier:rampe.png]].&lt;br /&gt;
&lt;br /&gt;
Nous pourrons alors balayer la plage de fréquence en changeant la valeur de CHANNR.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 5'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[27/02/17 - 05/03/17]]''&lt;br /&gt;
&lt;br /&gt;
A l'aide de la datasheet du cc1101 ([http://www.ti.com/lit/ds/symlink/cc1101.pdf datasheet_cc1101] pages : 70 à 95), nous avons défini les registres du module RF de la manière suivante (sachant que la fréquence du quartz est de 26MHz, soit Fxosc=26MHz) :&lt;br /&gt;
&lt;br /&gt;
*La fréquence de base a été fixée à 862,999MHz en suivant la formule donnée dans la data sheet[[Fichier:carrier_formula.png]]&lt;br /&gt;
ce qui nous a donné les valeurs FREQ2=0x21, FREQ1=0x31 et FREQ0=0x3A (FREQ=2 175 290)&lt;br /&gt;
&lt;br /&gt;
*Nous avons suivi la formule [[Fichier:chanspace_formula.png]] afin d'avoir un espacement entre les cannaux d'environ 100Khz&lt;br /&gt;
ce qui nous a donné  MDMCFG1=0x02 (CHANSPC_E=2) et MDMCFG0=0x00(CHANSPC_M=0)&lt;br /&gt;
&lt;br /&gt;
*Pour le moment, nous avons choisi le mode de modulation AM, nous avons donc initialisé les registres MDMCFG2=0x30 (mode ASK/OOK) et FREND0=0x50(patable=0 donnant le mode ASK)&lt;br /&gt;
&lt;br /&gt;
*Nous avons créé une bibliothèque RFconfig.h regroupant les valeurs de tous les registres :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal and high VCO recommended&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz stop at 870&lt;br /&gt;
 //FREQ=00 10 00 01 00 11 00 01 00 11 10 10&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //CHANNR from 0 to 69 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 //0 (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x0F //default (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x31 //868Mhz&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0x3A /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x22 //default (data rate)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x30 // ASK/OOK,no sync-word&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x02 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0x00 //chanspc_m=0&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 //default (no effet on ASK/OOK mode)&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset not used)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x03 //default (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x40 //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x50 //patable=0 -&amp;gt; ASK&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosen&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x0B //default&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 6'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[06/03/17 - 12/03/17]]''&lt;br /&gt;
*Nous avons préparé un premier code réalisant une rampe sur la plage 863-870MHz. Ce code est basé sur une boucle infinie qui incrémente le registre chann de 0 à 69 (pour passer de 863 à 870Mhz) et envoie des paquets 0xFF grâce aux fonctions ChangeChannel(chann) et send_comand().&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		1	// maximum size of data sent by rf&lt;br /&gt;
 &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 10000&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFF;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init();&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);	 &lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
     {&lt;br /&gt;
       ChangeChannel(chann);&lt;br /&gt;
       send_cmd();&lt;br /&gt;
       if(chann&amp;gt;=69) &lt;br /&gt;
 	{&lt;br /&gt;
 	  chann=0x00;&lt;br /&gt;
 	}&lt;br /&gt;
       else&lt;br /&gt;
 	{&lt;br /&gt;
 	  chann++;&lt;br /&gt;
 	}&lt;br /&gt;
       __delay_cycles(DELAY);&lt;br /&gt;
     }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Après quelques corrections du code, nous avons pu le compiler grâce au Makefile&lt;br /&gt;
&lt;br /&gt;
*Avec la commande (exécutée en root) et le montage suivants, nous avons upload le main sur le cc430&lt;br /&gt;
 mspdebug rf2500 &amp;quot;prog main&amp;quot;&lt;br /&gt;
[[Fichier:montage001.png]]&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 7'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
''[[13/03/17 - 19/03/17]]''&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé les premiers tests sur l'analyseur de spectre afin de vérifier que le code fonctionne bien.&lt;br /&gt;
&lt;br /&gt;
*Dans un premier temps, nous avons essayé une fréquence fixe pour voir la calibration du cc430.&lt;br /&gt;
[[Fichier:862.png]]&lt;br /&gt;
Avec un exemple à 862Mhz, on remarque bien que les registres ont bien été initialisés et que la carte émet à la fréquence demandée.&lt;br /&gt;
&lt;br /&gt;
*Ensuite, nous avons testé le code effectuant le balayage sur la plage de fréquence 863-870Mhz, en augmentant le sweep time de l'analyseur de spectre pour voir les différentes fréquences auxquelles la carte émet.&lt;br /&gt;
[[Fichier:sweep.png]]&lt;br /&gt;
En observant de 861 à 872 Mhz sur l'écran de l'analyseur, on peut voir que le code effectue bien le balayage.&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission de la carte étant faible, nous avons essayé de l'augmenter en modifiant certains registres notamment ceux que l'on peut optimiser à l'aide du logiciel smart RF studio. Cependant, nous pensons qu'il faudra changer l'antenne patch actuelle de la carte pour une antenne connectée en SMA.&lt;br /&gt;
&lt;br /&gt;
*Nous avons aussi tenté de brouiller les communications d'autres groupes de projet utilisant des modules LoRa. Ces derniers étant configurés à 433Mhz, nous avons dû changer la fréquence de notre carte. Le brouillage ne fonctionnait pas mais notre carte étant optimisée pour une émission autour de 868Mhz, les résultats n'étaient pas pertinents.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 8'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[20/03/17 - 26/03/17]]'' &lt;br /&gt;
&lt;br /&gt;
*Nous avons emprunté à M. Vantroys 3 modules SX1276 montés sur des cartes NUCLEO-F401RE afin de pouvoir tester notre carte sur une communication LoRa à 868Mhz&lt;br /&gt;
[[Fichier:lorambed.png]]&lt;br /&gt;
*Le code utilisé pour le test a été récupéré sur le forum des développeurs du site mbed.com. C'est un code &amp;quot;ping pong&amp;quot; effectuant une communication continue entre deux modules LoRa à une fréquence de 868Mhz. Il nous a suffit d'utiliser le compilateur du site (qui regroupe toutes les bibliothèques nécessaires) en indiquant que la carte utilisée est une F401RE pour que le binaire produit soit compatible. La carte NUCLEO étant reconnue comme un système de fichier par Linux, pour la flasher il faut la monter en usb à l'aide des commandes fdisk et mount puis de copier le binaire dedans avec la commande cp.&lt;br /&gt;
[[Fichier:lora pingpong.zip]]&lt;br /&gt;
*Une fois les modules NUCLEO flashés, la communication LoRa est établie dès que deux modules sont alimentés. Nous avons donc branché en USB deux modules sur deux machines différentes afin d'observer la communication sur des terminaux. La communication se fait bien, l'un envoie &amp;quot;ping&amp;quot; tandis que l'autre envoie &amp;quot;pong&amp;quot; lorsqu'il reçoit &amp;quot;ping&amp;quot;. Malheureusement, comme nous l'avions prédit, notre carte a une puissance d'émission trop faible et ne parvient pas à brouiller efficacement.&lt;br /&gt;
*Après plusieurs changements dans le code du cc430, n'ayant pas de résultats positifs, nous avons diminué la puissance d'émission des modules LoRa en changeant un header dans le code lora_pingpong.cpp. En passant cette puissance de 14dBm à 6dBm, nous sommes parvenus à brouiller la communication entre les deux modules LoRa.&lt;br /&gt;
&lt;br /&gt;
*En parallèle, nous avons commencé à rechercher des solutions pour la fonction 2. Un pseudo code est donné sur le site ti.com ([https://www.ti.com/lit/an/swra315/swra315.pdf pseudo_code_frequency_scanning]) qui permet de faire un scan sur une plage de fréquence et de récupérer la fréquence ou le signal reçu est le plus fort. Ce code pourra être écrit en C puis incorporé dans notre main pour détecter une communication et la brouiller.&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 9'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[27/03/17 - 02/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*Même si le brouillage ne s’effectue qu'à puissance réduite, nous avons cherché à l'optimiser&lt;br /&gt;
**Nous avons premièrement réalisé que le mode de modulation choisi au départ (ASK) n'était pas adapté au brouillage d'une communication LoRa. Nous avons donc essayé le mode GFSK qui est le plus proche du format de modulation du réseau LoRa. Nous avons aussi essayé les modes 2FSK et 4FSK qui sont relativement proches du GFSK. Nous en avons conclu que le mode de modulation à utiliser est GFSK&lt;br /&gt;
**Ensuite, nous avons réduit la plage de fréquence balayée par le cc430 afin de voir si il y avait une influence sur le brouillage. Nous avons remarqué que le brouillage était plus efficace pour un balayage de 866 à 870 Mhz (au lieu de 863-870 initialement)&lt;br /&gt;
**Dans le même ordre d'idée, nous avons décidé de réduire le nombre d'incrémentations du registre CHANNR afin d'augmenter la rapidité du balayage. Pour ce faire, nous avons augmenté la taille de chaque canal, passant de 100kHz à 200kHz&lt;br /&gt;
**La puissance d'émission de la carte a été changée dans la fonction WritePATable (appelée par rfinit() dans le main), afin d'être maximale (12dBm)&lt;br /&gt;
**Enfin, nous avons augmenté le nombre de paquets à envoyer&lt;br /&gt;
&lt;br /&gt;
Nouvelle bibliothèque RFconfig.h :&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;cc430f5137.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 //863-870Mhz =&amp;gt; 26MHz crystal&lt;br /&gt;
 &lt;br /&gt;
 //MDMCFG0.CHANSPC_M=0 &amp;amp; MDMCFG1.CHANSPC_E=2 ==&amp;gt; chann spacing~100kHz&lt;br /&gt;
 &lt;br /&gt;
 //start at 863 Mhz&lt;br /&gt;
 //FREQ2=0x21   FREQ1=0x31   FREQ0=0x3A&lt;br /&gt;
 //high VCO FSCAL2=0x2A&lt;br /&gt;
 &lt;br /&gt;
 //867 : 21589A&lt;br /&gt;
 //866 : 214EC2&lt;br /&gt;
 //865 : 2144EA&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 //for 433Mhz : freq=0x10A766 and low vco (FSCAL2=0x0A)&lt;br /&gt;
 //432 : 0x109D8E&lt;br /&gt;
 &lt;br /&gt;
 //gfsk, 866, chann space ~200k, high vco currently&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_CC430F5137_H&lt;br /&gt;
 #define SMARTRF_RADIO_CC430F5137&lt;br /&gt;
 &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG2     0x29 //default &lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG1     0x2E //default&lt;br /&gt;
 #define SMARTRF_SETTING_IOCFG0     0x02 //assert if TX fifo above trsh&lt;br /&gt;
 #define SMARTRF_SETTING_FIFOTHR    0x07 //default (0x0F may be better)&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC1      0xD3 //default&lt;br /&gt;
 #define SMARTRF_SETTING_SYNC0      0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTLEN     0xFF //default (disabled by PKCTRL0 set to 0x05)&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL1   0x04 //default&lt;br /&gt;
 #define SMARTRF_SETTING_PKTCTRL0   0x05 //normal pkt format, variable pkt lenght&lt;br /&gt;
 #define SMARTRF_SETTING_ADDR       0x00 //default (device address)&lt;br /&gt;
 #define SMARTRF_SETTING_CHANNR     0x00 // (will be incremented in main.c)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL1    0x06 //default 0f (IF frequency)&lt;br /&gt;
 #define SMARTRF_SETTING_FSCTRL0    0x00 //default (freq offset)&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ2      0x21 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ1      0x4E //866&lt;br /&gt;
 #define SMARTRF_SETTING_FREQ0      0xC2 /*freq*/&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG4    0x8C //default (BW=203KHz)&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG3    0x83 // data rate&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG2    0x13 // GFSK &lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG1    0x22 // 2 bytes preamble, chanspc_e=2&lt;br /&gt;
 #define SMARTRF_SETTING_MDMCFG0    0xF8 //chanspc_m=248&lt;br /&gt;
 #define SMARTRF_SETTING_DEVIATN    0x47 // default 47khz deviation&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM2      0x07 //default timeout disable&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM1      0x18 //stay in TX mode&lt;br /&gt;
 #define SMARTRF_SETTING_MCSM0      0x18 //autocal when going in TX or RX&lt;br /&gt;
 #define SMARTRF_SETTING_FOCCFG     0x36 //default (frenquency offset for demodulation)&lt;br /&gt;
 #define SMARTRF_SETTING_BSCFG      0x6C //default&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL2   0x07 // (maximum possible gain)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL1   0x77 //&lt;br /&gt;
 #define SMARTRF_SETTING_AGCCTRL0   0x91 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT1    0x87 //default&lt;br /&gt;
 #define SMARTRF_SETTING_WOREVT0    0x6B //default&lt;br /&gt;
 #define SMARTRF_SETTING_WORCTRL    0xF8 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND1     0x56 //default&lt;br /&gt;
 #define SMARTRF_SETTING_FREND0     0x10 //patable=0 (useless for gfsk) &lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL3     0xE9 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL2     0x2A //high VCO choosed&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL1     0x00 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSCAL0     0x1F //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_FSTEST     0x59 //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_PTEST      0x7F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_AGCTEST    0x3F //default (test only)&lt;br /&gt;
 #define SMARTRF_SETTING_TEST2      0x81 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST1      0x35 //smartRF studio&lt;br /&gt;
 #define SMARTRF_SETTING_TEST0      0x09 //&lt;br /&gt;
&lt;br /&gt;
Nouveau main.c : &lt;br /&gt;
 #include &amp;lt;msp430.h&amp;gt; &lt;br /&gt;
 #include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;RF1A.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RF_Connection.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;PMM.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ports.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;RFconfig.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;led_commands.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define BUFFER_SIZE		10	// maximum size of data sent by rf&lt;br /&gt;
  &lt;br /&gt;
 #define PWM_PERIOD		255&lt;br /&gt;
 #define DELAY 5000 //15ms  &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 volatile uint8_t buffer[BUFFER_SIZE];&lt;br /&gt;
 volatile uint8_t temp[NB_BANGLES][2];&lt;br /&gt;
 volatile uint8_t fin[NB_BANGLES][NB_BANGLES-1];&lt;br /&gt;
 &lt;br /&gt;
 //useless&lt;br /&gt;
 void packet_received(void)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Any other commands are for RSSI measurement&lt;br /&gt;
 void send_cmd(void)&lt;br /&gt;
 {&lt;br /&gt;
   buffer[0] = 0xFD;&lt;br /&gt;
   buffer[1] = 0xAA;&lt;br /&gt;
   buffer[2] = 0xFF;&lt;br /&gt;
   buffer[3] = 0x11;&lt;br /&gt;
   buffer[4] = 0xFF;&lt;br /&gt;
   buffer[5] = 0x66;&lt;br /&gt;
   buffer[6] = 0xFF;&lt;br /&gt;
   buffer[7] = 0x33;&lt;br /&gt;
   buffer[8] = 0x1F;&lt;br /&gt;
   buffer[9] = 0xF8;&lt;br /&gt;
   rf_transmit((uint8_t *)buffer, 2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   unsigned char chann=0x00;&lt;br /&gt;
   unsigned char led2=0x10;&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   ReceiveOff();&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(0x10, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 allumée quand le cc430 est sous tension&lt;br /&gt;
 &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chann);&lt;br /&gt;
     send_cmd();&lt;br /&gt;
     if(chann&amp;gt;=20) //866-870&lt;br /&gt;
     {&lt;br /&gt;
       chann=0x00;&lt;br /&gt;
       led2=led2^0x10;&lt;br /&gt;
       set_color(0x10, 0x00, 0x00, led2, 0x00, 0x00); //led2 s'allume toutes les 2 rampes&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {&lt;br /&gt;
       chann++;&lt;br /&gt;
     }&lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Fonction WritePATable :&lt;br /&gt;
&lt;br /&gt;
 void WritePATable(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char valueRead = 0;&lt;br /&gt;
   &lt;br /&gt;
   //while(valueRead != 0x03)    // Output Power: -30  [dBm]&lt;br /&gt;
   //while(valueRead != 0x25)    // Output Power: -12  [dBm]&lt;br /&gt;
   //while(valueRead != 0x2D)    // Output Power: -6   [dBm]&lt;br /&gt;
   //while(valueRead != 0x8D)    // Output Power:  0   [dBm]&lt;br /&gt;
   //while(valueRead != 0xC3)    // Output Power:  10  [dBm]&lt;br /&gt;
   while(valueRead != 0xC0)    // Output Power:  Maximum  [dBm]&lt;br /&gt;
   //while(valueRead != 0xC6)    // Output Power(default):  8.8  [dBm]&lt;br /&gt;
   {&lt;br /&gt;
     /* Write the power output to the PA_TABLE and verify the write operation.  */&lt;br /&gt;
     unsigned char i = 0; &lt;br /&gt;
 &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
     //RF1AINSTRW = 0x7E03; // PA Table write (burst), Output Power: -30  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E25; // PA Table write (burst), Output Power: -12  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E2D; // PA Table write (burst), Output Power: -6   [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7E8D; // PA Table write (burst), Output Power: 0    [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC3; // PA Table write (burst), Output Power: 10   [dBm]&lt;br /&gt;
     RF1AINSTRW = 0x7EC0; // PA Table write (burst), Output Power: Maximum  [dBm]&lt;br /&gt;
     //RF1AINSTRW = 0x7EC6; // PA Table write (burst), Output Power(default):  8.8  [dBm]&lt;br /&gt;
     &lt;br /&gt;
     /* wait for radio to be ready for next instruction */&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFINSTRIFG));&lt;br /&gt;
       RF1AINSTR1B = RF_PATABRD;                 // -miguel read &amp;amp; write&lt;br /&gt;
     &lt;br /&gt;
     // Traverse PATABLE pointers to read &lt;br /&gt;
     for (i = 0; i &amp;lt; 7; i++)&lt;br /&gt;
     {&lt;br /&gt;
       while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
       valueRead  = RF1ADOUT1B;     &lt;br /&gt;
     }&lt;br /&gt;
     while( !(RF1AIFCTL1 &amp;amp; RFDOUTIFG));&lt;br /&gt;
     valueRead  = RF1ADOUTB;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:#4169E1&amp;quot;&amp;gt;'''Semaine 10'''&amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
''[[03/04/17 - 09/04/17]]''&lt;br /&gt;
&lt;br /&gt;
*La puissance d'émission étant trop faible pour brouiller la communication entre les 2 modules LoRa, nous avons décidé de changer l'antenne de la carte. Il a fallu couper l'antenne patch à l'aide d'une scie afin de souder un connecteur SMA.&lt;br /&gt;
[[Fichier:cc430antenne.png]]&lt;br /&gt;
*Grâce à cette nouvelle antenne, la communication peut maintenant être brouillée à une puissance de 10dBm (contre 6 auparavant). Mais il faut que la carte reste relativement proche d'un des modules.&lt;br /&gt;
*Pour réussir le brouillage quand les modules LoRa sont à leur puissance maximale (14dBm), il faudra sûrement ajouter un amplificateur entre la sortie de la carte et son antenne.&lt;br /&gt;
*Nous avons codé la fonction de scan en c et l'avons incorporé dans le main &lt;br /&gt;
&lt;br /&gt;
fonction de scan :&lt;br /&gt;
 void freq_scan(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char rssi;&lt;br /&gt;
   long rssi_dbm;&lt;br /&gt;
   unsigned char chan_scan=START_FREQ_CHAN;&lt;br /&gt;
   long rssi_max=0; //scan will take communication above 0dbm&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, led2, 0x00); //led2 blue while scanning&lt;br /&gt;
   &lt;br /&gt;
   ChangeChannel(chan_scan);&lt;br /&gt;
   ReceiveOn();    //enable RX&lt;br /&gt;
   while((Strobe(RF_SNOP) &amp;amp; 0x70) != 0x10); //make sure RX is ready&lt;br /&gt;
   while(chan_scan&amp;lt;STOP_FREQ_CHAN)&lt;br /&gt;
   {&lt;br /&gt;
     ChangeChannel(chan_scan);&lt;br /&gt;
     __delay_cycles(DELAY_RSSI);       //wait for rssi to be updated&lt;br /&gt;
     rssi = ReadSingleReg(RSSI);  //define in cc430f5137.h RSSI=0x34 corresponding to addr of rssi value&lt;br /&gt;
     if (rssi &amp;gt;= 128) &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (long)((long)( rssi - 256) / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     else &lt;br /&gt;
     {&lt;br /&gt;
       rssi_dbm = (rssi / 2) - RSSI_OFFSET; &lt;br /&gt;
     }&lt;br /&gt;
     if(rssi_dbm&amp;gt;rssi_max)&lt;br /&gt;
     {&lt;br /&gt;
       rssi_max=rssi_dbm;&lt;br /&gt;
       chan_jam=chan_scan-10; //start jamming 2Mhz below max dbm received&lt;br /&gt;
     }&lt;br /&gt;
     chan_scan++;&lt;br /&gt;
     Strobe( RF_SFRX); //flush the RX FIFO&lt;br /&gt;
   }&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
nouveau main :&lt;br /&gt;
&lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
   unsigned char chan_main=0x00;&lt;br /&gt;
   port_mapping();&lt;br /&gt;
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT&lt;br /&gt;
   rf_init(); //reset, setVcore &amp;amp; patable&lt;br /&gt;
   _BIS_SR(GIE);&lt;br /&gt;
   set_color(led1, 0x00, 0x00, 0x00, 0x00, 0x00); //led1 on if cc430 powered&lt;br /&gt;
   int i;&lt;br /&gt;
   &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
     freq_scan();&lt;br /&gt;
     ReceiveOff();&lt;br /&gt;
     chan_main=chan_jam;&lt;br /&gt;
     if (chan_main != 0)  //jam only if a communication xas detected with freq_scan&lt;br /&gt;
     {&lt;br /&gt;
       for(i=0 ; i&amp;lt;(20*NUM_JAM_RAMP) ; i++) //ramp start 2Mhz below chan_jam and stop 2Mhz above&lt;br /&gt;
       {&lt;br /&gt;
         ChangeChannel(chan_main);&lt;br /&gt;
         if (chan_main&amp;gt;= (chan_jam+20))&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main=0x00;&lt;br /&gt;
           led2=led2^0x10;&lt;br /&gt;
           set_color(led1, 0x00, 0x00, led2, 0x00, 0x00); //led2 blink red every two ramp of jamming&lt;br /&gt;
         }&lt;br /&gt;
         else&lt;br /&gt;
         {&lt;br /&gt;
           send_cmd();&lt;br /&gt;
           chan_main++;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     chan_main=0x00;  &lt;br /&gt;
     __delay_cycles(DELAY);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
header :&lt;br /&gt;
 #define DELAY 100 //300us  &lt;br /&gt;
 #define DELAY_RSSI 10 //30us&lt;br /&gt;
 &lt;br /&gt;
 #define START_FREQ_CHAN 15&lt;br /&gt;
 #define STOP_FREQ_CHAN 50     //scanning 863-870Mhz with 200khz steps&lt;br /&gt;
 #define RSSI_OFFSET 74 //cf datasheet&lt;br /&gt;
 &lt;br /&gt;
 #define NUM_JAM_RAMP 50&lt;br /&gt;
 &lt;br /&gt;
 unsigned char chan_jam=0x00;&lt;br /&gt;
 unsigned char led2=0x10;&lt;br /&gt;
 unsigned char led1=0x10;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;span style=&amp;quot;color:#000080&amp;quot;&amp;gt;'''Fichiers Rendus'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
*[[Fichier:code_fonction_1.zip]]&lt;br /&gt;
*[[Fichier:code_fonction_2.zip]]&lt;/div&gt;</summary>
		<author><name>Amachere</name></author>	</entry>

	</feed>