IMA4 2020/2021 EC2 : Différence entre versions
(→Travail réalisé) |
(→Problème rencontrés) |
||
(62 révisions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 10 : | Ligne 10 : | ||
= Planning prévisionnel = | = Planning prévisionnel = | ||
− | * | + | *Etape 1 : étude du sujet, prise en main du logiciel Fritzing, commencer de concevoir le schématic; |
− | * | + | *Etape 2: conception et routage du PCB, test; |
− | * | + | *Etape 3 : Soudage de la carte, test; |
− | * | + | *Etape 4 : Programmation ; |
= Travail réalisé = | = Travail réalisé = | ||
− | La première partie de mon travail est de concevoir la carte électronique sur Fritzing.Après avoir fait des recherches sur le sujet, j'ai trouvé que je ne connaissais pas grand-chose à ce sujet. J'ai posé beaucoup de questions à Monsieur Redon et il a patiemment répondu à mes doutes un par un. | + | La première partie de mon travail est de concevoir la carte électronique sur Fritzing. Après avoir fait des recherches sur le sujet, j'ai trouvé que je ne connaissais pas grand-chose à ce sujet. J'ai posé beaucoup de questions à Monsieur Redon et il a patiemment répondu à mes doutes un par un. |
+ | |||
Je dois programmer un ATMega16u2, avec la bibliothèque LUFA, en tant que maître USB pour lire le clavier et vous pourrez programmer le second en mode périphérique USB pour converser avec le PC: | Je dois programmer un ATMega16u2, avec la bibliothèque LUFA, en tant que maître USB pour lire le clavier et vous pourrez programmer le second en mode périphérique USB pour converser avec le PC: | ||
::*1 ATMega16u2 pour lire le clavier (mode USB hôte) | ::*1 ATMega16u2 pour lire le clavier (mode USB hôte) | ||
::*1 ATMega16u2 pour converser avec le PC (mode USB périphérique) | ::*1 ATMega16u2 pour converser avec le PC (mode USB périphérique) | ||
− | Dans la bibliothèque de fichiers LUFA, j'ai trouvé qu' | + | Dans la bibliothèque de fichiers LUFA [http://www.fourwalledcubicle.com/LUFA.php], j'ai trouvé qu'ATMega16u2 n'autorise que la configuration du USB device. Monsieur Redon m'a suggéré d'utiliser un AT90USB647 pour l'autre MCU alors: |
::*<span style="color: red; text-decoration: line-through;">1 ATMega16u2 pour lire le clavier (mode USB hôte)</span>1 AT90USB647 pour lire le clavier (mode USB hôte) | ::*<span style="color: red; text-decoration: line-through;">1 ATMega16u2 pour lire le clavier (mode USB hôte)</span>1 AT90USB647 pour lire le clavier (mode USB hôte) | ||
::*1 ATMega16u2 pour converser avec le PC (mode USB périphérique) | ::*1 ATMega16u2 pour converser avec le PC (mode USB périphérique) | ||
+ | |||
+ | |||
+ | == Etape 1:Concevoir le schématic == | ||
+ | |||
+ | |||
+ | Schéma électronique du périphérique USB DEVICE : | ||
+ | |||
+ | [[Fichier:Carte USBD.jpg|thumb|500px|center]] | ||
+ | |||
+ | |||
+ | Schéma électronique du périphérique USB HOST : | ||
+ | |||
+ | [[Fichier:Carte USBH.jpg|thumb|500px|center]] | ||
+ | |||
+ | == Etape 2:Conception et routage du PCB == | ||
+ | Ensuite, voici le câblage sur les plaques d'essai: | ||
+ | |||
+ | [[Fichier:Breadboard_usb_keyboard.jpg]] | ||
+ | |||
+ | |||
+ | Ensuite, voici le routage du PCB: | ||
+ | |||
+ | [[Fichier:Routage_Keyboard.jpg]] | ||
+ | |||
+ | == Etape 3:Soudage de la carte == | ||
+ | La carte de PCB que j'ai reçu: | ||
+ | |||
+ | [[Fichier:Carte_PCB_Keyboard.jpg]] | ||
+ | |||
+ | |||
+ | Après avoir reçu les composants électroniques,je les ai soudés à la carte de PCB : | ||
+ | |||
+ | En dessous se trouve la face avant de la carte : | ||
+ | |||
+ | [[Fichier:Carte_Keyboard_Face.jpg]] | ||
+ | |||
+ | En dessous se trouve l'arrière de la carte : | ||
+ | |||
+ | [[Fichier:Carte_Keyboard_Arriere.jpg]] | ||
+ | |||
+ | == Etape 4:Programmation == | ||
+ | |||
+ | Version de l’environnement de développement Ubuntu: | ||
+ | |||
+ | root@jason-qt:/home/jason# lsb_release -a | ||
+ | No LSB modules are available. | ||
+ | Distributor ID: Ubuntu | ||
+ | Description: Ubuntu 16.04.6 LTS | ||
+ | Release: 16.04 | ||
+ | Codename: xenial | ||
+ | Linux version 4.4.0-157-generic (buildd@lgw01-amd64-037) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10) ) #185-Ubuntu SMP Tue Jul 23 09:17:01 UTC 2019 | ||
+ | |||
+ | Installation de la chaîne de compilation AVR: | ||
+ | |||
+ | apt-get install gcc-avr binutils-avr avrdude avr-libc | ||
+ | |||
+ | gcc-avr : Le compilateur qui a développé AVR est GCC, ce qui signifie en fait ajouter au GCC une bibliothèque adaptée à AVR, appelée avr-libc, et les langages de développement actuellement compatibles sont c et c++. | ||
+ | |||
+ | avrdude : Il est utilisé pour télécharger des programmes sur un microprocesseur. | ||
+ | |||
+ | avr-libc : Une bibliothèque. | ||
+ | |||
+ | |||
+ | Installation du plug-in eclipse: | ||
+ | |||
+ | Comme j’ai téléchargé la version CDT d’eclipse, il n’y a pas de difficulté à installer le CDT; | ||
+ | |||
+ | avr-eclipse : Ça m’aide à écrire le makefile, ça m’aide à générer la commande avrdude. | ||
+ | Adresse de téléchargement :[http://avr-eclipse.sourceforge.net/updatesite/] | ||
+ | |||
+ | subclipse : Subclipse est un projet qui ajoute le support de Subversion à l’ide Eclipse. Support pour presque toutes les versions d’eclipse. | ||
+ | Adresse de téléchargement :[http://subclipse.tigris.org/update_1.4.x] | ||
+ | |||
+ | Comme le téléchargeur que j’utilise est le Jtag-Isp 2.5 d’AVRVI, il devrait être du type Jtag-isp(MKI) avec la fonction d’un port usb en série. | ||
+ | |||
+ | ls /dev/ttyUSB* | ||
+ | |||
+ | Pour vérifier qu’il y a plusieurs dispositifs de port série USB sur mon ordinateur.J’ai sélectionné les informations affichées dans avrdude. (par exemple le mien est ttyUSB0). | ||
+ | |||
+ | Puis je passe à la mise en service du port série: | ||
+ | |||
+ | sudo apt-get install cutecom | ||
+ | |||
+ | J’ai donc un environnement de développement pour avr sous linux. | ||
+ | |||
+ | [[Fichier:KeyboardConnect1.jpg]] | ||
+ | |||
+ | [[Fichier:KeyboardConnect2.jpg]] | ||
+ | |||
+ | == Problème rencontrés == | ||
+ | *1.L’horloge USB autorisée n’est pas notée dans la conception : | ||
+ | |||
+ | L’utilisation de cristaux externes de 12Mhz comme horloges du système dans la conception, et il ressort du manuel et de la bibliothèque LUFA que la F_CPU ne peut choisir que des cristaux externes de 8Mhz ou de 16Mhz comme horloges du système en cas d’utilisation d’usb, À l’intérieur, on utilise une boucle à verrouillage de phase x6 (M16U2) ou x12(90USB647) pour produire une horloge de 48Mhz pour le module USB. | ||
+ | |||
+ | La solution à ce problème a été de modifier l’efuse et d’utiliser le cristal interne RC 8Mhz comme horlogerie principale pour le USB, ce qui pose le problème de ne pas pouvoir garantir la précision (les différences individuelles peuvent être importantes) et la stabilité de l’horlogerie principale du système (le RC interne n’est pas aussi fiable que le cristal externe). | ||
+ | |||
+ | *2.La puce AT90USB647 ne permet pas de télécharger le programme : | ||
+ | |||
+ | Après avoir terminé le soudage du système, j’ai découvert que le microprocesseur de ce sous-système ne pouvait pas télécharger le programme avec USBASP, alors que je n’avais que ce téléchargeur à ma main, et j’ai donc cherché les problèmes de matériel et trouvé beaucoup de données dans l’espoir de pouvoir télécharger. Parce qu’il n’y a pas de moyen de télécharger dans le programme, il n’y a pas de moyen de poursuivre le débug de la fonction SPI flash ou du programme | ||
+ | |||
+ | a) Le logiciel de téléchargement d’usbasp est avr fighter et il n’y a pas de dispositif USB647 dans l’interface d’exploitation. | ||
+ | |||
+ | [[Fichier:Keyboard_problem1.jpg]] | ||
+ | |||
+ | Mais avrdude ne supporte pas nécessairement ce dispositif et espère que la nouvelle version du firmware sera mise à jour pour résoudre le problème. J’ai donc réacheté la dernière version d’usbasp, téléchargé le dernier firmware du site officiel pour le tester, et linux a déclaré une erreur: | ||
+ | |||
+ | avrdude: error: usbasp_transmit: error sending control message: Invalid or incomplete multibyte or wide character | ||
+ | avrdude: error: usbasp_transmit: error sending control message: Protocol error | ||
+ | avrdude: error: program enable: target doesn't answer. 0 | ||
+ | avrdude: initialization failed, rc=-1 | ||
+ | Double check connections and try again, or use -F to override | ||
+ | this check. | ||
+ | |||
+ | Après avoir examiné les données, j’ai découvert que la puce par défaut de la série AT90USB avait un bootloader DFU à l’intérieur de la puce, mais que le matériel devait prendre une série chronologique pour démarrer. Il s’est avéré que ce dispositif DFU n’était pas visible sous le dispositif USB de l’ordinateur, et cela n’a pas pu se faire. | ||
+ | |||
+ | [[Fichier:Keyboard_problem2.jpg]] | ||
+ | |||
+ | L’examen et les mesures du matériel n’ont révélé aucun problème. La tension est normale et le câblage est parfaitement conforme au schéma, mais il n’y a pas de moyen de continuer. | ||
= Documents Rendus = | = Documents Rendus = | ||
+ | [[Fichier:Schema_usbh_usbd.zip]] | ||
+ | |||
+ | = Correction schéma = | ||
+ | Malgré les nombreuses demandes de configurer l'alimentation du AT90USB647 comme sur la figure 22-7 de la documentation [https://ww1.microchip.com/downloads/en/DeviceDoc/doc7593.pdf], cela n'a jamais été fait. | ||
+ | |||
+ | Voir le fichier Fritzing ci-dessous. J'ai rajouté une résistance de 0 Ohm vers UVCC qu'il ne faudra pas souder conformément à la figure 22-7, il faudra souder la résistance de 0 Ohm vers VBUS toujours selon la même figure. | ||
+ | |||
+ | J'ai remplacé quelques composants (quartz et conencteurs). J'ai préplacé les composants sur la vue PCB. | ||
+ | |||
+ | [[Fichier:2021SchemaUSBh_USBd.zip]] | ||
+ | |||
+ | Le même fichier après placement plus précis des composants : | ||
+ | |||
+ | [[Fichier:2021PlacementUSBh_USBd.zip]] |
Version actuelle datée du 7 juillet 2021 à 04:16
Sommaire
Objectif
En vous appuyant sur le travail déjà réalisé pour les PeiP (voir [1]) réalisez un "key-logger" à base de mémoire AT45DB641E-SHN2B-T.
L'idée est d'ajouter au circuit un second ATMega16u2 connecté au premier en série. Ainsi vous pourrez programmer un ATMega16u2, avec la bibliothèque LUFA, en tant que maître USB pour lire le clavier et vous pourrez programmer le second en mode périphérique USB pour converser avec le PC. Les touches lues sont passées par le bus série et transmises au PC tout en étant stockées dans la mémoire. Une interface USB spéciale permet de télécharger les touches enregistrées.
Il est nécessaire de concevoir une nouvelle carte. Commencez par cela avant de passer à la programmation.
Planning prévisionnel
- Etape 1 : étude du sujet, prise en main du logiciel Fritzing, commencer de concevoir le schématic;
- Etape 2: conception et routage du PCB, test;
- Etape 3 : Soudage de la carte, test;
- Etape 4 : Programmation ;
Travail réalisé
La première partie de mon travail est de concevoir la carte électronique sur Fritzing. Après avoir fait des recherches sur le sujet, j'ai trouvé que je ne connaissais pas grand-chose à ce sujet. J'ai posé beaucoup de questions à Monsieur Redon et il a patiemment répondu à mes doutes un par un.
Je dois programmer un ATMega16u2, avec la bibliothèque LUFA, en tant que maître USB pour lire le clavier et vous pourrez programmer le second en mode périphérique USB pour converser avec le PC:
- 1 ATMega16u2 pour lire le clavier (mode USB hôte)
- 1 ATMega16u2 pour converser avec le PC (mode USB périphérique)
Dans la bibliothèque de fichiers LUFA [2], j'ai trouvé qu'ATMega16u2 n'autorise que la configuration du USB device. Monsieur Redon m'a suggéré d'utiliser un AT90USB647 pour l'autre MCU alors:
- 1 ATMega16u2 pour lire le clavier (mode USB hôte)1 AT90USB647 pour lire le clavier (mode USB hôte)
- 1 ATMega16u2 pour converser avec le PC (mode USB périphérique)
Etape 1:Concevoir le schématic
Schéma électronique du périphérique USB DEVICE :
Schéma électronique du périphérique USB HOST :
Etape 2:Conception et routage du PCB
Ensuite, voici le câblage sur les plaques d'essai:
Ensuite, voici le routage du PCB:
Etape 3:Soudage de la carte
La carte de PCB que j'ai reçu:
Après avoir reçu les composants électroniques,je les ai soudés à la carte de PCB :
En dessous se trouve la face avant de la carte :
En dessous se trouve l'arrière de la carte :
Etape 4:Programmation
Version de l’environnement de développement Ubuntu:
root@jason-qt:/home/jason# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.6 LTS Release: 16.04 Codename: xenial Linux version 4.4.0-157-generic (buildd@lgw01-amd64-037) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10) ) #185-Ubuntu SMP Tue Jul 23 09:17:01 UTC 2019
Installation de la chaîne de compilation AVR:
apt-get install gcc-avr binutils-avr avrdude avr-libc
gcc-avr : Le compilateur qui a développé AVR est GCC, ce qui signifie en fait ajouter au GCC une bibliothèque adaptée à AVR, appelée avr-libc, et les langages de développement actuellement compatibles sont c et c++.
avrdude : Il est utilisé pour télécharger des programmes sur un microprocesseur.
avr-libc : Une bibliothèque.
Installation du plug-in eclipse:
Comme j’ai téléchargé la version CDT d’eclipse, il n’y a pas de difficulté à installer le CDT;
avr-eclipse : Ça m’aide à écrire le makefile, ça m’aide à générer la commande avrdude. Adresse de téléchargement :[3]
subclipse : Subclipse est un projet qui ajoute le support de Subversion à l’ide Eclipse. Support pour presque toutes les versions d’eclipse. Adresse de téléchargement :[4]
Comme le téléchargeur que j’utilise est le Jtag-Isp 2.5 d’AVRVI, il devrait être du type Jtag-isp(MKI) avec la fonction d’un port usb en série.
ls /dev/ttyUSB*
Pour vérifier qu’il y a plusieurs dispositifs de port série USB sur mon ordinateur.J’ai sélectionné les informations affichées dans avrdude. (par exemple le mien est ttyUSB0).
Puis je passe à la mise en service du port série:
sudo apt-get install cutecom
J’ai donc un environnement de développement pour avr sous linux.
Problème rencontrés
- 1.L’horloge USB autorisée n’est pas notée dans la conception :
L’utilisation de cristaux externes de 12Mhz comme horloges du système dans la conception, et il ressort du manuel et de la bibliothèque LUFA que la F_CPU ne peut choisir que des cristaux externes de 8Mhz ou de 16Mhz comme horloges du système en cas d’utilisation d’usb, À l’intérieur, on utilise une boucle à verrouillage de phase x6 (M16U2) ou x12(90USB647) pour produire une horloge de 48Mhz pour le module USB.
La solution à ce problème a été de modifier l’efuse et d’utiliser le cristal interne RC 8Mhz comme horlogerie principale pour le USB, ce qui pose le problème de ne pas pouvoir garantir la précision (les différences individuelles peuvent être importantes) et la stabilité de l’horlogerie principale du système (le RC interne n’est pas aussi fiable que le cristal externe).
- 2.La puce AT90USB647 ne permet pas de télécharger le programme :
Après avoir terminé le soudage du système, j’ai découvert que le microprocesseur de ce sous-système ne pouvait pas télécharger le programme avec USBASP, alors que je n’avais que ce téléchargeur à ma main, et j’ai donc cherché les problèmes de matériel et trouvé beaucoup de données dans l’espoir de pouvoir télécharger. Parce qu’il n’y a pas de moyen de télécharger dans le programme, il n’y a pas de moyen de poursuivre le débug de la fonction SPI flash ou du programme
a) Le logiciel de téléchargement d’usbasp est avr fighter et il n’y a pas de dispositif USB647 dans l’interface d’exploitation.
Mais avrdude ne supporte pas nécessairement ce dispositif et espère que la nouvelle version du firmware sera mise à jour pour résoudre le problème. J’ai donc réacheté la dernière version d’usbasp, téléchargé le dernier firmware du site officiel pour le tester, et linux a déclaré une erreur:
avrdude: error: usbasp_transmit: error sending control message: Invalid or incomplete multibyte or wide character avrdude: error: usbasp_transmit: error sending control message: Protocol error avrdude: error: program enable: target doesn't answer. 0 avrdude: initialization failed, rc=-1 Double check connections and try again, or use -F to override this check.
Après avoir examiné les données, j’ai découvert que la puce par défaut de la série AT90USB avait un bootloader DFU à l’intérieur de la puce, mais que le matériel devait prendre une série chronologique pour démarrer. Il s’est avéré que ce dispositif DFU n’était pas visible sous le dispositif USB de l’ordinateur, et cela n’a pas pu se faire.
L’examen et les mesures du matériel n’ont révélé aucun problème. La tension est normale et le câblage est parfaitement conforme au schéma, mais il n’y a pas de moyen de continuer.
Documents Rendus
Correction schéma
Malgré les nombreuses demandes de configurer l'alimentation du AT90USB647 comme sur la figure 22-7 de la documentation [5], cela n'a jamais été fait.
Voir le fichier Fritzing ci-dessous. J'ai rajouté une résistance de 0 Ohm vers UVCC qu'il ne faudra pas souder conformément à la figure 22-7, il faudra souder la résistance de 0 Ohm vers VBUS toujours selon la même figure.
J'ai remplacé quelques composants (quartz et conencteurs). J'ai préplacé les composants sur la vue PCB.
Fichier:2021SchemaUSBh USBd.zip
Le même fichier après placement plus précis des composants :