[KBpedia] MCU ATmega - ISP programmer - DFU bootloader

  • Mods

    Atmel Corporation è un noto produttore di microcontrollori (MCU) fondato nel 1984 e recentemente acquisito da Microchip Technology (2016).
    È decisamente rilevante per il nostro hobby poiché la serie di microprocessori AVR a 8-bit è praticamente onnipresente sulle PCB delle tastiere meccaniche custom - basti pensare allo ATmega32U4, quasi uno standard de facto.

    ATmega32U4

    I microprocessori AVR sono generalmente classificati in famiglie e tra queste quella che per noi è sicuramente la più importante prende il nome di «megaAVR», e contrassegna tutti i chip della serie «ATmega».
    Gli ATmega sono microcontrollori dotati di una discreta memoria interna (flash, da 4 a 256 KB), ampia gamma di PIN (da 28 a 100) e un set esteso di istruzioni: possono raggiungere i 32 MHz e un massimo di 1 MIPS per MHz.

    I processori AVR sono disegnati per l'esecuzione efficiente di codice compilato scritto in linguaggio C e il codice viene eseguito direttamente dalla memoria flash interna - e solo da quella.
    Per programmare il microprocessore viene normalmente utilizzata un' interfaccia dedicata che prende il nome di ISP - In-System Programming - oggi comunemente accessibile tramite interfaccia a 6 PIN:

    • VCC: tensione positiva di alimentazione
    • RST: reset
    • GND: massa
    • MISO: Master Input Slave Output
    • MOSI: Master Output Slave Input
    • SCK: Serial Clock

    ISP/SPI Interface

    Esiste anche una versione a 10 PIN con più linee di massa per aumentare l'isolamento da interferenze.
    Tale interfaccia è di tipo seriale (SPI - Serial Peripheral Interface) con un clock che coordina trasmissione e ricezione (che possono avvenire in contemporanea, full-duplex), e la loro velocità.

    ISP/SPI Interface

    Il bus seriale viene utilizzato mediante un apposito hardware, di norma identificato con il termine generico di ISP programmer: sono dispositivi generalmente economici, alcuni costano addirittura una manciata di Euro. Sono progettati per essere collegati al PC per mezzo della classica interfaccia USB e al bus ISP/SPI con i classici 6 PIN: lato PC è necessario avere un software capace di riconoscere via USB il programmer collegato e pilotarlo per accedere all'interfaccia ISP/SPI.

    USBasp programmer

    Nel mondo delle tastiere meccaniche custom, come abbiamo già ricordato, moltissime PCB sono equipaggiate con MCU ATmega: nella memoria flash interna viene salvato e poi mandato in esecuzione un firmware appositamente compilato - un esempio fra tutti: QMK - che permette alla tastiera di funzionare correttamente.

    Tra le operazioni più comuni che un appassionato di tastiere meccaniche si trova a svolgere vi è proprio la modifica della configurazione di QMK (ad esempio per aggiungere/modificare layer), la ricompilazione del firmware e il caricamento di quest'ultimo sulla PCB.
    Ma quindi si rendere necessario armeggiare con ISP programmer, collegare cavi, ecc.?

    Per fortuna... no.
    O quasi mai.
    Insomma: dipende. Ma andiamo con ordine.

    Per aiutarci nelle operazioni di aggiornamento firmware, nella memoria flash della MCU è di norma presente un software appositamente studiato per poter esporre via USB un accesso diretto all'interfaccia ISP, permettendo di accedere in scrittura/lettura non solo alla memoria flash ma anche alla EEPROM.
    Tale programma viene identificato con il termine generico di USB DFU (Device Firmware Update) bootloader e come accade per ogni altro software, ne esistono versioni diverse: la maggior parte dei chip ATmega dotati di interfaccia USB escono dalla fabbrica con a bordo un bootloader preinstallato.

    Grazie al DFU bootloader le operazioni di aggiornamento firmware sono molto semplici: è sufficiente avere la nostra tastiera collegata al PC tramite cavo USB e nulla di più.
    Può però capitare in certe circostanze di danneggiare il contenuto della flash interna alla MCU - evento raro, ma possibile - e di trovarsi quindi in uno scenario di brick: il processore non ha più accesso al firmware da caricare ed eseguire, e si trova quindi incapace di eseguire qualunque operazione. Di fatto la nostra tastiera è... morta.

    In questi casi può tornare utile ricordare quanto abbiamo fin qui riassunto: è possibile utilizzare l'interfaccia ISP/SPI per ri-caricare nella flash della MCU il bootloader, e riutilizzare infine quest'ultimo per scrivere nuovamente il firmware.
    Per fare questa operazione dovremo dotarci di un ISP programmer e premunirci di effettuare i collegamenti diretti all'interfaccia dedicata a 6 PIN: è di sicuro un'operazione più delicata ed invasiva rispetto al consueto aggiornamento firmware. Si renderà necessario smontare la nostra tastiera ed accedere direttamente alla PCB: come se non bastasse... di norma i PIN di collegamento non sono direttamente esposti e molto probabilmente si renderà necessario saldare un header per permetterne l'accesso.

    La procedura per utilizzare un ISP programmer è abbastanza semplice... ma può creare qualche antipatico grattacapo, specie quando si è alle prime armi.

    Non mi ero mai interessato più di tanto a questo mondo finché insieme a @AngryBard non ci si è trovati a sbatterci la testa: nel corso del GB per la Mysterium TKL, infatti, ci siamo trovati ad avere tra le mani delle MCU ATmega32A... senza bootloader.

    In un prossimo post vedremo come poterne venire a capo, utilizzando strumenti diversi.

  • yLotharY yLothar ha fatto riferimento a questa discussione su
  • yLotharY yLothar ha fatto riferimento a questa discussione su


Suggerimenti
  • 1
  • 1
  • 1
Forum dedicato alle + creato con i rubati sull'Isola del e trafugati fin qui via dal Temibile Pirata yLothar.