Pages: [1] 2 3 ... 21   Go Down
Author Topic: Strano problema con signature scrivendo il bootloader  (Read 10524 times)
0 Members and 1 Guest are viewing this topic.
MC
Offline Offline
God Member
*****
Karma: 13
Posts: 917
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buongiorno a tutti,
Ieri sera finalmente sono riuscito a trovare uno spicciolo di tempo per finire la mia shield per programmare atmega vergini (@menniti alla fine il quarzo l'ho messo, per siciurezza !  smiley-lol) ed andando a fare le prime programmazioni è successa una cosa alla quale non ho trovato una spiegazione plausibile.

Ho degli atmega328pu (vergini), provando a scriverci su il bootloader (bootloader di arduino uno) dall'ide di arduino ricevevo un messaggio che diceva che per il 328p si aspettava una signature diversa.
Nessun problema, armato di pazienza mi sono modificato avrdude.conf aggiungendo una nuova entry specifica per il chip 328pu, copiando lo schema dal 328 normale e cambiando la signature.
Dopodichè ho aggiunto anche una nuova entry (che ho chiamato atmega 328pu su shield)in board.txt di arduino in maniera tale che ho sempre a disposizione le impostazioni delle altre schede e in aggiunta ho questo nuovo set di configurazione che utilizza però la mcu aggiunta poco sopra su avrdude.

Riprovo a scrivere il bootloader, questa volta settando su board la mia 'atmega 328pu su shield' , burn bootloader with arduino as ISP e via, perfetto al primo colpo.
A questo punto prendo il chip appena programmato , e lo metto al posto del chip che ho nella arduino uno, ci scrivo sopra Blink, e il led lampeggia, perfetto direi.
Per sfizio ora ci programmo sopra ISP e provo a riscrivere il bootloader sul chip che originariamente avevo nella arduino uno.
Anche qui perfetto al primo colpo, se non che mi accorgo che nel frattempo non ho cambiato l'impostazione su board, pertanto ho scritto anche questo chip con l'impostazione 'atmega 328pu su shield' che dovrebbe puntare ad un chip con la signature diversa, inquanto 328PU.
Stranito dal fatto, ho controllato con la lente il chip, ed in effetti anche quest'ultimo perlomeno dalla scritta risulta essere un 328PU.

La cosa strana viene ora, sempre con lo stesso chip , che ricordo essere da sigla un atmega328-pu, però estratto dalla mia arduino uno, provo a cambiare board e selezionare arduino uno, vado a riscrivere il bootloader e ... baaaammm , funziona lo stesso al primo colpo!
MA COME!!! ora non la fà la verifica della signature????

Non sazio rimonto il chip originale sulla arduino uno, riscrivo blik, e constato che è tutto ok, riscrivo ISP e riprovo a caricare il bootloader sul mio (ex) chip vergine 328-pu usando come impostazioni la board arduino uno, eeeeee .... bbbbaaaaaaaaammmm, messaggio che dice aspettava una signature diversa!!!(come sopra)

Sunto della situazione, dati 2 chip con codice identico atmega 328-pu, perchè uno lo riesco a scrivere con entrambi i profili e uno invece solo con il suo?

« Last Edit: October 13, 2011, 03:24:52 am by niki77 » Logged

Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9186
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

La signature è diversa tra il 328 e il 328p il 328p-PU ha la stessa signature del 328p perché la PU identifica il case, 28P3, e non ha nulla a che vedere col core del micro.
L'elenco di tutte le signature del 168/328 le trovi a partire a pagina 301-302 del datasheet, capitolo 28 paragrafo 3, e come puoi vedere da solo non esiste una signature specifica per la versione 328p-PU, c'è solo quella per il 328 e il 328p.

Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21625
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Mi hai anticipato  smiley (la "P" sta per "PicoPower", ossia identifica i modelli a basso consumo energetico).

Potresti pubblicare il file boards.txt che usi ed i messaggi esatti di avrdude perché tra "baaam", "perfetto", hai però dimenticato i dati essenziali  smiley-wink
Logged


MC
Offline Offline
God Member
*****
Karma: 13
Posts: 917
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

La signature è diversa tra il 328 e il 328p il 328p-PU ha la stessa signature del 328p perché la PU identifica il case, 28P3, e non ha nulla a che vedere col core del micro.
L'elenco di tutte le signature del 168/328 le trovi a partire a pagina 301-302 del datasheet, capitolo 28 paragrafo 3, e come puoi vedere da solo non esiste una signature specifica per la versione 328p-PU, c'è solo quella per il 328 e il 328p.



Intanto grazie, però c'è qualcosa che non mi torna.
Io ho identificato il chip leggendo il codice apposto sopra, e la scritta mi sembra identica tra i due , non ci metto le mani sul fuoco però mi pareva così (erano le 2.30 di stanotte, tutto è possibile!  smiley-sad)
A parita di sigla scritta sopra, paradossalmente i chip non dovrebbero essere identici?
E poi la cosa strana come dicevo è un altra, perchè un chip può essere bootloaderato con entrambi i profili (ergo 2 signature diverse) e uno no?
Intanto vedo di prendere in mano i chip e verificare meglio.
Logged

Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9186
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Intanto grazie, però c'è qualcosa che non mi torna.

Per dirla tutta a me non torna questa tua affermazione:

Quote
Nessun problema, armato di pazienza mi sono modificato avrdude.conf aggiungendo una nuova entry specifica per il chip 328pu, copiando lo schema dal 328 normale e cambiando la signature.

Come puoi aver cambiato la signature visto che è identica per tutti e due i chip ? Il datasheet non mente e in questi casi è lui che fa testo  smiley
Logged

MC
Offline Offline
God Member
*****
Karma: 13
Posts: 917
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma ne sei estremamente sicuro?
Da quello che so io (letto in altri post di questo fourm in inglese) la signature impostata per il 328 di arduino uno (atmega328p) è 1E 94 0F
Quella che ho dovuto impostare io per far quagliare il tutto è 1E 94 14.

se trovo il link lo riallego.


Eccolo :

http://arduino.cc/forum/index.php/topic,58670.0.html
« Last Edit: October 13, 2011, 06:04:28 am by niki77 » Logged

Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21625
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Scusami ma io flasho da almeno 6 mesi gli Atmega328p-20pu in standalone e non ho mai modificato la signature nel file boards.txt.
Che poi, a ripensarci, la signature manco c'è nel file originale. C'è solo il modello di micro che, per gli Atmega dell'Arduino, sono "atmega328p".
Inoltre avrdude non supporta neanche gli atmega328 senza "p", ho appena provato.
Logged


Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21625
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

PS: confermo che la signature per i 328p è proprio 1E 95 0F. E' quella che mi da avrdude del mio 328 standalone.
Scusa, ma puoi postare questo boards.txt o no?
Logged


Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9186
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma ne sei estremamente sicuro?

Il datasheet dice che è esattamente come dico io quindi si, sono sicuro al 1000%  smiley-mr-green

Quote
Da quello che so io (letto in altri post di questo fourm in inglese) la signature impostata per il 328 di arduino uno (atmega328p) è 1E 94 0F
Quella che ho dovuto impostare io per far quagliare il tutto è 1E 94 14.

La signature del 328 è 0x1E 0x95 0x14, la signature del 328p è 0x1E 0x95 0x0F, quelle con lo 0x94 sono del 168 e comunque il terzo valore è diverso.
0x1E 0x94 0x14 non è una signature valida ne per il 168 ne per il 328, se non ci credi leggi il datasheet.
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9186
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Che poi, a ripensarci, la signature manco c'è nel file originale. C'è solo il modello di micro che, per gli Atmega dell'Arduino, sono "atmega328p".
Inoltre avrdude non supporta neanche gli atmega328 senza "p", ho appena provato.

Esatto, la signature non c'è nel file boards.txt, quella si trova nel file di configurazione di avrdude, il famigerato avrdude.conf, che contiene tutte le informazioni per i vari modelli di micro inclusa la signature.
Logged

MC
Offline Offline
God Member
*****
Karma: 13
Posts: 917
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


Piccola precisazione , a memoria avevo confuso il secondo byte della signature, è in effetti 95, non 94

Su file boards.txt ci sono solo i parametri da passare ad avrdude
Su boards.txt troverai solo atmega328p, perlomeno in quello di serie.
Nel mio invece ho replicato il blocco di arduino uno

##############################################################

uno.name=Arduino Uno
uno.upload.protocol=stk500
uno.upload.maximum_size=32256
uno.upload.speed=115200
uno.bootloader.low_fuses=0xff
uno.bootloader.high_fuses=0xde
uno.bootloader.extended_fuses=0x05
uno.bootloader.path=optiboot
uno.bootloader.file=optiboot_atmega328.hex
uno.bootloader.unlock_bits=0x3F
uno.bootloader.lock_bits=0x0F
uno.build.mcu=atmega328p
uno.build.f_cpu=16000000L
uno.build.core=arduino

e modificando la copia facendola diventare

##############################################################

atmega328pu.name=Atmega328PU su shield
atmega328pu.upload.protocol=stk500
atmega328pu.upload.maximum_size=32256
atmega328pu.upload.speed=115200
atmega328pu.bootloader.low_fuses=0xff
atmega328pu.bootloader.high_fuses=0xde
atmega328pu.bootloader.extended_fuses=0x05
atmega328pu.bootloader.path=optiboot
atmega328pu.bootloader.file=optiboot_atmega328.hex
atmega328pu.bootloader.unlock_bits=0x3F
atmega328pu.bootloader.lock_bits=0x0F
atmega328pu.build.mcu=atmega328pu
atmega328pu.build.f_cpu=16000000L
atmega328pu.build.core=arduino

in modo tale da avere sulla lista delle boards anche la voce  'Atmega328PU su shield'

Poi su avrdude.conf ho creato la entry per gestire il famoso 'atmega328pu' che ho referenziato nel file board, altrimenti va in errore e dice che non se lo trova (giustamente)

[allego solo le prime righe giusto per capire]

anche qui duplicando l'intera definizione per Atmega328

#------------------------------------------------------------
# ATmega328
#------------------------------------------------------------

part
    id              = "m328p";
    desc            = "ATMEGA328P";
     has_debugwire = yes;
     flash_instr   = 0xB6, 0x01, 0x11;
     eeprom_instr  = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00,
                0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF,
                0x99, 0xF9, 0xBB, 0xAF;
    stk500_devcode  = 0x86;
    # avr910_devcode = 0x;
    signature       = 0x1e 0x95 0x0F;
    pagel           = 0xd7;
    bs2             = 0xc2;
    chip_erase_delay = 9000;

etc etc etc ...

e modificando la copia facendola diventare

#------------------------------------------------------------
# ATmega328PU
#------------------------------------------------------------

part
    id              = "m328pu";
    desc            = "ATMEGA328PU";
     has_debugwire = yes;
     flash_instr   = 0xB6, 0x01, 0x11;
     eeprom_instr  = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00,
                0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF,
                0x99, 0xF9, 0xBB, 0xAF;
    stk500_devcode  = 0x86;
    # avr910_devcode = 0x;
    signature       = 0x1e 0x95 0x14;
    pagel           = 0xd7;
    bs2             = 0xc2;
    chip_erase_delay = 9000;

etc etc etc ...

e così facendo mi trovo nelle condizioni che ho detto.

Signatura esistente o meno, io riesco a programmare i miei nuovi micro SOLO utilizzando queste impostazioni,
se vado a reimpostare la signature a 1e 95 0f non li scrive!


Logged

Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9186
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset


Piccola precisazione , a memoria avevo confuso il secondo byte della signature, è in effetti 95, non 94

Si ma tu non stai usando un ATmega328p stai usando un ATmega328, la PU indica solo il case, la "p" dopo il 328 fa la differenza tra i due core e la signature, uno è siglato 328p-PU quello che hai tu è siglato 328-PU, Arduino usa l'ATmega328p-PU.
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21625
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma dove li hai comprati, i tuoi Amtega?
Logged


MC
Offline Offline
God Member
*****
Karma: 13
Posts: 917
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Li ho acquistati nel post della discordia aperto poco tempo fà proprio su questo forum.

Comunque se leggete bene il mio primo intervento :

Code:
La cosa strana viene ora, sempre con lo stesso chip , che ricordo essere da sigla un atmega328-pu...

parlavo di atmega 328-pu

A questo punto riducendo tutto ai minimi termini, i miei micro nuovi sono dei 328, quello che avevo nella UNO è un 328p ?

E in tutti i casi, perchè il 328p lo riesco a programmare con entrambi i signature mentre il 328 no?
Logged

Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9186
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

quello che avevo nella UNO è un 328p ?

Sulla UNO c'è il 328p

Quote
E in tutti i casi, perchè il 328p lo riesco a programmare con entrambi i signature mentre il 328 no?

Non è possibile, il 328p lo puoi programmare solo se viene riconosciuta la sua signature, idem per il 328 senza p.
Logged

Pages: [1] 2 3 ... 21   Go Up
Jump to: