Bootloader MSD USB per il Coldfire della Freescale

Bootloader MSD USB per il Coldfire della Freescale

Freescale offre un bootloader USB per il suo Kirin3 (MCF5225x) che offre un approccio conveniente
per aggiornare il firmware. Non è un bootloader host USB, ma un dispositivo di memorizzazione di massa (MSD).

Se desideri maggiori informazioni su questo prodotto Freescale, invia una richiesta ad Arrow utilizzando il seguente modulo.

Il famoso bootloader (Das U-Boot and eboot) di solito lavora come un host USB e carica il firmware fuori dallo stick USB. Il bootloader USB della Freescale lavora in un modo diverso. Agisce come un dispositivo di memoria, l’host può copiare il nuovo firmware nel dispositivo USB e poi avviare il sistema. Si, la procedura di boot coinvolge un host USB. Ma puoi cercare molti host USB intorno. Oltre al PC, teoricamente, possono essere usati per aggiornare il firmware ogni altro dispositivo di massa USB, PDA, cellulari e qualsiasi altro host USB.

Bootloader USB Passo per Passo

    – Installa tutti i software necessari e connettiti al tuo M52259DEMOKIT.
    – Avvia CodeWarrior 7.1 per ColdFire
    – Estrai il codice sorgente del bootloader USB dal file zip, ed usa File | Open… per caricare
    MCF5225x_Bootloader_with_Application.mcp
    – file progetto in CW7.1
    – Usa il menu per selezionare l’obbiettivo adatto, qui io ho cambiato in “52259demo bootloader flash”.
    – Clicca sul pulsante “make” per compilare l’intero progetto.
    – Apri il Flash Programmer dal menu Tools, e poi clicca su Load Settings e seleziona MCF52259_INTFLASH.xml.
    – Seleziona la pagina Erase/Blank Check e clicca su Erase. Seleziona la pagina Program/Verify e clicca su Program.
    – Premi il pulsante di Reset sulla scheda.
    – Il Led1 lampeggiante indica che l’applicazione con il bootloader USB è in esecuzione (da adesso in poi, si ha un bootloader MSD).
    – Connetti il PC alla porta USB Mini-B sulla scheda con un eventuale adattatore USB.
    – Tieni premuto SW1 e schiaccia il pulsante Reset un’altra volta per abilitare il bootloader USB.
    – Questa volta, il LED1 non lampeggerà più. Per favore aspetta un pò affinché la scheda enumeri come un dispositivo di massa USB.
    – Il tuo PC ti avvertirà di un nuovo disco inserito. Puoi vedere un file vuoto (dimensione = 0B) READY.TXT nel nuovo disco.
    – Puoi usare Manda dal menu a scomparsa o trascinare il tuo codice esadecimale (MCF52259_Flash_
    Application_Blinks_LED4.S19) nel nuovo disco. Il bootloader programmerà la flash interna con un
    nuovo codice di applicazione.
    – Premi il pulsante di Reset, il LED4 lampeggerà

Adesso puoi mettere alla prova altri progetti demo di Freescale e CMX.

Qual’è la differenza tra il bootloader USB MSD e gli altri bootloader
Prima hai compilato il bootloader USB MSD nel tuo progetto, permettendoci di rivedere lo sfondo di un bootloader. Il famoso bootloader come U-boot è un software indipendente, che esegue le impostazioni, il controllo e le operazioni di programmazione sul firmware. Di solito il bootloader è il primo software ad essere programmato sulla scheda da JTAG (Qualche microprocessore ha anche un codice di avvio per programmare il bootloader). Dopo l’avvio del sistema, il bootloader carica il software del sistema (il kernel Linux, il disco ram, o altri software RTOS) dopo il boot aspetta il timeout. L’utente può toccare qualunque tasto per entrare nella modalità bootloader. In questa modalità, l’utente può caricare il nuovo firmware (un nuovo bootloader, kernel, ecc.) e programmarlo sulla scheda. Così, un bootloader regolare è un pacchetto software indipendente e di solito supporta molti metodi di comunicazione per caricare il nuovo firmware tramite Ethernet (tftp), USB (host) e console seriali (una shell).

Il bootloader USB MSD della Freescale non è un bootloader indipendente. E’ un modulo dell’intera applicazione software. Come risultato, il progetto compatibile Bootloader MSD USB deve collegare questa libreria di bootloader nel codice binario finale per ottenere un pacchetto completo. Perchè il bootloader prende alcune risorse dell’utente, incluse RAM e ROM. Il progetto deve cambiare radicalmente. Se l’utente chiave desiderato non è premuto dopo il reset, il software salta al normale codice utente a 0x00004000, altrimenti cade nel ciclo principale del bootloader per l’upgrade del firmware.

Compilare un Progetto Compatibile Bootloader USB MSD
Per compilare un progetto compatibile bootloader USB MSD, il progettista deve seguire le istruzioni indicate nel file M52259LAB.pdf.

    – Aggiungere Bootloader.h al progetto
    – Modificare il file di comando del linker per riservare la più piccola porzione di flash per il bootloader, e la più piccola porzione di ram per il vettore di interrupt. Usare files LCF dal progetto incluso come un esempio.
    – Copiare tutti i vettori di interrupt usati nelle proprie locazioni nella RAM. Guardare il progetto di esempio come riferimento.
    – Settare il VBR per puntare alla tabella dei vettori di interrupt nella RAM: mcf5xxx_wr_vbr((dword) MIN_RAM1_ADDRESS);on
    – Copiare il codice dall’esempio nel file principale. Questo codice dice al bootloader dove trovare la routine di avviamento.
