Strano problema con signature scrivendo il bootloader

menniti:
Niki77 non ti conosce bene altrimenti questa parte della discussione sarebbe finita al tuo primo intervento :slight_smile:

Massimo rispetto per tutti , del resto si nota da quello che scrive che è uno che le cose le sà, il punto prof. è che questa sua grande conoscienza a me purtroppo per osmosi non si attacca, pertanto ne devo approfittare chiedendo tutto quello che non capisco per acculturarmi nel settore! :grin:

niki77:
hh no, questo non mi torna... in base a cosa fai questa affermazione?
L'ide di arduino per caso compila con impostazioni per il 328 ?

Dato che state usando un file boards.txt modificato per il 328 il compilatore, che trae le informazioni da quel file, compila per il corretto micro.

astrobeed:
Dato che state usando un file boards.txt modificato per il 328 il compilatore, che trae le informazioni da quel file, compila per il corretto micro.

provenendo da una old school enigma,sigma etc (vedi fonera, vedi n800, etc)
c'è percaso una toolchain da usare per la compilazione?

ci sono link/manuali/riviste/informazioni in merito?

astrobeed:
Dato che state usando un file boards.txt modificato per il 328 il compilatore, che trae le informazioni da quel file, compila per il corretto micro.

ALT !!!
STOP !!!
Questo non è esatto , io ho utilizzato la entry modificata solo per caricare il bootloader, da quel momento in poi utilizzo le stesse impostazioni dell'arduino uno.
E sinceramente non ci ho caricato solo sketch semplici tipo blink , ma anche sketch che fanno uso di interrupt (gestito a manina non con attach) e display lcd.
Per questo non capivo il fatto che la compilazione avvenisse per il 328.

niki77:

menniti:
Niki77 non ti conosce bene altrimenti questa parte della discussione sarebbe finita al tuo primo intervento :slight_smile:

Massimo rispetto per tutti , del resto si nota da quello che scrive che è uno che le cose le sà, il punto prof. è che questa sua grande conoscienza a me purtroppo per osmosi non si attacca, pertanto ne devo approfittare chiedendo tutto quello che non capisco per acculturarmi nel settore! :grin:

Bella questa XD; no, volevo dire che ad uno come Astrobeed in genere si dà credito su tutta la linea perché il suo sapere è grande e poi gli si chiedono tutti i chiarimenti che si vogliono avere, perché ha anche grande disponibilità; ti stavo consigliando solo di chiedere senza mettere in dubbio ciò che dicesse, come faccio io, impara da me, altrimenti che Prof. sono? :grin:

@ Astrobeed: in avrdude.conf non si è fatto altro che copiare la sezione del 328P e rinominarla 328, modificando esclusivamente la signature; questo trucchetto ha fatto sì che nella board virtuale si potesse mettere il 328 come micro e mandare regolarmente il bootloader. Possibile che questa banale operazione significhi ricompilare per il 328? Oppure è il solo fatto di aver caricato correttamente il bl in questo micro che lo rende perfettamente funzionante?

menniti:
@ Astrobeed: in avrdude.conf non si è fatto altro che copiare la sezione del 328P e rinominarla 328, modificando esclusivamente la signature; questo trucchetto ha fatto sì che nella board virtuale si potesse mettere il 328 come micro e mandare regolarmente il bootloader. Possibile che questa banale operazione significhi ricompilare per il 328? Oppure è il solo fatto di aver caricato correttamente il bl in questo micro che lo rende perfettamente funzionante?

mhai tolto le parole di bocca

menniti:
@ Astrobeed: in avrdude.conf non si è fatto altro che copiare la sezione del 328P e rinominarla 328, modificando esclusivamente la signature; questo trucchetto ha fatto sì che nella board virtuale si potesse mettere il 328 come micro e mandare regolarmente il bootloader.

Tra le prime cose dette in questo lungo thread c'è pure questa modifica a boards.txt:

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

Dove viene chiaramente inserito come micro il 328pu al posto del 328p, infatti se andate a vedere le varie opzioni di compilazione per gcc scoprirete che gli viene detto di compilare per il 328 e non per il 328p.

niki77:
ALT !!!
STOP !!!
Questo non è esatto , io ho utilizzato la entry modificata solo per caricare il bootloader, da quel momento in poi utilizzo le stesse impostazioni dell'arduino uno.

Se stai compilando per la UNO non è possibile che riesci a caricare lo sketch perché la signature attesa è diversa da quella del 328, poi se hai fatto pasticci nel file boards.txt e/o avrdude.conf per forzare il caricamento hai commesso un errore procedurale.
Comunque mi sono stufato di ripetere le stesse cose 1000 volte, io vi ho spiegato come stanno le cose e come vanno fatte nel corretto modo, poi se volete farle nel modo sbagliato solo perché vi sembra che così funziona è una vostra scelta, però poi non venite a lamentarvi domani quando Arduino vi si pianterà in modo misterioso.

Se non è ancora chiaro lo dico per l'ultima volta, il core del 328 è diverso dal core del 328p, non è possibile compilare per il 328p e sperare che poi funzioni tutto perfettamente sempre e comunque forzando il caricamento sul 328.

astrobeed:
Tra le prime cose dette in questo lungo thread c'è pure questa modifica a boards.txt:

e modificando la copia facendola diventare 

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

etc
etc
etc
atmega328pu.build.mcu=atmega328pu
etc
etc




Dove viene chiaramente inserito come micro il 328pu al posto del 328p....

Che è una entry che io ho aggiunto ad avrdude.conf , perchè di suo non c'era, che contiene lo stesso identico blocco del 328p ad esclusione della signature.
Per tutto il resto, bhe sarà stato culo, se in teoria non è possibile, bhe pazienza!

