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?

AndreKR
fonte
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.

vicatcu
fonte
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
user17555
fonte
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

jippie
fonte
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.

RJR
fonte
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.

vicatcu
fonte
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