sto' sempre studiando la questione bootloader sugli 8A,
ho provato a caricarci l'optiboot standard ma non mi funziona, mi sono quindi ricordato di un post di leo dove menzionava il bootloader patchato e quindi ho approfittato per testare quel discorso li'.
mi sono scaricato la cartellina optiboot da github ed anche l'optiloader che e' molto ben fatto, riconosce automaticamente il micro che si vuole caricare e ci mette il giusto bootloader.
Nella nuova cartellina optiboot ci sono gli optiboot modificati per 168 ed atmega8
ho caricato un 8A senza problemi, l'ho poi messo sulla uno ed ho creato una board per gestirlo, i vantaggi di questo discorso sono uno spazio piu' grande per la flash, visto che optiboot e' piu' piccolo del vecchio bootloader, ed una velocita' maggiore in accoppiata con l'8u2, infine una netta riduzione dell'avvio.
Lo spirito di questo post e' principalmente a titolo di studio, giusto per avere qualcosa di sfizioso su cui testare l'optiboot.
ho purtrppo un errore al caricamento di blink, allego errore e board creata, magari i piu' esperti notano l'errore.
allego anche le due cartelline con i relativi file per chi volesse fare prove senza andare sul github a cercare i files.
ERRORE
Binary sketch size: 826 bytes (of a 7680 byte maximum)
java.lang.NullPointerException
at processing.app.debug.AvrdudeUploader.uploadViaBootloader(AvrdudeUploader.java:81)
at processing.app.debug.AvrdudeUploader.uploadUsingPreferences(AvrdudeUploader.java:56)
at processing.app.Sketch.upload(Sketch.java:1603)
at processing.app.Sketch.exportApplet(Sketch.java:1568)
at processing.app.Sketch.exportApplet(Sketch.java:1524)
at processing.app.Editor$DefaultExportHandler.run(Editor.java:2293)
at java.lang.Thread.run(Thread.java:619)
i fuses sono gestiti direttamente da optiloader, non so se l'hai mai usato e' bello perche' riconosce da solo il micro e ci carica il giusto bootloader opti.
quindi dovrei cambiare credo lo sketch di optiloader.
allego lo screen che appare al caricamento:
--------------------
OptiLoader Bootstrap programmer.
2011 by Bill Westfield (WestfW)
Target power on! ...No RESET pullup detected! - no target?
Target power OFF!
Type 'G' or hit RESET for next chip
OptiLoader Bootstrap programmer.
2011 by Bill Westfield (WestfW)
Target power on! ...
Starting Program Mode [OK]
Reading signature:9307
Searching for image...
Found "optiboot_atmega8.hex" for atmega8
Start address at 1E00
Total bytes read: 482
Setting fuses for programming
Lock: 3F FFE000 Low: BF FFA000 High: CC FFA800
Programming bootloader: 512 bytes at 0xF00
Commit Page: F00:F00
Commit Page: F20:F20
Commit Page: F40:F40
Commit Page: F60:F60
Commit Page: F80:F80
Commit Page: FA0:FA0
Commit Page: FC0:FC0
Commit Page: FE0:FE0
Restoring normal fuses
Lock: 2F FFE000 Low: BF FFA000 High: CC FFA800
Target power OFF!
Type 'G' or hit RESET for next chip
----------------------------------------------
purtroppo dopo aver scaricato 200mega mi accorgo che nn e' la versione windows e non mi sembra ci sia
ho quindi provato la strada di cambiare i fuse, si cambiano nello sketch del optiloader, ma non ho avuto cmq risultati
che poi l'errore ch mi esce parla di java, di processing, non parte proprio nulla, i led non tentano proprio di accendersi.
mi sembra quindi un problema che appare prima.
provo a postare sul topic dell'autore del bootloader modificato
Non è per sminuire i tuoi test o quelli delle persone che provano la tua strada, ma io (parlo di opinione personale) ho fatto sempre tutto e bene (relativamente ai fuse) usando avrdude da terminale, senza stare a cercare di far fare all'IDE cose per cui non è nata oppure usando vie strane, ossia l'Optiloader: questo a me non funziona, non riesco neanche a compilarlo, e l'autore non mi ha saputo aiutare. L'Optifix è perfetto, ma l'Optiloader no.
L'Optifix è un Optiboot modificato che corregge i bug (numerosi!) del bootloader UNO. Uno su tutti: funziona con ArduinoISP SENZA condensatori o resistenze. E' il bootloader del mio Arduino da 2 mesi e funziona alla GRANDE.
C'è un mio thread a proposito, oppure lo trovi sempre in quel thread in cui hai trovato anche l'OptiLoader.
ora faccio i test nell'uso dellla mia nuova UNO"NG" caricando arduinoisp sull'8A e caricando prima un bootloader, e poi uno sketch su un altro 8A su breadboard.
Poi approfondisco la programmazione dei fuses, perche' si possono modificare dal Optiloader, e quindi in un unica mossa, in modo veloce ed intuitivo, senza mettere in campo avrdude, e' un bel modo per gestirli.
Test1: Arduino UNO "funziona regolarmente con 8A e optiboot modificato" (si guadagna la seriale a 115200, lo spazio sketch a 7680, la velocita' di boot che passa da 7-8s a 1s)
Test2: Arduino UNO"8A" funziona con lo sketch ArduinoISP nel caricare l'optiboot modificato su un altro 8A
Test3: Arduino UNO"8A" funziona con lo sketch ArduinoISP nel caricare uno sketch, quindi senza bootloader, su un altro 8A
Test4: Optiloader non puo' essere usato sulla Arduino UNO"8A" perche' necessita di 12K
@Testato:
beh, quello sketch è nato per stare in un 328... considera che si porta dietro 3 bootloader in formato hex
Piuttosto, una domanda. A te viene l'errore "variable or field 'read_image' not declared or null" quando compili l'OptiLoader? Me lo fa sia su Ubuntu 10.xx che 11.04.
no, a me non esce nessun errore, compilando per 328 su win7, pero' alla fine dei test ti faccio una prova su ubuntu.
per l'optiloader non 3 ma 4, contiee anche il 328 senza P
mi hai dato uno bello spunto, mi creo optiloader solo per 8A togliendo dallo sketch i boot 168, 328, 328p vedo se rientro
Test fuses:
cambiando i settaggi dei fuses nello sketch Optiloader questi vengono correttamente programmati. Ho fatto il test usando prima i valori standard di optiloader e poi quelli consigliatomi da Menniti.
come vedete tra il primo e il secondo cambia
BOD Enabled/Disabled
Full swing Osc/Low pwr Osc
Da notare che il bootloader e' riconosciuto e riportato nella sua versione, mentre l'opti originale non si riesce a leggere.
PRIMA
Compiled for ATmega8
No Serial Number
Fuse bits (L/H/E): BF CC
Lock bits: EF
Signature: D3 F7 F6 (Fuses not readable on non-P AVR)
Oscal: C2
Fuse Low = 10111111 (BF)
||||++++______xtal Osc Type=1111
||++__________Start Up Time=11
|+____________BOD Enabled
+_____________BOD at 2.7V
Fuse High = 11001100 (CC)
|||||||+______Reset to Boot
|||||++_______512 bytes
||||+_________EEPROM Erased on chip erase
|||+__________Full swing Osc
||+___________ISP OK
|+____________Watchdog prog
+_____________RST enabled
Lock Bits = 11101111 (EF)
||||||++______ISP RW
||||++________App R/W
||++__________Boot RO
Bootloader at 0x1E00 looks like version 4.4
2411 E58F E094 BF9E BF8D B784 BE14 FF81
DOPO
Compiled for ATmega8
No Serial Number
Fuse bits (L/H/E): FF DC
Lock bits: EF
Signature: D3 F7 F6 (Fuses not readable on non-P AVR)
Oscal: C2
Fuse Low = 11111111 (FF)
||||++++______xtal Osc Type=1111
||++__________Start Up Time=11
|+____________BOD Disabled
+_____________BOD at 2.7V
Fuse High = 11011100 (DC)
|||||||+______Reset to Boot
|||||++_______512 bytes
||||+_________EEPROM Erased on chip erase
|||+__________Low pwr Osc
||+___________ISP OK
|+____________Watchdog prog
+_____________RST enabled
Lock Bits = 11101111 (EF)
||||||++______ISP RW
||||++________App R/W
||++__________Boot RO
Bootloader at 0x1E00 looks like version 4.4
2411 E58F E094 BF9E BF8D B784 BE14 FF81
Test 5: Optiloader su 8A: lasciando nello sketch solo un bootloader si riesce a rientrare nello spazio di un Atmega8A, quindi ho usato con successo una UNO"8A" con Optiloader per caricare e gestire i fuses su un altro Atmega8A. Si possono creare quindi 4 file diversi per caricare il bootloader su 8A,168,328,328A
TEST 6:
Ed ora il test piu' interessante, Il caricamento di uno sketch tramite ArduinoISP, quindi solo sketch senza bootloader, non modifica i fuses, nonostante nella board siano presenti.
A questo punto quando si creano le board virtuali per l'uso con ArduinoISP non si ci deve preoccupare di come sono settati i settaggi del fuses.
Non solo, ho eliminato del tutto i riferimenti ai fuses nella boards, anche dei due lock, e l'upload dello sketch funziona regolarmente.
Questo chiarisce le idee, perche' altrimenti, come io stesso ho fatto, se mi si chiedeva se lo sketch cmbiava i fuses io rispondevo si'.
Mi sarebbe potuto bastare la parola del Menniti, ma io sono pur sempre Testato
Si puo' ridurre ancora di piu' la boards tipo eliminando il riferimento alla velocita' ? sarebbe da testare, ma mi ritengo soddisfatto:
Il seriale del bootloader può essere letto solo sull'Optifix perché solo l'Optifix lo contiene (se non ricordo male i primi post del suo autore).
Relativamente a quel messaggio di errore, se lo provi su Ubuntu ti ringrazio perché almeno capisco se è un problema legato a questo SO oppure no (stasera lo provo a casa su Arch).
Su una UNO"8A" ArduinoISP funziona regolarmente, e durante il caricamento di un bootloader vengono correttamente getiti i fuses low e high.
Il vantaggio di Optiloader e' pero' evidente, non servono creare board per caricare i bootloader, non serve nemmeno aprire il menu' board. Si preme "G" e lui da solo riconosce il tipo di micro e ci carica il corretto bootloader.
L'idea gniale, credo nemmeno tanti difficile da realizzare, integrare in Optiloader tutti i micro del pianeta terra, scendiamo...
integrare tutti i micro di ArduOpen. Usando un micro con una flash grande abbastanza da contenerli.
Testato:
A questo punto quando si creano le board virtuali per l'uso con ArduinoISP non si ci deve preoccupare di come sono settati i settaggi del fuses.
Non solo, ho eliminato del tutto i riferimenti ai fuses nella boards, anche dei due lock, e l'upload dello sketch funziona regolarmente.
Questo chiarisce le idee, perche' altrimenti, come io stesso ho fatto, se mi si chiedeva se lo sketch cmbiava i fuses io rispondevo si'.
Mi sarebbe potuto bastare la parola del Menniti, ma io sono pur sempre Testato
Non ho ben seguito la parte di oggi, quindi potrei dire una bufalata; con Leo abbiamo sempre creato board "complete" in vista del possibile intervento sui fuse con l'operazione del burn bootloader, che ha sempre funzionato sulla famiglia atmega, non sulla attiny; quindi forse è sempre bene metterli i fuse, anche se nell'immediato non li usi visto che devi solo caricare sketch, tornano sempre utili i valori memorizzati.
Ti chiedo un feedback: ho letto che hai usato i fuse che ti avevo suggerito, mi pare d'aver capito che hai portato a buon fine il tuo test, ma non hai detto se in questa cosa hanno influito quei valori di fuse oppure se anche con i tuoi iniziali l'operazione va a buon fine. Mi riferisco, come "operazione", a caricare il bootloader sul chip, a montarlo su Arduino, a caricare normalmente uno sketch da IDE su "Arduino UNO-NG/8", quindi chiaramente dovresti rifare l'intero iter, se non ti scoccia.
Quest'ultimo post mi pare estremamente degno di nota, anzi di tutorial; a questo punto potresti scrivere un bel lavoro in cui spieghi dall'inizio (evitando le prove fallite pr non incasinare troppo il lavoro) cosa bisogna fare per arrivare a pogrammare un qualsiasi micro in modalità automatica. Ti faccio i miei complimenti, la tua ostinazione rispetto al fatto che ti dicevamo che la prova non serviva a nulla, ti ha portato invece a scoprire una tecnica molto interessante. $)