MC
Offline
God Member
Karma: 9
Posts: 670
|
 |
« on: October 13, 2011, 03:21:51 am » |
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 !  ) 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
Tesla Member
Karma: 74
Posts: 7348
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #1 on: October 13, 2011, 03:44:18 am » |
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
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16447
Don't know what I do
|
 |
« Reply #2 on: October 13, 2011, 03:48:51 am » |
Mi hai anticipato  (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 
|
|
|
|
|
Logged
|
|
|
|
|
MC
Offline
God Member
Karma: 9
Posts: 670
|
 |
« Reply #3 on: October 13, 2011, 05:10:30 am » |
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!  ) 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
Tesla Member
Karma: 74
Posts: 7348
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #4 on: October 13, 2011, 05:33:39 am » |
Intanto grazie, però c'è qualcosa che non mi torna.
Per dirla tutta a me non torna questa tua affermazione: 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 
|
|
|
|
|
Logged
|
|
|
|
|
MC
Offline
God Member
Karma: 9
Posts: 670
|
 |
« Reply #5 on: October 13, 2011, 06:00:37 am » |
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.
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16447
Don't know what I do
|
 |
« Reply #6 on: October 13, 2011, 06:10:11 am » |
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
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16447
Don't know what I do
|
 |
« Reply #7 on: October 13, 2011, 06:12:51 am » |
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
Tesla Member
Karma: 74
Posts: 7348
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #8 on: October 13, 2011, 06:32:46 am » |
Ma ne sei estremamente sicuro?
Il datasheet dice che è esattamente come dico io quindi si, sono sicuro al 1000%  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
Tesla Member
Karma: 74
Posts: 7348
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #9 on: October 13, 2011, 06:37:08 am » |
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
God Member
Karma: 9
Posts: 670
|
 |
« Reply #10 on: October 13, 2011, 07:20:49 am » |
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
Tesla Member
Karma: 74
Posts: 7348
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #11 on: October 13, 2011, 07:26:45 am » |
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
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16447
Don't know what I do
|
 |
« Reply #12 on: October 13, 2011, 07:43:10 am » |
Ma dove li hai comprati, i tuoi Amtega?
|
|
|
|
|
Logged
|
|
|
|
|
MC
Offline
God Member
Karma: 9
Posts: 670
|
 |
« Reply #13 on: October 13, 2011, 07:46:54 am » |
Li ho acquistati nel post della discordia aperto poco tempo fà proprio su questo forum. Comunque se leggete bene il mio primo intervento : 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
Tesla Member
Karma: 74
Posts: 7348
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #14 on: October 13, 2011, 07:51:58 am » |
quello che avevo nella UNO è un 328p ?
Sulla UNO c'è il 328p 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
|
|
|
|
|
|