Binome2020-12 : Différence entre versions

De Wiki de bureau d'études PeiP
(Code complet de l'AT Tiny)
(Code complet de l'AT Tiny)
Ligne 131 : Ligne 131 :
  
 
  #include <SoftwareSerial.h>
 
  #include <SoftwareSerial.h>
 
+
 
  const byte rxPin = 2;
 
  const byte rxPin = 2;
 
  const byte txPin = 3;
 
  const byte txPin = 3;
Ligne 139 : Ligne 139 :
 
  int remp = 0;
 
  int remp = 0;
 
  String data = "";
 
  String data = "";
 
+
 
  SoftwareSerial mySerial(2,3);
 
  SoftwareSerial mySerial(2,3);
 
  void setup() {
 
  void setup() {
Ligne 147 : Ligne 147 :
 
   pinMode(rxPin, INPUT);
 
   pinMode(rxPin, INPUT);
 
   pinMode(txPin, OUTPUT);
 
   pinMode(txPin, OUTPUT);
 
+
 
   mySerial.begin(9600);
 
   mySerial.begin(9600);
 
   digitalWrite(led1,LOW);
 
   digitalWrite(led1,LOW);
 
   digitalWrite(led2,LOW);
 
   digitalWrite(led2,LOW);
 
  }
 
  }
 
+
 
  void loop() {
 
  void loop() {
 
   if (mySerial.available() >0){
 
   if (mySerial.available() >0){
Ligne 168 : Ligne 168 :
 
   }
 
   }
 
  }
 
  }
 
+
 
  void led(int remplissage){//remplissage en pourcent
 
  void led(int remplissage){//remplissage en pourcent
 
   analogWrite(led1, map(remplissage,0,100,0,255));
 
   analogWrite(led1, map(remplissage,0,100,0,255));

Version du 15 avril 2021 à 16:13

INTRODUCTION

L'objectif de ce bureau d'étude est la conception et la réalisation d'une clé USB personnalisée.

Les idées de personnalisations sont les suivantes :

  • Flash grosse capacité
  • Led RGB qui change de couleur en fonction du remplissage
  • "Bouton d'urgence" efface l'intégralité de la clé après une longue pression (en jouant des animations sur la LED ?)


Compétences et matériel utilisé

HARDWARE

Solutions techniques

Stockage

Pour la fonction principale de la clé nous utiliserons une mémoire NAND produite chez micron. Cette mémoire de 128Gb nous permet d'obtenir un stockage total de 16 Go.

Pour interfacer cette mémoire, nous utilisons un micro contrôleur utilisant une architecture AVR. Celui en utilisé possède en plus une interface USB native pour communiquer avec l'ordinateur.

Personnalisation

Pour nos idées de personnalisation nous devons utiliser deux leds cote à cote (une rouge et une verte) ainsi que leur résistances.

Le bouton d'effacement d'urgence "Press Only when Rightfully Needed" (POwRN) nécessite une résistance "Pull-Up". Nous avons décider d'utiliser la résistance interne de notre micro contrôleur.

Afin de gérer ces fonction indépendamment de la mémoire nous utiliserons d’abord un deuxième micro contrôleur esclave (AtTiny) qui communiquera au maitre via software-serial.

Solutions Personalisation 2021 G12.png

Application

Rev 1.1

Pour la seconde séance de BE nous avons réalisé un premier schématic et une première version de PCB pour notre clé USB. Après concertation avec les professeurs, certains composants n'étaient pas adéquats ou utilisable sur notre clé USB, nous avons donc modifié la clé USB.

Rev 1.2

Pour la version 1.2 de la clé USB, nous avons modifié le régulateur, nous sommes passé de 1 LED à 2 LEDs différentes, ainsi que les connecteurs. Nous avons aussi ajouté des jumpers.

Verso PCB
Recto PCB
Add On


Rev 1.3

Cette version (celle que nous avons commandé) a vu apparaitre de nombreuses modifications telles que :

  • Connexion des pins Rdy2 et MS2 entre la mémoire et le microcontrôleur
  • Remplacement des jumpers par des petits interrupteurs
  • Ajout de l'interface de programmation (6 pins standards)
  • Rétrécissement global du PCB de Gomator ( Surface de la clé réduite de moitié)
Verso PCB
Recto PCB
Add On



Nous sommes ensuite passé au soudage de la clé USB après avoir reçu la commande effectué sur le site Mouser.

Voici le résultat : Recto1Soudé.jpg Verso1Soudé.jpg

Cependant, après avoir fait des essais avec cette clé USB, il semblait y avoir des problèmes de téléversement sur la clé USB. Elle semblait donc inutilisable.
Nous avons fait appel au professeur qui nous a sympathiquement resoudé une grosse partie de notre clé USB.

Voici la seconde clé USB soudée :

Recto2Soudé.jpg Verso2Soudé.jpg

Avec cette clé USB, nous sommes capable de téléverser des programmes dans les deux cartes de la clé, et donc de la programmer afin de pouvoir communiquer avec la mémoire.

Rev 2.0


Cette version contient les correctifs nécessaires pour régler les soucis découvert sur la rev 1.3.

Les modifications majeures sont :

- Utilisation du régulateur interne de l'AtMega
- Connexion du reset des IC avec le reset des ICSP
- Affinement de la forme générale de la clé

Cette version de la clé n'a jamais vu le jour.

SOFTWARE

Introduction

Afin de tester la clé et de développer son logiciel nous avons décidé de segmenter le programme en 7 parties :

  • Tester l'ATmega à l'aide d'un Blink
  • Tester l'ATtiny à l'aide d'un Blink
  • Faire communiquer les deux puces en Serial
  • Faire communiquer l'ATmega en USB avec l'hote en utilisant Lufa
  • Interfacer l'ATmega avec la mémoire
  • Interfacer la mémoire en USB
  • Ajouter nos personnalisation au code précédent

Premières communication avec la puce

Après avoir souder la première version de notre PCB, nous avons essayer de communiquer avec elle. Cependant, la première version ne communiquais pas (le DFU n’apparaissait pas). Nous avons essayé de communiqué via un ICSP. C’était encore un échec.

Nous avons ensuite décidé de souder une clé avec uniquement le minimum nécessaire. Après 1h d'échec avec le port USB droit de mon ordi, nous avons tenter d'utiliser le port de gauche. C'est un succès, la clé apparais dans USB Dev View (/mettre photo USB dev view/)
Nous téleversons un programma Blink (/screen du code/). C'est avec horreur que nous découvrons que la led clignote 8 fois trop lentement, et pire encore : le DFU n’apparais plus.


La séance suivante à été consacré à se battre avec un adaptateur USB-ICSP pour chenger les e-fuse de l'ATmega. A la fin de la séance, la led clignotait à la bonne vitesse. Cependant le DFU reste introuvable.

La configuration des e-fuses est comme ceci :

Configuration des fuses
Fuse : lfuse hfuse efuse
Valeurs: 4E D9 F6


Installation de LUFA

Après avoir vu que quelques éléments vitaux de la clé fonctionne, nous avons téléversé une démo de LUFA. C'est avec un grand plaisir que nous observons Windows reconnaitre le périphérique USB. La prochaine étape consiste à sous traiter la réalisation de la bibliothèque de communication avec la Nand par le binome 4.

Code complet de l'AT Tiny

Voici le code complet de l'AT Tiny, il permet d'envoyer un message au micro contrôleur principale afin d'effacer le contenu de la clé USB lorsque l'on appuie 10 secondes sur le bouton de la clé. Il permet aussi d'afficher le taux de remplissage de la clé USB à l'aide des deux LEDs, en faisant varier la tension des LEDs grâce à un signal PWM afin de faire varier la couleur.

#include <SoftwareSerial.h>

const byte rxPin = 2;
const byte txPin = 3;
const int led1 = 5;
const int led2 = 6;
const int btn = 7;
int remp = 0;
String data = "";

SoftwareSerial mySerial(2,3);
void setup() {
  pinMode(7,INPUT);//btn
  pinMode(led1,OUTPUT);//led1
  pinMode(led2, OUTPUT);//led2
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);

  mySerial.begin(9600);
  digitalWrite(led1,LOW);
  digitalWrite(led2,LOW);
}

void loop() {
  if (mySerial.available() >0){
    data = mySerial.readStringUntil("A");
  }
  remp = data.toInt();
  led(remp);
  if (digitalRead(btn) == HIGH){
    mySerial.write("R");
    for (int i =100; i<1; i--){
      led(i);
      delay(10);
    }
  }
}

void led(int remplissage){//remplissage en pourcent
  analogWrite(led1, map(remplissage,0,100,0,255));
  analogWrite(led2, map(remplissage,0,100,255,0));
}

MECHANICAL

Rev 1

Nous avons décidé de fabriquer un boitier pour notre clé USB, pour cela nous sommes passé par le logiciel Fusion360. Nous avons conçu le boitier de sorte à ce qu'il soit imprimable en 3D. Pour commencer, nous avons exporter une version du PCB, nous l'avons mise sur Fusion360, puis nous avons conçu le boitier. Ensuite, il a fallu rajouter un logo ainsi que le nom de notre clé USB sur le dessus. Nous avons eu l'idée de faire sortir la LED de notre clé USB par l’œil de notre logo.

Pour fermer notre boitier, nous faisons dépasser des pins d'alignement que nous pourrons faire fondre afin de les souder sur le couvercle du boitier.

Nous avons choisi le thème des espions car l'effacement d'urgence de notre clé (POwRN) peut permettre aux espions de sauver leurs données des méchants.


Boitier Clé USB


Après être passé à la version 1.3 de notre clé USB, nous avons aussi conçu un nouveau boitier :

Boitier Clé USB

Rev 2

La rev 2 est une version très proche de la rev 1 mais réduite en taille afin de coïncider avec le PCB de la rev 2. Nous l'avons imprimer en 3D, voila le résultat : (/photo boitier/)

CHANGELOG

  • 18/01/2021 : Mise en connaissance du BE, création du binôme, regroupement des idées d'améliorations pour la clé USB.

  • 21/01/2021 : Avancement sur le Schematic et le PCB d'une première version de la clé USB.

  • 25/01/2021 : Modification du Schematic et du PCB pour changer certains composants. Changement de version de clé.

  • 28/01/2021 : Création du boitier (partie Mechanical), appréhension de la partie Software.

  • 01/02/2021 : Passage à la Rev 3 de notre clé USB, modification du PCB et du Schematic, commande des composants (en partenariat avec le binome 4). Exercice de découverte de la partie Software (création d'un blink).

  • 04/02/2021 : Appréhension de l'AVR-C, création d'un programme de "test" (Blink).

  • 08/02/2021 : Recherche et tentative sur le serial en AVR-C.

  • 11/02/2021 : Lecture de la datasheet de la mémoire.

  • 15/02/2021 : Réception des premiers composants et renseignement sur LUFA.

  • 18/02/2021 : Début du soudage du PCB de la clé USB (Passifs, micro-controlleurs).

  • 08/03/2021 : Fin du soudage du PCB (Mémoire).

  • 12/03/2021 : Tentative de communication avec la clé via le DFU, sans succès. (problème sur le Rst)

  • 15/03/2021 : Communication réussie avec la clé via le DFU, après changement du PCB. Téléversement (non sans mal) d'un programme Blink.

  • 19/03/2021 : Programmation de la clé via ICSP, réglage (non sans difficulté) des e-fusibles.

  • 22/03/2021 : La ne communique a nouveau plus, puis remarche. Debut d'un programme de communication avec la mémoire

  • 26/03/2021 : Soudage de la mémoire sur la deuxième clé, continuation du programme d'identification.

  • 29/03/2021 : Création du code "final" de l'AtTiny, remplissage du wiki.

  • 01/04/2021 : Finition définitive de la clé USB. Elle est maintenant capable de se téléporter dans la poche de l'espion. Poisson d'avril ! Finition de la mise a jour du wiki, et conception 3D du nouveau boitier.

  • 05/04/2021 : Soudure des nouveaux interrupteurs. Programmation du code de l'AtTiny pour gérer les LEDs et une communication Série.

  • 08/04/2021 : Code pour tester la communication avec la mémoire (Read ID) fait maison, sans succès.

  • 12/04/2021 : Continuation du code de communication avec la mémoire, encore une fois sans succès. Adaptation du code de Albin pour parler avec la mémoire, toujours sans succès.

  • 15/04/2021 : Finition du Wikipédia. Conclusion sur notre Bureau d'Etudes, recherche de piste de progression.