Archivi tag: arduino duemilanove

OptiBoot 4.4

Nel precedente articolo vi avevo parlato di come aggiornare le vostre Arduino Duemilanove/Uno al nuovo bootloader OptiBoot 4.4.

Personalmente l’ho fatto sulla mia Luigino328 (clone italiano della Duemilanove) e devo ammettere che mi trovo davvero bene.
Ho più spazio per il codice e la velocità di trasferimento degli sketch sulla scheda è stata aumentata di un bel pò.

Volevo, però, precisare un pò di cose.

In primis la questione dei “fuses”.
Ma cosa sono?
All’intero di questo tipo di chip ci sono oltre alla ram, flash ed eproom anche 3 byte di memoria permanente chiamato “fuses” (in italiano: “fusibili”).
I fuses hanno il compito di descrivere alcune caratteristiche dell’integrato, come: determinare in che modo il chip agisce, se ha un bootloader, velocità del clock e la tensione di lavoro, ecc…
In particolare, quelli che ci interessano in questo momento sono quelli descritti nell’articolo precedente: High Fuse, Low Fuse, Extended Fuse e Lock Bit.
Grosso modo, questi descrivono in che zona della memoria è presente il bootloader.
Questo è estremamente importante in quanto, ad esempio, se settassimo i fuses in modo errato, probabilmente parte del codice verrebbe scritto nell’area di memoria dove risiede il bootloader.

Sono come dei paletti: codice da una parte e bootloader da un’altra.

Il bootloader caricato nella duemilanove era grosso circa 2k, il bootloader OptiBoot 4.4 circa 0.5k: un quarto più piccolo.

Quindi bisogna risettare l’High Fuse in modo tale da descrivere che l’area di memoria dove risiede il nuovo bootloader è più piccola (o più grande) di com’era prima.

Ecco perchè avevo inserito due valori per l’high fuse: uno per il bootloader della duemilanove e l’altro per l’OptiBoot.

Il modo più semplice, come già avevo segnalato, è quello di prendere questi valori direttamente da un file descrittivo all’interno dell’IDE ufficiale.
Mi riferisco in particolare al file: arduino-0023hardwarearduinoboards.txt

Leggendo bene questo file ci accorgiamo, ad esempio, che per la UNO abbiamo questa sezione:

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

L’ide di arduino viene utilizzata anche per aggiornare i bootloader quindi, AvrDude che si occupa di flashare le schede con i nuovi bootloader, ha bisogno di alcuni parametri come, ad esempio, i fuses!

Quindi, se abbiamo l’esegineza di flashare l’ultimo optiboot, ma non conosciamo i valori dei fuses, li possiamo prendere proprio da questa sezione, ed in particolare: uno.bootloader.high_fuses=0xde

Semplice no?

Ovviamente lo stessissimo discorso vale nel caso in cui volessimo flashare le schede con il vecchio bootloader duemilanove: leggiamo la sezione relativa alle schede duemilanove e cambiamo i fuses proprio così come leggiamo nel file boards.txt

Ultima cosa, come potete vedere leggiamo anche il valore dello uno.upload.speed=115200 di caricamento degli sketch (che con l’optiboot è stato maggiorato), il size massimo degli sketch che in questo caso è uno.upload.maximum_size=32256 e altre cose interessanti…

Il bootloader, di norma, lo trovate sempre all’interno delle cartelle dell’IDE… accertatevi, però, che i paramentri dei fuses e il file HEX (in cui risiede il bootloader) corrispondano a quelli del file boards.txt

La mia luigino328 dopo il flashing del’OptiBoot 4.4:

19112011005