Comment lire le programme actuel depuis un Arduino?

14

J'ai acquis un PCB Arduino avec un ATmega2560 , déjà programmé avec le chargeur de démarrage Arduino et un programme. J'ai le croquis , mais avant de le manipuler, je voudrais sauvegarder le binaire actuel qui se trouve dans le contrôleur. Comme la plupart des Arduinos, il est connecté au PC à l'aide d'un convertisseur USB-série connecté à TX0 et RX0 et il n'y a pas d' interface ISP .

Apparemment, il y a du code pour lire dans le chargeur de démarrage Arduino , mais je n'ai aucune idée de l'outil à utiliser pour y accéder car il n'y a pas d'élément de menu dans l'IDE Arduino.

De quel logiciel ai-je besoin pour lire le programme depuis l'Arduino?

AndreKR
la source
Code trouvé pour la lecture dans le chargeur de démarrage, question modifiée.
AndreKR
ce dosent répond à votre question, mais vous pouvez exporter vos skeches arduino en tant que fichier .HEX.
uranium Lees

Réponses:

1

Le chargeur de démarrage Arduino est une variante du protocole d'origine STK500 (1.x) . Le caractère 't' (ASCII 0x74) est la commande "Lire la page". Alors peut-être qu'il est possible de retirer le programme via le port série via le chargeur de démarrage en utilisant AVRDUDE ... Mais au mieux, je pense qu'il faudra un certain temps pour le retirer.

vicatcu
la source
11

J'ai vidé une mémoire de Duemillenova avec ATMega328P avec la commande suivante:

avrdude -C avrdude.conf -v -v -v -v -p atmega328p -c stk500 -U flash:r:"c:/arduino.hex":r -P\\.\COM2 -b57600
user17555
la source
1
attention que le programmeur applicable est probablement arduino et non stk500.
Paulo Neves
Pourquoi quatre -vs sont-ils nécessaires?
Peter Mortensen
Dans la documentation AVRDUDE, "2.1 Description des options" : "... -v Activer la sortie détaillée. Plus d'options -v augmentent le niveau de verbosité. "
Peter Mortensen
Cela devrait être la réponse acceptée.
Caterpillaraoz
OUI! Le chargeur de démarrage pro micro ne fonctionnait pas sur mon micro clone pro. J'ai vidé le flash d'un micro-clone professionnel et sauvegardé sur celui qui avait besoin d'un chargeur de démarrage. L' utilisation d' un Arduino comme fournisseur de services Internet (linux) - décharge: ./avrdude -C ../etc/avrdude.conf -v -v -v -v -p ATmega32u4 -c arduino -b 19200 -U flash:r:"/tmp/dump.bin":r -P /dev/ttyUSB0; écrire ./avrdude -C ../etc/avrdude.conf -v -v -v -v -p ATmega32u4 -c arduino -b 19200 -U flash:w:"/tmp/dump.bin":r -P /dev/ttyUSB0:; vérifier:./avrdude -C ../etc/avrdude.conf -v -v -v -v -p ATmega32u4 -c arduino -b 19200 -U flash:v:"/tmp/dump.bin":r -P /dev/ttyUSB0
b_laoshi
7

L' AVR de sauvegarde avec fil d' avrdude répond-il à votre question? Fondamentalement, vous pouvez lire toute la mémoire d'un AVR tant que le fusible de protection n'est pas réglé.

C'est la configuration que j'utilise pour ATtiny et ATmega.

Sur le tableau montré:

  • 11 = MOSI
  • 12 = MISO
  • 13 = SCLK

Reportez-vous à la fiche technique du contrôleur de la broche exacte à utiliser. Il existe de nombreux sites Web sur Internet écrivant sur la programmation des AVR à l'aide d'un Arduino, par exemple: http://hlt.media.mit.edu/?p=1229