#include 
extern asm void (void);// User Entry vectors for bootloader
const byte _UserEntry[ ] @ USER_ENTRY_ADDRESS = {
0x4E, 0x71, // asm NOP(0x4E71),
0x4E, 0xF9 // asm JMP(0x4EF9)
};
void (* const _UserEntry2[ ])()@(USER_ENTRY_ADDRESS+4)=
{
,
};

Si può dedurre l’intero processo dalla procedura sopra. Il progetto compatibile di bootloader USB MSD entrerà nella modalità bootloader rilevando l’evento key press dopo il reset del sistema.
A causa della piccola porzione memoria flash occupata dal bootloader, i vettori di interrupt usati dall’applicazione utente devono essere mappati nella RAM, piuttosto che nella ROM.

Ho esaminato il codice sorgente, il bootloader un metodo di pulling. Tutti gli intterrupt sono disabilitati nella modalità bootloader. L’applicazione “normal user” può abilitare gli interrupts nella RAM. Fare riferimento al codice sorgente per ulteriori informazioni dettagliate, dato che Freescale non offre bootloader MSD in dettaglio. Il linker map file definitivo è di aiuto per comprendere (M52259DEMO_Flash_Bootloader_Blinks_LED1.xMAP).

Perchè non si usa un bootloader host USB
Anche se ColdFire è un processore a 32 bit, il Kirin3 è un microcontroller. Il programma utente principale deve essere eseguito XIP (eXecutive In Place) su una flash memory on board (ROM). Quindi ci sono due ragioni principali per evitare di usare un tipico bootloader host USB, RAM ristretta e modalità XIP.

Prima di tutto, un bootloader popolare di solito ha più funzioni rispetto all’upgrade del firmware. Le dimensioni del codice sono troppo grandi per entrare in un Kirin3. La maggior parte dei bootloaders non è progettata per un microcontroller con risorse on board. Un tipico bootloader USB si copia nella RAM, e si esegue nella RAM, carica il firmware revisionato dalla memoria di massa USB nella RAM, quindi aggiorna il firmware nella flash memory. Deve implementare lo stack USB host e un completo filesystem FAT in questa modalità. L’intero processo viene eseguito tramite RAM. Le dimensioni generali di un codice di una funzione completa di filesystem FAT12/16/32, stack host USB e dirver di un’unità di memoria di massa USB sono di circa 36KB~40KB. Di conseguenza, il buffer RAM per il firmware è molto limitato per il Kirin3.

Prima di parlare del bootloader MSD USB, bisogna sapere un semplice fatto. Il dispositivo di controllo dell’unita di memorizzazione di massa USB non è a conoscenza di nessun filesystem. Segue soltanto i comandi SCSI dal controller host. (Questa è la ragione per cui le chiavette USB sono chiamate disco SCSI in Linux.) Di conseguenza, una chiavetta USB può essere formattata in EXT2, FAT12/FAT16/FAT32/NTFS e ogni filesystem basato sulle partizioni della flash memory raw. (Qualcuno cambia la tabella delle partizioni nelle chiavette USB per scopi particolari, che verranno trattati in un blog separato).

Nel bootloader MSD USB Freescale, il dispositivo di controllo non ha nessuna partizione. Simula una chiavetta USB FAT16, riceve un firmware S-Record, lo codifica in binario e lo programma nella flash raw a partire da 0x00004000, piuttosto che una partizione logica nella memoria flash. (Attenzione: il bootloader non si aggiornerà mai da solo!) Le funzioni del decoder dei comandi SCSI e il filesystem simulato FAT16 si trovano nel codice sorgente del bootloader MSD USB.
Ad ogni modo, il bootloader MSD può rimpicciolirsi da un filesystem FAT, stack host USB e un driver di dispositivo di memoria di massa. Le dimensioni del codice del bootloader da solo richiedono meno di 10KB nella flash. La velocità generale sarà maggiore del bootloader USB host dal momento che ha più RAM. Teoricamente, implementare un bootloader host USB per il Kirin3 è possibile, ma è uno spreco.

Oltre il bootloader MSD USB, esistono altri bootloader USB, che lavorano come HID USB e dispositivi CDC USB. Tuttavia, il firmware deve essere trasferito dal terminale software dedicato o dal driver. Questi bootloader sono stati disponibili per altri dispositivi (PIC/AVR) per un pò, che sono stati convetiti anche per ColdFire. Tra questi bootloader USB ultraleggeri, il bootloader MSD USB è un’implementazione totalmente driver-less nella maggior parte dei sistemi operativi (Windows/Linux/CE/Embedded).

Reference

MCF5225x USB Bootloader Lab

MCF5225x USB BOOTLOADER

RICHIESTA DI CONTATTO
Se desideri maggiori informazioni su questo prodotto Freescale, invia una richiesta ad Arrow utilizzando il seguente modulo.

One Response

  1. Emanuele 19 novembre 2009

Leave a Reply

Vuoi leggere un articolo Premium GRATIS?

RFID: un acronimo mille possibilità