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?


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.


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

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


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.


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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.