jippie
la source
J'ai besoin d'un deuxième Arduino pour ça, non? Je n'en ai pas.
AndreKR
1
C'est une méthode à deux Arduino, oui.
jippie
Et, bien que ce soit un peu difficile à voir dans l'image, les broches utilisées sur l'Arduino cible ne sont pas non plus TX0 et RX0, n'est-ce pas?
AndreKR
Non, TX et RX ne sont pas utilisés pour ICP. Mis à jour un peu la réponse.
jippie
Eh bien, je pense que vous avez manqué tout le point de ma question, probablement parce que je lui ai donné un mauvais titre. J'ai reformulé toute la question.
AndreKR
3

Pour autant que je puisse voir le code source du chargeur de démarrage Arduino , il n'y a aucun moyen de «vider» toute la mémoire de celui-ci. Le chargeur de démarrage prend en charge un mode «moniteur» qui vous permet de vider un octet de mémoire à la fois. Cependant, selon les commentaires du code source, "/ * les fonctions de surveillance ne seront compilées que lors de l'utilisation d'ATmega128, en raison des contraintes de taille du bloc de démarrage * /"

En tant que tel, je suppose que vous n'avez pas de chance si vous ne souhaitez pas utiliser ISP, changer le chargeur de démarrage ou télécharger un croquis pour le faire.

RJR
la source
Je faisais référence à la section qui commence à la ligne 701 avec else if(ch=='t') {.
AndreKR
Bon point - n'avait pas vu ça.
RJR
2

Je pensais qu'il y avait une option de menu pour cela, mais je ne la trouve pas pour le moment. Si vous avez un programmeur ISP, vous pouvez utiliser AVR Studio pour lire l'image mémoire sur la puce et l'enregistrer dans un fichier HEX, ce qui vous permettrait de la restaurer par le même moyen.

Éditer

En réponse à votre commentaire - c'est facile! Vous devez assimiler deux diagrammes d'une valeur d'information pour le retirer. Le premier est le Pin Mapping Arduino / ATMega2560.

entrez la description de l'image ici

Le second est le mappage des broches de l'en-tête du FAI / AVR:

entrez la description de l'image ici

Armé de ces deux images, vous devriez pouvoir voir comment le câbler.

  • Faites passer un câble du DIG50 à la broche 1 de l'en-tête Dragon ISP
  • Exécutez un câble de VCC vers la broche d'en-tête Dragon ISP 2
  • Faites passer un câble de DIG52 à la broche 3 de l'en-tête Dragon ISP
  • Faites passer un câble de DIG51 à la broche 4 de l'en-tête Dragon ISP
  • Exécutez un câble de RESET à la broche 5 de l'en-tête Dragon ISP
  • Faites passer un fil de GND à la broche 6 de l'en-tête Dragon ISP

Une fois ceux-ci en place, vous devriez pouvoir utiliser AVR Studio pour lire le fichier Hex sur la puce - faites-moi savoir si vous avez besoin de plus d'informations.

vicatcu
la source
J'ai un Dragon, mais je ne sais pas quelles broches du Dragon connecter à l'interface série de l'Arduino.
AndreKR
@AndreKR voir ma réponse modifiée pour plus d'informations
vicatcu
Comme indiqué dans ma question, je sais comment lire le programme en utilisant ISP, bien sûr. Ce que je veux savoir, c'est comment le faire en utilisant l'interface série (TX0 et RX0) - de la même manière que les programmes sont téléchargés sur le contrôleur dans le monde Arduino.
AndreKR
@AndreKR Je suis confus ... vous avez un dragon, pourquoi ne voudriez-vous pas lire le programme normalement - j'ai mal compris votre commentaire sur le fait de ne pas savoir quelles broches se connecter à l '"interface série"
vicatcu
Le PCB que j'ai n'a pas d'en-tête ISP. Cependant, il a une interface série et un chargeur de démarrage Arduino. De cette façon, les programmes sont téléchargés dans le monde Arduino, et apparemment, ils peuvent être téléchargés de la même manière.
AndreKR