Comment identifier le bootloader et le contenu d'un ATMEGA 328?

Bonjour,

Quelle est le moyen de connaître le bootloader qui a été écrit sur un ATMEGA 328?
Existe-il un moyen permettant de récupérer le sketch - je pense que non puisque c'est compilé - ou le contenu d'un ATMEGA 328?

Par avance merci :wink:

Bonjour
Avec un programmateur genre USBasp et l'un des softs qui vont avec on peut lire l'inégralité d'un Mega328 (sauf s'il a été protégé en lecture, ce qui est sans doute assez exceptionnel dans le monde Arduino, c'est pas l'esprit de la maison !)
Il est alors possible de voir en hexadecimal le contenu de la zone ou est stocké le fichier binaire issu du sketch d'une part et la zone du bootloader d'autre part de même que le contenu de l'EEPROM.
Remonter au code source du sketch : impossible.
Au mieux on peut désassembler le code pour avoir un long listing (non documenté) en assembleur.
Reconnaitre le bootloader : oui en comparant le contenu du mega328 avec les fichier .HEX des divers bootloaders. Déjà avec la taille du bootloader on a une idée.

Il y a peut etre des sketches qui permettent de dumper certaines partie de la mémoire flash.
je ne connais pas en détail le fonctionnement des divers bootloaders. Un connaisseur peut peut-être distinguer des différences dans les clignotements de leds ou dans la durée du time-out ?

Bonjour,

Pas besoin de USBasp, d'un programmateur ISP ou d'un sketch spécial pour dump la flash d'une carte arduino !
Une simple commande avrdude avec le bootloader arduino permet de "dumper" le contenu de la flash (mais pas de l'EEprom).

avrdude -P m328p -c arduino -p COM6 -U flash:r:dump.hex:i

De mémoire ça dump tout, bootloader inclut.

Ensuite dans le meilleur des cas il est possible avec avr-studio de reformer le code assembleur depuis le .hex mais en aucun cas le .c !

Pour identifier le type du bootloader il existe deux méthode :
la plus simple, utilisez l'ide arduino avec différent type de carte et voir laquelle marche,
ou décompilé le .hex et chercher dans le code assembleur l'assignation de la vitesse du port série (UBRR0H et UBRR0L) puis de la comparer au différent bootloader arduino dans boards.txt