Mentre mi piacerebbe immergermi nei vari metodi di programmazione disponibili, qualcun altro ha già. Ecco il tutorial di Dean Camera su AVRFreaks, metodi di programmazione AVR :
Esistono molti modi per programmare i microcontrollori AVR. Dato che molte persone chiedono domande diverse una volta o l'altra, ho pensato di descriverle qui in modo che le loro domande possano essere risolte in modo rapido ed efficiente. Per favore perdonami se mi manca un metodo o commetto un errore.
METODO 1: In System Programming (ISP)
Supportato da: Vasta maggioranza di AVR (vedi sotto messaggi)
Programmatori supportati: AVRISP MKI / II, JTAG MKII, STK500, STK600, Dragon, AVRISP clones, AVR910 Programmers, AVRONE
Nella programmazione del sistema è forse il metodo più comune per programmare flash, EEPROM, fusibili e lockbyte dell'intera linea AVR. L'ISP può programmare AVR a frequenze di clock estremamente elevate (supponendo che l'AVR di destinazione funzioni ad alta frequenza e che il programmatore lo supporti) ed è il metodo di scelta per quasi tutti gli appassionati di AVR. Ci sono molti, molti cloni AVRISP e programmatori AVR910 sul mercato oltre a semplici dongle fai-da-te che si collegano alla porta parallela del tuo computer.
I recenti nuovi design della chiave hardware possono utilizzare la porta seriale del computer, tuttavia prove aneddotiche hanno affermato che questo metodo è estremamente lento a causa di limitazioni tecniche.
L'ISP richiede che l'AVR di destinazione funzioni a una frequenza di clock almeno pari a quattro volte quella dell'orologio ISP. Questa è una trappola comune e una fonte di confusione per molti nuovi AVR.
METODO 2: JTAG
Supportato da: vedere la guida di AVRStudio Tools per il supporto dei dispositivi MKI e MKII
Programmatori supportati: JTAG-ICE, JTAG-ICE MKII, Dragon, cloni JTAG-ICE, AVRONE, STK600 (solo programmazione)
Tecnicamente JTAG è un sistema di debug, non un metodo di programmazione. Tuttavia, l'interfaccia JTAG consente la programmazione di un AVR che lo supporta.
JTAG è uno strumento di debug nel sistema che consente di manipolare ed esaminare lo stato di un AVR supportato mentre è in esecuzione in un circuito. JTAG consente all'utente di interrompere l'esecuzione in qualsiasi momento, la manipolazione dei registri interni dell'AVR e molto altro.
Le unità JTAG-ICE ufficiali di ATMEL sono state sostituite dal JTAG-ICE MKII, che supporta il protocollo di debug DebugWire più recente e ampiamente supportato oltre alla programmazione tramite il metodo ISP (vedere sopra).
I cloni JTAG-ICE sono disponibili a prezzi bassi, tuttavia la loro compatibilità limitata con solo una manciata di AVR limita la loro utilità. Indipendentemente da ciò, se il tuo AVR supporta l'interfaccia JTAG, JTAG-ICE rimane un metodo di programmazione e un programmatore di debug molto efficace ed efficace.
METODO 3: DebugWire
Supportato da: Molti AVR più piccoli
Programmatori supportati: JTAG-ICE MKII, Dragon, AVRONE
Ancora una volta DebugWire è un debug piuttosto che un'interfaccia di programmazione, ma può essere utilizzato per caricare programmi in AVR supportati. L'interfaccia dW utilizza un singolo pin AVR (la linea / RESET) per tutte le comunicazioni, rendendolo ideale per i dispositivi AVR a basso numero di pin.
METODO 4: Bootloader
Supportato da: AVR più recenti
Programmatori supportati: N / D
Ancora una volta tecnicamente non è un metodo di programmazione. Un bootloader è un piccolo programma AVR che si trova in una sezione riservata impostabile dall'utente del normale flash. I bootloader utilizzano le funzionalità di auto-modifica flash disponibili nei nuovi AVR per consentire all'AVR di programmare se stesso tramite i dati di programma caricati da una fonte esterna. I bootloader possono estrarre i loro dati da qualsiasi posizione (ad esempio flash esterno o scheda SD), tuttavia il tipo più comune di Bootloader comunica con un PC tramite la porta RS-232 (seriale) dell'AVR.
I bootloader sono limitati in quanto consumano spazio flash (limitando la dimensione del flash disponibile per l'applicazione dell'AVR) e non sono in grado di modificare le fusebit dell'AVR.
I bootloader sono ampiamente disponibili su Internet per il download, ma soffrono di un problema "pollo e uova"; è necessario un altro tipo di programmatore elencato qui per programmare in primo luogo nel bootloader. Questo di solito è risolto dalla costruzione di un semplice dongle a porta parallela (vedere la sezione ISP) o dall'acquisto di un AVR già precaricato con un bootloader (ad esempio la scheda AVRButterfly).
METODO 5: Programmazione parallela ad alta tensione (HVPP)
Supportato da: La maggior parte degli AVR non TINY (con eccezioni)
Programmatori supportati: STK500, STK600, Dragon, Dongle Homebrew, AVRONE
La programmazione parallela ad alta tensione è un metodo di programmazione che viene utilizzato raramente, a causa della seccatura che richiede di impostare. Nonostante ciò, la programmazione HVPP è comunemente usata per "resuscitare" AVR le cui micce sono state configurate in modo errato tramite un altro metodo di programmazione.
Sia STK500 che Dragon supportano HVPP. Durante l'HVPP, il pin / RESET del target viene elevato al valore insolitamente alto di 12V che impegna i circuiti di programmazione parallela interna. Il pin / RESET è l'unico pin dell'AVR (sugli AVR supportati da HVPP) che può essere portato in sicurezza a questo livello.
Puoi creare il tuo dongle HVPP usando piani online come questo.
METODO 6: Programmazione seriale ad alta tensione (HVSP)
Supportato da: Molti AVR TINY (con eccezioni)
Programmatori supportati: STK500, STK600, Dragon, Dongle Homebrew, AVRONE
HVSP è simile a HVPP, tranne per il fatto che il trasferimento dei dati viene eseguito in serie anziché in parallelo. Questo è il metodo di programmazione alternativo utilizzato su molti AVR della serie TINY che non dispongono di pin sufficienti per HVPP.
METODO 7: PDI
Supportato da: XMEGA AVR
Programmatori supportati: STK600, AVRONE, JTAG MKII, Dragon, AVRISP MKII
PDI è la nuova interfaccia di programmazione basata sul protocollo debugWire, per la linea di AVR XMEGA. Al momento non è utilizzato su nessun altro microcontrollore AVR a 8 bit.
METODO 8: TPI
Supportato da: AVR TINY a 6 pin (ATTINY10, ecc.)
Programmatori supportati: STK600, Dragon, AVRISP MKII
TPI è un'interfaccia di programmazione molto piccola per la nuova linea TINY di AVR con pin limitati, come ATTINY10 a 6 pin. Come dW, TPI utilizza la linea / RESET del dispositivo come parte dell'interfaccia di comunicazione, ma lì finisce la somiglianza. Poiché gli AVR TINY di dimensioni ridotte non dispongono di un circuito di debug su chip, il protocollo TPI utilizza una nuova interfaccia di programmazione a tre pin, in un protocollo half-duplex. Poiché la linea / RESET deve essere aumentata a + 12V per la programmazione quando è impostato il pin RSTDSB del dispositivo, questo è attualmente supportato solo dalla più recente scheda di programmazione STK600.
Sezione FAQ Bonus!
Qual è il metodo migliore?
Non esiste un metodo "migliore" universale. La programmazione ISP è semplice ed estremamente popolare, tuttavia tutti i metodi sopra indicati funzioneranno. Le due modalità di programmazione ad alta tensione (a seconda di quale è applicabile al tuo dispositivo) sono le più ricche di funzionalità, in quanto consentono la riparazione di un AVR che non ha configurato correttamente i suoi fusibili. Tuttavia, questi metodi sono un problema da configurare, quindi il motivo per cui la maggior parte degli utenti utilizza ISP.
Ho creato un dongle con porta parallela. Posso usarlo con AVRStudio?
Temo di no. AVRStudio non può interfacciarsi con nessun dongle "stupido" - richiede un dispositivo di programmazione intelligente - contenente un microcontrollore stesso - per decifrare il protocollo di comunicazione che invia. I dongle semplici senza un microcontrollore devono essere "sbattuti" (ovvero i segnali appropriati simulati attraverso il dongle tramite il computer) stesso.
Quindi il mio dongle è inutile allora?
No. Puoi comunque programmare tramite un dongle fatto in casa con uno strumento software di programmazione di terze parti. AVRDude è un'utilità della riga di comando valida, conosciuta e gratuita, inclusa nel pacchetto WinAVR.
Quali sono le mie opzioni se voglio che il mio programmatore funzioni con AVRStudio?
Scegli un programmatore che utilizza un protocollo supportato da AVRStudio. Questo può essere il semplice protocollo "AVR910" (obsoleto) o un'implementazione personalizzata del protocollo utilizzato da STK500 / AVRISP. Si noti che questi programmatori richiedono un microcontrollore, determinando una situazione di cattura 22. Ciò può essere risolto avendo l'AVR del programmatore preprogrammato al momento dell'acquisto con il firmware appropriato, o avendo l'AVR preprogrammato con un bootloader.
Ok, voglio usare un bootloader. Come posso ottenerlo lì in primo luogo ?!
Per utilizzare un bootloader in un AVR, devi prima aver programmato il bootloader. Se non hai un programmatore esistente (anche un semplice dongle stupido sarà sufficiente per la programmazione iniziale), puoi in alternativa acquistare AVR pre-programmati con un bootloader da diversi fornitori.
Atmel produce anche la scheda demo Butterfly, il cui MEGA169 AVR è precaricato con un bootloader compatibile con AVR-Studio.
Aiuto! Ho rovinato le micce e ho distrutto il mio AVR mentre usavo l'ISP!
L'errore più comune è cambiare i fusibili di selezione dell'orologio in un'impostazione non valida. Prova a mettere un orologio esterno sul pin XTAL1 dell'AVR e vedi se questo aiuta.
In caso contrario, se possibile utilizzare uno dei metodi ad alta tensione. Questi risolveranno eventuali errori di configurazione, compresi quelli che coinvolgono la sorgente di clock poiché i metodi ad alta tensione forniscono il proprio clock all'AVR per la programmazione.
Come si interfaccia con il mio programmatore?
Il software utilizzato per l'interfaccia con il programmatore dipende dal tipo di programmatore in uso.
I dongle semplici "stupidi" richiedono software di terze parti, come PonyProg o AVRDude. Questi possono essere strumenti da riga di comando o GUI: guardati intorno sul Web e ne troverai uno adatto alle tue esigenze.
Programmatori e bootloader basati sul protocollo AVR910 possono essere utilizzati all'interno di AVRStudio. Dal menu Strumenti, selezionare l'opzione "AVRProg" per aprire una schermata della GUI per l'interfaccia con il programmatore. In alternativa, anche strumenti di terze parti come AVRDude sono compatibili con AVR910.
Gli strumenti ufficiali sono strettamente integrati in AVRStudio, specialmente nel caso delle varianti di debug (JTAG / Dragon / etc). Dal menu Strumenti AVRStudio, selezionare il sottomenu "Programma AVR ..." e fare clic sulla voce "Connetti". Dalla nuova finestra, selezionare lo strumento e la sua interfaccia di connessione e fare clic su OK.
Come nel caso delle chiavi hardware e dei programmatori AVR910, gli strumenti ufficiali possono essere utilizzati anche con software di programmazione di terze parti.
(C) Dean Camera, 2009. Tutti i diritti riservati. Non per la riproduzione su siti Web diversi da AVRFreaks.net senza previa autorizzazione esplicita.