Go Down

Topic: Upload Sketch su Arduino Mega 2560 da rete o via SD (Read 19208 times) previous topic - next topic

ambro7

Buongiorno a tutti!
Ho una decina di Arduino Mega 2560 dislocati in un ambiente produttivo, che rilevano impulsi digitali ed accendono delle lampade di segnalazione. Tutti gli Arduino Mega hanno la Ethernet Shield, e inviano-ricevono dati con dei Pc client(un pc ogni 4 Arduino),  attraverso messaggi Socket.
La mia necessità è quella di poter caricare lo sketch da remoto da un singolo pc, attraverso la rete, in modo da poter apportare modifiche al programma da remoto, senza recarmi necessariamente dal cliente.
Ho fatto diverse ricerche in internet, ma in nessun caso si utilizzavano Arduino Mega per lo scopo, ma solo Uno o 2009, con bootloader modificati, e forse per questo motivo sono riuscito a briccare una scheda.

Spero di aver dato tutte le informazioni necessarie per capire la mia esigenza.
Grazie mille

PaoloP

#1
Jun 19, 2013, 05:03 pm Last Edit: Jun 19, 2013, 05:17 pm by PaoloP Reason: 1
Questo bootloader (che non ho mai usato!) supporta anche la Mega
--> https://github.com/codebendercc/Ariadne-Bootloader

Per sloccare la Mega brikkata usa la programmazione ISP.  ;)

Naturalmente ti puoi anche iscrivere a Codebender, link in firma, e flashare le board tramite la rete via Web.  ;)
Codecender a volte è un po skizzinoso con alcuni codici per cui non è possibile compilare e inviate la totalità degli sketch.

ambro7

Ciao Paolo P. ,
grazie per la risposta, credo che quella indicata da te con Ariadne Bootloader sia la strada giusta.
Sono due giorni però che provo a caricare il bootloader, ma senza risultati.
Anche caricando il bootloader originale, riscontro degli errori.
Per la programmazione dell' Arduino Mega(MEGA2) utilizzo un Arduino Mega con Sketch Arduino ISP(MEGA1), con il seguente collegamento:
-Pin 53 MEGA1 --> Reset MEGA2
-Pin 51 MEGA1 --> Pin 51 MEGA2
-Pin 52 MEGA1 --> Pin 52 MEGA2
-Pin 50 MEGA1 --> Pin 50 MEGA2
-Pin GND MEGA1 --> Pin GND MEGA2
-Pin +5V MEGA1 --> Pin +5V MEGA2

Appena parte, i led TX-RX del MEGA1 cominciano a lampeggiare velocemente, con il LED del pin 13 Fisso, mentre sull'Arduino da programmare, rimane il LED del pin 13 fisso.
Dopo circa 3 minuti e mezzo si fermano e sull'Ide compare il seguente messaggio di errore:

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x1e000
         0xff != 0x0d
avrdude: verification error; content mismatch
avrdude: Send: Q [51]   [20]
avrdude: Recv: . [14]
avrdude: Recv: . [10]

avrdude done.  Thank you.

PaoloP

#3
Jun 21, 2013, 09:46 am Last Edit: Jun 21, 2013, 09:48 am by PaoloP Reason: 1
Per la programmazione del bootloader segui la guida di Michele Menniti --> http://michelemenniti.it/arduino_burn_bootloader.php
Pagina 17 e 25.

Nel caso chiedi a lui o spera che passi di qui.  ;)

ambro7

E' proprio quella che ho seguito!!! :~
Ora provo con la programmazione via Parallela, e se non funzionerà nemmeno quella, sarà un bel problema.

Grazie

ambro7

Ho riprovato seguendo la Guida del Prof. Menniti, ma nulla. Testato con programmazione da porta parallela con Adattatore Autocostruito come da indicazioni sul sito ufficiale Arduino, ma nulla.

PaoloP

Lascia perdere la programmazione parellela. Usa quella ISP.
Con un WatchDog settato a 30millisecondi hai poco spazio di manovra per la programmazione.
--> http://forum.arduino.cc/index.php?topic=78195.0

menniti

Ciao,
l'unica cosa che riesco a dirti al volo, poi ci sentiamo con calma in serata, se non risolvi, è sul messaggio d'errore:
Code: [Select]
0xff != 0x0d
Nella board che hai selezionato al momenti di caricare il bootloader dovresti trovare l'extended fuse settato a ff o 0d, cambialo con l'altro valore e vedi cosa succede.
Scusa ma in questo momento non faccio in tempo a leggere il Topic. Più tardi riuscirò e leggere l'esito di questa prova.
Confermo il consiglio di lasciar perdere altri tipi di programmazione, arriviamo prima a fare tutte le prove ISP :)
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

ambro7

