Jak czytać bieżący program z Arduino?

14

Kupiłem Arduino PCB z ATmega2560 , już zaprogramowanym za pomocą bootloadera Arduino i jakiegoś programu. Mam szkic , ale zanim zacznę go bawić, chcę wykonać kopię zapasową bieżącego pliku binarnego znajdującego się w kontrolerze. Jak większość Arduinos, jest podłączony do komputera za pomocą konwertera USB-na-szeregowego podłączonego do TX0 i RX0 i nie ma interfejsu ISP .

Najwyraźniej w programie ładującym Arduino jest kod do odczytu , ale nie mam pojęcia, którego narzędzia użyć, aby uzyskać do niego dostęp, ponieważ w Arduino IDE nie ma pozycji menu.

Jakiego oprogramowania potrzebuję, aby odczytać program z Arduino?

AndreKR
źródło
Znaleziono kod do odczytu w bootloaderze, edytowane pytanie.
AndreKR
nie zgadza się to z twoim pytaniem, ale możesz wyeksportować swoje szkice arduino jako plik .HEX.
uran Lees

Odpowiedzi:

1

Program ładujący Arduino jest wariantem oryginalnego protokołu STK500 (1.x) . Znak „t” (ASCII 0x74) to polecenie „Czytaj stronę”. Być może więc możliwe jest wyciągnięcie programu przez port szeregowy za pomocą programu ładującego za pomocą AVRDUDE ... Ale w najlepszym razie uważam, że jego wymyślenie zajmie trochę czasu.

vicatcu
źródło
11

Zrzuciłem pamięć z Duemillenova z ATMega328P za pomocą następującego polecenia:

avrdude -C avrdude.conf -v -v -v -v -p atmega328p -c stk500 -U flash:r:"c:/arduino.hex":r -P\\.\COM2 -b57600
użytkownik17555
źródło
1
uwaga, że ​​programista dotyczy prawdopodobnie arduino, a nie stk500.
Paulo Neves,
Dlaczego cztery są -vpotrzebne?
Peter Mortensen
Z dokumentacji AVRDUDE, „Opisy opcji 2.1” : „... -v Włącz pełne wyjście. Więcej opcji -v zwiększa poziom szczegółowości.
Peter Mortensen
To powinna być zaakceptowana odpowiedź.
Caterpillaraoz,
TAK! Pro micro bootloader nie działał na moim pro micro clone. Zrzuciłem flash z działającego mikro-klona pro i zapisałem w tym, który potrzebował bootloadera. Korzystanie z Arduino jako ISP (Linux) - wysypisko: ./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; napisz ./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:; sprawdź:./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

Czy Backup AVR z wątkiem avrdude odpowiada na twoje pytanie? Zasadniczo możesz odczytać całą pamięć z AVR, o ile nie jest ustawiony bezpiecznik ochronny.

To jest konfiguracja, której używam dla ATtiny i ATmega.

Na pokazanej tablicy:

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

Zapoznaj się z arkuszem danych sterownika, którego dokładnie użyć pin. Istnieje wiele stron internetowych piszących o programowaniu AVR za pomocą Arduino, np .: http://hlt.media.mit.edu/?p=1229

jippie
źródło
Potrzebuję do tego drugiego arduino, prawda? Ja nie mam
AndreKR,
1
To jest metoda dwóch Arduino, tak.
jippie
I chociaż na zdjęciu jest to trochę trudne do zobaczenia, szpilki zastosowane w docelowym Arduino również nie są TX0 i RX0, prawda?
AndreKR
Nie, TX i RX nie są używane do ICP. Zaktualizowałem trochę odpowiedź.
jippie
Cóż, myślę, że nie trafiłeś w sedno mojego pytania, prawdopodobnie dlatego, że nadałem mu zły tytuł. Przeredagowałem całe pytanie.
AndreKR
3

O ile widzę, kod źródłowy programu ładującego Arduino , nie ma sposobu na „zrzucenie” z niego całej pamięci. Program ładujący obsługuje tryb „monitorowania”, który pozwala zrzucić jeden bajt pamięci na raz. Jednak zgodnie z komentarzem do kodu źródłowego „/ * funkcje monitora będą kompilowane tylko przy użyciu ATmega128, ze względu na ograniczenia rozmiaru bootblocka * /”

W związku z tym myślę, że nie masz szczęścia, jeśli nie chcesz korzystać z usług dostawcy internetowego, zmienić bootloadera lub przesłać szkic, aby to zrobić.

RJR
źródło
Miałem na myśli sekcję rozpoczynającą się od linii 701 else if(ch=='t') {.
AndreKR
Dobra uwaga - nie widziałem tego.
RJR
2

Myślałem, że jest do tego opcja menu, ale nie znajduję jej teraz. Jeśli masz programistę ISP, możesz użyć AVR Studio do odczytania obrazu pamięci z układu scalonego i zapisania go w pliku HEX, co umożliwi przywrócenie go w ten sam sposób.

Edytować

W odpowiedzi na Twój komentarz - to proste! Aby przyswoić je, musisz przyswoić sobie informacje o wartości dwóch diagramów. Pierwszym z nich jest mapowanie pinów Arduino / ATMega2560.

wprowadź opis zdjęcia tutaj

Drugi to mapowanie nagłówka / AVR ISP:

wprowadź opis zdjęcia tutaj

Uzbrojeni w te dwa zdjęcia powinieneś zobaczyć, jak to połączyć.

  • Poprowadź przewód z DIG50 do styku 1 złącza Dragon ISP
  • Poprowadź przewód od VCC do styku 2 złącza Dragon ISP
  • Poprowadź przewód z DIG52 do styku 3 złącza Dragon ISP
  • Poprowadź przewód z DIG51 do styku 4 złącza Dragon ISP
  • Poprowadź przewód od RESETU do styku 5 złącza Dragon ISP
  • Poprowadź przewód z GND do styku 6 złącza Dragon ISP

Po ich wdrożeniu powinieneś być w stanie użyć AVR Studio do odczytania pliku Hex z układu - daj mi znać, jeśli potrzebujesz więcej wskazówek.

vicatcu
źródło
Mam smoka, ale nie wiem, które piny smoka łączą się z interfejsem szeregowym Arduino.
AndreKR,
@AndreKR zobacz moją zredagowaną odpowiedź, aby uzyskać więcej informacji
vicatcu
Jak stwierdzono w moim pytaniu, oczywiście wiem, jak czytać program za pomocą ISP. Chcę wiedzieć, jak to zrobić za pomocą interfejsu szeregowego (TX0 i RX0) - w ten sam sposób, w jaki programy są przesyłane do kontrolera w świecie Arduino.
AndreKR
@AndreKR Jestem zdezorientowany ... masz smoka, dlaczego nie chcesz czytać programu w normalny sposób - źle zrozumiałem twój komentarz na temat tego, że nie wiem, które piny połączyć z „interfejsem szeregowym”
vicatcu
Płytka PCB, którą posiadam, nie ma nagłówka ISP. Ma jednak interfejs szeregowy i moduł ładujący Arduino. W ten sposób programy są przesyłane do świata Arduino i najwyraźniej można je pobrać w ten sam sposób.
AndreKR