Archivi tag: optiboot

Flashing con l’IDE Arduino di Optiboot 4.4 su Arduino Nano (e non solo)

Oggi mi è arrivato l’Arduino Nano, una versione ridotta dell’arduino duemilanove.
Stesso mcu (atmega 328p) , stesso ftdi, ma diverso package. Pensavo fosse un pochino più grande ma con mia grande sorpresa è davvero piccolino! Chissà la versione arduino mini quant’è piccolo a questo punto!
Non ho resistito e subito ho montato l’opitboot 4.4 (che è compatibile anche con arduino nano).

Questa volta, per aggirare l’ostacolo della compatibilità dei driver USBasp su Win 7 x64, ho flashato su un secondo pc Win7 x32 usando, però, l’ide e l’usbasp.
Quindi, niente bit bang e collegamenti strani.
Il procedimento è stato molto semplice:

1. installazione dei driver usbasp versione libusb_0.1.12.1
2. collego correttamente l’usbasp all’isp dell’arduino nano
3. modifica dell’ide 1.0 in questo modo:

  • Aprire il file programmers.txt nel path: C:…arduino-1.0hardwarearduino
  • Editare il file e aggiungere queste due righe in coda al file:

usbasp.name=USBasp
usbasp.protocol=usbasp

4. aprire l’ide, selezionare Tools>Boards> Arduino UNO
5. selezionare in Tools>Programmaer> USBasp
6. Tools> Burn Bootloader

Attendere qualche minuto e il vostro arduino nano adesso avrà l’optiboot 4.4!!!

Note:

1. Non dimenticate, però, che da adesso in poi il vostro nano è un arduino UNO a tutti gli effetti, quindi, quando andrete a caricare i vostri sketch, selezionate come target board Arduino UNO

2. Questo stesso procedimento è valido anche per arduino duemilanove, uno, etc etc… per tutte le versioni che hanno l’atmega328p

img20120228151506

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

Installare/ripristinare Optiboot su Arduino Duemilanove

Oggi avevo taaaaaanta voglia di installare il “nuovo” bootloader OptiBoot 4.4  sulla mia duemilanove… risultato: brickata e poi debrickata (dubbi??).
Ora cercherò di spiegarvi come installare l’ultima versione del’optiboot sul vostro microcontroller.
Ma cos’ha di così tanto speciale l’OptiBoot?
Prima di tutto OptiBoot è il bootloader nuovo utilizzato dalle Arduino UNO in poi, il link del progetto ufficiale è questo: http://code.google.com/p/optiboot/
Dalla home del progetto leggiamo:

  • Possibilità di scrivere sketch più grandi. Optiboot è grande 0.5k (un quarto più più piccolo rispetto al bootloader del duemilanove) significa che guadagnamo 1.5k di spazio per il codice. Per un totale di 32256 byte
  • Upload degli sketch molto più veloce. Velocità di upload 115200baud
  • Permette di far girare prima i propri sketch senza watchdog.

0. Prima di tutto dobbiamo fare dei collegamenti tra l’FTDI e l’interfaccia ICSP della nostra scheda:

2754610263_7d147df701_o

1. Ciò di cui abbiamo bisogno è l’ultima versione dell’optiboot scaricabile dal sito ufficiale, in particole questo file presente nel file zip: optiboot_atmega328.hex

  • In alternativa, se si vuole ripristinare il vecchio bootloader arduino duemilanove, esso è presente all’interno della cartella: arduino-0023hardwarearduinobootloadersatmegaATmegaBOOT_168_atmega328.hex

2. Ora scarichiamo e unzippiamo il package che ho preparato, da qui:     SCARICAMIII

3. Apriamo avrdude-gui.exe

3. Selezionare avrdude.exe presente nella directory appena unzippataa

4. Come programmer impostiamo: FT232R Synchronous BitBang (diecimila)

5. Device: ATmega328P

6. Command option: -P ft0 -B 4800

7. Impostare i fuse in questo modo:

  • High Fuse: 0xDE per l’OptiBoot 0xDA per la versione vecchia del bootloader duemilanove
  • Low Fuse: 0xFF
  • Extended Fuse: 0x05
  • Lock Bit: 0x0F

Se avete dubbi, potete prendere questi valori direttamente dal’ultima versione dell’IDE e precisamente nel file: arduino-0023hardwareboards.txt

8. Selezioniamo dalla casella Flash l’OptiBoot scaricato e unzippato che desideriamo installare, precisamente: optiboot_atmega328.hex

Dovreste avere una cosa del genere:

catturanh

9. Collegare il cavo USB al pc: led POWER si accende

10. Ora cliccate su “Erase – Write – Verify”

11. Aspettate un pò di tempo: circa 10 minuti.

Ora che è andato tutto a buon fine, provate ad uploaddare lo sketch “blink” nel folder degli esempi, se avete messo l’optiboot ricordandovi di impostare come target board la board UNO.

Se blinka…. avete l’ultima versione dell’optiboot sulla vostra arduino duemilanove!

Se mettete l’optiboot sulla duemilanove ricordate di cambiare le impostazioni dell’ide: ora come target board dovete mettere “Arduino UNO” e NON più duemilanove. OK???

Fonti:
http://dereenigne.org/electronics/arduino/arduino-duemilanove-optiboot
http://www.geocities.jp/arduino_diecimila/bootloader/index_en.html

PS

Declino ogni responsibilità su probabilissimi brick delle vostre schede.

Aggiornamento:

questa è la mia guida che vi permette di aggiornare il vostro Arduino Duemilanove con l’IDE ufficiale utilizzando usbasp: https://blackstufflabs.com/2012/02/28/optiboot-4-4-su-arduino-nano