#8
Jun 21, 2013, 01:23 pm Last Edit: Jun 21, 2013, 01:59 pm by ambro7 Reason: 1
Grazie per la risposta velocissima  :)
Ho provato a scrivere l' efuse, ma in entrambi i casi il caricamento del bootloader è fallito
Scrittura efuse FF
Code: [Select]
c:\Program Files (x86)\Arduino\hardware\tools\avr\bin>avrdude.exe -CC:\avrdude.c
onf -patmega2560 -cstk500v1 -P\\.\COM8 -b19200 -Uefuse:w:0xFF:m

avrdude.exe: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.06s

avrdude.exe: Device signature = 0x1e9801
avrdude.exe: reading input file "0xFF"
avrdude.exe: writing efuse (1 bytes):

Writing | ################################################## | 100% 0.06s

avrdude.exe: 1 bytes of efuse written
avrdude.exe: verifying efuse memory against 0xFF:
avrdude.exe: load data efuse data from input file 0xFF:
avrdude.exe: input file 0xFF contains 1 bytes
avrdude.exe: reading on-chip efuse data:

Reading | ################################################## | 100% 0.01s

avrdude.exe: verifying ...
avrdude.exe: 1 bytes of efuse verified

avrdude.exe: safemode: Fuses OK

avrdude.exe done.  Thank you.


Prova Scrittura Bootloader
Code: [Select]
avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x1e000
        0xff != 0x8e
avrdude: verification error; content mismatch
avrdude: Send: Q [51]   [20]
avrdude: Recv: . [14]
avrdude: Recv: . [10]

avrdude done.  Thank you.


Scrittura efuse 0D
Code: [Select]

c:\Program Files (x86)\Arduino\hardware\tools\avr\bin>avrdude.exe -CC:\avrdude.c
onf -patmega2560 -cstk500v1 -P\\.\COM8 -b19200 -Uefuse:w:0x0d:m

avrdude.exe: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.07s

avrdude.exe: Device signature = 0x1e9801
avrdude.exe: reading input file "0x0d"
avrdude.exe: writing efuse (1 bytes):

Writing |                                                    | 0% 0.00s ***faile
d;
Writing | ################################################## | 100% 0.16s

avrdude.exe: 1 bytes of efuse written
avrdude.exe: verifying efuse memory against 0x0d:
avrdude.exe: load data efuse data from input file 0x0d:
avrdude.exe: input file 0x0d contains 1 bytes
avrdude.exe: reading on-chip efuse data:

Reading | ################################################## | 100% 0.03s

avrdude.exe: verifying ...
avrdude.exe: verification error, first mismatch at byte 0x0000
            0x0d != 0xfd
avrdude.exe: verification error; content mismatch

avrdude.exe: safemode: efuse changed! Was d, and is now fd
Would you like this fuse to be changed back? [y/n] n
avrdude.exe: safemode: Fuses OK

avrdude.exe done.  Thank you.


Prova Scrittura Bootloader
Code: [Select]
avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x1e000
        0xff != 0x8e
avrdude: verification error; content mismatch
avrdude: Send: Q [51]   [20]
avrdude: Recv: . [14]
avrdude: Recv: . [10]

avrdude done.  Thank you.




Ora se provo a caricare uno sketch qualsiasi non riesco e va in errore
Code: [Select]

avrdude: Version 5.11, compiled on Sep  2 2011 at 19:38:36
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2009 Joerg Wunsch

         System wide configuration file is "C:\Program Files (x86)\Arduino\hardware/tools/avr/etc/avrdude.conf"

         Using Port                    : \\.\COM9
         Using Programmer              : stk500v2
         Overriding Baud Rate          : 115200
avrdude: Send: . [1b] . [01] . [00] . [01] . [0e] . [01] . [14]
avrdude: Recv:
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: Send: . [1b] . [01] . [00] . [01] . [0e] . [01] . [14]
avrdude: Recv:
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: Send: . [1b] . [01] . [00] . [01] . [0e] . [01] . [14]
avrdude: Recv:
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: Send: . [1b] . [01] . [00] . [01] . [0e] . [01] . [14]
avrdude: Recv:
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: Send: . [1b] . [01] . [00] . [01] . [0e] . [01] . [14]
avrdude: Recv:
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: Send: . [1b] . [01] . [00] . [01] . [0e] . [01] . [14]
avrdude: Recv:
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_getsync(): timeout communicating with programmer
         AVR Part                      : ATMEGA2560
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PA0
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    10     8    0 no       4096    8      0  9000  9000 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           flash         65    10   256    0 yes    262144  256   1024  4500  4500 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : STK500V2
         Description     : Atmel STK500 Version 2.x firmware
         Programmer Model: Unknown
