[KBpedia] MCU ATmega - ISP programmer - DFU bootloader
-
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.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
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à.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.
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.
-
-