Como ler o programa atual de um Arduino?


14

Adquiri um PCB Arduino com um ATmega2560 , já programado com o gerenciador de inicialização Arduino e algum programa. Eu tenho o esboço , mas antes de mexer nele, gostaria de fazer backup do binário atual que está no controlador. Como a maioria dos Arduinos, ele é conectado ao PC usando um conversor USB-serial conectado ao TX0 e RX0 e não há interface ISP .

Aparentemente, existe um código para leitura no carregador de inicialização do Arduino , mas não tenho idéia de qual ferramenta usar para acessá-lo, pois não há item de menu no IDE do Arduino.

Que software eu preciso para ler o programa no Arduino?


Encontrado código para leitura no gerenciador de inicialização, pergunta editada.
— 21812 AndreKR

esse doseador desaprova sua pergunta, mas você pode exportar as skeches do arduino como um arquivo .HEX.
— urânio Lees

Respostas:


1

O carregador de inicialização do Arduino é uma variante do protocolo STK500 original (1.x) . O caractere 't' (ASCII 0x74) é o comando "Ler página". Portanto, talvez seja possível extrair o programa pela porta serial através do gerenciador de inicialização usando o AVRDUDE ... Mas, na melhor das hipóteses, eu acho que levará algum tempo sofisticado para executá-lo.


11

Eu joguei uma memória de Duemillenova no ATMega328P com o seguinte comando:

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

1
atenção que o programador aplicável é provavelmente o arduino e não o stk500.
— Paulo Neves

Por que quatro -vs são necessários?
— Peter Mortensen

De documentação avrdude, "Descrições 2.1 Opção" : "... -v Ativar detalhado saída. Mais opções -v aumentar o nível de detalhamento. "
— Peter Mortensen

Essa deve ser a resposta aceita.
— Caterpillaraoz

SIM! O pro micro bootloader não funcionou no meu pro micro clone. Joguei o flash em um micro clone profissional e salvei no que precisava de um gerenciador de inicialização. Usando um Arduino como ISP (linux) - despejo: ./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; escreva ./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:; Verifique:./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

O AVR de backup com thread avrdude responde à sua pergunta? Basicamente, você pode ler toda a memória de um AVR, desde que o fusível de proteção não esteja definido.

Esta é a configuração que eu uso para o ATtiny e o ATmega.

No quadro mostrado:

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

Consulte a folha de dados do controlador qual pino exato usar. Existem muitos sites na Internet que escrevem sobre como programar AVRs usando um Arduino, por exemplo: http://hlt.media.mit.edu/?p=1229


Eu preciso de um segundo arduino para isso, certo? Eu não tenho um.
— AndreKR

1
Este é um método de dois Arduino, sim.
— jippie

E, embora seja um pouco difícil de ver na imagem, os pinos usados ​​no Arduino de destino também não são TX0 e RX0, são?
— 21812 AndreKR

Não, TX e RX não são usados ​​para ICP. Atualizou a resposta um pouco.
— jippie

Bem, acho que você perdeu toda a questão da minha pergunta, provavelmente porque eu dei um título ruim. Eu refiz a pergunta toda.
— AndreKR

3

Até onde eu vejo o código fonte do carregador de inicialização do Arduino , não há como 'despejar' toda a memória dele. O carregador de inicialização suporta um modo 'monitor' que permite despejar um byte de memória por vez. No entanto, de acordo com os comentários do código-fonte "/ * as funções do monitor serão compiladas apenas quando o ATmega128 for utilizado, devido a restrições de tamanho do bloco de inicialização * /"

Como tal, acho que você está sem sorte se não quiser usar o ISP, alterar o gerenciador de inicialização ou fazer upload de um esboço para fazer isso.


Eu estava me referindo à seção que começa na linha 701 com else if(ch=='t') {.
— 21812 AndreKR

Bom ponto - não tinha visto isso.
— RJR

2

Eu pensei que havia uma opção de menu para isso, mas não estou encontrando agora. Se você possui um programador de ISP, pode usar o AVR Studio para ler a imagem da memória do chip e salvá-la em um arquivo HEX, o que permitiria restaurá-la da mesma maneira.

Editar

Em resposta ao seu comentário - é fácil! Você precisa assimilar dois diagramas de informações para obtê-las. O primeiro é o mapeamento de pinos do Arduino / ATMega2560.

insira a descrição da imagem aqui

O segundo é o mapeamento de pinos do cabeçalho do ISP / AVR:

insira a descrição da imagem aqui

Armado com essas duas fotos, você poderá ver como conectá-lo.

  • Passe um fio do DIG50 ao pino do cabeçalho do ISP do Dragon 1
  • Execute um fio do VCC para o pino 2 do cabeçalho do ISP do dragão
  • Passe um fio do DIG52 para o pino 3 do cabeçalho do ISP do dragão
  • Passe um fio do DIG51 para o pino 4 do cabeçalho do ISP do dragão
  • Passe um fio de RESET para o pino 5 do cabeçalho do ISP do dragão
  • Passe um fio do GND para o pino 6 do cabeçalho do ISP do dragão

Com esses dispositivos, você poderá usar o AVR Studio para ler o arquivo Hex do chip - deixe-me saber se precisar de mais orientações.


Eu tenho um dragão, mas não sei quais pinos do dragão devem ser conectados à interface serial do Arduino.
— 18712 AndreKR

@AndreKR ver a minha resposta editada para mais informações
— vicatcu

Conforme indicado na minha pergunta, eu sei ler o programa usando o ISP, é claro. O que eu quero saber é como fazer isso usando a interface serial (TX0 e RX0) - da mesma forma que os programas são carregados no controlador no mundo do Arduino.
— AndreKR

@AndreKR Estou confuso ... você tem um dragão, por que não gostaria de ler o programa da maneira normal - entendi mal o seu comentário sobre não saber quais pinos conectar à "interface serial"
— vicatcu

O PCB que eu tenho não tem um cabeçalho ISP. No entanto, ele possui uma interface serial e um carregador de inicialização Arduino. Dessa forma, os programas são carregados no mundo do Arduino e, aparentemente, podem ser baixados da mesma maneira.
— AndreKR
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.