avrdude: Send: . [1b] . [01] . [00] . [02] . [0e] . [03] . [90] . [85]
avrdude: Recv:
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: Send: . [1b] . [01] . [00] . [01] . [0e] . [01] . [14]

menniti

Figurati :)
quindi stai usando AVRDUDE.....A me pare che non stia scrivendo nemmeno i fuse, visto che escono failed di qua e di là.
Ho letto ora tutto il Topic, se il micro è bricked non c'è niente da fare, è possibile applicare solo la programmazione HV, ma nel caso di quel micro è un lavoro da squilibrati, in quando dovresti dissaldarlo dalla mega, risaldarlo su una scheda appositamente creata per la programmaziome HV, quindi la domanda di conferma è:
una delle due schede non funziona più correttamente con l'IDE? Perché ritieni di averla brickata, hai fatto in precedenza prove ISP con fuse sballati?
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

ambro7

Ho usato AVRDUDE solo per provare a scrivere i fuse (non sapendo come fare altrimenti).
La scrittura del efuse a FF va a buon fine, ma non quella a 0D.
Se adesso provo a scrivere il bootloader originale , quando termina in errore(byte 0x1e000 0xff != 0x0d), ho il led del pin 13 che lampeggia a intermittenza.
Nonostante questo errore, se lo collego via usb e invio lo sketch del blink, lo upload e funziona( per essere sicuro ho impostato il blink a 100 ms invece di 1000).

Quindi in teoria non dovrebbe essere brikkato.

Il tutto è nato quando ho provato a caricare il bootloader Adriadne.

leo72

$0D può non essere accettato perché passi al chip il valore di fuse che non esistono. Secondo il sito Fuse Calculator:
http://www.engbedded.com/fusecalc

con $0D potresti avere problemi, prova con $05.

menniti

Sì, è come dice Leo, allora puoi provare 0x05 o 0x07, tanto incidono solo sul BOD level.
Però il blink come prova non è idoneo, quel cavolo di LED lampeggia per la qualsiasi; impostalo su un pin diverso e aggiungi una R + led al volo, oppure carica uno sketch che mostri qualcosa sul serial monitor, insomma una prova più seria, ok?
Se risponde all'IDE non c'è ragione per la quale non funzioni l'ISP....
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

ambro7

Provato a cambiare i fuse:

Fuse-->05:
Code: [Select]
c:\Program Files (x86)\Arduino\hardware\tools\avr\bin>avrdude.exe -CC:\avrdude.c
onf -patmega2560 -cstk500v1 -P\\.\COM8 -b19200 -Uefuse:w:0x05:m

avrdude.exe: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.07s

avrdude.exe: Device signature = 0x1e9801
avrdude.exe: reading input file "0x05"
avrdude.exe: writing efuse (1 bytes):

Writing |                                                    | 0% 0.00s ***faile
d;
Writing | ################################################## | 100% 0.16s

avrdude.exe: 1 bytes of efuse written
avrdude.exe: verifying efuse memory against 0x05:
avrdude.exe: load data efuse data from input file 0x05:
avrdude.exe: input file 0x05 contains 1 bytes
avrdude.exe: reading on-chip efuse data:

Reading | ################################################## | 100% 0.03s

avrdude.exe: verifying ...
avrdude.exe: verification error, first mismatch at byte 0x0000
             0x05 != 0xfd
avrdude.exe: verification error; content mismatch

avrdude.exe: safemode: efuse changed! Was 5, and is now fd
Would you like this fuse to be changed back? [y/n] n
avrdude.exe: safemode: Fuses OK

avrdude.exe done.  Thank you.




Provato a caricare Bootloader:
Code: [Select]
avrdude: Recv: . [10]
# | 100% 170.56s

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x1e000
         0xff != 0x8e
avrdude: verification error; content mismatch
avrdude: Send: Q [51]   [20]
avrdude: Recv: . [14]
avrdude: Recv: . [10]

avrdude done.  Thank you.


Fuse -->07

Code: [Select]
avrdude: Recv: . [10]
# | 100% 170.56s

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x1e000
         0xff != 0x8e
avrdude: verification error; content mismatch
avrdude: Send: Q [51]   [20]
avrdude: Recv: . [14]
avrdude: Recv: . [10]

avrdude done.  Thank you.


Caricamento Bootloader:
Code: [Select]
# | 100% 170.10s

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x1e000
         0xff != 0x8e
avrdude: verification error; content mismatch
avrdude: Send: Q [51]   [20]
avrdude: Recv: . [14]
avrdude: Recv: . [10]

avrdude done.  Thank you.



Fatte queste prove caricato sketch che scrive su Seriale -->la scheda funziona e sul monitor seriale leggo ciò che scrivo.




menniti

E' proprio un comportamento strano, che IDE stai usando?
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

Go Up