Grazie a tutti.

niki77:
Che è una entry che io ho aggiunto ad avrdude.conf , perchè di suo non c'era, che contiene lo stesso identico blocco del 328p ad esclusione della signature.

No, il pezzo che ho riportato, e l'hai scritto tu, è relativo al file boards.txt che, vai a rivedere la prima pagina di questo thread e tra i primissimi post c'è il tuo dal quale ho tratto la modifica.

Esattamente, ma se vedi bene l'unica riga che ho lasciato, tra gli etc, è quella che indica all'ide la entry da far utilizzare ad avrdude.
Se tu crei quella entry su board.txt e non crei poi la entry per il 328pu anche su avrdude.conf , non funziona una beata ......
La entry creata poi in avrdude.conf è IDENTICA a quella del 328p, eccetto per la signature.

Ma comunque, come ho già detto prima, per me la cosa è chiara.

Scusa una cosa, fai un po' di casino sui ruoli che hanno quei 2 file.
avrdude.conf NON interviene sulla compilazione dello sketch ma dà solo istruzioni ad avrdude su come "comunicare" con il micro per trasmettere il firmware.

Ciò che viene usato per la compilazione sono proprio le informazioni contenute in boards.txt. Sono questi dati che l'IDE passa a gcc-avr per far compilare lo sketch. Se gli passa "328" invece che "328p" gcc-avr compilerà per 328 non P, con le conseguenze dette da Astro se poi quel firmware lo usi su un 328p o viceversa. Ad avrdude puoi anche dirgli quello che vuoi, se gli dai delle signature false. Ma il problema è a monte di avrdude.

quindi fatemi capire, arduino IDE quando fai il burn ricompila il bootloader ogni volta?
:*

leo72:
Ad avrdude puoi anche dirgli quello che vuoi, se gli dai delle signature false. Ma il problema è a monte di avrdude.

Esatto, il signore vince un pinguino gonfiabile :grin:

GH_Blackout:
quindi fatemi capire, arduino IDE quando fai il burn ricompila il bootloader ogni volta?

No, compila solo lo sketch utilizzando le informazioni in boards.txt per sapere il clock, il modello di micro etc, poi invoca avrdude dicendogli dove prendere l'hex da caricare, il modello del micro e altri parametri.
Avrdude prima cerca in avrdude.conf i parametri di programmazione del micro, tra cui la signature, dopo di che cerca di entrare in contatto con un programmatore stk500 che è emulato dal bootloader e se questa fase ha successo inizia la vera e propria procedura di programmazione.
Manipolando avrdude.conf, e/o i parametri di risposta della emulazione stk500, possiamo far credere ad avrdude quello che vogliamo, ovvero forzare la programmazione di un programma compilato per il micro pincopallo sul micro pallopinco, però questo non significa necessariamente che poi il micro funzioni in modo corretto.

ho capito
quindi avrdude.conf serve solo per compilare l'HEX dello sketch
mentre boards.txt serve x sapere quali signature e configurazioni per il caricamento del bootloader

torniamo al punto cruciale
come si compila il bootloader?
ha una procedura simile a quella delle cpu sigma,enigma e famiglia?
devo prepararmi una toolchain come si fa per l'n800?
dove reperisco le informazioni?

GH_Blackout:
ho capito
quindi avrdude.conf serve solo per compilare l'HEX dello sketch

No.
Cosa ho scritto?

avrdude.conf NON interviene sulla compilazione dello sketch ma dà solo istruzioni ad avrdude su come "comunicare" con il micro per trasmettere il firmware.

Per "trasmettere il firmware", non per "compilare il firmware".
Chi compila?

Ciò che viene usato per la compilazione sono proprio le informazioni contenute in boards.txt. Sono questi dati che l'IDE passa a gcc-avr per far compilare lo sketch.

quindi arduino compila di volta in volta il bootloader quando usi l'opzione BURN

we non è che mi dovete fare impazzire :smiley: uno dice si uno dice no ... a chi devo credere? :grin:

A tutt'e due, stiamo parlando di cose diverse.
avrdude.conf non interviene nella compilazione, quel file è solo una specie di agenda del telefono dove ci sono i numeri per chiamare i tuoi amici.

Mettiamo che vuoi dire ad Andrea che stasera vuoi uscire per andare a trovare Marco. Pensi un attimo a cosa vuoi dirgli, poi fai il numero e lo chiami.
Ecco, gcc-avr è il tuo cervello che pensa quello che devi dire e crea il concetto da esprimere (il file .hex), avrdude.conf è quello che fornire il numero (signature) per chiamare Marco (il micro di destinazione) e tu sei quello che parla (avrdude).

Se ora cambi il discorso da fare, cose gliene frega ad avrdude.conf? E cose gliene frega ad avrdude? Se magari volevi mandare un bacio alla tua donna e chiami Marco e prima che questo parli gli dici "ti amo"?? gcc-avr e avrdude hanno svolto il loro compito ma tu (avrdude) hai fatto casino prendendo un numero sbagliato e passando un concetto giusto al destinatario sbagliato.

PS:
per la cronaca, agli occhi di Marco passi da "buco", e chi è stato in Toscana sa cosa vuol dire :wink:

capito claro

mentre boards.txt interviene nella compilazione del bootloader che viene ricompilato ogni volta viene effettuato un burn

@astro
@leo

grazie per la spiegazione, purtroppo in questo settore sono ignurante
quindi mettendo 328 senza P praticamente ho azzeccato (a culo) il flag che indica a gcc-avr il micro 328 senza P