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

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=76034</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=76034"/>
				<updated>2019-05-10T09:01:46Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Travail supplémentaire (Partie Réalisation) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise à jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer à chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mises-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolu. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencer avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permise de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentés'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir à une version antérieure avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus, le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants et d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tutoriels permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même conception. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures. Les fichiers de documentations ont également été réalisés pour cette carte. [[Fichier:P57_2018_CarteV2.PDF]]&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, '''la carte est 100% fonctionnelle''' à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
[[Fichier:P57_2019_Schematique_final2.JPG|500px|thumb|center|Schématique carte shield]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Code)==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Testemission.JPG|200px|thumb|left|Tests émission/réception]]&lt;br /&gt;
Des premiers tests ont été effectués avec la [https://github.com/TMRh20/RF24.git librairie python]. Celle-ci fonctionne parfaitement avec le capteur utilisée avec le code de base. Les codes sont simples a comprendre et donc le code pour le bootloader pourra commencer a partir de ces premiers codes sources ([http://electroniqueamateur.blogspot.com/2017/02/communication-entre-raspberry-pi-et.html Source (partie Raspberry)] et [http://electroniqueamateur.blogspot.com/2017/02/communication-par-nrf24l01-entre-deux.html Source (partie Atmega)]). Les mémoires ont pu êtres testées a l'aide de la[https://github.com/LowPowerLab/SPIFlash librarie SPIFlash]. Cette librarie fonctionne parfaitement avec la mémoire RAM et cause quelques erreurs avec la Flash mais sans aucune incidence car les tests de lecture et d'écriture sont concluants avec les deux types de mémoires.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La conception d'une entête permettant l'identification de la version, l'authenticité du paquet et du destinataire afin de débuter la réception. Premièrement le code sera implémenté dans la partie programme de l’Arduino afin de faciliter l'Upload. Puis celui ci sera transformé en bootloader après avoir obtenus des tests concluants.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;13&amp;quot;|Entête d'une MAJ&lt;br /&gt;
|-&lt;br /&gt;
| '''Bits'''&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;|32&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| 16&lt;br /&gt;
|-&lt;br /&gt;
|  '''Uses'''&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| ID MAJ Provider&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| Groupe ID&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| Version&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;| MAJ Size&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| CheckSum&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour une sécurité optimale, ce schéma devra être encrypté. Un algorithme par cryptographie asymétrique serait parfait pour encoder et décrypter ce signal. La trame décodée pourra être reconnue comme étant correcte si l'ID MAJ Provider est correct. De plus, le checksum devra être correct également avant d'implémenter la MAJ. La version, quant à elle permettra d'éviter la mise à jour répétée de tous les capteurs si on désire installer de nouveaux capteurs ou si l'entreprise est trop grande pour mettre à jour tous les capteurs d'une traite. Le schéma se résumera en quelques étapes. &lt;br /&gt;
&lt;br /&gt;
;Coté émetteur :&lt;br /&gt;
# Calcul du checkSum du code HEX&lt;br /&gt;
# Attribution d'une version au code ainsi que le Groupe ID ciblé&lt;br /&gt;
# Encryptage de la trame et du code HEX&lt;br /&gt;
# Émission à tous les capteurs de l'entête&lt;br /&gt;
# Temporisation afin de laisser faire le traitement&lt;br /&gt;
# Émission du code HEX encrypté&lt;br /&gt;
&lt;br /&gt;
;Coté capteur :&lt;br /&gt;
# Reception d'une trame encodée&lt;br /&gt;
# Décodage de la trame&lt;br /&gt;
# Vérification de l'ID MAJ Provider, du Groupe ID et de la version&lt;br /&gt;
# Si tout correspond et version &amp;gt; version actuelle, réception de la trame et stockage dans la mémoire SPI&lt;br /&gt;
# Décryptage du code HEX&lt;br /&gt;
# Calcul du checksum et validation de l'authenticité&lt;br /&gt;
# Si le checksum est correct, transfert vers la mémoire de programme&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Envoid'unfichier.JPG|400px|thumb|left|Tests émission/réception]][[Fichier:P57_2019_Buffer.JPG|200px|thumb|right|Vitesse en fonction de la taille du buffer]]&lt;br /&gt;
Pour commencer, les algorithmes de cryptographies ne seront pas implémentés afin de limiter les bugs rencontrés.&lt;br /&gt;
La première étape était de transmettre le header et ainsi obtenir la version, l'identification et pouvoir vérifier l'authenticité du paquet.&lt;br /&gt;
Une fois la taille récupérée, le but était de transmettre (sans perte) le paquet. Pour cela, il faut utiliser un buffer de données afin de transmettre partie par partie. La taille de ce Buffer étant spécifiée à l'avance dans le programme. Mais alors comment choisir la taille du buffer ? Des tests ont étés effectuées et la taille du buffer a une énorme incidence sur la vitesse de transfert des fichiers (voir courbe). Cette courbe n'est pas la seule à prendre en compte. Le buffer ne peut pas dépasser les 32 bytes imposés par le composant. De plus, ici ces temps concernent que la transmission, il faut également que le microcontrôleur charge ces valeurs dans la mémoire SPI.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
L'écriture et la vérification par CheckSum étant fonctionnelle, on passe maintenant à la transformation du programme en Bootloader à l'aide du logiciel Atmel Studio et du bootloader Optiboot (qui est le bootloader le plus léger et fonctionnel pour une arduino). Ce tutoriel pourra nous être utile afin de modifier le bootloader plus simplement : [https://www.electronicwings.com/arduino/basics-to-developing-bootloader-for-arduino/ Tuto]&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Réalisation)==&lt;br /&gt;
Quelques problèmes ont été rencontrés. En procédant étape par étape, nous avons pu déterminer d'où venait le problème qui faisait que le module refusait de fonctionner à 8MHz en 3.3V. Premièrement, la conception a été réalisée à l'aide du schéma de l'Arduino Pro Mini. Celui ci fonctionnant à 3.3V comme à 5V à 8MHz et 16MHz. Cependant, cet Arduino fonctionne grâce à un résonateur qui permet d'obtenir, à la fois des fréquences de 8/16 et 20 MHz.&lt;br /&gt;
Dès lors plusieurs tests nous ont permis de démontrer que le circuit fonctionne sur 5V avec un quartz à 16MHz comme avec un quartz à 8MHz cependant, lors du passage à 3.3V, l'Atmega ne fonctionnait plus. &lt;br /&gt;
&lt;br /&gt;
L'oscillateur externe en est la cause. Pour cela, je décide donc de réécrire les fuses de l'Atmega. Ces fuses me permettent de désactiver le prescale de 8 et d'utiliser l'oscillateur interne au microprocesseur même si celui ci est moins précis.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Fuses&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;1&amp;quot;|&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|Avant&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|Après&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;1&amp;quot;|Low&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|FF&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|E2&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;1&amp;quot;|High&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|DA&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|D8&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;1&amp;quot;|Extend&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|05&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|07&lt;br /&gt;
|}&lt;br /&gt;
Ces différentes valeurs de fuse nous permettent :&lt;br /&gt;
 '''Low Fuse''' : Spécifier que l'on veut utiliser un quartz de 8MHz en interne avec un CK (temps de boot de 65ms)&lt;br /&gt;
 '''High Fuse''' : Spécifie l'utilisation d'un bootloader de 2ko&lt;br /&gt;
 '''Extend Fuse''' : permet de désactiver la brown-out protection. Cette protection permet d'éviter que le microcontrôleur ne fonctionne en une tension trop basse afin d'éviter les anomalies. Dans notre cas, je souhaite la désactiver afin d'écarter des risques de bugs.&lt;br /&gt;
&lt;br /&gt;
Le fusible extend ne peut être programmé en 3.3V, une modification de ce fusible en 3.3v rendra le capteur inutilisable jusqu'à la reprogrammation du contrôleur en 5V.&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;br /&gt;
'''Rapport de projet :''' [[Média:P57_2019_Rapport_de_projet_IMA4.pdf]] &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''PCBs :'''&lt;br /&gt;
&lt;br /&gt;
Conception du capteur : [[Média:P57_2019_PCBv1.PDF]]&lt;br /&gt;
Archive : [[Fichier:P57_2019_Conception_CapteurSansLibs.zip]]&lt;br /&gt;
&lt;br /&gt;
Conception du Shield: [[Média:P57_2019_ConceptionShield.PDF]]&lt;br /&gt;
Archive : [[Fichier:P57_2019_Conception_Module_RAMSansLibs.zip]]&lt;br /&gt;
&lt;br /&gt;
'''Programmes :'''&lt;br /&gt;
&lt;br /&gt;
Sender (Raspberry) : [[Fichier:P57_2019_Raspberry.zip]]&lt;br /&gt;
Bootloader (Atmega328p) : [[Fichier:P57_2019_Atmega.zip]]&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=75996</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=75996"/>
				<updated>2019-05-10T01:39:35Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Documents Rendus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise à jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer à chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mises-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolu. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencer avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permise de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentés'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir à une version antérieure avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus, le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants et d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tutoriels permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même conception. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures. Les fichiers de documentations ont également été réalisés pour cette carte. [[Fichier:P57_2018_CarteV2.PDF]]&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, '''la carte est 100% fonctionnelle''' à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
[[Fichier:P57_2019_Schematique_final2.JPG|500px|thumb|center|Schématique carte shield]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Code)==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Testemission.JPG|200px|thumb|left|Tests émission/réception]]&lt;br /&gt;
Des premiers tests ont été effectués avec la [https://github.com/TMRh20/RF24.git librairie python]. Celle-ci fonctionne parfaitement avec le capteur utilisée avec le code de base. Les codes sont simples a comprendre et donc le code pour le bootloader pourra commencer a partir de ces premiers codes sources ([http://electroniqueamateur.blogspot.com/2017/02/communication-entre-raspberry-pi-et.html Source (partie Raspberry)] et [http://electroniqueamateur.blogspot.com/2017/02/communication-par-nrf24l01-entre-deux.html Source (partie Atmega)]). Les mémoires ont pu êtres testées a l'aide de la[https://github.com/LowPowerLab/SPIFlash librarie SPIFlash]. Cette librarie fonctionne parfaitement avec la mémoire RAM et cause quelques erreurs avec la Flash mais sans aucune incidence car les tests de lecture et d'écriture sont concluants avec les deux types de mémoires.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La conception d'une entête permettant l'identification de la version, l'authenticité du paquet et du destinataire afin de débuter la réception. Premièrement le code sera implémenté dans la partie programme de l’Arduino afin de faciliter l'Upload. Puis celui ci sera transformé en bootloader après avoir obtenus des tests concluants.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;13&amp;quot;|Entête d'une MAJ&lt;br /&gt;
|-&lt;br /&gt;
| '''Bits'''&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;|32&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| 16&lt;br /&gt;
|-&lt;br /&gt;
|  '''Uses'''&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| ID MAJ Provider&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| Groupe ID&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| Version&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;| MAJ Size&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| CheckSum&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour une sécurité optimale, ce schéma devra être encrypté. Un algorithme par cryptographie asymétrique serait parfait pour encoder et décrypter ce signal. La trame décodée pourra être reconnue comme étant correcte si l'ID MAJ Provider est correct. De plus, le checksum devra être correct également avant d'implémenter la MAJ. La version, quant à elle permettra d'éviter la mise à jour répétée de tous les capteurs si on désire installer de nouveaux capteurs ou si l'entreprise est trop grande pour mettre à jour tous les capteurs d'une traite. Le schéma se résumera en quelques étapes. &lt;br /&gt;
&lt;br /&gt;
;Coté émetteur :&lt;br /&gt;
# Calcul du checkSum du code HEX&lt;br /&gt;
# Attribution d'une version au code ainsi que le Groupe ID ciblé&lt;br /&gt;
# Encryptage de la trame et du code HEX&lt;br /&gt;
# Émission à tous les capteurs de l'entête&lt;br /&gt;
# Temporisation afin de laisser faire le traitement&lt;br /&gt;
# Émission du code HEX encrypté&lt;br /&gt;
&lt;br /&gt;
;Coté capteur :&lt;br /&gt;
# Reception d'une trame encodée&lt;br /&gt;
# Décodage de la trame&lt;br /&gt;
# Vérification de l'ID MAJ Provider, du Groupe ID et de la version&lt;br /&gt;
# Si tout correspond et version &amp;gt; version actuelle, réception de la trame et stockage dans la mémoire SPI&lt;br /&gt;
# Décryptage du code HEX&lt;br /&gt;
# Calcul du checksum et validation de l'authenticité&lt;br /&gt;
# Si le checksum est correct, transfert vers la mémoire de programme&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Envoid'unfichier.JPG|400px|thumb|left|Tests émission/réception]][[Fichier:P57_2019_Buffer.JPG|200px|thumb|right|Vitesse en fonction de la taille du buffer]]&lt;br /&gt;
Pour commencer, les algorithmes de cryptographies ne seront pas implémentés afin de limiter les bugs rencontrés.&lt;br /&gt;
La première étape était de transmettre le header et ainsi obtenir la version, l'identification et pouvoir vérifier l'authenticité du paquet.&lt;br /&gt;
Une fois la taille récupérée, le but était de transmettre (sans perte) le paquet. Pour cela, il faut utiliser un buffer de données afin de transmettre partie par partie. La taille de ce Buffer étant spécifiée à l'avance dans le programme. Mais alors comment choisir la taille du buffer ? Des tests ont étés effectuées et la taille du buffer a une énorme incidence sur la vitesse de transfert des fichiers (voir courbe). Cette courbe n'est pas la seule à prendre en compte. Le buffer ne peut pas dépasser les 32 bytes imposés par le composant. De plus, ici ces temps concernent que la transmission, il faut également que le microcontrôleur charge ces valeurs dans la mémoire SPI.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
L'écriture et la vérification par CheckSum étant fonctionnelle, on passe maintenant à la transformation du programme en Bootloader à l'aide du logiciel Atmel Studio et du bootloader Optiboot (qui est le bootloader le plus léger et fonctionnel pour une arduino). Ce tutoriel pourra nous être utile afin de modifier le bootloader plus simplement : [https://www.electronicwings.com/arduino/basics-to-developing-bootloader-for-arduino/ Tuto]&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Réalisation)==&lt;br /&gt;
Quelques problèmes ont été rencontrés. En procédant étape par étape, nous avons pu déterminer d'où venait le problème qui faisait que le module refusait de fonctionner à 8MHz en 3.3V. Premièrement, la conception a été réalisée à l'aide du schéma de l'Arduino Pro Mini. Celui ci fonctionnant à 3.3V comme à 5V à 8MHz et 16MHz. Cependant, cet Arduino fonctionne grâce à un résonateur qui permet d'obtenir, à la fois des fréquences de 8/16 et 20 MHz.&lt;br /&gt;
Dès lors plusieurs tests nous ont permis de démontrer que le circuit fonctionne sur 5V avec un quartz à 16MHz comme avec un quartz à 8MHz cependant, lors du passage à 3.3V, l'Atmega ne fonctionnait plus. &lt;br /&gt;
&lt;br /&gt;
L'oscillateur externe en est la cause. Pour cela, je décide donc de réécrire les fuses de l'Atmega. Ces fuses me permettent de désactiver le prescale de 8 et d'utiliser l'oscillateur interne au microprocesseur même si celui ci est moins précis.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Fuses&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;1&amp;quot;|&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|Avant&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|Après&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;1&amp;quot;|Low&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|FF&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|E2&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;1&amp;quot;|High&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|DA&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|D8&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;1&amp;quot;|Extend&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|05&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|07&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;br /&gt;
'''Rapport de projet :''' [[Média:P57_2019_Rapport_de_projet_IMA4.pdf]] &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''PCBs :'''&lt;br /&gt;
&lt;br /&gt;
Conception du capteur : [[Média:P57_2019_PCBv1.PDF]]&lt;br /&gt;
Archive : [[Fichier:P57_2019_Conception_CapteurSansLibs.zip]]&lt;br /&gt;
&lt;br /&gt;
Conception du Shield: [[Média:P57_2019_ConceptionShield.PDF]]&lt;br /&gt;
Archive : [[Fichier:P57_2019_Conception_Module_RAMSansLibs.zip]]&lt;br /&gt;
&lt;br /&gt;
'''Programmes :'''&lt;br /&gt;
&lt;br /&gt;
Sender (Raspberry) : [[Fichier:P57_2019_Raspberry.zip]]&lt;br /&gt;
Bootloader (Atmega328p) : [[Fichier:P57_2019_Atmega.zip]]&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2019_Raspberry.zip&amp;diff=75995</id>
		<title>Fichier:P57 2019 Raspberry.zip</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2019_Raspberry.zip&amp;diff=75995"/>
				<updated>2019-05-10T01:30:23Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2019_Rapport_de_projet_IMA4.pdf&amp;diff=75994</id>
		<title>Fichier:P57 2019 Rapport de projet IMA4.pdf</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2019_Rapport_de_projet_IMA4.pdf&amp;diff=75994"/>
				<updated>2019-05-10T01:30:14Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2019_PCBV2.PDF&amp;diff=75993</id>
		<title>Fichier:P57 2019 PCBV2.PDF</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2019_PCBV2.PDF&amp;diff=75993"/>
				<updated>2019-05-10T01:30:01Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2019_PCBv1.PDF&amp;diff=75992</id>
		<title>Fichier:P57 2019 PCBv1.PDF</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2019_PCBv1.PDF&amp;diff=75992"/>
				<updated>2019-05-10T01:29:45Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2019_ConceptionShield.PDF&amp;diff=75991</id>
		<title>Fichier:P57 2019 ConceptionShield.PDF</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2019_ConceptionShield.PDF&amp;diff=75991"/>
				<updated>2019-05-10T01:29:27Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : rendu conception&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;rendu conception&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2019_Conception_Module_RAMSansLibs.zip&amp;diff=75990</id>
		<title>Fichier:P57 2019 Conception Module RAMSansLibs.zip</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2019_Conception_Module_RAMSansLibs.zip&amp;diff=75990"/>
				<updated>2019-05-10T01:28:48Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2019_Conception_CapteurSansLibs.zip&amp;diff=75989</id>
		<title>Fichier:P57 2019 Conception CapteurSansLibs.zip</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2019_Conception_CapteurSansLibs.zip&amp;diff=75989"/>
				<updated>2019-05-10T01:27:03Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2019_Atmega.zip&amp;diff=75988</id>
		<title>Fichier:P57 2019 Atmega.zip</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2019_Atmega.zip&amp;diff=75988"/>
				<updated>2019-05-10T01:26:37Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=75945</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=75945"/>
				<updated>2019-05-09T22:15:10Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Travail supplémentaire (Partie Réalisation) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise à jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer à chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mises-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolu. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencer avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permise de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentés'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir à une version antérieure avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus, le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants et d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tutoriels permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même conception. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures. Les fichiers de documentations ont également été réalisés pour cette carte. [[Fichier:P57_2018_CarteV2.PDF]]&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, '''la carte est 100% fonctionnelle''' à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
[[Fichier:P57_2019_Schematique_final2.JPG|500px|thumb|center|Schématique carte shield]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Code)==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Testemission.JPG|200px|thumb|left|Tests émission/réception]]&lt;br /&gt;
Des premiers tests ont été effectués avec la [https://github.com/TMRh20/RF24.git librairie python]. Celle-ci fonctionne parfaitement avec le capteur utilisée avec le code de base. Les codes sont simples a comprendre et donc le code pour le bootloader pourra commencer a partir de ces premiers codes sources ([http://electroniqueamateur.blogspot.com/2017/02/communication-entre-raspberry-pi-et.html Source (partie Raspberry)] et [http://electroniqueamateur.blogspot.com/2017/02/communication-par-nrf24l01-entre-deux.html Source (partie Atmega)]). Les mémoires ont pu êtres testées a l'aide de la[https://github.com/LowPowerLab/SPIFlash librarie SPIFlash]. Cette librarie fonctionne parfaitement avec la mémoire RAM et cause quelques erreurs avec la Flash mais sans aucune incidence car les tests de lecture et d'écriture sont concluants avec les deux types de mémoires.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La conception d'une entête permettant l'identification de la version, l'authenticité du paquet et du destinataire afin de débuter la réception. Premièrement le code sera implémenté dans la partie programme de l’Arduino afin de faciliter l'Upload. Puis celui ci sera transformé en bootloader après avoir obtenus des tests concluants.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;13&amp;quot;|Entête d'une MAJ&lt;br /&gt;
|-&lt;br /&gt;
| '''Bits'''&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;|32&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| 16&lt;br /&gt;
|-&lt;br /&gt;
|  '''Uses'''&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| ID MAJ Provider&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| Groupe ID&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| Version&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;| MAJ Size&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| CheckSum&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour une sécurité optimale, ce schéma devra être encrypté. Un algorithme par cryptographie asymétrique serait parfait pour encoder et décrypter ce signal. La trame décodée pourra être reconnue comme étant correcte si l'ID MAJ Provider est correct. De plus, le checksum devra être correct également avant d'implémenter la MAJ. La version, quant à elle permettra d'éviter la mise à jour répétée de tous les capteurs si on désire installer de nouveaux capteurs ou si l'entreprise est trop grande pour mettre à jour tous les capteurs d'une traite. Le schéma se résumera en quelques étapes. &lt;br /&gt;
&lt;br /&gt;
;Coté émetteur :&lt;br /&gt;
# Calcul du checkSum du code HEX&lt;br /&gt;
# Attribution d'une version au code ainsi que le Groupe ID ciblé&lt;br /&gt;
# Encryptage de la trame et du code HEX&lt;br /&gt;
# Émission à tous les capteurs de l'entête&lt;br /&gt;
# Temporisation afin de laisser faire le traitement&lt;br /&gt;
# Émission du code HEX encrypté&lt;br /&gt;
&lt;br /&gt;
;Coté capteur :&lt;br /&gt;
# Reception d'une trame encodée&lt;br /&gt;
# Décodage de la trame&lt;br /&gt;
# Vérification de l'ID MAJ Provider, du Groupe ID et de la version&lt;br /&gt;
# Si tout correspond et version &amp;gt; version actuelle, réception de la trame et stockage dans la mémoire SPI&lt;br /&gt;
# Décryptage du code HEX&lt;br /&gt;
# Calcul du checksum et validation de l'authenticité&lt;br /&gt;
# Si le checksum est correct, transfert vers la mémoire de programme&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Envoid'unfichier.JPG|400px|thumb|left|Tests émission/réception]][[Fichier:P57_2019_Buffer.JPG|200px|thumb|right|Vitesse en fonction de la taille du buffer]]&lt;br /&gt;
Pour commencer, les algorithmes de cryptographies ne seront pas implémentés afin de limiter les bugs rencontrés.&lt;br /&gt;
La première étape était de transmettre le header et ainsi obtenir la version, l'identification et pouvoir vérifier l'authenticité du paquet.&lt;br /&gt;
Une fois la taille récupérée, le but était de transmettre (sans perte) le paquet. Pour cela, il faut utiliser un buffer de données afin de transmettre partie par partie. La taille de ce Buffer étant spécifiée à l'avance dans le programme. Mais alors comment choisir la taille du buffer ? Des tests ont étés effectuées et la taille du buffer a une énorme incidence sur la vitesse de transfert des fichiers (voir courbe). Cette courbe n'est pas la seule à prendre en compte. Le buffer ne peut pas dépasser les 32 bytes imposés par le composant. De plus, ici ces temps concernent que la transmission, il faut également que le microcontrôleur charge ces valeurs dans la mémoire SPI.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
L'écriture et la vérification par CheckSum étant fonctionnelle, on passe maintenant à la transformation du programme en Bootloader à l'aide du logiciel Atmel Studio et du bootloader Optiboot (qui est le bootloader le plus léger et fonctionnel pour une arduino). Ce tutoriel pourra nous être utile afin de modifier le bootloader plus simplement : [https://www.electronicwings.com/arduino/basics-to-developing-bootloader-for-arduino/ Tuto]&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Réalisation)==&lt;br /&gt;
Quelques problèmes ont été rencontrés. En procédant étape par étape, nous avons pu déterminer d'où venait le problème qui faisait que le module refusait de fonctionner à 8MHz en 3.3V. Premièrement, la conception a été réalisée à l'aide du schéma de l'Arduino Pro Mini. Celui ci fonctionnant à 3.3V comme à 5V à 8MHz et 16MHz. Cependant, cet Arduino fonctionne grâce à un résonateur qui permet d'obtenir, à la fois des fréquences de 8/16 et 20 MHz.&lt;br /&gt;
Dès lors plusieurs tests nous ont permis de démontrer que le circuit fonctionne sur 5V avec un quartz à 16MHz comme avec un quartz à 8MHz cependant, lors du passage à 3.3V, l'Atmega ne fonctionnait plus. &lt;br /&gt;
&lt;br /&gt;
L'oscillateur externe en est la cause. Pour cela, je décide donc de réécrire les fuses de l'Atmega. Ces fuses me permettent de désactiver le prescale de 8 et d'utiliser l'oscillateur interne au microprocesseur même si celui ci est moins précis.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Fuses&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;1&amp;quot;|&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|Avant&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|Après&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;1&amp;quot;|Low&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|FF&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|E2&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;1&amp;quot;|High&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|DA&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|D8&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;1&amp;quot;|Extend&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|05&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|07&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=74228</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=74228"/>
				<updated>2019-05-03T18:20:29Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Travail supplémentaire (Partie Réalisation) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise à jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer à chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mises-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolu. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencer avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permise de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentés'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir à une version antérieure avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus, le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants et d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tutoriels permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même conception. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures. Les fichiers de documentations ont également été réalisés pour cette carte. [[Fichier:P57_2018_CarteV2.PDF]]&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, '''la carte est 100% fonctionnelle''' à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
[[Fichier:P57_2019_Schematique_final2.JPG|500px|thumb|center|Schématique carte shield]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Code)==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Testemission.JPG|200px|thumb|left|Tests émission/réception]]&lt;br /&gt;
Des premiers tests ont été effectués avec la [https://github.com/TMRh20/RF24.git librairie python]. Celle-ci fonctionne parfaitement avec le capteur utilisée avec le code de base. Les codes sont simples a comprendre et donc le code pour le bootloader pourra commencer a partir de ces premiers codes sources ([http://electroniqueamateur.blogspot.com/2017/02/communication-entre-raspberry-pi-et.html Source (partie Raspberry)] et [http://electroniqueamateur.blogspot.com/2017/02/communication-par-nrf24l01-entre-deux.html Source (partie Atmega)]). Les mémoires ont pu êtres testées a l'aide de la[https://github.com/LowPowerLab/SPIFlash librarie SPIFlash]. Cette librarie fonctionne parfaitement avec la mémoire RAM et cause quelques erreurs avec la Flash mais sans aucune incidence car les tests de lecture et d'écriture sont concluants avec les deux types de mémoires.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La conception d'une entête permettant l'identification de la version, l'authenticité du paquet et du destinataire afin de débuter la réception. Premièrement le code sera implémenté dans la partie programme de l’Arduino afin de faciliter l'Upload. Puis celui ci sera transformé en bootloader après avoir obtenus des tests concluants.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;13&amp;quot;|Entête d'une MAJ&lt;br /&gt;
|-&lt;br /&gt;
| '''Bits'''&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;|32&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| 16&lt;br /&gt;
|-&lt;br /&gt;
|  '''Uses'''&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| ID MAJ Provider&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| Groupe ID&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| Version&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;| MAJ Size&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| CheckSum&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour une sécurité optimale, ce schéma devra être encrypté. Un algorithme par cryptographie asymétrique serait parfait pour encoder et décrypter ce signal. La trame décodée pourra être reconnue comme étant correcte si l'ID MAJ Provider est correct. De plus, le checksum devra être correct également avant d'implémenter la MAJ. La version, quant à elle permettra d'éviter la mise à jour répétée de tous les capteurs si on désire installer de nouveaux capteurs ou si l'entreprise est trop grande pour mettre à jour tous les capteurs d'une traite. Le schéma se résumera en quelques étapes. &lt;br /&gt;
&lt;br /&gt;
;Coté émetteur :&lt;br /&gt;
# Calcul du checkSum du code HEX&lt;br /&gt;
# Attribution d'une version au code ainsi que le Groupe ID ciblé&lt;br /&gt;
# Encryptage de la trame et du code HEX&lt;br /&gt;
# Émission à tous les capteurs de l'entête&lt;br /&gt;
# Temporisation afin de laisser faire le traitement&lt;br /&gt;
# Émission du code HEX encrypté&lt;br /&gt;
&lt;br /&gt;
;Coté capteur :&lt;br /&gt;
# Reception d'une trame encodée&lt;br /&gt;
# Décodage de la trame&lt;br /&gt;
# Vérification de l'ID MAJ Provider, du Groupe ID et de la version&lt;br /&gt;
# Si tout correspond et version &amp;gt; version actuelle, réception de la trame et stockage dans la mémoire SPI&lt;br /&gt;
# Décryptage du code HEX&lt;br /&gt;
# Calcul du checksum et validation de l'authenticité&lt;br /&gt;
# Si le checksum est correct, transfert vers la mémoire de programme&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Envoid'unfichier.JPG|400px|thumb|left|Tests émission/réception]][[Fichier:P57_2019_Buffer.JPG|200px|thumb|right|Vitesse en fonction de la taille du buffer]]&lt;br /&gt;
Pour commencer, les algorithmes de cryptographies ne seront pas implémentés afin de limiter les bugs rencontrés.&lt;br /&gt;
La première étape était de transmettre le header et ainsi obtenir la version, l'identification et pouvoir vérifier l'authenticité du paquet.&lt;br /&gt;
Une fois la taille récupérée, le but était de transmettre (sans perte) le paquet. Pour cela, il faut utiliser un buffer de données afin de transmettre partie par partie. La taille de ce Buffer étant spécifiée à l'avance dans le programme. Mais alors comment choisir la taille du buffer ? Des tests ont étés effectuées et la taille du buffer a une énorme incidence sur la vitesse de transfert des fichiers (voir courbe). Cette courbe n'est pas la seule à prendre en compte. Le buffer ne peut pas dépasser les 32 bytes imposés par le composant. De plus, ici ces temps concernent que la transmission, il faut également que le microcontrôleur charge ces valeurs dans la mémoire SPI.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
L'écriture et la vérification par CheckSum étant fonctionnelle, on passe maintenant à la transformation du programme en Bootloader à l'aide du logiciel Atmel Studio et du bootloader Optiboot (qui est le bootloader le plus léger et fonctionnel pour une arduino). Ce tutoriel pourra nous être utile afin de modifier le bootloader plus simplement : [https://www.electronicwings.com/arduino/basics-to-developing-bootloader-for-arduino/ Tuto]&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Réalisation)==&lt;br /&gt;
Quelques problèmes ont été rencontrés. En procédant étape par étape, nous avons pu déterminer d'où venait le problème qui faisait que le module refusait de fonctionner à 8MHz en 3.3V. Premièrement, la conception a été réalisée à l'aide du schéma de l'Arduino Pro Mini. Celui ci fonctionnant à 3.3V comme à 5V à 8MHz et 16MHz. Cependant, cet Arduino fonctionne grâce à un résonateur qui permet d'obtenir, à la fois des fréquences de 8/16 et 20 MHz.&lt;br /&gt;
Dès lors plusieurs tests nous ont permis de démontrer que le circuit fonctionne sur 5V avec un quartz à 16MHz comme avec un quartz à 8MHz cependant, lors du passage à 3.3V, l'Atmega ne fonctionnait plus. &lt;br /&gt;
&lt;br /&gt;
L'oscillateur externe en est la cause. Pour cela, je décide donc de réécrire les fuses de l'Atmega. Ces fuses me permettent de désactiver le prescale de 8 et d'utiliser l'oscillateur interne au microprocesseur même si celui ci est moins précis.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Fuses&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;1&amp;quot;|&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|Avant&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|Après&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;1&amp;quot;|Low&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|FF&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|E2&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;1&amp;quot;|High&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|DA&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|DE&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;1&amp;quot;|Extend&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|05&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|07&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=74167</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=74167"/>
				<updated>2019-05-02T15:10:09Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Travail supplémentaire (Partie Code) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise à jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer à chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mises-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolu. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencer avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permise de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentés'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir à une version antérieure avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus, le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants et d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tutoriels permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même conception. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures. Les fichiers de documentations ont également été réalisés pour cette carte. [[Fichier:P57_2018_CarteV2.PDF]]&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, '''la carte est 100% fonctionnelle''' à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
[[Fichier:P57_2019_Schematique_final2.JPG|500px|thumb|center|Schématique carte shield]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Code)==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Testemission.JPG|200px|thumb|left|Tests émission/réception]]&lt;br /&gt;
Des premiers tests ont été effectués avec la [https://github.com/TMRh20/RF24.git librairie python]. Celle-ci fonctionne parfaitement avec le capteur utilisée avec le code de base. Les codes sont simples a comprendre et donc le code pour le bootloader pourra commencer a partir de ces premiers codes sources ([http://electroniqueamateur.blogspot.com/2017/02/communication-entre-raspberry-pi-et.html Source (partie Raspberry)] et [http://electroniqueamateur.blogspot.com/2017/02/communication-par-nrf24l01-entre-deux.html Source (partie Atmega)]). Les mémoires ont pu êtres testées a l'aide de la[https://github.com/LowPowerLab/SPIFlash librarie SPIFlash]. Cette librarie fonctionne parfaitement avec la mémoire RAM et cause quelques erreurs avec la Flash mais sans aucune incidence car les tests de lecture et d'écriture sont concluants avec les deux types de mémoires.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La conception d'une entête permettant l'identification de la version, l'authenticité du paquet et du destinataire afin de débuter la réception. Premièrement le code sera implémenté dans la partie programme de l’Arduino afin de faciliter l'Upload. Puis celui ci sera transformé en bootloader après avoir obtenus des tests concluants.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;13&amp;quot;|Entête d'une MAJ&lt;br /&gt;
|-&lt;br /&gt;
| '''Bits'''&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;|32&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| 16&lt;br /&gt;
|-&lt;br /&gt;
|  '''Uses'''&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| ID MAJ Provider&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| Groupe ID&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| Version&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;| MAJ Size&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| CheckSum&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour une sécurité optimale, ce schéma devra être encrypté. Un algorithme par cryptographie asymétrique serait parfait pour encoder et décrypter ce signal. La trame décodée pourra être reconnue comme étant correcte si l'ID MAJ Provider est correct. De plus, le checksum devra être correct également avant d'implémenter la MAJ. La version, quant à elle permettra d'éviter la mise à jour répétée de tous les capteurs si on désire installer de nouveaux capteurs ou si l'entreprise est trop grande pour mettre à jour tous les capteurs d'une traite. Le schéma se résumera en quelques étapes. &lt;br /&gt;
&lt;br /&gt;
;Coté émetteur :&lt;br /&gt;
# Calcul du checkSum du code HEX&lt;br /&gt;
# Attribution d'une version au code ainsi que le Groupe ID ciblé&lt;br /&gt;
# Encryptage de la trame et du code HEX&lt;br /&gt;
# Émission à tous les capteurs de l'entête&lt;br /&gt;
# Temporisation afin de laisser faire le traitement&lt;br /&gt;
# Émission du code HEX encrypté&lt;br /&gt;
&lt;br /&gt;
;Coté capteur :&lt;br /&gt;
# Reception d'une trame encodée&lt;br /&gt;
# Décodage de la trame&lt;br /&gt;
# Vérification de l'ID MAJ Provider, du Groupe ID et de la version&lt;br /&gt;
# Si tout correspond et version &amp;gt; version actuelle, réception de la trame et stockage dans la mémoire SPI&lt;br /&gt;
# Décryptage du code HEX&lt;br /&gt;
# Calcul du checksum et validation de l'authenticité&lt;br /&gt;
# Si le checksum est correct, transfert vers la mémoire de programme&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Envoid'unfichier.JPG|400px|thumb|left|Tests émission/réception]][[Fichier:P57_2019_Buffer.JPG|200px|thumb|right|Vitesse en fonction de la taille du buffer]]&lt;br /&gt;
Pour commencer, les algorithmes de cryptographies ne seront pas implémentés afin de limiter les bugs rencontrés.&lt;br /&gt;
La première étape était de transmettre le header et ainsi obtenir la version, l'identification et pouvoir vérifier l'authenticité du paquet.&lt;br /&gt;
Une fois la taille récupérée, le but était de transmettre (sans perte) le paquet. Pour cela, il faut utiliser un buffer de données afin de transmettre partie par partie. La taille de ce Buffer étant spécifiée à l'avance dans le programme. Mais alors comment choisir la taille du buffer ? Des tests ont étés effectuées et la taille du buffer a une énorme incidence sur la vitesse de transfert des fichiers (voir courbe). Cette courbe n'est pas la seule à prendre en compte. Le buffer ne peut pas dépasser les 32 bytes imposés par le composant. De plus, ici ces temps concernent que la transmission, il faut également que le microcontrôleur charge ces valeurs dans la mémoire SPI.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
L'écriture et la vérification par CheckSum étant fonctionnelle, on passe maintenant à la transformation du programme en Bootloader à l'aide du logiciel Atmel Studio et du bootloader Optiboot (qui est le bootloader le plus léger et fonctionnel pour une arduino). Ce tutoriel pourra nous être utile afin de modifier le bootloader plus simplement : [https://www.electronicwings.com/arduino/basics-to-developing-bootloader-for-arduino/ Tuto]&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Réalisation)==&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=74138</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=74138"/>
				<updated>2019-05-02T13:10:48Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Travail supplémentaire (Partie Code) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise à jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer à chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mises-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolu. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencer avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permise de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentés'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir à une version antérieure avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus, le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants et d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tutoriels permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même conception. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures. Les fichiers de documentations ont également été réalisés pour cette carte. [[Fichier:P57_2018_CarteV2.PDF]]&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, '''la carte est 100% fonctionnelle''' à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
[[Fichier:P57_2019_Schematique_final2.JPG|500px|thumb|center|Schématique carte shield]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Code)==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Testemission.JPG|200px|thumb|left|Tests émission/réception]]&lt;br /&gt;
Des premiers tests ont été effectués avec la [https://github.com/TMRh20/RF24.git librairie python]. Celle-ci fonctionne parfaitement avec le capteur utilisée avec le code de base. Les codes sont simples a comprendre et donc le code pour le bootloader pourra commencer a partir de ces premiers codes sources ([http://electroniqueamateur.blogspot.com/2017/02/communication-entre-raspberry-pi-et.html Source (partie Raspberry)] et [http://electroniqueamateur.blogspot.com/2017/02/communication-par-nrf24l01-entre-deux.html Source (partie Atmega)]). Les mémoires ont pu êtres testées a l'aide de la[https://github.com/LowPowerLab/SPIFlash librarie SPIFlash]. Cette librarie fonctionne parfaitement avec la mémoire RAM et cause quelques erreurs avec la Flash mais sans aucune incidence car les tests de lecture et d'écriture sont concluants avec les deux types de mémoires.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La conception d'une entête permettant l'identification de la version, l'authenticité du paquet et du destinataire afin de débuter la réception. Premièrement le code sera implémenté dans la partie programme de l’Arduino afin de faciliter l'Upload. Puis celui ci sera transformé en bootloader après avoir obtenus des tests concluants.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;13&amp;quot;|Entête d'une MAJ&lt;br /&gt;
|-&lt;br /&gt;
| '''Bits'''&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;|32&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| 16&lt;br /&gt;
|-&lt;br /&gt;
|  '''Uses'''&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| ID MAJ Provider&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| Groupe ID&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| Version&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;| MAJ Size&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| CheckSum&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour une sécurité optimale, ce schéma devra être encrypté. Un algorithme par cryptographie asymétrique serait parfait pour encoder et décrypter ce signal. La trame décodée pourra être reconnue comme étant correcte si l'ID MAJ Provider est correct. De plus, le checksum devra être correct également avant d'implémenter la MAJ. La version, quant à elle permettra d'éviter la mise à jour répétée de tous les capteurs si on désire installer de nouveaux capteurs ou si l'entreprise est trop grande pour mettre à jour tous les capteurs d'une traite. Le schéma se résumera en quelques étapes. &lt;br /&gt;
&lt;br /&gt;
;Coté émetteur :&lt;br /&gt;
# Calcul du checkSum du code HEX&lt;br /&gt;
# Attribution d'une version au code ainsi que le Groupe ID ciblé&lt;br /&gt;
# Encryptage de la trame et du code HEX&lt;br /&gt;
# Émission à tous les capteurs de l'entête&lt;br /&gt;
# Temporisation afin de laisser faire le traitement&lt;br /&gt;
# Émission du code HEX encrypté&lt;br /&gt;
&lt;br /&gt;
;Coté capteur :&lt;br /&gt;
# Reception d'une trame encodée&lt;br /&gt;
# Décodage de la trame&lt;br /&gt;
# Vérification de l'ID MAJ Provider, du Groupe ID et de la version&lt;br /&gt;
# Si tout correspond et version &amp;gt; version actuelle, réception de la trame et stockage dans la mémoire SPI&lt;br /&gt;
# Décryptage du code HEX&lt;br /&gt;
# Calcul du checksum et validation de l'authenticité&lt;br /&gt;
# Si le checksum est correct, transfert vers la mémoire de programme&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Envoid'unfichier.JPG|400px|thumb|left|Tests émission/réception]][[Fichier:P57_2019_Buffer.JPG|200px|thumb|right|Vitesse en fonction de la taille du buffer]]&lt;br /&gt;
Pour commencer, les algorithmes de cryptographies ne seront pas implémentés afin de limiter les bugs rencontrés.&lt;br /&gt;
La première étape était de transmettre le header et ainsi obtenir la version, l'identification et pouvoir vérifier l'authenticité du paquet.&lt;br /&gt;
Une fois la taille récupérée, le but était de transmettre (sans perte) le paquet. Pour cela, il faut utiliser un buffer de données afin de transmettre partie par partie. La taille de ce Buffer étant spécifiée à l'avance dans le programme. Mais alors comment choisir la taille du buffer ? Des tests ont étés effectuées et la taille du buffer a une énorme incidence sur la vitesse de transfert des fichiers (voir courbe). Cette courbe n'est pas la seule à prendre en compte. Le buffer ne peut pas dépasser les 32 bytes imposés par le composant. De plus, ici ces temps concernent que la transmission, il faut également que le microcontrôleur charge ces valeurs dans la mémoire SPI.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Réalisation)==&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=74137</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=74137"/>
				<updated>2019-05-02T13:10:13Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Travail supplémentaire (Partie Code) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise à jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer à chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mises-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolu. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencer avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permise de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentés'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir à une version antérieure avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus, le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants et d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tutoriels permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même conception. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures. Les fichiers de documentations ont également été réalisés pour cette carte. [[Fichier:P57_2018_CarteV2.PDF]]&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, '''la carte est 100% fonctionnelle''' à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
[[Fichier:P57_2019_Schematique_final2.JPG|500px|thumb|center|Schématique carte shield]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Code)==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Testemission.JPG|200px|thumb|left|Tests émission/réception]]&lt;br /&gt;
Des premiers tests ont été effectués avec la [https://github.com/TMRh20/RF24.git librairie python]. Celle-ci fonctionne parfaitement avec le capteur utilisée avec le code de base. Les codes sont simples a comprendre et donc le code pour le bootloader pourra commencer a partir de ces premiers codes sources ([http://electroniqueamateur.blogspot.com/2017/02/communication-entre-raspberry-pi-et.html Source (partie Raspberry)] et [http://electroniqueamateur.blogspot.com/2017/02/communication-par-nrf24l01-entre-deux.html Source (partie Atmega)]). Les mémoires ont pu êtres testées a l'aide de la[https://github.com/LowPowerLab/SPIFlash librarie SPIFlash]. Cette librarie fonctionne parfaitement avec la mémoire RAM et cause quelques erreurs avec la Flash mais sans aucune incidence car les tests de lecture et d'écriture sont concluants avec les deux types de mémoires.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La conception d'une entête permettant l'identification de la version, l'authenticité du paquet et du destinataire afin de débuter la réception. Premièrement le code sera implémenté dans la partie programme de l’Arduino afin de faciliter l'Upload. Puis celui ci sera transformé en bootloader après avoir obtenus des tests concluants.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;13&amp;quot;|Entête d'une MAJ&lt;br /&gt;
|-&lt;br /&gt;
| '''Bits'''&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;|32&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| 16&lt;br /&gt;
|-&lt;br /&gt;
|  '''Uses'''&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| ID MAJ Provider&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| Groupe ID&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| Version&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;| MAJ Size&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| CheckSum&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour une sécurité optimale, ce schéma devra être encrypté. Un algorithme par cryptographie asymétrique serait parfait pour encoder et décrypter ce signal. La trame décodée pourra être reconnue comme étant correcte si l'ID MAJ Provider est correct. De plus, le checksum devra être correct également avant d'implémenter la MAJ. La version, quant à elle permettra d'éviter la mise à jour répétée de tous les capteurs si on désire installer de nouveaux capteurs ou si l'entreprise est trop grande pour mettre à jour tous les capteurs d'une traite. Le schéma se résumera en quelques étapes. &lt;br /&gt;
&lt;br /&gt;
;Coté émetteur :&lt;br /&gt;
# Calcul du checkSum du code HEX&lt;br /&gt;
# Attribution d'une version au code ainsi que le Groupe ID ciblé&lt;br /&gt;
# Encryptage de la trame et du code HEX&lt;br /&gt;
# Émission à tous les capteurs de l'entête&lt;br /&gt;
# Temporisation afin de laisser faire le traitement&lt;br /&gt;
# Émission du code HEX encrypté&lt;br /&gt;
&lt;br /&gt;
;Coté capteur :&lt;br /&gt;
# Reception d'une trame encodée&lt;br /&gt;
# Décodage de la trame&lt;br /&gt;
# Vérification de l'ID MAJ Provider, du Groupe ID et de la version&lt;br /&gt;
# Si tout correspond et version &amp;gt; version actuelle, réception de la trame et stockage dans la mémoire SPI&lt;br /&gt;
# Décryptage du code HEX&lt;br /&gt;
# Calcul du checksum et validation de l'authenticité&lt;br /&gt;
# Si le checksum est correct, transfert vers la mémoire de programme&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Envoid'unfichier.JPG|400px|thumb|left|Tests émission/réception]][[Fichier:P57_2019_Buffer.JPG|200px|thumb|right|Vitesse en fonction de la taille du buffer]]&lt;br /&gt;
Pour commencer, les algorithmes de cryptographies ne seront pas implémentés afin de limiter les bugs rencontrés.&lt;br /&gt;
La première étape était de transmettre le header et ainsi obtenir la version, l'identification et pouvoir vérifier l'authenticité du paquet.&lt;br /&gt;
Une fois la taille récupérée, le but était de transmettre (sans perte) le paquet. Pour cela, il faut utiliser un buffer de données afin de transmettre partie par partie. La taille de ce Buffer étant spécifiée à l'avance dans le programme. Mais alors comment choisir la taille du buffer ? Des tests ont étés effectuées et la taille du buffer a une énorme incidence sur la vitesse de transfert des fichiers (voir courbe). Cette courbe n'est pas la seule à prendre en compte. Le buffer ne peut pas dépasser les 32 bytes imposés par le composant. De plus, ici ces temps concernent que la transmission, il faut également que le microcontrôleur charge ces valeurs dans la mémoire SPI.&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Réalisation)==&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2019_Buffer.JPG&amp;diff=74136</id>
		<title>Fichier:P57 2019 Buffer.JPG</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2019_Buffer.JPG&amp;diff=74136"/>
				<updated>2019-05-02T13:09:09Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2019_Envoid%27unfichier.JPG&amp;diff=74134</id>
		<title>Fichier:P57 2019 Envoid'unfichier.JPG</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2019_Envoid%27unfichier.JPG&amp;diff=74134"/>
				<updated>2019-05-02T13:02:45Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=74081</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=74081"/>
				<updated>2019-05-02T09:55:05Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Travail supplémentaire (Partie Code) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise à jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer à chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mises-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolu. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencer avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permise de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentés'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir à une version antérieure avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus, le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants et d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tutoriels permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même conception. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures. Les fichiers de documentations ont également été réalisés pour cette carte. [[Fichier:P57_2018_CarteV2.PDF]]&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, '''la carte est 100% fonctionnelle''' à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
[[Fichier:P57_2019_Schematique_final2.JPG|500px|thumb|center|Schématique carte shield]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Code)==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Testemission.JPG|200px|thumb|left|Tests émission/réception]]&lt;br /&gt;
Des premiers tests ont été effectués avec la [https://github.com/TMRh20/RF24.git librairie python]. Celle-ci fonctionne parfaitement avec le capteur utilisée avec le code de base. Les codes sont simples a comprendre et donc le code pour le bootloader pourra commencer a partir de ces premiers codes sources ([http://electroniqueamateur.blogspot.com/2017/02/communication-entre-raspberry-pi-et.html Source (partie Raspberry)] et [http://electroniqueamateur.blogspot.com/2017/02/communication-par-nrf24l01-entre-deux.html Source (partie Atmega)]). Les mémoires ont pu êtres testées a l'aide de la[https://github.com/LowPowerLab/SPIFlash librarie SPIFlash]. Cette librarie fonctionne parfaitement avec la mémoire RAM et cause quelques erreurs avec la Flash mais sans aucune incidence car les tests de lecture et d'écriture sont concluants avec les deux types de mémoires.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La conception d'une entête permettant l'identification de la version, l'authenticité du paquet et du destinataire afin de débuter la réception. Premièrement le code sera implémenté dans la partie programme de l’Arduino afin de faciliter l'Upload. Puis celui ci sera transformé en bootloader après avoir obtenus des tests concluants.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;13&amp;quot;|Entête d'une MAJ&lt;br /&gt;
|-&lt;br /&gt;
| '''Bits'''&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;|32&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| 16&lt;br /&gt;
|-&lt;br /&gt;
|  '''Uses'''&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| ID MAJ Provider&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| Groupe ID&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| Version&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;| MAJ Size&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| CheckSum&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour une sécurité optimale, ce schéma devra être encrypté. Un algorithme par cryptographie asymétrique serait parfait pour encoder et décrypter ce signal. La trame décodée pourra être reconnue comme étant correcte si l'ID MAJ Provider est correct. De plus, le checksum devra être correct également avant d'implémenter la MAJ. La version, quant à elle permettra d'éviter la mise à jour répétée de tous les capteurs si on désire installer de nouveaux capteurs ou si l'entreprise est trop grande pour mettre à jour tous les capteurs d'une traite. Le schéma se résumera en quelques étapes. &lt;br /&gt;
&lt;br /&gt;
;Coté émetteur :&lt;br /&gt;
# Calcul du checkSum du code HEX&lt;br /&gt;
# Attribution d'une version au code ainsi que le Groupe ID ciblé&lt;br /&gt;
# Encryptage de la trame et du code HEX&lt;br /&gt;
# Émission à tous les capteurs de l'entête&lt;br /&gt;
# Temporisation afin de laisser faire le traitement&lt;br /&gt;
# Émission du code HEX encrypté&lt;br /&gt;
&lt;br /&gt;
;Coté capteur :&lt;br /&gt;
# Reception d'une trame encodée&lt;br /&gt;
# Décodage de la trame&lt;br /&gt;
# Vérification de l'ID MAJ Provider, du Groupe ID et de la version&lt;br /&gt;
# Si tout correspond et version &amp;gt; version actuelle, réception de la trame et stockage dans la mémoire SPI&lt;br /&gt;
# Décryptage du code HEX&lt;br /&gt;
# Calcul du checksum et validation de l'authenticité&lt;br /&gt;
# Si le checksum est correct, transfert vers la mémoire de programme&lt;br /&gt;
&lt;br /&gt;
Pour commencer, les algorithmes de cryptographies ne seront pas implémentés afin de limiter les bugs rencontrés.&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Réalisation)==&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=74054</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=74054"/>
				<updated>2019-05-02T08:56:01Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Travail supplémentaire (Partie Code) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise à jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer à chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mises-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolu. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencer avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permise de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentés'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir à une version antérieure avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus, le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants et d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tutoriels permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même conception. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures. Les fichiers de documentations ont également été réalisés pour cette carte. [[Fichier:P57_2018_CarteV2.PDF]]&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, '''la carte est 100% fonctionnelle''' à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
[[Fichier:P57_2019_Schematique_final2.JPG|500px|thumb|center|Schématique carte shield]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Code)==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Testemission.JPG|200px|thumb|left|Tests émission/réception]]&lt;br /&gt;
Des premiers tests ont été effectués avec la [https://github.com/TMRh20/RF24.git librairie python]. Celle-ci fonctionne parfaitement avec le capteur utilisée avec le code de base. Les codes sont simples a comprendre et donc le code pour le bootloader pourra commencer a partir de ces premiers codes sources ([http://electroniqueamateur.blogspot.com/2017/02/communication-entre-raspberry-pi-et.html Source (partie Raspberry)] et [http://electroniqueamateur.blogspot.com/2017/02/communication-par-nrf24l01-entre-deux.html Source (partie Atmega)]). Les mémoires ont pu êtres testées a l'aide de la[https://github.com/LowPowerLab/SPIFlash librarie SPIFlash]. Cette librarie fonctionne parfaitement avec la mémoire RAM et cause quelques erreurs avec la Flash mais sans aucune incidence car les tests de lecture et d'écriture sont concluants avec les deux types de mémoires.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La conception d'une entête permettant l'identification de la version, l'authenticité du paquet et du destinataire afin de débuter la réception. Premièrement le code sera implémenté dans la partie programme de l’Arduino afin de faciliter l'Upload. Puis celui ci sera transformé en bootloader après avoir obtenus des tests concluants.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;12&amp;quot;|Entête d'une MAJ&lt;br /&gt;
|-&lt;br /&gt;
| '''Bits'''&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|24&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| 16&lt;br /&gt;
|-&lt;br /&gt;
|  '''Uses'''&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| ID MAJ Provider&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| Groupe ID&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| Version&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;| MAJ Size&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| CheckSum&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour une sécurité optimale, ce schéma devra être encrypté. Un algorithme par cryptographie asymétrique serait parfait pour encoder et décrypter ce signal. La trame décodée pourra être reconnue comme étant correcte si l'ID MAJ Provider est correct. De plus, le checksum devra être correct également avant d'implémenter la MAJ. La version, quant à elle permettra d'éviter la mise à jour répétée de tous les capteurs si on désire installer de nouveaux capteurs ou si l'entreprise est trop grande pour mettre à jour tous les capteurs d'une traite. Le schéma se résumera en quelques étapes. &lt;br /&gt;
&lt;br /&gt;
;Coté émetteur :&lt;br /&gt;
# Calcul du checkSum du code HEX&lt;br /&gt;
# Attribution d'une version au code ainsi que le Groupe ID ciblé&lt;br /&gt;
# Encryptage de la trame et du code HEX&lt;br /&gt;
# Émission à tous les capteurs de l'entête&lt;br /&gt;
# Temporisation afin de laisser faire le traitement&lt;br /&gt;
# Émission du code HEX encrypté&lt;br /&gt;
&lt;br /&gt;
;Coté capteur :&lt;br /&gt;
# Reception d'une trame encodée&lt;br /&gt;
# Décodage de la trame&lt;br /&gt;
# Vérification de l'ID MAJ Provider, du Groupe ID et de la version&lt;br /&gt;
# Si tout correspond et version &amp;gt; version actuelle, réception de la trame et stockage dans la mémoire SPI&lt;br /&gt;
# Décryptage du code HEX&lt;br /&gt;
# Calcul du checksum et validation de l'authenticité&lt;br /&gt;
# Si le checksum est correct, transfert vers la mémoire de programme&lt;br /&gt;
&lt;br /&gt;
Pour commencer, les algorithmes de cryptographies ne seront pas implémentés afin de limiter les bugs rencontrés.&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Réalisation)==&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=74053</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=74053"/>
				<updated>2019-05-02T08:55:38Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Travail supplémentaire (Partie Code) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise à jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer à chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mises-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolu. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencer avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permise de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentés'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir à une version antérieure avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus, le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants et d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tutoriels permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même conception. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures. Les fichiers de documentations ont également été réalisés pour cette carte. [[Fichier:P57_2018_CarteV2.PDF]]&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, '''la carte est 100% fonctionnelle''' à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
[[Fichier:P57_2019_Schematique_final2.JPG|500px|thumb|center|Schématique carte shield]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Code)==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Testemission.JPG|200px|thumb|left|Tests émission/réception]]&lt;br /&gt;
Des premiers tests ont été effectués avec la [https://github.com/TMRh20/RF24.git librairie python]. Celle-ci fonctionne parfaitement avec le capteur utilisée avec le code de base. Les codes sont simples a comprendre et donc le code pour le bootloader pourra commencer a partir de ces premiers codes sources ([http://electroniqueamateur.blogspot.com/2017/02/communication-entre-raspberry-pi-et.html Source (partie Raspberry)] et [http://electroniqueamateur.blogspot.com/2017/02/communication-par-nrf24l01-entre-deux.html Source (partie Atmega)]). Les mémoires ont pu êtres testées a l'aide de la[https://github.com/LowPowerLab/SPIFlash librarie SPIFlash]. Cette librarie fonctionne parfaitement avec la mémoire RAM et cause quelques erreurs avec la Flash mais sans aucune incidence car les tests de lecture et d'écriture sont concluants avec les deux types de mémoires.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La conception d'une entête permettant l'identification de la version, l'authenticité du paquet et du destinataire afin de débuter la réception. Premièrement le code sera implémenté dans la partie programme de l’Arduino afin de faciliter l'Upload. Puis celui ci sera transformé en bootloader après avoir obtenus des tests concluants.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;9&amp;quot;|Entête d'une MAJ&lt;br /&gt;
|-&lt;br /&gt;
| '''Bits'''&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;|24&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| 16&lt;br /&gt;
|-&lt;br /&gt;
|  '''Uses'''&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| ID MAJ Provider&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| Groupe ID&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| Version&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot;| MAJ Size&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| CheckSum&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour une sécurité optimale, ce schéma devra être encrypté. Un algorithme par cryptographie asymétrique serait parfait pour encoder et décrypter ce signal. La trame décodée pourra être reconnue comme étant correcte si l'ID MAJ Provider est correct. De plus, le checksum devra être correct également avant d'implémenter la MAJ. La version, quant à elle permettra d'éviter la mise à jour répétée de tous les capteurs si on désire installer de nouveaux capteurs ou si l'entreprise est trop grande pour mettre à jour tous les capteurs d'une traite. Le schéma se résumera en quelques étapes. &lt;br /&gt;
&lt;br /&gt;
;Coté émetteur :&lt;br /&gt;
# Calcul du checkSum du code HEX&lt;br /&gt;
# Attribution d'une version au code ainsi que le Groupe ID ciblé&lt;br /&gt;
# Encryptage de la trame et du code HEX&lt;br /&gt;
# Émission à tous les capteurs de l'entête&lt;br /&gt;
# Temporisation afin de laisser faire le traitement&lt;br /&gt;
# Émission du code HEX encrypté&lt;br /&gt;
&lt;br /&gt;
;Coté capteur :&lt;br /&gt;
# Reception d'une trame encodée&lt;br /&gt;
# Décodage de la trame&lt;br /&gt;
# Vérification de l'ID MAJ Provider, du Groupe ID et de la version&lt;br /&gt;
# Si tout correspond et version &amp;gt; version actuelle, réception de la trame et stockage dans la mémoire SPI&lt;br /&gt;
# Décryptage du code HEX&lt;br /&gt;
# Calcul du checksum et validation de l'authenticité&lt;br /&gt;
# Si le checksum est correct, transfert vers la mémoire de programme&lt;br /&gt;
&lt;br /&gt;
Pour commencer, les algorithmes de cryptographies ne seront pas implémentés afin de limiter les bugs rencontrés.&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Réalisation)==&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=74018</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=74018"/>
				<updated>2019-05-01T17:55:17Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Travail supplémentaire (Partie Code) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise à jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer à chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mises-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolu. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencer avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permise de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentés'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir à une version antérieure avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus, le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants et d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tutoriels permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même conception. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures. Les fichiers de documentations ont également été réalisés pour cette carte. [[Fichier:P57_2018_CarteV2.PDF]]&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, '''la carte est 100% fonctionnelle''' à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
[[Fichier:P57_2019_Schematique_final2.JPG|500px|thumb|center|Schématique carte shield]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Code)==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Testemission.JPG|200px|thumb|left|Tests émission/réception]]&lt;br /&gt;
Des premiers tests ont été effectués avec la [https://github.com/TMRh20/RF24.git librairie python]. Celle-ci fonctionne parfaitement avec le capteur utilisée avec le code de base. Les codes sont simples a comprendre et donc le code pour le bootloader pourra commencer a partir de ces premiers codes sources ([http://electroniqueamateur.blogspot.com/2017/02/communication-entre-raspberry-pi-et.html Source (partie Raspberry)] et [http://electroniqueamateur.blogspot.com/2017/02/communication-par-nrf24l01-entre-deux.html Source (partie Atmega)]). Les mémoires ont pu êtres testées a l'aide de la[https://github.com/LowPowerLab/SPIFlash librarie SPIFlash]. Cette librarie fonctionne parfaitement avec la mémoire RAM et cause quelques erreurs avec la Flash mais sans aucune incidence car les tests de lecture et d'écriture sont concluants avec les deux types de mémoires.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La conception d'une entête permettant l'identification de la version, l'authenticité du paquet et du destinataire afin de débuter la réception. Premièrement le code sera implémenté dans la partie programme de l’Arduino afin de faciliter l'Upload. Puis celui ci sera transformé en bootloader après avoir obtenus des tests concluants.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;9&amp;quot;|Entête d'une MAJ&lt;br /&gt;
|-&lt;br /&gt;
| '''Bits'''&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|16 &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| 16&lt;br /&gt;
|-&lt;br /&gt;
|  '''Uses'''&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| ID MAJ Provider&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| Groupe ID&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;| Version&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| CheckSum&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour une sécurité optimale, ce schéma devra être encrypté. Un algorithme par cryptographie asymétrique serait parfait pour encoder et décrypter ce signal. La trame décodée pourra être reconnue comme étant correcte si l'ID MAJ Provider est correct. De plus, le checksum devra être correct également avant d'implémenter la MAJ. La version, quant à elle permettra d'éviter la mise à jour répétée de tous les capteurs si on désire installer de nouveaux capteurs ou si l'entreprise est trop grande pour mettre à jour tous les capteurs d'une traite. Le schéma se résumera en quelques étapes. &lt;br /&gt;
&lt;br /&gt;
;Coté émetteur :&lt;br /&gt;
# Calcul du checkSum du code HEX&lt;br /&gt;
# Attribution d'une version au code ainsi que le Groupe ID ciblé&lt;br /&gt;
# Encryptage de la trame et du code HEX&lt;br /&gt;
# Émission à tous les capteurs de l'entête&lt;br /&gt;
# Temporisation afin de laisser faire le traitement&lt;br /&gt;
# Émission du code HEX encrypté&lt;br /&gt;
&lt;br /&gt;
;Coté capteur :&lt;br /&gt;
# Reception d'une trame encodée&lt;br /&gt;
# Décodage de la trame&lt;br /&gt;
# Vérification de l'ID MAJ Provider, du Groupe ID et de la version&lt;br /&gt;
# Si tout correspond et version &amp;gt; version actuelle, réception de la trame et stockage dans la mémoire SPI&lt;br /&gt;
# Décryptage du code HEX&lt;br /&gt;
# Calcul du checksum et validation de l'authenticité&lt;br /&gt;
# Si le checksum est correct, transfert vers la mémoire de programme&lt;br /&gt;
&lt;br /&gt;
Pour commencer, les algorithmes de cryptographies ne seront pas implémentés afin de limiter les bugs rencontrés.&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Réalisation)==&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=74009</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=74009"/>
				<updated>2019-05-01T17:16:05Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Travail supplémentaire (Partie Code) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise à jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer à chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mises-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolu. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencer avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permise de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentés'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir à une version antérieure avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus, le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants et d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tutoriels permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même conception. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures. Les fichiers de documentations ont également été réalisés pour cette carte. [[Fichier:P57_2018_CarteV2.PDF]]&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, '''la carte est 100% fonctionnelle''' à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
[[Fichier:P57_2019_Schematique_final2.JPG|500px|thumb|center|Schématique carte shield]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Code)==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Testemission.JPG|200px|thumb|left|Tests émission/réception]]&lt;br /&gt;
Des premiers tests ont été effectués avec la [https://github.com/TMRh20/RF24.git librairie python]. Celle-ci fonctionne parfaitement avec le capteur utilisée avec le code de base. Les codes sont simples a comprendre et donc le code pour le bootloader pourra commencer a partir de ces premiers codes sources ([http://electroniqueamateur.blogspot.com/2017/02/communication-entre-raspberry-pi-et.html Source (partie Raspberry)] et [http://electroniqueamateur.blogspot.com/2017/02/communication-par-nrf24l01-entre-deux.html Source (partie Atmega)]). Les mémoires ont pu êtres testées a l'aide de la[https://github.com/LowPowerLab/SPIFlash librarie SPIFlash]. Cette librarie fonctionne parfaitement avec la mémoire RAM et cause quelques erreurs avec la Flash mais sans aucune incidence car les tests de lecture et d'écriture sont concluants avec les deux types de mémoires.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La conception d'une entête permettant l'identification de la version, l'authenticité du paquet et du destinataire afin de débuter la réception. Premièrement le code sera implémenté dans la partie programme de l’Arduino afin de faciliter l'Upload. Puis celui ci sera transformé en bootloader après avoir obtenus des tests concluants.&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Réalisation)==&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=74008</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=74008"/>
				<updated>2019-05-01T17:14:45Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Travail supplémentaire (Partie Code) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise à jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer à chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mises-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolu. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencer avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permise de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentés'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir à une version antérieure avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus, le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants et d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tutoriels permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même conception. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures. Les fichiers de documentations ont également été réalisés pour cette carte. [[Fichier:P57_2018_CarteV2.PDF]]&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, '''la carte est 100% fonctionnelle''' à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
[[Fichier:P57_2019_Schematique_final2.JPG|500px|thumb|center|Schématique carte shield]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Code)==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Testemission.JPG|200px|thumb|left|Tests émission/réception]]&lt;br /&gt;
Des premiers tests ont été effectués avec la librairie python [https://github.com/TMRh20/RF24.git librairie]. Celle-ci fonctionne parfaitement avec le capteur utilisée avec le code de base. Les codes sont simples a comprendre et donc le code pour le bootloader pourra commencer a partir de ces premiers codes sources ([http://electroniqueamateur.blogspot.com/2017/02/communication-entre-raspberry-pi-et.html Source (partie Raspberry)] et [http://electroniqueamateur.blogspot.com/2017/02/communication-par-nrf24l01-entre-deux.html Source (partie Arduino)]). Les mémoires ont pu êtres testées a l'aide de la librarie Flash [https://github.com/LowPowerLab/SPIFlash librarie SPIFlash]. Cette librarie fonctionne parfaitement avec la mémoire RAM et cause quelques erreurs avec la Flash mais sans aucune incidence car les tests de lecture et d'écriture sont concluants avec les deux types de mémoires.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La conception d'une entête permettant l'identification de la version, l'authenticité du paquet et du destinataire afin de débuter la réception. Premièrement le code sera implémenté dans la partie programme de l’Arduino afin de faciliter l'Upload. Puis celui ci sera transformé en bootloader après avoir obtenus des tests concluants.&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Réalisation)==&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=74007</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=74007"/>
				<updated>2019-05-01T17:13:55Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Travail supplémentaire (Partie Code) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise à jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer à chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mises-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolu. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencer avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permise de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentés'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir à une version antérieure avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus, le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants et d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tutoriels permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même conception. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures. Les fichiers de documentations ont également été réalisés pour cette carte. [[Fichier:P57_2018_CarteV2.PDF]]&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, '''la carte est 100% fonctionnelle''' à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
[[Fichier:P57_2019_Schematique_final2.JPG|500px|thumb|center|Schématique carte shield]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Code)==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Testemission.JPG|200px|thumb|left|Tests émission/réception]]&lt;br /&gt;
Des premiers tests ont été effectués avec la librairie python [https://github.com/TMRh20/RF24.git librairie]. Celle-ci fonctionne parfaitement avec le capteur utilisée avec le code de base. Les codes sont simples a comprendre et donc le code pour le bootloader pourra commencer a partir de ces premiers codes sources ([http://electroniqueamateur.blogspot.com/2017/02/communication-entre-raspberry-pi-et.html Source (partie Raspberry)] et [http://electroniqueamateur.blogspot.com/2017/02/communication-par-nrf24l01-entre-deux.html Source (partie Arduino)]). Les mémoires ont pu êtres testées a l'aide de la librarie Flash [https://github.com/LowPowerLab/SPIFlash librarie SPIFlash]. Cette librarie fonctionne parfaitement avec la mémoire RAM et cause quelques erreurs avec la Flash mais sans aucune incidence car les tests de lecture et d'écriture sont concluants avec les deux types de mémoires.&lt;br /&gt;
&lt;br /&gt;
La conception d'une entête permettant l'identification de la version, l'authenticité du paquet et du destinataire afin de débuter la réception. Premièrement le code sera implémenté dans la partie programme de l’Arduino afin de faciliter l'Upload. Puis celui ci sera transformé en bootloader après avoir obtenus des tests concluants.&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Réalisation)==&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2019_Testemission.JPG&amp;diff=74006</id>
		<title>Fichier:P57 2019 Testemission.JPG</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2019_Testemission.JPG&amp;diff=74006"/>
				<updated>2019-05-01T17:13:22Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=74005</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=74005"/>
				<updated>2019-05-01T17:12:35Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Travail supplémentaire (Partie Code) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise à jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer à chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mises-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolu. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencer avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permise de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentés'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir à une version antérieure avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus, le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants et d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tutoriels permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même conception. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures. Les fichiers de documentations ont également été réalisés pour cette carte. [[Fichier:P57_2018_CarteV2.PDF]]&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, '''la carte est 100% fonctionnelle''' à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
[[Fichier:P57_2019_Schematique_final2.JPG|500px|thumb|center|Schématique carte shield]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Code)==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
Des premiers tests ont été effectués avec la librairie python [https://github.com/TMRh20/RF24.git librairie]. Celle-ci fonctionne parfaitement avec le capteur utilisée avec le code de base. Les codes sont simples a comprendre et donc le code pour le bootloader pourra commencer a partir de ces premiers codes sources ([http://electroniqueamateur.blogspot.com/2017/02/communication-entre-raspberry-pi-et.html Source (partie Raspberry)] et [http://electroniqueamateur.blogspot.com/2017/02/communication-par-nrf24l01-entre-deux.html Source (partie Arduino)]). Les mémoires ont pu êtres testées a l'aide de la librarie Flash [https://github.com/LowPowerLab/SPIFlash librarie SPIFlash]. Cette librarie fonctionne parfaitement avec la mémoire RAM et cause quelques erreurs avec la Flash mais sans aucune incidence car les tests de lecture et d'écriture sont concluants avec les deux types de mémoires.&lt;br /&gt;
&lt;br /&gt;
La conception d'une entête permettant l'identification de la version, l'authenticité du paquet et du destinataire afin de débuter la réception. Premièrement le code sera implémenté dans la partie programme de l’Arduino afin de faciliter l'Upload. Puis celui ci sera transformé en bootloader après avoir obtenus des tests concluants.&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Réalisation)==&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=74004</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=74004"/>
				<updated>2019-05-01T16:18:55Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Travail supplémentaire (Partie Code) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise à jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer à chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mises-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolu. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencer avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permise de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentés'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir à une version antérieure avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus, le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants et d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tutoriels permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même conception. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures. Les fichiers de documentations ont également été réalisés pour cette carte. [[Fichier:P57_2018_CarteV2.PDF]]&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, '''la carte est 100% fonctionnelle''' à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
[[Fichier:P57_2019_Schematique_final2.JPG|500px|thumb|center|Schématique carte shield]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Code)==&lt;br /&gt;
&lt;br /&gt;
Des premiers tests ont été effectués avec la librairie python [https://github.com/TMRh20/RF24.git librairie]. Celle-ci fonctionne parfaitement avec le capteur utilisée avec le code de base. [photos a venir]&lt;br /&gt;
&lt;br /&gt;
La conception d'une entête permettant l'identification de la version, l'authenticité du paquet et du destinataire afin de débuter la réception. Premièrement le code sera implémenté dans la partie programme de l’Arduino afin de faciliter l'Upload. Puis celui ci sera transformé en bootloader après avoir obtenus des tests concluants.&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Réalisation)==&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=74000</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=74000"/>
				<updated>2019-05-01T15:54:16Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Réalisation du Projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise à jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer à chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mises-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolu. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencer avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permise de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentés'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir à une version antérieure avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus, le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants et d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tutoriels permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même conception. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures. Les fichiers de documentations ont également été réalisés pour cette carte. [[Fichier:P57_2018_CarteV2.PDF]]&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, '''la carte est 100% fonctionnelle''' à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
[[Fichier:P57_2019_Schematique_final2.JPG|500px|thumb|center|Schématique carte shield]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Code)==&lt;br /&gt;
&lt;br /&gt;
==Travail supplémentaire (Partie Réalisation)==&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72848</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72848"/>
				<updated>2019-04-14T16:35:48Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Semaine 3 à 7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise à jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer à chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mises-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolu. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencer avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permise de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentés'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir à une version antérieure avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus, le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants et d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tutoriels permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même conception. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures. Les fichiers de documentations ont également été réalisés pour cette carte. [[Fichier:P57_2018_CarteV2.PDF]]&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, '''la carte est 100% fonctionnelle''' à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
[[Fichier:P57_2019_Schematique_final2.JPG|500px|thumb|center|Schématique carte shield]]&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72839</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72839"/>
				<updated>2019-04-14T16:33:20Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Semaine 3 à 7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise à jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer à chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mises-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolu. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencer avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permise de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentés'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir à une version antérieur avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants afin d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tutoriels permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même conception. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures. Les fichiers de documentations ont également été réalisés pour cette carte. [[Fichier:P57_2018_CarteV2.PDF]]&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, '''la carte est 100% fonctionnelle''' à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
[[Fichier:P57_2019_Schematique_final2.JPG|500px|thumb|center|Schématique carte shield]]&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72838</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72838"/>
				<updated>2019-04-14T16:31:49Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Semaine 3 à 7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise à jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer à chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mises-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolu. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencer avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permise de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentés'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir a une version antérieur avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants afin d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tutoriels permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même conception. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures. Les fichiers de documentations ont également été réalisés pour cette carte. [[Fichier:P57_2018_CarteV2.PDF]]&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, '''la carte est 100% fonctionnelle''' à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
[[Fichier:P57_2019_Schematique_final2.JPG|500px|thumb|center|Schématique carte shield]]&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72837</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72837"/>
				<updated>2019-04-14T16:30:56Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Semaine 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise à jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer à chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mises-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolu. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencer avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permise de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentées'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir a une version antérieur avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants afin d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tutoriels permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même conception. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures. Les fichiers de documentations ont également été réalisés pour cette carte. [[Fichier:P57_2018_CarteV2.PDF]]&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, '''la carte est 100% fonctionnelle''' à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
[[Fichier:P57_2019_Schematique_final2.JPG|500px|thumb|center|Schématique carte shield]]&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72833</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72833"/>
				<updated>2019-04-14T16:28:26Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Semaine 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise à jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer à chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mises-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolu. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencer avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permis de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentées'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir a une version antérieur avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants afin d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tutoriels permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même conception. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures. Les fichiers de documentations ont également été réalisés pour cette carte. [[Fichier:P57_2018_CarteV2.PDF]]&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, '''la carte est 100% fonctionnelle''' à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
[[Fichier:P57_2019_Schematique_final2.JPG|500px|thumb|center|Schématique carte shield]]&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72827</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72827"/>
				<updated>2019-04-14T16:25:40Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Semaine 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise à jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer à chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mises-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolu. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencé avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permis de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentées'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir a une version antérieur avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants afin d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tutoriels permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même conception. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures. Les fichiers de documentations ont également été réalisés pour cette carte. [[Fichier:P57_2018_CarteV2.PDF]]&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, '''la carte est 100% fonctionnelle''' à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
[[Fichier:P57_2019_Schematique_final2.JPG|500px|thumb|center|Schématique carte shield]]&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72822</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72822"/>
				<updated>2019-04-14T16:22:28Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Analyse du second concurrent */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise à jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer à chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mises-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolue. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencé avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permis de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentées'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir a une version antérieur avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants afin d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tutoriels permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même conception. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures. Les fichiers de documentations ont également été réalisés pour cette carte. [[Fichier:P57_2018_CarteV2.PDF]]&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, '''la carte est 100% fonctionnelle''' à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
[[Fichier:P57_2019_Schematique_final2.JPG|500px|thumb|center|Schématique carte shield]]&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72821</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72821"/>
				<updated>2019-04-14T16:20:38Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Positionnement par rapport à l'existant */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise à jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer à chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mise-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolue. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencé avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permis de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentées'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir a une version antérieur avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants afin d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tutoriels permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même conception. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures. Les fichiers de documentations ont également été réalisés pour cette carte. [[Fichier:P57_2018_CarteV2.PDF]]&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, '''la carte est 100% fonctionnelle''' à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
[[Fichier:P57_2019_Schematique_final2.JPG|500px|thumb|center|Schématique carte shield]]&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72819</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72819"/>
				<updated>2019-04-14T16:17:46Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise à jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer a chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mise-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolue. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencé avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permis de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentées'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir a une version antérieur avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants afin d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tutoriels permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même conception. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures. Les fichiers de documentations ont également été réalisés pour cette carte. [[Fichier:P57_2018_CarteV2.PDF]]&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, '''la carte est 100% fonctionnelle''' à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
[[Fichier:P57_2019_Schematique_final2.JPG|500px|thumb|center|Schématique carte shield]]&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2018/2019&amp;diff=72600</id>
		<title>Discussion:Projets IMA4 SC &amp; SA 2018/2019</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Discussion:Projets_IMA4_SC_%26_SA_2018/2019&amp;diff=72600"/>
				<updated>2019-04-08T23:07:18Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Présence */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Répartition des binômes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Projet || Analyse || Matériel || Mi-parcours || Fin de parcours || Wiki terminé || Rapport || Vidéo&lt;br /&gt;
|-&lt;br /&gt;
| P9 [[IMA4 2018/2019 P9|Spider and I]]&lt;br /&gt;
| La description des &amp;quot;concurrents&amp;quot; aurait pu être plus précise. Un effort sur le scénario d'usage qui aurait, lui aussi, pu être développé. Des coquilles. Un vague plan de travail.&lt;br /&gt;
| Rien ou presque, fournisseur non utilisable.&lt;br /&gt;
|&lt;br /&gt;
| N'utilisez pas le mode &amp;quot;code&amp;quot; (espace en première colonne) pour distinguer une ligne. Une progression régulière mais il faudrait résoudre les problèmes soulevés à la semaine 7. Le travail à réaliser est assez simple, un résultat parfait est attendu.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2018/2019 P10|Capteur de niveau d'eau et de pollution]]&lt;br /&gt;
| Des coquilles. Bonne description des concurrents. Un effort pour le scénario, bonne mise en contexte, forcer sur la description de l'usage. Un plan de travail correct.&lt;br /&gt;
| Une liste préliminaire de matériels. Fournisseurs correctement choisis. Rien sur la page principale.&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Coquilles inacceptables dans le Wiki&amp;lt;/font&amp;gt;. &amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Wiki assez vide. Il est à espérer que le projet est plus avancé !&amp;lt;/font&amp;gt;.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P12 [[IMA4 2018/2019 P12|Recyclage plastique imprimante 3D]]&lt;br /&gt;
| Vous êtes sur pour les servo-moteurs ? Ne serait-ce point des moteurs pas à pas ? Très bonne description du produit à réaliser avec illustrations. Bel effort de rédaction, encore pas mal de coquilles surtout en fin de page. Bonne étude des concurrents. Un scénario d'usage un peu rapide qui ne donne pas assez envie d'acquérir le produit. Questions difficiles mal exploitées (une réponse à la première question pourrait aussi être &amp;quot;par l'expérience&amp;quot;, pas de réponse à la seconde question). Une étude solide du projet même si la liste des tâches à effectuer manque.&lt;br /&gt;
| Bonne question sur le budget, mais posez la si vous voulez une réponse :D Liste de matériel encore très embryonnaire : rien sur l'électronique, une discussion avec votre encadrant s'impose pour fixer la partie mécanique.&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Wiki très bien tenu mais corrigez les quelques coquilles. Avancé du travail bien présenté.&amp;lt;/font&amp;gt; Vous devez toujours me présenter la note pour les matériels achetés chez Leroy-Merlin.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P13 [[IMA4 2018/2019 P13|Emetteur / Récepteur analogique en bande 5725-5875 MHz]]&lt;br /&gt;
| Un seul concurrent. Scénario d'usage ne donnant probablement pas la pleine mesure du produit. &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Rien sur la planification&amp;lt;/font&amp;gt;.&lt;br /&gt;
| &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Rien.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Rien. Votre travail n'est pas évaluable. Votre projet est en péril.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2018/2019 P14|Voiture autonome en modèle réduit]]&lt;br /&gt;
| Il me semble que le chassis doit être celui d'un modèle radio-commandé existant. Il me semble que le pilotage manuel n'est pas autorisé. Description un peu rapide des concurrents. Une synthèse du matériel et logiciels employés aurait été intéressant. Pour le scénario d'usage, une description avec la voiture comme sujet aurait être plus intéressant. La réponse à la première question ne va pas dans le sens de l'autonomie. Dire que python est le langage par défaut de la RPi n'a pas de sens. Vous avez tout intérêt à prendre le langage le plus efficace est ce n'est probablement pas python. Pas de servo-moteurs continus sur une voiture radio-commandé. Pas vraiement de plan de travail. &amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Prenez contact avec votre encadrant direct, j'aimerais que vos choix soient validés, certains me paraissent discutables.&amp;lt;/font&amp;gt;&lt;br /&gt;
| Aucune référence précise pour les matériels. Rien sur la page principale.&lt;br /&gt;
|&lt;br /&gt;
| Wiki moyen, peu dense, très peu illustré. Vous partez comme les IMA5 sur une solution de votre cru alors que vous n'avez aucune expérience en réseaux de neurones. Il est à craindre que le résultat final soit décevant.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P22 [[IMA4 2018/2019 P22|Secure And Verified Public Announcements through Blockchain]]&lt;br /&gt;
| &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Excellente rédaction.&amp;lt;/font&amp;gt; Une bonne tentative de description du projet mais toujours un flou sur le travail à réaliser. Cela aurait pu être levé avec une liste précise des tâches à effectuer (une tentative de liste dans les objectifs).&lt;br /&gt;
| Pas de matériel nécessaire (une RPi peut être).&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Un wiki très propre. Travail effectué décrit.&amp;lt;/font&amp;gt;. Il manque juste l'information sur la validation du prototype 0 par l'encadrant direct.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P26 [[IMA4 2018/2019 P26|Discussion pair à pair]]&lt;br /&gt;
| &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Nombre de coquilles inacceptable&amp;lt;/font&amp;gt;. Rajouter dans les objectifs de devoir tenter une ouverture de bouclier pour TCP (TCP Hole Punching). Analyse du premier concurrent : le prétexte pour n'utiliser que des serveurs microsoft pour les supernoeuds skype est le faible nombre de machines d'utilisateurs non handicapées par des parefeux. Bonne réponse aux questions difficile. L'expérience de skype dit qu'il faut totalement éviter qu'un noeud utilisateur ait à relayer les communications d'un autre utilisateur (ce qui est d'ailleurs contraire aux objectifs). Il faut donc une solution de pair à pair pour '''tous''' les clients. En particulier, IPv6 '''doit''' être intégré dans les solutions possibles. Il ne me semble pas que l'enregistrement des utilisateurs soit nécessaire, elle nuit même à la vie privée. Il faut simplement mémoriser les utilisateurs connectés. &lt;br /&gt;
| Pas de matériel listé pourtant il faut mettre en place un banc d'essai.&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Coquilles inacceptables dans le Wiki&amp;lt;/font&amp;gt;. &amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;En fin de projet vous avez seulement mis en place le banc de test sans aucun développement d'un système de perçage de box que ce soit en UDP ou en TCP&amp;lt;/font&amp;gt;.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P28 [[IMA4 2018/2019 P28|Affichage à billes]]&lt;br /&gt;
| Pour les panneaux d'affichage publicitaire, je ne suis pas sur que la consommation puisse être qualifiée d'énorme (il semble que si, à la lecture de votre réponse aux questions difficiles mais cela doit comprendre l'éclairage dont votre produit pourrait avec aussi besoin). &amp;lt;font color='green'&amp;gt;Rédaction très correcte. Un gros effort sur les illustrations. Un scénario d'usage, lui aussi, bien rédigé&amp;lt;/font&amp;gt;. La réponse à la question difficile sur l'énergie consommée par votre produit ne me convainc pas : partez sur la différence d'énergie potentielle pour monter une bille pas sur la force à exercer qu'il faudrait intégrer sur la hauteur de la remontée. Il faut approfondir l'analyse des tâches à effectuer.&lt;br /&gt;
| Il me semble avoir demandé de limiter la complexité du dispositif : 8 moteurs ?? Pas de références précises pour les matériels (lien sur le matériel dans le site du fournisseur).&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Très bon Wiki. Avancé du travail très bien présenté.&amp;lt;/font&amp;gt; On attend avec impatience le résultat des tests sur le prototype &amp;quot;carton&amp;quot;.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2018/2019 P30|Système minimal de gestion de conteneurs]]&lt;br /&gt;
| &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Excellent Wiki à ce jour. Rédaction très claire. Très bonne introduction. Tâches à réalisées clairement listées (mais dans les objectifs). Présentation très correcte du &amp;quot;concurrent principal&amp;quot;. Un scénario d'usage correct (j'aurais plutôt insisté sur la faible consommation du système en ressources que sur l'installation dans un système fortement personnalisé). Un calendrier prévisionnel.&amp;lt;/font&amp;gt; Le second &amp;quot;concurrent&amp;quot; est en fait l'ancienne couche bas niveau de &amp;lt;code&amp;gt;Docker&amp;lt;/code&amp;gt;. Il faudrait utiliser la syntaxe Wiki mais ne touchez à rien avant la séance du 10 décembre cela me fera un exemple parfait pour expliquer cette syntaxe.&lt;br /&gt;
| Pas de matériel nécessaire (une machine virtuelle sera concédée en cours de projet).&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Wiki très complet et très propre. Avancé du travail bien présenté.&amp;lt;/font&amp;gt; Il faut arriver à finaliser les scripts de gestion des conteneurs. &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P31 [[IMA4 2018/2019 P31|Robot hexapode de mesure de RSSI WiFi]]&lt;br /&gt;
| &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Beaucoup trop de coquilles&amp;lt;/font&amp;gt;. Bonne présentation des &amp;quot;concurrents&amp;quot; qui vous servent aussi pour expliquer que votre projet est leur synthèse. Le scénario d'usage se tient. Bonne réponse à la question. Je ne crois pas trop au positionnement par RFID (il faut être sur un tag RFID pour le lire). Etes-vous sur pour l'Arduino méga ? Un Uno avec un bouclier PWM ne serait-il pas plus efficace ?&lt;br /&gt;
| &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Effort de liste de matériel avec des références précises&amp;lt;/font&amp;gt;. Pas de liste sur la page principale.&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;N'utilisez pas le mode &amp;quot;code&amp;quot; de mediawiki (espace en première colonne) pour distinguer des lignes. Utilisez la syntaxe pour les items. Wiki très peu dense. L'avancement du projet semble être suspendu.&amp;lt;/font&amp;gt; Un bel effort pour la partie mécanique (les pattes du robot). Par contre la partie programmation semble très peu avancée.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2018/2019 P32|Robe augmentée]]&lt;br /&gt;
| En français l'abréviation de Monsieur est M. Mr est l'abrévation de Mister donc à n'utiliser qu'en anglosaxonnerie. Attention nous avons une expérience du fil à coudre conducteur et cela ne marche pas très bien sauf sur une surface très réduite. &amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Le scénario d'usage est perturbant : cela semble être un scénario pour deux produits différents&amp;lt;/font&amp;gt;. &amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Vous avez considérablement simplifié le projet (sous-ensemble de projets déjà réalisés), la réalisation devra être impeccable pour que cela puisse être validé comme projet IMA4&amp;lt;/font&amp;gt;.&lt;br /&gt;
| La liste du matériel précise ce que vous souhaitez faire. Que vient faire la platine d'essai dans cette liste ? Pour le prototype ? Vous ne parlez pas du tout de la carte contrôleur. C'est une Lilypad ?&lt;br /&gt;
|&lt;br /&gt;
| Wiki bien illustré mais une rédaction séche. Développez un peu. OK pour les cartes électroniques mais vous devriez présenter une esquisse de la robe telle que vous souhaitez la réaliser.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P33 [[IMA4 2018/2019 P33|Collier à animations lumineuses]]&lt;br /&gt;
| Un français imaginatif avec un nombre de coquilles dans la moyenne. Un scénario d'usage rocambolesque (il doit me manquer quelques références) mais acceptable. Des concurrents pertinents. Réponses aux questions acceptables. Se limiter à trois plaques ne me semble pas pertinent (même si vous pouvez faire un premier test sur trois plaques). Pour l'étude de la communication prévoyez un prototype avec quelques Arduino.&lt;br /&gt;
| Une liste de matériel qui semble être établie à la hâte. Il manque de nombreux composants électroniques pour faire tourner micro-contrôleurs et pilotes de LED. Pas de référence précise pour les composants.&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Rien sur votre travail, il n'est donc pas évaluable. Votre projet est en péril.&amp;lt;/font&amp;gt; Vous devriez avoir fait les tests de communication sur le bus SPI et avoir conçu votre PCB.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P35 [[IMA4 2018/2019 P35|Machine Learning pour navigation autonome de robots mobiles]]&lt;br /&gt;
| Il n'est pas tenu compte des erreurs de français. Dans la partie objectifs, la première sous-partie devrait plutôt s'appeler &amp;quot;partie robotique&amp;quot;, il n'y a rien d'électronique ici. Le travail a effectuer est assez flou. En particulier le Wiki ne contient rien sur les bibliothèques de &amp;quot;machine learning&amp;quot; à utiliser.&lt;br /&gt;
| Le matériel est fourni par les encadrants directs (AIP ?)&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;J'ai peur que votre Wiki rende bien compte du travail effectué jusque là : uniquement des études, rien de concret à part utiliser une manette pour acquérir des jeux de données. C'est très inquiétant en cette période de fin de projet. Votre projet pourrait ne pas être validé.&amp;lt;/font&amp;gt; &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P37 [[IMA4 2018/2019 P37|Station de recharge intelligente pour robot mobile]]&lt;br /&gt;
| Trop de coquilles. &amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Il semble que le sujet initial ne correspond plus à ce qui est demandé, merci de préciser le nouveau sujet, calibrage du robot ?&amp;lt;/font&amp;gt;Comment comptez-vous calibrer un préhenseur avec simplement du code (pas de réponse au niveau de la question difficile) ? &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Un seul concurrrent et sur la partie obsolète du projet&amp;lt;/font&amp;gt;. Une analyse du travail a effectuer qui ne tient pas compte de l'abandon du sujet original.&lt;br /&gt;
| &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Aucune liste de matériel&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| Rien à redire sur votre Wiki. Il me semble bien rendre compte de l'avancé de votre projet. &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Une liste de matériel finalisée en fin de projet : vous prenez de grands risques. Je vous rappelle qu'un prototype fonctionnel est attendu.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P38 [[IMA4 2018/2019 P38|Interface Graphique pour Robotino 2 Upgradé]]&lt;br /&gt;
| Choix des &amp;quot;concurrents&amp;quot; peu pertinents ou il fallait insister sur les différences entre ces robots et le robotino 2 amélioré. Le scénario d'usage se tient. Bonne réponse à la question &amp;quot;difficile&amp;quot;. Il semble que le but du projet se réduise à créer une interface web avec une bibliothèque spécifique. &amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;L'interface devra être irréprochable pour constituer un projet IMA4&amp;lt;/font&amp;gt;.&lt;br /&gt;
| Projet purement informatique, pas de matériel nécessaire (autre qu'un robotino amélioré).&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;N'utilisez pas le mode &amp;quot;code&amp;quot; de mediawiki pour distinguer une ligne. Corrigez les coquilles ! En cette fin de projet vous semblez bien peu avancés sur l'interface Web. Rien sur la démonstration de fonctionnement du robotino que vous devez implanter. Il va falloir diantrement accélérer !&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P40 [[IMA4 2018/2019 P40|RFID/NFC]]&lt;br /&gt;
| L'objectif est clairement explicité et dans un français très correct. Desc concurrents peu pertinents et une analyse trop hâtive des dits concurrents. La réponse sur la question de la difficulté du projet n'est pas convaincante. &amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Votre application de contrôle du robotino par smartphone se devra d'être irréprochable pour constituer un projet IMA4&amp;lt;/font&amp;gt;.&lt;br /&gt;
| Attention, tout votre projet repose sur la validité des lecteur RFID commandés. Si ces lecteurs ne sont pas utilisables votre projet tombe à l'eau. Vous avez étudié la compatibilité des lecteurs avec les robotino ?&lt;br /&gt;
|&lt;br /&gt;
| Vous semblez avoir avancé dans votre projet mais vos dernières entrées dans le Wiki sont trop courtes pour permettre de juger. Etoffez votre Wiki en décrivant mieux cette application (copies d'écrans). Je ne vois aucune trace de la partie de connexion IP automatique via NFC au robotino ?&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P42 [[IMA4 2018/2019 P42|Coupe de robotique des écoles primaires]]&lt;br /&gt;
| &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Beaucoup trop de coquilles&amp;lt;/font&amp;gt;. Objectifs très clairement précisés. Analyse des concurrents et réponse lapidaires. Le fait que vous ne respectiez pas le cahier des charges imposé aux enfants est problématique. &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Une liste précise des tâches a effectuer. Un calendrier prévisionnel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| Bel effort de liste de matériel. Quelques composants chez des fournisseurs non agréés. &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Liste sur la page principale&amp;lt;/font&amp;gt;.&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Wiki plus que correct qui donne bien une idée de la progression.&amp;lt;/font&amp;gt; Tentez d'appeler Robotshop pour savoir ce qu'est devenue la commande. Il faut aussi que vous vous penchiez sur le PCB de commande des LED et servo-moteurs de la piste.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2018/2019 P44|Clônes améliorés des modules ARDUINO]]&lt;br /&gt;
| Restriction du sujet à la conception et réalisation d'une seule carte, ce qui est, ma foi, prudent. Bonne description de &amp;quot;concurrents&amp;quot;. Des coquilles mais sans plus. Ne mettez pas d'espace ou d'accents dans les noms des fichiers téléchargés. Scénario d'usage acceptable. Clairement vous avez déjà pas mal réfléchi à votre carte. &lt;br /&gt;
| Une liste de matériel mais sans lien vers le composant chez un fournisseur agréé.&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Rien. Votre travail n'est pas évaluable. Votre projet est en péril.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P45 [[IMA4 2018/2019 P45|Sac à main ou sac à dos solaire]]&lt;br /&gt;
| &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Wiki très bien illustré, rédaction assez correcte (quelques coquilles)&amp;lt;/font&amp;gt;. Bonne description de concurrents, scénario d'usage convenable. Réponses un peu rapides aux questions &amp;quot;difficiles&amp;quot;&lt;br /&gt;
| Une liste de composants qui parait encore bien préliminaire. Aucun lien sur les composants chez les fournisseurs.&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Vous avez posé quelques réflexions dans votre Wiki. Cependant aucune trace de réalisation. Une liste de matériel exploitable trop tardive.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P46 [[IMA4 2018/2019 P46|Kit Robot]]&lt;br /&gt;
| PLutôt bien rédigé malgré quelques coquilles. Objectifs bien fixés. Concurrents décrits en détail (un peu de synthèse n'aurait pas fait de mal). &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Scénario d'usage très correct&amp;lt;/font&amp;gt;. &lt;br /&gt;
| Un liste de composants bien avancée. &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Des liens vers les fournisseurs. Matériels sur la page principale.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| Le Wiki est correct. Vous semblez avoir terminé la phase de conception même s'il manque les informations sur le PCB. Disons que je serais rassuré quand vous aurez découpé les pièces du chassis et fait réaliser la carte électronique. En une phrase : il est plus que temps d'avoir des résultats tangibles !&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P57 [[IMA4 2018/2019 P57|Mise à jour over the air]]&lt;br /&gt;
| Bon cahier des charges qui répond aux questions que l'on pourrait se poser à la lecture du reste de la page. Quelle différence entre votre solution et Dualoptiboot du coup ? Dualoptiboot ne comprend pas la partie matérielle ? Allez-vous l'utiliser ? Un scénario d'usage bien rapide. La réponse semble à coté de la question, il semble que vous répondez à la question &amp;quot;comment vérifier une somme de contrôle avant de flasher la mémoire programme ?&amp;quot;. Comment allez vous gérer la clef de chiffrement ? Elle est figée dans l'amorceur ? Je crois comprendre en fin de page que vous voulez fixer une clef par capteur, cela casse le principe de la mise à jour par diffusion radio, non ?&lt;br /&gt;
| Une première liste de matériel sans lien vers les sites des fournisseurs agréés.&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;N'utilisez pas le mode &amp;quot;code&amp;quot; de mediawiki pour distinguer une ligne. Cinq semaines pour router une carte ? Au minimum donnez les problèmes rencontrés et les résultats obtenus. Dans l'état de vacuité de votre Wiki, il est légitime de douter de la validation du projet.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P63 [[IMA4 2018/2019 P63|Etude de la consommation d'un capteur de pollution]]&lt;br /&gt;
| &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Une partie analyse tout à fait correcte. La liste des tâches à effectuer est détaillée et claire&amp;lt;/font&amp;gt;.&lt;br /&gt;
| Une liste de matériel avec des liens vers des fournisseurs. Par contre les fournisseurs choisis ne sont pas forcément utilisables.&lt;br /&gt;
|&lt;br /&gt;
| Il y a comme un trou entre la semaine 3 et la semaine 7 ? Un problème de légende et de figure. &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Wiki acceptable.&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Les cartes doivent être vérifiées et réalisées de toute urgence.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P70 [[IMA4 2018/2019 P70|Impact du matériel et du logiciel sur le rayonnement électromagnétique]]&lt;br /&gt;
| &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Rédaction très correcte. Une partie analyse tout à fait correcte. La liste des tâches à effectuer est détaillée et claire.&amp;lt;/font&amp;gt;&lt;br /&gt;
| Une liste de matériels très embryonnaire et sans lien exploitable.&lt;br /&gt;
|&lt;br /&gt;
| Le Wiki n'est pas à jour et ne permet pas de se faire une idée du travail des deux dernières semaines. Rien à redire sur le travail antérieur.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P72 [[IMA4 2018/2019 P72|Mesure du courant simple]]&lt;br /&gt;
| &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Rédaction correcte. Wiki bien illustré. Une partie analyse correcte.&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Une liste de matériel bien avancée avec des liens exploitables.&amp;lt;/font&amp;gt; Recopiez les liens sur la page principale.&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Wiki très correct. Bien illustré. Il manque le schematic de la carte, vous l'avez réalisé n'est-ce pas ?&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Vous devriez déjà avoir routé et réalisé votre carte.&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| P73 [[IMA4 2018/2019 P73|Ecriture automatique de partition musicale]]&lt;br /&gt;
| &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Rédaction très correcte. Une partie analyse tout à fait correcte. La liste des tâches à effectuer est détaillée et claire. Un calendrier prévisionnel.&amp;lt;/font&amp;gt;&lt;br /&gt;
| Une tentative de liste de matériel qui ne pourra effectivement être finalisé qu'après discussions avec un électronicien.&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Wiki très correct. Bien illustré.&amp;lt;/font&amp;gt; Par contre vous semblez marquer le pas sur ces deux dernières semaines alors qu'il s'agirait, au contraire, de mettre un coup d'accélerateur. &amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Routez cette carte, il est plus que temps !&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Présence ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves !! 10/12/2018 !! 16/01/2019 !! 23/01/2019 !! 30/01/2019 !! 06/02/2019 !! 13/02/2019 !! 27/02/2019 !! 06/03/2019 !! 13/03/2019 !! 20/03/2019 !! 27/03/2019 !! 03/04/2019&lt;br /&gt;
|-&lt;br /&gt;
| P9 [[IMA4 2018/2019 P9|Spider and I]]&lt;br /&gt;
| Nestor Martinez / Lina Mejbar&lt;br /&gt;
| OK&lt;br /&gt;
| E305&lt;br /&gt;
| E305&lt;br /&gt;
| E305&lt;br /&gt;
| E304&lt;br /&gt;
| A208&lt;br /&gt;
| E304&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA4 2018/2019 P10|Capteur de niveau d'eau et de pollution]]&lt;br /&gt;
| Antoine Branquart&lt;br /&gt;
| Absent (certificat médical)&lt;br /&gt;
| E305&lt;br /&gt;
| E305&lt;br /&gt;
| E301&lt;br /&gt;
| Absent (certificat médical)&lt;br /&gt;
| E301&lt;br /&gt;
| E303&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Excusé (malade)&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|C201&lt;br /&gt;
|-&lt;br /&gt;
| P12 [[IMA4 2018/2019 P12|Recyclage plastique imprimante 3D]]&lt;br /&gt;
| Corentin Danjou / Pol Mulon&lt;br /&gt;
| OK&lt;br /&gt;
| E305&lt;br /&gt;
| E305&lt;br /&gt;
| E301&lt;br /&gt;
| E304/E301&lt;br /&gt;
| E301&lt;br /&gt;
| E303&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&lt;br /&gt;
| E303&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304 / C201&lt;br /&gt;
| Fabricarium / C201&lt;br /&gt;
| Fabricarium&lt;br /&gt;
|-&lt;br /&gt;
| P13 [[IMA4 2018/2019 P13|Emetteur / Récepteur analogique en bande 5725-5875 MHz]]&lt;br /&gt;
| Arthur Reviron&lt;br /&gt;
| Absent&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| C201&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA4 2018/2019 P14|Voiture autonome en modèle réduit]]&lt;br /&gt;
| Hugo Dejaegher / Brandon Elemva&lt;br /&gt;
| OK&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306 + Fabricarium&lt;br /&gt;
| E306&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P22 [[IMA4 2018/2019 P22|Secure And Verified Public Announcements through Blockchain]]&lt;br /&gt;
| Arezki Ait Mouheb&lt;br /&gt;
| OK&lt;br /&gt;
| E306&lt;br /&gt;
| E305&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
|-&lt;br /&gt;
| P26 [[IMA4 2018/2019 P26|Discussion pair à pair]]&lt;br /&gt;
| Fabien Di Natale / Ibrahim Ben Dhiab&lt;br /&gt;
| OK&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
|-&lt;br /&gt;
| P28 [[IMA4 2018/2019 P28|Affichage à billes]]&lt;br /&gt;
| Flora Dziedzic / Martin Michel &lt;br /&gt;
| OK&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| E305&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| A311&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| Fabricarium&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| Fabricarium&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| Fabricarium&lt;br /&gt;
|-&lt;br /&gt;
| P30 [[IMA4 2018/2019 P30|Système minimal de gestion de conteneurs]]&lt;br /&gt;
| Hind Malti&lt;br /&gt;
| OK&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E303&lt;br /&gt;
|E306&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présente&amp;lt;/font&amp;gt;&lt;br /&gt;
|E306&lt;br /&gt;
|E306&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
|E306&lt;br /&gt;
|E306&lt;br /&gt;
|E306&lt;br /&gt;
|-&lt;br /&gt;
| P31 [[IMA4 2018/2019 P31|Robot hexapode de mesure de RSSI WiFi]]&lt;br /&gt;
| Rémi Foucault / Hugo Velly&lt;br /&gt;
| OK&lt;br /&gt;
|E304&lt;br /&gt;
|E304&lt;br /&gt;
|E304 / Fabricarium&lt;br /&gt;
|E304 / Fabricarium&lt;br /&gt;
|E304&lt;br /&gt;
|E303&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
|E303&lt;br /&gt;
|E303&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
|E303/C202-bis&lt;br /&gt;
|E304&lt;br /&gt;
|C201&lt;br /&gt;
|-&lt;br /&gt;
| P32 [[IMA4 2018/2019 P32|Robe augmentée]]&lt;br /&gt;
| Brinda Muzakare / Yan Xuelu&lt;br /&gt;
| OK&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présentes&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
|-&lt;br /&gt;
| P33 [[IMA4 2018/2019 P33|Collier à animations lumineuses]]&lt;br /&gt;
| Loris Ahouassou&lt;br /&gt;
| OK&lt;br /&gt;
| E306&lt;br /&gt;
| E305&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| C201&lt;br /&gt;
| E304&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&lt;br /&gt;
| &lt;br /&gt;
&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&lt;br /&gt;
|-&lt;br /&gt;
| P35 [[IMA4 2018/2019 P35|Machine Learning pour navigation autonome de robots mobiles]]&lt;br /&gt;
| Wenjing Chen / Puyuan Lin&lt;br /&gt;
| OK&lt;br /&gt;
| E304&lt;br /&gt;
| E305&lt;br /&gt;
| C304&lt;br /&gt;
| C102&lt;br /&gt;
| C304&lt;br /&gt;
| C304&lt;br /&gt;
&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Absents&amp;lt;/font&amp;gt;&lt;br /&gt;
| C002&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| C002&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P37 [[IMA4 2018/2019 P37|Station de recharge intelligente pour robot mobile]]&lt;br /&gt;
| Guillaume Declerck / Pierre Guigo&lt;br /&gt;
| OK&lt;br /&gt;
| E305&lt;br /&gt;
| E305&lt;br /&gt;
| E301&lt;br /&gt;
| E303&lt;br /&gt;
| E301&lt;br /&gt;
| E303&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Pierre Guigo présent&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Guillaume Declerck absent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303 &amp;amp; C201&lt;br /&gt;
| C201 &amp;amp; E303&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|C203&lt;br /&gt;
|-&lt;br /&gt;
| P38 [[IMA4 2018/2019 P38|Interface Graphique pour Robotino 2 Upgradé]]&lt;br /&gt;
| François Brassart / Jérôme Haon&lt;br /&gt;
| OK&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E303&lt;br /&gt;
| E304&lt;br /&gt;
| E305&lt;br /&gt;
| E304&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
|C304&lt;br /&gt;
|C304&lt;br /&gt;
|C304&lt;br /&gt;
|-&lt;br /&gt;
| P40 [[IMA4 2018/2019 P40|RFID/NFC]]&lt;br /&gt;
| Jean De Dieu Nduwamungu / Xinwei Hu&lt;br /&gt;
| OK&lt;br /&gt;
| E305&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
|-&lt;br /&gt;
| P42 [[IMA4 2018/2019 P42|Coupe de robotique des écoles primaires]]&lt;br /&gt;
| Pierre Frison / Thibault Lepoivre&lt;br /&gt;
| OK&lt;br /&gt;
| E305&lt;br /&gt;
| E305&lt;br /&gt;
| E304&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| E301(fab fermé)&lt;br /&gt;
| Fabricarium&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| Fab et C201&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| E303 (Lepoivre) / frison absent(malade)&lt;br /&gt;
|-&lt;br /&gt;
| P44 [[IMA4 2018/2019 P44|Clônes améliorés des modules ARDUINO]]&lt;br /&gt;
| Théau Moinat&lt;br /&gt;
| OK&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
|&lt;br /&gt;
| C201&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| P45 [[IMA4 2018/2019 P45|Sac à main ou sac à dos solaire]]&lt;br /&gt;
| Mathis Dupré&lt;br /&gt;
| OK&lt;br /&gt;
| E305&lt;br /&gt;
| E305&lt;br /&gt;
| E301&lt;br /&gt;
| E304&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E306&lt;br /&gt;
| E306&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&lt;br /&gt;
|-&lt;br /&gt;
| P46 [[IMA4 2018/2019 P46|Kit Robot]]&lt;br /&gt;
| Valentin Pitre / Gaëlle Bernard&lt;br /&gt;
| OK&lt;br /&gt;
| E304&lt;br /&gt;
| E305&lt;br /&gt;
| E303&lt;br /&gt;
| E304&lt;br /&gt;
| A208&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&lt;br /&gt;
| C202&lt;br /&gt;
| C202/E306&lt;br /&gt;
|-&lt;br /&gt;
| P57 [[IMA4 2018/2019 P57|Mise à jour over the air]]&lt;br /&gt;
| Florent Leroy&lt;br /&gt;
| OK&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201 &amp;amp; E304 &lt;br /&gt;
| C201 &amp;amp; E304 &lt;br /&gt;
| E304 &lt;br /&gt;
|-&lt;br /&gt;
| P63 [[IMA4 2018/2019 P63|Etude de la consommation d'un capteur de pollution]]&lt;br /&gt;
| Victor Lorthios / Juliette Obled&lt;br /&gt;
| OK&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201+E303&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&lt;br /&gt;
| C201&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
|-&lt;br /&gt;
| P70 [[IMA4 2018/2019 P70|Impact du matériel et du logiciel sur le rayonnement électromagnétique]]&lt;br /&gt;
| Antoine Moreau / Souheib Khinache&lt;br /&gt;
| OK&lt;br /&gt;
| E305&lt;br /&gt;
| E305&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
| E304&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| E304&lt;br /&gt;
| Fabricarium&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| Fabricarium&lt;br /&gt;
| Fabricarium&lt;br /&gt;
|-&lt;br /&gt;
| P72 [[IMA4 2018/2019 P72|Mesure du courant simple]]&lt;br /&gt;
| Raphaël Martin&lt;br /&gt;
| OK&lt;br /&gt;
| E305&lt;br /&gt;
| E305&lt;br /&gt;
| E301&lt;br /&gt;
| E303&lt;br /&gt;
| E303&lt;br /&gt;
| E303&lt;br /&gt;
| E303&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&lt;br /&gt;
| E303&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présent&amp;lt;/font&amp;gt;&lt;br /&gt;
| E303&lt;br /&gt;
| Fabricarium&lt;br /&gt;
|-&lt;br /&gt;
| P73 [[IMA4 2018/2019 P73|Ecriture automatique de partition musicale]]&lt;br /&gt;
| Hugo Leurent / Fabien Ronckier&lt;br /&gt;
| OK&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Présents&amp;lt;/font&amp;gt;&lt;br /&gt;
| C201&lt;br /&gt;
| C201&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72599</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72599"/>
				<updated>2019-04-08T23:04:20Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Semaine 11 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise-à-jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer a chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mise-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolue. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencé avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permis de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentées'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir a une version antérieur avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants afin d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tutoriels permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même conception. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures. Les fichiers de documentations ont également été réalisés pour cette carte. [[Fichier:P57_2018_CarteV2.PDF]]&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, '''la carte est 100% fonctionnelle''' à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
[[Fichier:P57_2019_Schematique_final2.JPG|500px|thumb|center|Schématique carte shield]]&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72598</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72598"/>
				<updated>2019-04-08T22:58:01Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Semaine 11 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise-à-jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer a chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mise-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolue. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencé avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permis de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentées'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir a une version antérieur avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants afin d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tutoriels permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même infrastructure réseau. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures. Les fichiers de documentations ont également été réalisés pour cette carte. [[Fichier:P57_2018_CarteV2.PDF]]&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, '''la carte est 100% fonctionnelle''' à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
[[Fichier:P57_2019_Schematique_final2.JPG|500px|thumb|center|Schématique carte shield]]&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2019_Schematique_final2.JPG&amp;diff=72597</id>
		<title>Fichier:P57 2019 Schematique final2.JPG</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2019_Schematique_final2.JPG&amp;diff=72597"/>
				<updated>2019-04-08T22:56:37Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72596</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72596"/>
				<updated>2019-04-08T22:49:43Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Semaine 11 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise-à-jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer a chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mise-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolue. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencé avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permis de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentées'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir a une version antérieur avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants afin d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tutoriels permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même infrastructure réseau. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures. Les fichiers de documentations ont également été réalisés pour cette carte. [[Fichier:P57_2018_CarteV2.PDF]]&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, '''la carte est 100% fonctionnelle''' à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2018_CarteV2.PDF&amp;diff=72595</id>
		<title>Fichier:P57 2018 CarteV2.PDF</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2018_CarteV2.PDF&amp;diff=72595"/>
				<updated>2019-04-08T22:48:18Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72594</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72594"/>
				<updated>2019-04-08T22:45:50Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Semaine 8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise-à-jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer a chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mise-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolue. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencé avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permis de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentées'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir a une version antérieur avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants afin d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tutoriels permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même infrastructure réseau. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures.&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, la carte est 100% fonctionnelle à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72593</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72593"/>
				<updated>2019-04-08T22:45:28Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise-à-jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer a chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mise-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 15&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolue. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencé avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permis de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentées'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir a une version antérieur avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants afin d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tuto permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même infrastructure réseau. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures.&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, la carte est 100% fonctionnelle à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72592</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72592"/>
				<updated>2019-04-08T22:45:05Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Feuille d'heures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise-à-jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer a chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mise-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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 !! Heures S11 !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 13&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolue. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencé avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permis de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentées'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir a une version antérieur avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants afin d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tuto permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même infrastructure réseau. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures.&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, la carte est 100% fonctionnelle à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72591</id>
		<title>IMA4 2018/2019 P57</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA4_2018/2019_P57&amp;diff=72591"/>
				<updated>2019-04-08T22:44:05Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : /* Semaine 11 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
[[Fichier:P57-2018-prez.jpg|center]] &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
    Les capteurs sont omniprésents dans le domaine de l'entreprise. Une usine peut disposer de plusieurs centaines de capteurs répartis dans toute sa structure. Ces capteurs ont des rôles différents comme la mesure de la température, la présence d'une pièce où encore la mesure métrique d'un élément. &amp;lt;br&amp;gt;&lt;br /&gt;
   Chacun de ces capteurs peut être amené a être mis à jour afin de modifier un temps de réponse ou changer la couleur de détection d'un capteur optique etc...&amp;lt;br&amp;gt;&lt;br /&gt;
   Ces mise-à-jours peuvent être fastidieuses à implémenter car nécessite l'intervention physique d'un opérateur et la mise à jour se fait pour chaque capteur individuellement.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L'objectif de ce projet est de proposer un système permettant de reprogrammer un capteur de manière OTA (Over The Air) sans aucune intervention physique.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Le système devra être : &lt;br /&gt;
# '''Sécurisé''' : la mise à jour devra être vérifié (provenance, checksum) avant l'implémentation.&lt;br /&gt;
# '''Économe en énergie''' : l'impact énergétique sera pris en compte dans le choix des technologies.&lt;br /&gt;
# '''(Bonus)''' Le système sera générique afin de pouvoir mettre a jour un groupe de capteur automatiquement&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
Un système semble déjà exister pour les composants ATmega328P(arduino) [https://www.mysensors.org/about/fota] &amp;lt;br&amp;gt;&lt;br /&gt;
Le but de ce projet sera de créer un module indépendant qui devra respecter certains critères afin de pouvoir être polyvalent et s'appliquer a chaque capteur. Ce module sera ajouté à chaque capteur lors de sa fabrication. Une étude du coup supplémentaire sera alors effectuée.&lt;br /&gt;
# '''Polyvalence''' : le module pourra s'implémenter à chaque capteur facilement sans ajouter un code particulier.&lt;br /&gt;
# '''Sécurisé''' : chaque mise à jour sera contrôlée avant l'implémentation du programme. (calcul du MD5 Checksum + Clée de décryptage)&lt;br /&gt;
# '''Économe en énergie''' : ce module devra utiliser le moins possible de courant. Les composants seront donc choisis pour leurs consommation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' : &lt;br /&gt;
# Hautement sécurisé : chaque mise à jour sera vérifiée à l'aide d'une clé de cryptage et d'un checksum.&lt;br /&gt;
# Peut théoriquement s'adapter à tout type de capteur.&lt;br /&gt;
# Temps de mise hors service très court. (Par rapport à une maintenance physique)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Coûts de fabrication plus important&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
'''MYSBootloader by Tekka  (Mysensors Team)'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système fonctionne en tant que bootloader uniquement sur les microcontrôleurs ATmega328P. Lors du boot du microcontroleur ou reset, il applique la mise à jour du code qu'il a reçu. Lors de la réception de la mise à jour le capteur doit être offline.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce système ne nécessite pas de mémoire externe.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantage''' : &lt;br /&gt;
# Si le firmware est défectueux, il est possible de réimplémenter &amp;lt;br&amp;gt;&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Le capteur doit être en mode '''hors-ligne''' afin de pouvoir se mettre à jour (il doit rebooter)&lt;br /&gt;
# le bootloader dépend énormément du module radio (un bootloader différent pour chaque module radio)&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
'''Dualoptiboot''' by Lowpowerlab &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Cette solution est une solution codée dans le firmware à implémenter. Elle nécessite une mémoire externe afin de stocker le firmware reçu avant de le téléverser dans la mémoire interne du microcontrôleur. En incluant la librairie Dualoptiboot, un programme scrutant les mise-à-jour est continuellement exécuté.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Avantages''' :&lt;br /&gt;
# Ne dépend pas du module radio.&lt;br /&gt;
# Peut être mis à jour en fonctionnement&lt;br /&gt;
&lt;br /&gt;
'''Inconvénients''' : &lt;br /&gt;
# Un firmware défectueux ne peut plus être mis-à-jour OTA&lt;br /&gt;
# Nécessite une mémoire externe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport a la concurrence==&lt;br /&gt;
Les concurrents utilisent le système radio comme communication entre un serveur et plusieurs capteurs. Cette communication s'effectue dans les deux sens et permet de réaliser un diagnostic et envoyer les mises a jour en clair via les ondes radios. Cependant ces mises à jour ne sont pas cryptés. De plus n'importe quel ordinateur sur le réseau pourrait envoyer les mises à jour sans qu'il y ai de vérification de sécurité.&lt;br /&gt;
&amp;lt;br&amp;gt; Pour faire simple, la solution proposée par les concurrents est surtout utilisé pour effectuer de la domotique ou d'autres taches au domicile. Cependant, la sécurité est quand a elle insuffisante pour l'implantation dans l'entreprise.&amp;lt;br&amp;gt;&lt;br /&gt;
Une clée de cryptage sera attribuée à chaque entreprise.&lt;br /&gt;
Le système proposé sera '''différent''' de :&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''MYSBootloader''' par : &lt;br /&gt;
# Le bootloader contiendra toutes les fonctions permettant de décoder les trames reçues.&lt;br /&gt;
# Il exécutera en plus du code du capteur, un processus de scrutation du signal radio et lors de la réception d'une mise-à-jour, stockera et traitera les informations. Au lieu d'écrire directement. (Par l'implémentation d'un ordonnanceur)&lt;br /&gt;
# La mise à jour pourra être reçue en fonctionnement '''sans avoir a rebooter'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Dualoptiboot''' par :&lt;br /&gt;
# Mis-a-part le checksum, aucune vérification de sécurité n'est réalisée.&lt;br /&gt;
# L'algorithme de sécurité contenant la clé de décryptage ne peut pas être contenue dans une librairie transmise au client. (Un usager mal intentionné pourrait exploiter ces données pour pouvoir diffuser de fausses mise-à-jour)&lt;br /&gt;
# L'utilisateur n'aura pas a recompiler à chaque fois la partie gestion du module radio.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Cependant ces différences apportent leurs lots de contraintes : &lt;br /&gt;
# Une place utilisée sur la mémoire interne de l'Atmega plus importante.&lt;br /&gt;
# Un temps de traitement plus long lors de la vérification des mises à jour&lt;br /&gt;
# La nécessité d'avoir une mémoire interne afin de réaliser le traitement&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
[[File:8d054c8b70dfa86ff542fae6930b530d.jpg|left|100px|légende]]&lt;br /&gt;
'''Scénario''' : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le chef d'entreprise doit mettre à jour ses capteurs afin de pouvoir gagner en productivité (envoi de donnée plus rapide). Un technicien doit démonter et reprogrammer un a un plusieurs centaines de capteurs alors que son chef lui demande d'aller plus vite car la chaine de production est interrompue. Quand SensorOTA propose de mettre a jour en quelques secondes tous les capteurs à l'aide d'une antenne et de la communication broadcast avec presque aucune coupure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
'''Comment faire pour que l’ATMEGA puisse se reprogrammer toute seule ?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Pour pouvoir écrire dans l'EEPROM (la mémoire interne de l'ATMEGA), il faut posséder une autre mémoire (vive ou morte).&lt;br /&gt;
Le choix s’oriente vers une EEPROM pour plusieurs raisons : &lt;br /&gt;
# La consommation énergétique presque nulle en dehors des lectures et écritures.&lt;br /&gt;
# La mémoire conserve la mise à jour même si elle est déconnecté du réseau (mémoire morte).&lt;br /&gt;
Cependant, d'autres facteurs peuvent être contestés :&lt;br /&gt;
# Le coût est légèrement supérieur a un autre type de mémoire (mémoire vive)&lt;br /&gt;
# Durée de vie plus courte (10 000 écritures)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
L'Atmega peut réécrire son programme interne grâce au bootloader. Le bootloader est une portion de code qui s'exécute avant le programme principal. Actuellement, le bootloader optimise la vitesse d'exécution du code. &amp;lt;br/&amp;gt;&lt;br /&gt;
Des bootloader alternatifs existent, c'est le cas notament de celui de Dave Berkeley '''site WEB'''[[https://www.rotwang.co.uk/projects/bootloader.html]] '''Github''' : [[https://github.com/DaveBerkeley/arduino/tree/master/boot/optiboot]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Toutefois, celui-ci ne s'occupe pas de la sécurité nécessaire a une mise en production ainsi que l'identification d'un capteur spécifique.&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges==&lt;br /&gt;
Le projet choisi doit permettre une implémentation en usine ainsi qu'une commercialisation possible. Pour cela de nombreux aspects doivent êtres analysés. &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
# Le système devra avoir une portée suffisante (environs 50m)&lt;br /&gt;
# L'ATMEGA ne sera reprogrammé qu'après avoir acquis la certitude que la mise à jour est authentique (Algorithme par cryptographie symétrique + Checksum)&lt;br /&gt;
# La transmission de mise-à-jour devra être cryptée afin d'éviter qu'une écoute réseau révèle le contenu de celle-ci. (Données cryptées envoyées sur le réseau)&lt;br /&gt;
# La consommation du capteur ne devra pas augmenter de plus de '''10%''' de la consommation habituelle&lt;br /&gt;
# Les performances du capteur ne devront pas être impactées en dehors des mises à jour.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De plus d'un point de vue architecture :&lt;br /&gt;
&amp;lt;br/&amp;gt; &lt;br /&gt;
# Le système utilisera des composants répandus sur le marché afin de pouvoir être réparé a moindre frais&lt;br /&gt;
# Le système n'utilisera pas de CMS afin de pouvoir être entretenu par l'utilisateur. (Et aussi afin de pouvoir réduire les couts de fabrication)&lt;br /&gt;
# Un autre moyen de reprogrammation devra être implémenté afin de pouvoir mettre a jour manuellement (en cas de panne).&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie capteur)&lt;br /&gt;
# ATMEGA328P-Au x1 [https://www.microchip.com/wwwproducts/en/ATmega328p]&lt;br /&gt;
# USB-TTL Arduino Programmer&lt;br /&gt;
# Flash 128kB [https://www.mouser.fr/ProductDetail/Winbond/W25X10CLSNIG?qs=sGAEpiMZZMve4%2fbfQkoj%252bOhLEICX0StD3ede4x7EGwE%3d]&lt;br /&gt;
# SRAM 128kB [https://www.mouser.com/ProductDetail/ISSI/IS62WVS1288FBLL-20NLI?qs=sGAEpiMZZMt9mBA6nIyysO%252bUVEHy8kHdw1Lt0j8%2flOw%3d]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# BreadBoard&lt;br /&gt;
# 16Mhz oscillator [https://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?gclid=Cj0KCQiA-JXiBRCpARIsAGqF8wUEu0Ne-RC-vjXZ_b2i6tajmkh-N3i4CzSyy-ehYtkqTLWsK0wsu7waAu6-EALw_wcB&amp;amp;gross_price=true&amp;amp;mckv=kpBqurSg_dc|pcrid|80993958782|&amp;amp;CAWELAID=120185620000131014&amp;amp;CAGPSPN=pla&amp;amp;CAAGID=13038031862&amp;amp;CMP=KNC-GFR-GEN-SHOPPING-9713808&amp;amp;CATCI=pla-73752353462]&lt;br /&gt;
# Capacitors&lt;br /&gt;
# 3v3 regulator [https://www.mouser.fr/ProductDetail/Texas-Instruments/LM1117MP-33-NOPB?qs=X1J7HmVL2ZFn4x9DZ4T2hA%3D%3D]&lt;br /&gt;
# Led x1&lt;br /&gt;
# Resistance x1&lt;br /&gt;
&lt;br /&gt;
'''Matériel nécessaire :''' (pour la partie émetteur)&lt;br /&gt;
# Raspberry Pi [[https://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/1720555/]]&lt;br /&gt;
# NRF24L01 [https://www.robotshop.com/en/24g-transceiver-nrf24l01p-module.html]&lt;br /&gt;
# 1 ecran lcd Raspberry pi [https://fr.rs-online.com/web/p/kits-de-developpement-pour-afficheurs-graphiques/8997466/]&lt;br /&gt;
&lt;br /&gt;
''' Choix Logiciel :'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Je choisis de m'inspirer du programme concurrent MYSBootloader qui sera modifié afin de permettre la mise à jour pendant le fonctionnement. '''FreeRTOS''' pourra être utilisé dans ce projet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
L'architecture de la mémoire sera semblable a celle trouvée sur les Arduino.&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
Taches à effectuer (dans l'ordre)&lt;br /&gt;
# Conception du capteur&lt;br /&gt;
# Mise en place de la Raspberry&lt;br /&gt;
# Mise en service de la Raspberry&lt;br /&gt;
# Création du programme de communication de la Raspberry&lt;br /&gt;
# Modification du bootloader afin d'écrire sur le programme principal&lt;br /&gt;
&lt;br /&gt;
BONUS :&lt;br /&gt;
# Mise en place du protocole de sécurité&lt;br /&gt;
# Attribution de clés uniques via la Raspberry Pi (communication via le port série)&lt;br /&gt;
# Programme pour que la Raspberry puisse flasher le bootloader et attribuer la clé de sécurité&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
==Feuille d'heures==&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;
| Analyse du projet &lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| 8&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Prologue==&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
&lt;br /&gt;
Définition des fonctionnalités de la carte, première phase de conception, choix des composants selon les besoins du projet.&lt;br /&gt;
Choix d'une technologie de mémorisation SRAM au lieu d'une technologie EEPROM (pour sa durée de vie, sa consommation électrique, son prix). La persistance des données n'étant pas un absolue. J'ai pris la décision de penser le programme différemment.&lt;br /&gt;
Lors de la réception d'une mise à jour, le micro-contrôleur la stockera dans la mémoire SRAM et effectuera les vérifications de celle-ci. Une fois la mise à jour vérifiée, le micro-contrôleur transférera les données directement dans la mémoire de programme.&lt;br /&gt;
&lt;br /&gt;
Concernant le module radio, un emplacement sera disponible (header) afin de pouvoir attacher le circuit directement sur la carte. Cela permet d'utiliser le modèle déjà existant et également pouvoir le changer pour de la maintenance.&lt;br /&gt;
&lt;br /&gt;
Le schématique a été commencé et la recherche des différentes empreintes a commencé avec parfois, la requête à un service de création d'empreinte.&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_schematics_V1.PNG|200px|thumb|left|Schématique]][[Fichier:328P_memory_plans.PNG|200px|thumb|right|Mémoire ATMEGA]]&lt;br /&gt;
Cette semaine, une semaine où la conception du circuit récepteur devient primordiale. Mise en place d'un schématique lisible qui permet de répondre aux besoins. &lt;br /&gt;
&lt;br /&gt;
Une concertation avec les encadrants m'a permis de définir plusieurs choses. '''Premièrement''', qu'il fallait mettre les deux types de mémoire afin de pouvoir les comparer d'un point de vue énergétique, pratique etc. Une mémoire flash sera donc ajoutée au schématique afin de permettre la commutation entre les deux mémoires.&lt;br /&gt;
&lt;br /&gt;
La '''deuxième''' chose est que le programme OTABoot pourra se situer dans '''deux espaces''' :&lt;br /&gt;
# A la fin de la mémoire de programme en prenant garde que le programme à mettre dans l'espace mémoire de programme ne réécris pas cette partie.&lt;br /&gt;
# Dans la partie Bootloader (qui est extensible jusqu'à 4ko) ce qui évitera que celui ci soit supprimé par une manipulation utilisateur.&lt;br /&gt;
&lt;br /&gt;
La fonction OTABoot devra pouvoir stocker temporairement dans la mémoire (RAM ou Flash) les données reçu jusqu'à la fin de la réception et vérifier la conformité des données reçu avant de flasher l'espace mémoire.&lt;br /&gt;
&lt;br /&gt;
==Semaine 3 à 7==&lt;br /&gt;
'''Conception du circuit électronique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schematique_final_P57_2019.JPG|200px|thumb|left|Schématique final]]&lt;br /&gt;
Changement de conception, dorénavant '''2 types de mémoires seront implémentées'''. Une mémoire RAM et une mémoire FLASH. L'une étant volatile et l'autre non volatile. Cependant, la vitesse de lecture et d'écriture de la RAM est bien plus rapide que celle de la flash. Des tests seront donc effectués afin de déterminer laquelle est la plus efficace dans le cas étudié.&lt;br /&gt;
De plus, il existe la possibilité de stocker une sauvegarde du programme d'usine dans la mémoire FLASH en cas d'erreur de mise à jour, il reste la possibilité de revenir a une version antérieur avec ce type de mémoire. &lt;br /&gt;
&lt;br /&gt;
De nombreuses semaines se sont écoulées car il a fallu chercher des footprints et parfois demander la réalisation de nouveaux footprints. De plus le routage était plus fastidieux que prévu. Il a fallu changer les connexions entre chaque composant afin de pouvoir connecter les composants afin d’éviter de faire des vias qui devront être créés à la main. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Le routage s'est effectué de la manière suivante : &lt;br /&gt;
# Éviter de faire des croisements entre les fils symbolisant les routages à effectuer.&lt;br /&gt;
# Placer les composants sur la carte en fonction de leurs utilisation (stockage, alimentation, communication FTDI, communication ISP et communication avec le module radio).&lt;br /&gt;
# Il faudra ensuite effectuer les changements nécessaire afin d'éviter de faire des vias.&lt;br /&gt;
# Placer les capacités de découplages le plus proche possible des éléments qu'elles doivent filtrer.&lt;br /&gt;
&lt;br /&gt;
Au départ, une erreur a été commise. Celle de vouloir utiliser l'outil d'autoroute qui me donnait des résultats possibles mais pas du tout efficaces. &lt;br /&gt;
&lt;br /&gt;
A cause de l'impossibilité de faire des trous métallisés, il a fallu penser à effectuer toutes les connexions à l'opposé des headers présents sur la carte. Il a fallu faire passer toutes les connexions sur la bottom layer ce qui a augmenté le nombre de via. &lt;br /&gt;
&lt;br /&gt;
De plus après avoir suivi ces règles, j'ai demandé conseils à M. Thierry Flamen afin d'avoir une expertise sur ma carte. De nombreux conseils m'ont été fortement utile afin de maximiser les chances de fonctionnement de mon prototypage. Notamment :&lt;br /&gt;
# Avoir une clearance plus importante (espacement entre les lignes) afin de facilité l'impression.&lt;br /&gt;
# Choisir des lignes parallèles. &lt;br /&gt;
# Placer plusieurs vias tout au long de la carte afin d'éviter les différences de potentiels entre les 2 plans de masses (en top layer et bottom layer).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le routage terminé une semaine fut nécessaire (S7) afin de corriger les erreurs et améliorer le routage. Certaines pistes étaient perpendiculaires, d'autres n'étaient pas parallèles, les règles de clearance modifiées empêchait une réalisation efficace, il a donc fallu modifier cela et reprendre une grande partie du routage.&lt;br /&gt;
&lt;br /&gt;
La conception étant maintenant terminée, j'ai préparé une documentation permettant de visionner le travail réalisé rapidement. Ce document m'aidera aussi grandement lors de la soudure des composants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Apercucarteglobale.JPG|500px|thumb|center|Carte Finale]]&lt;br /&gt;
&lt;br /&gt;
==Semaine 8==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2019_P57_Avantsoudure.jpg|200px|thumb|left|PBC + pâte à braser]] [[Fichier:P57_2019_Raspbian.jpg|300px|thumb|right|Raspberry + touchscreen avec debian]]&lt;br /&gt;
Cette semaine est consacrée a l'impression de la carte et une première vérification que tout est bien fonctionnel. La qualité d'impression est impressionnante, un seul coup de cutter était nécessaire afin de séparer 2 pistes. Après cela, j'ai souhaité placer les composants CMS avant la fin de cette séance. A l'aide de pâte à braser j'ai placer les composants les plus petits sur la carte, cette étape fastidieuse est très chronophage. Un passage dans le four à 150°C pendant 180s puis 220 pendant 150s et enfin un refroidissement rapide pendant 220s a permis la soudure des différents composants. Des tests sont à prévoir afin de vérifier si tous les composants ont bien étés soudés correctement.&lt;br /&gt;
&lt;br /&gt;
En parallèle, j'ai souhaité commencer la partie sur la Raspberry. Forte heureusement les modules NRF24l01 compatibles avec la Raspberry pi 3 pourront fonctionner directement avec l’alimentation 3V3 de la Raspberry. De plus il existe de nombreux tuto permettant de faire communiquer ces modules avec une Arduino. Un premier test sera donc de communiquer avec une Arduino classique afin de prendre en main le système de communication et maitriser les librairies disponibles.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
La raspberry a été configurée de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
* Installation de l'image de Raspbian (récupérée sur le site officiel)&lt;br /&gt;
* Création d'un fichier SSH dans la partition Boot afin d'autoriser les connexions SSH nativement&lt;br /&gt;
* Mise à jour des paquets&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ sudo apt-get dist-upgrade&lt;br /&gt;
* Autorisation l'utilisation des SPI afin de pouvoir utiliser le module NRF24L01 (module radio) qui débloquera la communication via l'interface MISO MOSI présente sur le GPIO&lt;br /&gt;
 $ sudo raspi-config&lt;br /&gt;
 -&amp;gt; Interfaces -&amp;gt; SPI -&amp;gt; yes&lt;br /&gt;
