Copia sw micro

come funziona il discorso di copia del micro di arduino ?
normalmente quando si usa l'ide e si carica uno sketch questo poi risulta protetto o si puo' copiare ?

il file che si riceve lo si puo' modificare ?

grazie delle info

Testato:
come funziona il discorso di copia del micro di arduino ?
normalmente quando si usa l'ide e si carica uno sketch questo poi risulta protetto o si puo' copiare ?

L'IDE di Arduino non setta nessun fuse per la protezione pertanto il firmware posto sul micro è copiabile tramite un programmatore ISP.

il file che si riceve lo si puo' modificare ?

Quello che ottieni è una immagine in binario della flash sotto forma di file .hex, se non disponi di un buon simulatore/debugger che ti permette di ricavare il listato assembly non puoi modificare nulla.
Anche una volta ottenuto l'assembly è in linguaggio macchina puro senza nessun riferimento simbolico, molto difficile da modificare anche per chi conosce bene l'assembly.

grazie delle info,

e come si fa a fare questa copia ? si puo' usare arduino come ICSP anche per farsi un backup o solo per scrivere ?

Testato:
e come si fa a fare questa copia ? si puo' usare arduino come ICSP anche per farsi un backup o solo per scrivere ?

Bella domanda, non credo sia possibile usare Arduino ISP perché non mi pare che il software preveda il supporto ai comandi STK500 per leggere la flash e salvarla su file, però è da verificare potrei anche ricordarmi male.
Magari Leo e/o Menniti che hanno "giocato" non poco con quello sketch possono darti informazioni più precise, comunque a fare una prova non ci vuole molto.

E qui scatta ennesimo capitolo alla guida del Menniti :slight_smile:

nooooooooooooo un altra versione.
Scherzo
Ciao Uwe

E IO SCRIVO! direbbe il grande Totò XD
Personalmente ho sempre fatto prove di scrittura sullo stand alone, inviando appunto il bootloader o uno sketch, francamente non ho mai nemmeno provato ad usare comandi di lettura della flash o di salvataggio su file. Leo ha sicuramente "giocato" che le EEPROM ma non so se vi ha solo scritto dati generici o se Vi ha copiato spezzoni di flash.

@ UWE: tranquillo, sono ormai così impelagato che fino a Natale potete stare tranquilli, ma poi.... ]:smiley:

ma, Natale sono solo 4 mesi.
Ciao Uwe

spetta alla eeprom non aevo pensato, quindi si deve copiare sia la flash che la eeprom.

Astro il tool ufficiale Atmega come si comporta ? ha un comando di copia flas ed uno eeprom e crea 2 files diversi ?

Testato:
spetta alla eeprom non aevo pensato, quindi si deve copiare sia la flash che la eeprom.

Astro il tool ufficiale Atmega come si comporta ? ha un comando di copia flas ed uno eeprom e crea 2 files diversi ?

Io non parlavo della EPROM della mcu ma di una banale EEPROM esterna, quelle con cui ha giocato Leo con gli attiny e che credo stia utilizzando sulla stazione meteo; poi, certo, se chi ha scritto il firmware ha buttato qualcosa nella eprom devi copiarla anche altrimenti, come si dice da noi, "prendi la vacca dai maroni" :grin:

Testato:
Astro il tool ufficiale Atmega come si comporta ? ha un comando di copia flas ed uno eeprom e crea 2 files diversi ?

Se usi un programmatore ISP, con il relativo software, puoi leggere sia la flash che la EEPROM, alcuni programmi salvano sotto forma di due distinti file .hex, altri un file .hex e un file .epp, alcuni programmi permettono di salvare come un singolo file .hex che contiene tutto.

Con avrdude potresti fare una cosa tipo:
avrdude -p m328 -c avrisp -U flash:r:"c:\dump_flash.bin":r -U eeprom:r:"c:\Dump_eepr.bin":r -U hfuse:r:"c:\high.txt":s -U lfuse:r:"c:\low.txt":s -U efuse:r:"c:\extended.txt":s
Ed avresti un immagine binaria di flash eeprom e i valori dei fuse (comodo solo per backup).

E poi come si riutilizzerebbero per scrivere su una nuova mcu?

BrainBooster:
Con avrdude potresti fare una cosa tipo:

Il punto della questione è che lo sketch ISP è solo una emulazione parziale del STK500 e non mi pare che preveda i comandi per leggere la flash come dump, come ho già detto è da verificare perché forse ci riesce lo stesso tramite il supporto per la verifica della flash, che deve comunque leggerla, però non è la stessa cosa del dump su file che usa un comando specifico, cioè la "r" che non vedo tra quelli riconosciuti dallo sketch.

Parser dei comandi dello sketch ISP

case '0': // signon
    empty_reply();
    break;
  case '1':
    if (getch() == CRC_EOP) {
      Serial.print((char) STK_INSYNC);
      Serial.print("AVR ISP");
      Serial.print((char) STK_OK);
    }
    break;
  case 'A':
    get_version(getch());
    break;
  case 'B':
    readbytes(20);
    set_parameters();
    empty_reply();
    break;
  case 'E': // extended parameters - ignore for now
    readbytes(5);
    empty_reply();
    break;

  case 'P':
    start_pmode();
    empty_reply();
    break;
  case 'U':
    here = getch() + 256 * getch();
    empty_reply();
    break;

  case 0x60: //STK_PROG_FLASH
    low = getch();
    high = getch();
    empty_reply();
    break;
  case 0x61: //STK_PROG_DATA
    data = getch();
    empty_reply();
    break;

  case 0x64: //STK_PROG_PAGE
    program_page();
    break;
    
  case 0x74: //STK_READ_PAGE
    read_page();    
    break;

  case 'V':
    universal();
    break;
  case 'Q':
    error=0;
    end_pmode();
    empty_reply();
    break;
    
  case 0x75: //STK_READ_SIGN
    read_signature();
    break;

ArduinoISP emula un programmatore ma mi pare che scriva e basta, non riesce a leggere. Lo conferma anche astrobeed.
Per leggere io ho usato per ora sempre l'USBtinyISP.

Cmq avrdude gestisce le 3 memorie del micro (EEPROM, Flash, Fuse) sia in lettura/scrittura/verifica quindi si può fare un dump sia della flash sia della Eeprom sia dei Fuse per replicare le funzioni scritte in un micro in un altro micro. Ovviamente usando un programmatore supportato.

Però resta da verificare se il chip è protetto da lettura, come disse tempo fa astrobeed esistono dei registri non visibili dai normali programmatori che proteggono la memoria-

provate no? :slight_smile:

BrainBooster:
provate no? :slight_smile:

Non funziona.
Ho usato una riga simile a quella che hai postato tu:

./avrdude -C ./avrdude.conf -p m328p -c stk500v1 -U flash:r:"flash.bin":r -U eeprom:r:"eeprom.bin":r -U hfuse:r:"high.txt":s -U lfuse:r:"low.txt":s -U efuse:r:"extended.txt":s

Ho Arduino UNO con lo sketch ArduinoISP collegato ad un Atmega328 standalone. La risposta di avrdude è stata:

avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_recv(): programmer is not responding

aggiungi -b 19200 e come programmer usa avrisp

Che co@lione..... non avevo messo la porta :astonished:
Funge funge :stuck_out_tongue:

leo72:
Che co@lione..... non avevo messo la porta :astonished:
Funge funge :stuck_out_tongue:

funge vuol dire che hai un file .hex contenente il dump della flash oppure un file .hex contenente tutti 0x00 o 0xff ?