IMA2a4 2022/2023 P1 : Différence entre versions

De Wiki de Projets IMA
(Page créée avec « = <div class="mcwiki-header" style="border-radius: 10px; padding: 20px; font-weight: bold; text-align: center; font-size: 80%; background: #9FE7FF; vertical-align: top ; w... »)
 
Ligne 1 : Ligne 1 :
 
= <div class="mcwiki-header" style="border-radius: 10px; padding: 20px; font-weight: bold; text-align: center; font-size: 80%; background: #9FE7FF; vertical-align: top ; width: 100%;">Présentation générale</div> =
 
= <div class="mcwiki-header" style="border-radius: 10px; padding: 20px; font-weight: bold; text-align: center; font-size: 80%; background: #9FE7FF; vertical-align: top ; width: 100%;">Présentation générale</div> =
 +
 +
==Objectifs==
 +
 +
Conception, réalisation et programmation d’une clef USB réaliste.
  
 
==Contexte==
 
==Contexte==
  
 +
En bureau d’études PeiP systèmes embarqués [[https://peip-ima.plil.fr]] nous faisons réaliser des clefs USB aux élèves depuis 3 ans. Mais ces clefs sont très limitées en capacité, les mémoires utilisées, faciles à adresser, ne dépassant pas les quelques Mo. Le but de ce projet est de concevoir une clef USB de l’ordre de quelques Go avec une gestion de mémoire réaliste pour une durée de vie de la clef
 +
raisonnable.
  
==Objectifs==
+
Les mémoires flash de grande taille sont :
 +
# généralement à accès parallèle et non série (comme les mémoires SPI utilisées en BE PeiP) ;
 +
# sans aucun mécanisme de gestion de l’usure (comme les mémoires utilisées en BE PeiP) ;
 +
# de type NAND, à savoir que l’on ne peut que transformer des 1 en 0, si l’on souhaite revenir sur des 1, il faut réinitialiser toute une page avec que des 1.
 +
 
 +
Mais surtout ces mémoires sont imparfaites :
 +
*des erreurs peuvent se produire dans certains blocs (quelques bits mais pas si rarement que cela) ;
 +
*des pages complètes peuvent ne plus pouvoir être réinitialisées (selon les mémoires les pages peuvent être réinitialisées 3000 à 10000 fois suivant les modéles).
 +
 
 +
==Cahier des charges==
 +
 
 +
      Donc, en plus de la programmation USB de type « mémoire de masse » vous devrez implanter les dispositifs suivants :
 +
          • une table pour repérer les pages hors services ;
 +
          • un dispositif de correction d’erreur dans les blocs (vous utiliserez l’algorithme de hamming avec un nombre de bits adapté à la fois au taux
 +
      d’erreurs de la mémoire et à la fois au nombres d’octets disponibles pour stocker ces bits de correction d’erreur) ;
 +
          • Un dispositif de réduction d’usure comptant le nombre de réinitialisation des pages et permettant de déplacer des blocs souvent modifiés vers
 +
      d’autres adresses.
 +
      Il est fortement recommandé de simuler tous ces dispositifs sur un PC pour tester tous les éléments avant implantation dans le microcontrôleur.
 +
 
 +
      Du coté matériel vous pourrez vous aider des schémas de clefs sur le Wiki des PeiP. Il est cependant conseillé de passer d’un ATMega16u2 à un ATMega32u4
 +
      pour disposer de plus d’E/S et de bus. En effet pour implanter les tables nécessaires au fonctionnement des dispositifs décrits ci-dessus, il est
 +
      conseillé d’ajouter une mémoire SPI plutôt que d’essayer d’implanter les tables sur la mémoire flash principale.
 +
 
 +
      Si vous avez le temps, évitez d’utiliser la bibliothèque LUFA pour la partie USB et passez sur une bibliothèque plus bas niveau comme V-USB voire en
 +
      programmant directement les registres.
 +
 
 +
      Implantez aussi des points d’accès USB sur votre clef pour pouvoir obtenir des informations sur la gestion des blocs sur la clef :
 +
          • lister les pages hors service ;
 +
          • récupérer le nombre d’écritures pour des blocs donnés ;
 +
          • récupérer le nombre d’erreurs pour des blocs donnés.
 +
      Ecrivez aussi le programme PC permettant de récupérer ces informations pour afficher des statistiques sur la clef.
 +
 
 +
      Pendant que vous y êtes implantez des points d’accès pour pouvoir écrire des données dans les octets non utilisés de votre clef et pour pouvoir récupérer
 +
      ces octets.
  
  
==Historique==
 
  
  
==Cahier des charges==
 
  
 
==Cahier des spécifications==
 
==Cahier des spécifications==

Version du 8 décembre 2022 à 08:36

Présentation générale

Objectifs

Conception, réalisation et programmation d’une clef USB réaliste.

Contexte

En bureau d’études PeiP systèmes embarqués [[1]] nous faisons réaliser des clefs USB aux élèves depuis 3 ans. Mais ces clefs sont très limitées en capacité, les mémoires utilisées, faciles à adresser, ne dépassant pas les quelques Mo. Le but de ce projet est de concevoir une clef USB de l’ordre de quelques Go avec une gestion de mémoire réaliste pour une durée de vie de la clef raisonnable.

Les mémoires flash de grande taille sont :

  1. généralement à accès parallèle et non série (comme les mémoires SPI utilisées en BE PeiP) ;
  2. sans aucun mécanisme de gestion de l’usure (comme les mémoires utilisées en BE PeiP) ;
  3. de type NAND, à savoir que l’on ne peut que transformer des 1 en 0, si l’on souhaite revenir sur des 1, il faut réinitialiser toute une page avec que des 1.

Mais surtout ces mémoires sont imparfaites :

  • des erreurs peuvent se produire dans certains blocs (quelques bits mais pas si rarement que cela) ;
  • des pages complètes peuvent ne plus pouvoir être réinitialisées (selon les mémoires les pages peuvent être réinitialisées 3000 à 10000 fois suivant les modéles).

Cahier des charges

     Donc, en plus de la programmation USB de type « mémoire de masse » vous devrez implanter les dispositifs suivants :
         • une table pour repérer les pages hors services ;
         • un dispositif de correction d’erreur dans les blocs (vous utiliserez l’algorithme de hamming avec un nombre de bits adapté à la fois au taux
     d’erreurs de la mémoire et à la fois au nombres d’octets disponibles pour stocker ces bits de correction d’erreur) ;
         • Un dispositif de réduction d’usure comptant le nombre de réinitialisation des pages et permettant de déplacer des blocs souvent modifiés vers
     d’autres adresses.
     Il est fortement recommandé de simuler tous ces dispositifs sur un PC pour tester tous les éléments avant implantation dans le microcontrôleur.
     Du coté matériel vous pourrez vous aider des schémas de clefs sur le Wiki des PeiP. Il est cependant conseillé de passer d’un ATMega16u2 à un ATMega32u4
     pour disposer de plus d’E/S et de bus. En effet pour implanter les tables nécessaires au fonctionnement des dispositifs décrits ci-dessus, il est
     conseillé d’ajouter une mémoire SPI plutôt que d’essayer d’implanter les tables sur la mémoire flash principale.
     Si vous avez le temps, évitez d’utiliser la bibliothèque LUFA pour la partie USB et passez sur une bibliothèque plus bas niveau comme V-USB voire en
     programmant directement les registres.
     Implantez aussi des points d’accès USB sur votre clef pour pouvoir obtenir des informations sur la gestion des blocs sur la clef :
         • lister les pages hors service ;
         • récupérer le nombre d’écritures pour des blocs donnés ;
         • récupérer le nombre d’erreurs pour des blocs donnés.
     Ecrivez aussi le programme PC permettant de récupérer ces informations pour afficher des statistiques sur la clef.
     Pendant que vous y êtes implantez des points d’accès pour pouvoir écrire des données dans les octets non utilisés de votre clef et pour pouvoir récupérer
     ces octets.



Cahier des spécifications

Diagramme de Gantt prévisionnel

Liens externes

Lien GitLab :

Présentation projet final :

Rapport final :