* Installation de la librairie NRF24L01 &lt;br /&gt;
 $ cd&lt;br /&gt;
 $ mkdir nrf24l01&lt;br /&gt;
 $ cd nrf24l01&lt;br /&gt;
 $ git clone https://github.com/TMRh20/RF24.git&lt;br /&gt;
 $ cd RF24&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Une documentation est disponible pour cette librairie : [http://tmrh20.github.io/RF24/]&lt;br /&gt;
&lt;br /&gt;
==Semaine 9==&lt;br /&gt;
Cette semaine, la carte doit être terminée et testée. On effectue des tests de continuité afin de détecter d'éventuels court-circuits et vérifier que chaque soudure a été correctement réalisée.&lt;br /&gt;
&lt;br /&gt;
Un premier court-circuit a été détecté entre le VCC et le GND de la carte, ce court-circuit provient simplement du connecteur micro-USB. Celui-la même qui posait problème avant la soudure du composant. J'ai décidé de le retirer afin de ne pas perdre de temps à tenter de le ressouder. Cette prise n'étant pas nécessaire pour la programmation et l'alimentation de la carte. &lt;br /&gt;
La suite des vérifications s'est effectuée sans encombres. &lt;br /&gt;
&lt;br /&gt;
'''Résultats des test :''' &lt;br /&gt;
# '''ATMEGA328P''' : Aucune patte n'est mal soudée, aucun court-circuit entre 2 pattes voisines.&lt;br /&gt;
# '''Mémoires''' : Test visuel concluant, toutes les pattes sont correctement soudées.&lt;br /&gt;
# '''Prise micro-USB''' : pont formée entre le VCC et le GND voisin. Retrait de la prise micro-USB pour le moment.&lt;br /&gt;
# '''LM117MP''' : Correctement soudé, vérification au multimètre.&lt;br /&gt;
# '''Résistances, condensateurs'''  : Test visuels, et dans le doute test au multimètre.&lt;br /&gt;
# '''LEDs''' : Sur les 7 leds connectées, une était montée à l'envers, elle a pu être dessoudée sans problème et ressoudée dans le bon sens à l'aide d'un pistolet à air chaud. &lt;br /&gt;
&lt;br /&gt;
La suite était de finir de souder le reste des composants, les composants CMS étant correctement soudés. Premièrement, les composants restants sont soudés en surface, puis les headers sont soudés par le dessous et enfin les vias.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_Cartecomplete.jpg|200px|thumb|left|Carte complète]] [[Fichier:P57_2019_TestCarte.jpg|200px|thumb|right|Test de la carte]]&lt;br /&gt;
Une fois tous les composants soudés, une inspection visuelle m'a permis de refaire certaines soudure à l'aide, parfois, de la pâte à braser. &lt;br /&gt;
La vérification visuelle appuyé par une vérification au multimètre m'a confirmé dans le choix de mettre sous tension le circuit. La mise sous tension à été effectuée à l'aide d'une alimentation stabilisé de laboratoire munie d'une limitation en courant qu'on fixera à 10mA et une tension d'entrée de 5V. L'alimentation globale s'est effectuée sans soucis, la led d'alimentation est bien allumée et on peut mesurer une tension de 3.3V en sortie du LM117MP. Les premiers signes sont plutôt concluants.&lt;br /&gt;
&lt;br /&gt;
Cette semaine se terminera par le test final, l'envoie de données pour l'écriture du BOOTLOADER du micro-contrôleur. La carte est amenée à M. Redon (tuteur du projet) qui essaya de téléverser un programme, sans succès. &lt;br /&gt;
&lt;br /&gt;
Le quartz était surdimensionné. Un ATMEGA328P alimenté en 3.3V ne peut fonctionner à une fréquence de 16MHz, un quartz de 8 MHz va donc le remplacer.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 10==&lt;br /&gt;
Le remplacement du quartz a été effectué ainsi que des tests pour vérifier que la soudure est correcte. Par la suite, j'ai décider de me créer une Arduino capable de graver le bootloader du micro-contrôleur en lui transférant le programme Arduino_ISP ainsi qu'en déclarant qu'on utilise le programmateur Arduino_ISP avant d'essayer de graver un bootloader. L'envoie du bootloader fut, encore une fois, un echec. &lt;br /&gt;
&lt;br /&gt;
Par la suite, après avoir essayer d'autres techniques comme changer d'Arduino et de version d'Arduino IDE, une vérification complète des tracés de connexion a été effectué avec l'aide de M. Redon. Aucune anomalie fut détectée.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_PontDiviseur.jpg|200px|thumb|left|Pont diviseur]] [[Fichier:P57_2019_Montagecomplet.jpg|200px|thumb|right|Nouveaux tests]]&lt;br /&gt;
La prochaine hypothèse est que le fait que les signaux logiques en 5 V alors que le micro-contrôleur est en 3.3V est problématique. La correction de ce problème fut simplement, d'utiliser un pont diviseur de tension afin d'abaisser la tension de 5V en 3.3V. Pour cela, on utilisera des résistances de 1kOhm et 1.8kOhms afin de passer d'une tension de 5V à une tension de 3.21V ce qui serait interprété par un signal logique 1 par le micro-contrôleur. De plus, comme il y a 4 signaux logiques ( Reset, SCK, MISO, MOSI), il faut 4 ponts diviseurs de tension.&lt;br /&gt;
&lt;br /&gt;
Cette nouvelle idée n'a pas encore fourni de résultats concluant, d'autres tests doivent donc être menés afin de faire fonctionner cette carte.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Semaine 11==&lt;br /&gt;
[[Fichier:P57_2019_ArduinoMini+Carte.jpg|200px|thumb|left|Tests avec une Arduino Mini (SPI flash)]]&lt;br /&gt;
Pour vérifier la théorie du problème d'alimentation en 3v3 des entrées logiques MISO/MOSI, j'ai décidé d'utiliser une Arduino mini 3.3V qui enverrait directement les signaux logiques en 3.3V. Pour cela, il a fallu shunter le convertisseur de tension 5V en 3.3V afin d'effectuer les tests. Ces tests n'ont malheureusement pas été concluants.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:P57_2019_ShieldSeul.jpg|200px|thumb|right|Shield seul]]&lt;br /&gt;
[[Fichier:P57_2019_ShieldMonte.jpg|200px|thumb|right|Shield monté]]&lt;br /&gt;
En raison des nombreux problèmes rencontrés pour programmer le micro-contrôleur avec l'ancienne carte, j'ai décidé de recommencer la conception d'une nouvelle carte afin de pouvoir avancer sur la partie programmation pendant l'interruption pédagogique. Cependant, la cause du problème avec l'ancienne carte n'étant pas identifiée, il était dommage de passer à autre chose. Dans cette optique, monsieur Redon s'est proposé pour réaliser une seconde carte identique à la première afin de vérifier que la conception de carte n'était pas faussée. Après plusieurs heures, la cause du problème fut identifiée, il s’agissait d'une erreur de réalisation puisque le prototype réalisé par monsieur Redon fonctionnait alors que celle ci utilisait la même infrastructure réseau. La réalisation de la carte par une entreprise professionnelle aurait pu éviter ce genre de problème de réalisation.&lt;br /&gt;
&lt;br /&gt;
Cependant, comme la partie programmation n'a pas pu être commencé j'ai décidé de me focaliser sur celle ci en concevant une nouvelle carte utilisant une Arduino mini et qui fonctionnerait de la même manière que la première conception. &lt;br /&gt;
&lt;br /&gt;
Cette carte fonctionnant sur le modèle d'un shield fonctionnera à partir d'une alimentation 5V qu'elle convertira en alimentation 3.3V pour tous les autres composants. Les 2 types de mémoires restent présents sur la carte afin de laisser la possibilité de tester ces 2 types de mémoire. Cette carte devra pouvoir être programmée puis alimenté à l'aide d'un câble mini-USB. &lt;br /&gt;
&lt;br /&gt;
La conception étant relativement similaire à la première version, elle ne me prendra que 5 heures, la réalisation quant à elle me prendra 4 heures.&lt;br /&gt;
&lt;br /&gt;
Des premiers tests m'ont permis de m’apercevoir que la partie module radio était 100% fonctionnelle. De futurs tests ont révélés que des problèmes subsistaient sur la partie mémoire, un court circuit entre la branche wp (wipe data) et le gnd empêchait les mémoires de communiquer. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Après de nombreux tests, la carte est 100% fonctionnelle à l'aide de 2 librairies :&lt;br /&gt;
# The SPIFlash library (pour les mémoires SPI) [https://github.com/LowPowerLab/SPIFlash]&lt;br /&gt;
# The RF24 library (pour le module radio nrf24l01) [https://github.com/maniacbug/RF24]&lt;br /&gt;
&lt;br /&gt;
=Documents Rendus=&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2019_ShieldMonte.jpg&amp;diff=72590</id>
		<title>Fichier:P57 2019 ShieldMonte.jpg</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2019_ShieldMonte.jpg&amp;diff=72590"/>
				<updated>2019-04-08T22:38:42Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2019_ShieldSeul.jpg&amp;diff=72589</id>
		<title>Fichier:P57 2019 ShieldSeul.jpg</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2019_ShieldSeul.jpg&amp;diff=72589"/>
				<updated>2019-04-08T22:36:58Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2019_ArduinoMini%2BCarte.jpg&amp;diff=72588</id>
		<title>Fichier:P57 2019 ArduinoMini+Carte.jpg</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:P57_2019_ArduinoMini%2BCarte.jpg&amp;diff=72588"/>
				<updated>2019-04-08T22:26:50Z</updated>
		
		<summary type="html">&lt;p&gt;Fleroy2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fleroy2</name></author>	</entry>

	</feed>