Dumper une EEprom d’Arduino, the hardest way.

Petit retour sur le dump d’EEprom sur Arduino Uno car vider l’eeprom de son Atmel ATmega328p n’est pas si simple.

L’Eeprom est une mémoire non volatile qui peut être lue et écrit depuis son petit programme Arduino. un genre de disque dur.

Prenons le programme suivant qui écrit HELLO au début de l’eeprom.

Si on se rappelle de https://thanat0s.trollprod.org/2014/01/dumper-un-arduino ils semble que l’on puisse utiliser ce vieux tutorial pour dumper l’eeprom au lieu de la flash.

Avec Avrdude, J’utilise la command -D -Ueeprom:r:/tmp/eeprom.hex:r

D pour dump, U pour la dire quoi.. ici l’Eeprom directement au format binaire ( :r pour raw) .

En plus tout se passe bien, la taille est bonne, MAIS le problème c’est que le dump au final est fort étrange… Il est ou le HELLO ?? c’est quoi ce fatra ??

On se rend vite compte que le Bitonio nous prends pour un lapin. En fait, si on utilise son Arduino Uno directement via USB pour dumper l’Eeprom du microcontrolleur Atmel, on se rend vite compte que l’eeprom n’est pas accessible et que on n’as pas vraiment accès a tout ce que l’on croit. En place de l’eeprom avec la bonne commande pour eeprom sous avrdude, il dump toujours la flash !

Impossible de lui dumper l’eeprom. Ce qu’il faut comprendre c’est que la partie “flashing” du Arduino quand on passe par la carte Arduino Uno est controlée par un genre de bios. le BootLoader. Ce bootloader ( voir ici : https://github.com/Optiboot/optiboot ) nommé optiboot, s’occupe de la gestion du flash et est posé a la fin de l’espace mémoire de la flash du microcontrolleur.

C’est lui qui entre autre au reboot regarde si il voit arriver des commandes série pour flasher. Pour le détail de sa vie et son oeuvre c’est ici : ( https://github.com/Optiboot/optiboot/wiki/HowOptibootWorks ) Pour des raisons variée dont une est l’espace utilisé, tout n’est pas implémenté, il est impossible de dumper ou flasher l’eeprom via un Arduino Uno.

C’est documenté dans le code :)

Il faut donc pour dumper sereinement l’Eeprom du atmel avoir un vrai programmeur qui va parler  au Atmel directement via le protocol SPI ( Serial Peripheral Interface ), un protocole de communication qui nécessite 4 fils  ( MISO, MOSI, CLOCK et CS ) . Si vous voulez sombrer dans le détail c’est ici (https://fr.wikipedia.org/wiki/Serial_Peripheral_Interface).

Plusieurs options s’offrent alors a vous pour voir l’Eeprom, utiliser un montage de deux arduino pour avoir un programmeur SPI, ce montage s’appelle ArduinoISP voir ici  voir https://www.arduino.cc/en/Tutorial/ArduinoISP. Acheter un vrai programmeur, ou utiliser un Buspirate qui fera aussi l’affaire.

Dump…

Et au final, victoire.

This entry was posted in Electro and tagged , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

AlphaOmega Captcha Classica  –  Enter Security Code