<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[[KBpedia] MCU ATmega - ISP programmer - DFU bootloader]]></title><description><![CDATA[<p dir="auto"><a href="https://en.wikipedia.org/wiki/Atmel" target="_blank" rel="noopener noreferrer nofollow ugc">Atmel Corporation</a> è un noto produttore di microcontrollori (MCU) fondato nel 1984 e recentemente acquisito da <a href="https://www.microchip.com/" target="_blank" rel="noopener noreferrer nofollow ugc">Microchip Technology</a> (2016).<br />
È decisamente rilevante per il nostro hobby poiché la serie di microprocessori <a href="https://en.wikipedia.org/wiki/AVR_microcontrollers" target="_blank" rel="noopener noreferrer nofollow ugc">AVR</a> a 8-bit è praticamente onnipresente sulle PCB delle tastiere meccaniche custom - basti pensare allo <a href="https://www.microchip.com/en-us/product/ATmega32U4" target="_blank" rel="noopener noreferrer nofollow ugc">ATmega32U4</a>, quasi uno standard <em>de facto</em>.</p>
<p dir="auto"><img src="https://keeb.it/assets/uploads/files/1661702211148-prove_ikki_aurora_019.jpg" alt="ATmega32U4" class=" img-fluid img-markdown" /></p>
<p dir="auto">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 «<strong>ATmega</strong>».<br />
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.</p>
<p dir="auto">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.<br />
Per programmare il microprocessore viene normalmente utilizzata un' interfaccia dedicata che prende il nome di <strong>ISP</strong> - <em>In-System Programming</em> - oggi comunemente accessibile tramite interfaccia a 6 PIN:</p>
<ul>
<li><strong>VCC</strong>: tensione positiva di alimentazione</li>
<li><strong>RST</strong>: reset</li>
<li><strong>GND</strong>: massa</li>
<li><strong>MISO</strong>: Master Input Slave Output</li>
<li><strong>MOSI</strong>: Master Output Slave Input</li>
<li><strong>SCK</strong>: Serial Clock</li>
</ul>
<p dir="auto"><img src="/assets/uploads/files/1676139259201-isp_spi.jpg" alt="ISP/SPI Interface" class=" img-fluid img-markdown" /></p>
<p dir="auto">Esiste anche una versione a 10 PIN con più linee di massa per aumentare l'isolamento da interferenze.<br />
Tale interfaccia è di tipo seriale (<strong>SPI</strong> - <em>Serial Peripheral Interface</em>) con un clock che coordina trasmissione e ricezione (che possono avvenire in contemporanea, <em>full-duplex</em>), e la loro velocità.</p>
<p dir="auto"><img src="/assets/uploads/files/1676140573265-isp_spi_pcb.jpg" alt="ISP/SPI Interface" class=" img-fluid img-markdown" /></p>
<p dir="auto">Il bus seriale viene utilizzato mediante un apposito hardware, di norma identificato con il termine generico di <em><strong>ISP programmer</strong></em>: 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.</p>
<p dir="auto"><img src="/assets/uploads/files/1676140545903-usbasp.jpg" alt="USBasp programmer" class=" img-fluid img-markdown" /></p>
<p dir="auto">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: <a href="https://qmk.fm/" target="_blank" rel="noopener noreferrer nofollow ugc"><span class="glossary-wrapper" title="«Quantum Mechanical Keyboard» // Firmare Open Source per tastiere (e non solo)" data-bs-toggle="tooltip" data-bs-placement="top"><span class="glossary-word">QMK</span></span></a> - che permette alla tastiera di funzionare correttamente.</p>
<p dir="auto">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.<br />
Ma quindi si rendere necessario armeggiare con ISP programmer, collegare cavi, ecc.?</p>
<p dir="auto">Per fortuna... no.<br />
O quasi mai.<br />
Insomma: dipende. Ma andiamo con ordine.</p>
<p dir="auto">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.<br />
Tale programma viene identificato con il termine generico di <em>USB <strong>DFU</strong> (Device Firmware Update) bootloader</em> 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.</p>
<p dir="auto">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ù.<br />
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 <em>brick</em>: 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.</p>
<p dir="auto">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.<br />
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.</p>
<p dir="auto">La procedura per utilizzare un ISP programmer è abbastanza semplice... ma può creare qualche antipatico grattacapo, specie quando si è alle prime armi.</p>
<p dir="auto">Non mi ero mai interessato più di tanto a questo mondo finché insieme a <a class="plugin-mentions-user plugin-mentions-a" href="/user/angrybard" aria-label="Profile: AngryBard">@<bdi>AngryBard</bdi></a>  non ci si è trovati a sbatterci la testa: nel corso del <span class="glossary-wrapper" title="«Group Buy» // Gruppi di acquisto (pre-ordini)" data-bs-toggle="tooltip" data-bs-placement="top"><span class="glossary-word">GB</span></span> per la <a href="https://keeb.it/topic/285/gb-cftkb-mysterium-tkl-gb-italiano/">Mysterium <span class="glossary-wrapper" title="«Ten Key Less» // Tastiera di dimensioni normali ma senza tastierino numerico" data-bs-toggle="tooltip" data-bs-placement="top"><span class="glossary-word">TKL</span></span></a>, infatti, ci siamo trovati ad avere tra le mani delle MCU <a href="https://www.microchip.com/en-us/product/ATMEGA32A" target="_blank" rel="noopener noreferrer nofollow ugc">ATmega32A</a>... senza bootloader.</p>
<p dir="auto">In un prossimo post vedremo come poterne venire a capo, utilizzando strumenti diversi.</p>
]]></description><link>https://keeb.it/topic/329/kbpedia-mcu-atmega-isp-programmer-dfu-bootloader</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 11:43:49 GMT</lastBuildDate><atom:link href="https://keeb.it/topic/329.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 11 Feb 2023 18:37:28 GMT</pubDate><ttl>60</ttl></channel></rss>