Un utilissimo strumento, quando si effettuano molte modifiche al firmware (come in fase di test) o semplicemente per comodità, è il bootloader.

Il bootloader è essenzialmente un codice all’interno del microcontrollore che permette di caricare nuovo codice “utente” o di “applicazione” senza staccare e/o collegare un programmatore esterno alla scheda, come normalmente avviene nella fase di programmazione di un microcontrollore.

Tramite un software su PC, è possibile fare il download (scaricare) dell’HEX del nostro programma sul PIC, senza appunto staccarlo.

Ma come funziona il bootloader e cosa succede all’avvio del PIC?

Quando il PIC viene avviato, questo codice di BOOT controlla lo stato di un pin di ingresso, se questo pin è ad un certo stato logico (con un pulsante si porta a 0 logico il piedino) allora viene creata una connessione (UART oppure USB) con il PC e si entra appunto in fase di boot. Se il pulsante di boot non è stato premuto, il PIC passa nella locazione di memoria del codice della nostra applicazione, come su un normale dispositivo programmato comunemente.

Un esempio grafico della mappatura della memoria di un PIC con bootloader:


Il disegno (chiamato anche “mappatura della memoria”) mostra com’è suddivisa la memoria all’interno del PIC. All’inizio, sul primo blocco c’è il reset vector: quando il PIC viene avviato, oppure in seguito ad un reset software o manuale, il Program Counter parte dalla locazione di memoria del reset vector, quindi è il primo blocco ad essere eseguito. Di seguito al reset vector ci sono i due vettori dei blocchi di interrupt, ricordando che sul PIC18F4550 i vettori di interrupt sono due, di alta e bassa priorità. Di seguito ancora ai vettori di interrupt si trova il blocco del bootloader, ovvero il codice che andremo a caricare con il file .hex citato precedentemente.

Se il bootloader viene avviato, il PIC processerà le istruzioni all’interno di quel blocco, altrimenti passerà al blocco “User Code”, ovvero il codice della nostra applicazione sviluppata.

Da notare, che in presenza di bootloader, bisogna “rimappare” le porzioni di memoria riservata al nostro firmware in fase di sviluppo. Come vedete infatti, gli interrupt vector (con freccia tratteggiata) rimandano alla locazione di memoria rimappata dal programmatore in fase di sviluppo. Ad esempio, se si scatena un’interrupt su piedino esterno, il PIC salterà alla locazione “Interrupt Vector xx”, dove in questa locazione ci sarà un salto alla locazione “User Interrupt Vector xx”.

Bene, ora conosco cos’è questo bootloader! Ma come lo ottengo?

Esistono versioni “originali” creata dalla stessa Microchip e proprio da quest’ultima, preleveremo il nostro bootloader USB.

Per prima cosa, bisogna realizzare lo schema di implementazione del bootloader:

E programma il PIC (con il connettore ICSP) oppure con programmazione esterna staccando il PIC, con questo file .hex (i sorgenti sono qui).

Programmato il PIC, alimenta la scheda (nello schema si usa l’alimentazione del bus USB, quindi basta attaccare il cavo al PC) e per entrare nel programma di boot, tieni premuto il pulsante S2 e contemporaneamentre premi il pulsante S1, quindi rilascia S1, e poco dopo rilascia S2.

Se tutto è montato correttamente, la prima volta di utilizzo, il tuo computer rileverà una nuova interfaccia usb. E’ il nostro bootloader!

Se non lo hai già fatto, scarica il framework USB della Microchip da qui.

Installa il pacchetto selezionando, in fase di installazione, gli esempi della Microchip. Al termine dell’installazione troverai i firmware ed i progetti sviluppati in MPLAB che potrai modificare a tuo piacere.

Attenzione! Se nel tuo progetto fai utilizzo del bootloader, bisogna rimappare l’area di memoria riservata a vettori, locazioni di configurazione, memoria programma etc..

Per fare questo bisogna passare al linker del compilatore, un file modificato che puoi trovare qui (per il PIC18F4550).

Ora puoi utilizzare il bootloader per caricare i tuoi firmware velocemente e in modo pulito, hai bisogno solo della scheda con il PIC e due pulsanti!

AGGIORNARE IL FIRMWARE

Per aggiornare il firmware tramite bootloader quindi, si ha bisogno di un software che comunichi e carichi il nostro firmware (il nostro bel file .hex) sul PIC. La Microchip ha sviluppato un tool apposito, il “PICDEM FS  USB Demo Tool”, realizzato per comunicare con la scheda “PICDEM” fabbricata dalla stessa Microchip. Infatti il circuito raffigurato sopra è proprio la copia della scheda PICDEM originale.

Puoi scaricare il tool direttamente da ElettroEasy, andando qui.

Apriamo quindi il file “PDFSUSB.exe” contenuto nell’archivio ed all’avvio si presenterà così:

Quest’ottimo tool ci permette non solo di scrivere ma anche leggere la memoria programma del nostro PIC, inoltre effettua un check dei FUSES compatibili con la scheda PICDEM. Quindi se nel vostro progetto cambierete alcuni FUSES impostati di default sul progetto del PICDEM originale della Microchip, il software lo segnalerà con un avviso e se si verificherà un’errore critico, non permetterà la riscrittura della memoria.

Bene, colleghiamo la nostra scheda all’ingresso USB. Se tutto è andato per il verso giusto, il PC rileverà un nuovo dispositivo USB e in pochi istanti sarà pronto per essere utilizzato.

Andiamo a selezionare il nostro dispositivo alla voce “Select PICDEM FS USB Board” e selezioniamo l’unica (dipende da quante schede avete collegato) voce “PICDEM FS USB 0 (Boot)”.

Ora si sbloccheranno anche le varie funzioni del programma, interagendo pienamente con il PIC.

Per aggiornare il firmware, facciamo click sul pulsante “Load HEX file” e selezioniamo il nostro firmware (che ricordo deve essere compilato utilizzando il template in MPLAB del PICDEM che puoi trovare qui). A questo punto, se non abbiamo incontrato errori, facciamo click sul pulsante “Program Device“, aspettiamo alcuni istanti ed il nostro firmware è stato caricato sul nostro PIC in maniera pulita, veloce e se vogliamo, in maniera “professionale”.

Se si sono verificati errori nella fase di caricamento del firmware, consiglio di riguardare il sorgente e adattarlo alla Board originale della Microchip. In particolare è meglio non toccare le configurazioni dei FUSES.

Per poter eseguire il programma appena caricato, basta fare un reset del PIC, tramite il pulsante posto sul pin MCLR oppure utilizzando il pulsante “Execute” presente sul tool.

Come già detto, oltre a programmare è possibile anche leggere, salvare la memoria programma, cancellare la memoria e anche provare alcune funzioni Demo della board, ma che in questo caso non sono state implementate dal nostro circuito.

Bene, penso sia tutto per quanto riguarda questa breve e semplice infarinatura del Bootloader per il PIC 18F4550.