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?


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.


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

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


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ć.


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.