Arduino에서 현재 프로그램을 읽는 방법은 무엇입니까?


14

ATdu2560을 사용하여 Arduino 부트 로더와 일부 프로그램으로 이미 프로그래밍 된 Arduino PCB를 구입했습니다 . 스케치를 가지고 있지만 스케치 하기 전에 컨트롤러에있는 현재 바이너리를 백업하고 싶습니다. 대부분의 Arduino는 TX0 및 RX0에 연결된 USB- 직렬 변환기를 사용하여 PC에 연결되어 있으며 ISP 인터페이스 가 없습니다 .

분명히 Arduino 부트 로더 에는 읽을 코드가 있지만 Arduino IDE에는 메뉴 항목이 없으므로 액세스 할 때 사용할 도구를 모릅니다.

Arduino에서 프로그램을 읽으려면 어떤 소프트웨어가 필요합니까?


부트 로더에서 읽을 코드를 찾았습니다. 편집 된 질문입니다.
AndreKR

이 선구자에게 질문을하지만 arduino skeches를 .HEX 파일로 내보낼 수 있습니다.
우라늄 Lees

답변:


1

Arduino 부트 로더는 원래 STK500 프로토콜 (1.x) 의 변형입니다 . 문자 't'(ASCII 0x74)는 "페이지 읽기"명령입니다. 아마도 AVRDUDE를 사용하여 부트 로더를 통해 직렬 포트를 통해 프로그램을 꺼내는 것이 가능할 것입니다.


11

다음 명령으로 ATMega328P를 사용하여 Duemillenova에서 메모리를 덤프했습니다.

avrdude -C avrdude.conf -v -v -v -v -p atmega328p -c stk500 -U flash:r:"c:/arduino.hex":r -P\\.\COM2 -b57600

1
해당 프로그래머는 아마도 stk500이 아니라 arduino 일 것입니다.
Paulo Neves

왜 4 -v가 필요합니까?
피터 Mortensen

에서 AVRDUDE 문서, "2.1 옵션에 대한 설명" : "... 출력 자세한 사용 -v. 더 -v 옵션은 상세 레벨을 높일 수 있습니다. "
피터 모텐슨

이것이 정답입니다.
Caterpillaraoz

예! 프로 마이크로 부트 로더가 프로 마이크로 클론에서 작동하지 않았습니다. 작동하는 프로 마이크로 클론에서 플래시를 덤프하여 부트 로더가 필요한 플래시에 저장했습니다. Arduino를 ISP로 사용하기 (linux)-dump : ./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; 쓰기 : ./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; 확인 :./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

avrdude 스레드가 있는 Backup AVR이 질문에 대답합니까? 기본적으로 보호 퓨즈가 설정되어 있지 않으면 AVR에서 모든 메모리를 읽을 수 있습니다.

이것은 ATtiny와 ATmega에 사용하는 설정입니다.

보드에 표시된 :

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

사용할 정확한 핀은 컨트롤러의 데이터 시트를 참조하십시오. 인터넷에 Arduino를 사용하여 AVR을 프로그래밍하는 것에 대한 웹 사이트가 많이 있습니다. http://hlt.media.mit.edu/?p=1229


나는 그것을 위해 두 번째 arduino가 필요합니다. 나는 하나도 없다.
AndreKR

1
이것은 두 가지 Arduino 방법입니다.
jippie

그리고 그림에서보기는 어렵지만 대상 Arduino에서 사용되는 핀은 TX0 및 RX0이 아닙니다.
AndreKR

TX와 RX는 ICP에 사용되지 않습니다. 답변을 약간 업데이트했습니다.
jippie

글쎄, 나는 당신이 내 질문의 요점을 놓쳤다 고 생각합니다. 나는 모든 질문을 표현했다.
AndreKR

3

Arduino 부트 로더 소스 코드를 볼 수있는 한 , 모든 메모리를 '덤프'하는 방법은 없습니다. 부트 로더는 한 번에 하나의 메모리 바이트를 덤프 할 수있는 '모니터'모드를 지원합니다. 그러나 소스 코드 설명에 따르면 "/ * 모니터 기능은 ATmega128을 사용할 때만 부트 블록 크기 제한으로 인해 컴파일됩니다 * /"

따라서 ISP를 사용하고 싶지 않다면 부트 로더를 변경하거나 스케치를 업로드하여 운이 좋지 않은 것 같습니다.


701 행에서 시작하는 섹션을 참조하고있었습니다 else if(ch=='t') {.
AndreKR

좋은 지적-그것을 보지 못했습니다.
RJR

2

메뉴 옵션이 있다고 생각했지만 지금은 찾지 못했습니다. ISP 프로그래머가있는 경우 AVR Studio를 사용하여 칩에서 메모리 이미지를 읽고 HEX 파일에 저장하면 동일한 방법으로 복원 할 수 있습니다.

편집하다

귀하의 의견에 대한 답변-간단합니다! 정보를 얻기 위해서는 두 개의 다이어그램에 해당하는 정보를 흡수해야합니다. 첫 번째는 Arduino / ATMega2560 핀 매핑입니다.

여기에 이미지 설명을 입력하십시오

두 번째는 ISP 헤더 / AVR 핀 매핑입니다.

여기에 이미지 설명을 입력하십시오

이 두 사진으로 무장하면 배선 방법을 알 수 있습니다.

  • DIG50에서 Dragon ISP 헤더 핀 1로 와이어 연결
  • VCC에서 Dragon ISP 헤더 핀 2로 와이어 연결
  • DIG52에서 Dragon ISP 헤더 핀 3으로 와이어 연결
  • DIG51에서 Dragon ISP 헤더 핀 4로 와이어 연결
  • RESET에서 Dragon ISP 헤더 핀 5로 와이어 연결
  • GND에서 Dragon ISP 헤더 핀 6으로 와이어 연결

그 자리에 AVR Studio를 사용하여 칩에서 16 진수 파일을 읽을 수 있어야합니다. 자세한 지침이 필요하면 알려주십시오.


Dragon이 있지만 Arduino의 직렬 인터페이스에 연결하기 위해 Dragon의 핀을 모르겠습니다.
AndreKR

@AndreKR 자세한 내용은 편집 한 답변 참조
vicatcu

내 질문에 명시된 것처럼 물론 ISP를 사용하여 프로그램을 읽는 방법을 알고 있습니다. 내가 알고 싶은 것은 프로그램이 Arduino 세계의 컨트롤러에 업로드되는 것과 같은 방식으로 직렬 인터페이스 (TX0 및 RX0)를 사용하여 수행하는 방법입니다.
AndreKR

@AndreKR 혼란 스러워요 ... 당신은 용을 가지고 있습니다. 왜 일반적인 방법으로 프로그램을 읽고 싶지
않습니까

내가 가지고있는 PCB에는 ISP 헤더가 없습니다. 그러나 직렬 인터페이스와 Arduino 부트 로더가 있습니다. 그렇게하면 프로그램이 Arduino 세계에 업로드되고 같은 방식으로 다운로드 될 수 있습니다.
AndreKR
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.