Computer finestre Internet

Descrizione del fusibile atmega8. Microcontrollori ATMEL. Fusibili. Fusibili. Regole di base per principianti

Che cos'è FUSIBILE pezzi? Le parole sembrano familiari, ma molte persone non ne conoscono veramente lo scopo, selezionano le caselle e le lampeggiano, il dispositivo funziona e va bene. Voglio parlarvi un po' di questi pezzi FUSE.

FUSIBILE bit ( fusibili) – beh, per dirla semplicemente, configurano alcuni parametri dei microcontrollori, questo è una sorta di strumento per metterli a punto. I fusibili includono o configurano parametri come:
- frequenza del generatore, generatore esterno o interno
- divieto di lettura del firmware del microcontrollore
- abilitare o disabilitare i timer
- Divisione di frequenza di un oscillatore a cristallo
- Protezione EEPROOM contro la cancellazione
…e così via. Ogni microcontrollore ha i propri fusibili, diversi microcontrollori hanno un diverso elenco di fusibili, ad esempio l'ATmega8 non ha il fusibile CKOUT, ma è presente nell'ATtiny2313. Tutti questi fusibili sono descritti nelle schede tecniche dei microcontrollori.

Principale La regola quando si lavora con i fusibili è di non affrettarsi a impostarli a meno che non si sia assolutamente sicuri della correttezza delle proprie azioni.

Ora scriviamo i nomi di alcuni fusibili, le loro designazioni e cosa influenzano. In generale, ci sono fusibili per proteggere un programma dalla copia (bit di blocco), fusibili che stabiliscono determinate funzioni, nonché i cosiddetti byte “alto” e “basso”. Il fusibile più popolare, quasi sempre esposto, è:

CKSEL, ci sono solo quattro fusibili con lettere diverse, questo è un gruppo CKSEL 0,CKSEL1CKSEL2 eCKSEL 3, determinare la frequenza del generatore di clock e il suo tipo; gli impulsi di clock sono necessari per il funzionamento di quasi tutti i microcontrollori. Molti microcontrollori hanno un oscillatore interno, ma possiamo collegarne uno esterno e impostare i fusibili per funzionare da un oscillatore esterno. Ai pin è collegato un risuonatore esterno al quarzo XTAL 1 E XTAL2, inoltre, sono saldati una coppia di condensatori da ~20pf, un'estremità al quarzo, l'altra al meno. Se si commette un errore durante l'installazione di questi fusibili, il microcontrollore può essere "bloccato"; per ripristinare il controller, un segnale di clock viene inviato alla gamba XTAL1; al momento sono stati inventati parecchi schemi per ripristinare i controller bloccati in questo modo. Questo generatore può essere realizzato con quasi qualsiasi logica o anche con un timer 555.

Esistono circuiti semplici che utilizzano 1 transistor, una coppia di resistori e un risonatore al quarzo e altri più complessi che utilizzano chip come K155LA3. Questi metodi ripristinano al 100% i controller con tale difetto

Gruppo fusibili SUT1 E SUT0- Fusibili che controllano la modalità di avvio dei generatori di clock MK e impostano anche la velocità di avvio del MK dopo aver collegato l'alimentazione. Associato ai fusibili CKSEL, vale a dire CKSEL0.

CKOPT- bit, determina il funzionamento dell'oscillatore integrato per lavorare con risonatori al quarzo, imposta l '"ampiezza" delle oscillazioni del segnale dell'orologio sul quarzo. Questo bit viene programmato abbastanza spesso.

RSTDISBL– un fusibile molto pericoloso, un'errata impostazione può disabilitare l'uscita RESOT, dopodiché scomparirà la possibilità di programmare il programmatore ISP. Morso RSTDISBL trasforma l'uscita RIPRISTINA alla porta I/O.

SPIEN– fusibile, che consente al MK di funzionare tramite l'interfaccia SPI. Tutti i microcontrollori vengono rilasciati con il bit già installato SPIEN. Considerata una fusione pericolosa.

EESAVE- Comodo da leggere come EEPROM SAVE, significa letteralmente "salva EEPROM", questo fusibile protegge la EEPROM dalla cancellazione. Ad esempio, al successivo caricamento del firmware sul controller, è possibile impostare EESAVE = 0, e quando si cancella la MK EEPROM rimarrà intatta.

STIVALIZ, è costituito da un gruppo di bit STIVALIZ1 E STIVALIZ0, determinano la dimensione dell'area di memoria dei programmi registrati, associata al bit BOOTRS.

BOOTRST, determina l'indirizzo da cui inizierà l'esecuzione del programma. Se il bit è impostato, ad es. Se BOOTRST=0, quindi il programma partirà dall'indirizzo dell'area del boot loader.

BODEN- bit, che quando impostato ( BOD=0), controllerà la tensione di alimentazione; a tensioni estremamente basse, il microcontrollore può riavviarsi, guastarsi e così via. Associato a BODLEVEL.

BODLEVEL. - determina il momento in cui viene attivato il rilevatore del livello della tensione di alimentazione; quando la tensione di alimentazione scende al di sotto del livello, il controller si “riavvia”.

AUTOPRGEN- bit che consente ( AUTOPRGEN=0) o vieta ( AUTOPRGENE =1) il programma scrive in memoria.

OCDEN– questo fusibile consente o impedisce la lettura di un programma dalla memoria del controller.

Una volta ho menzionato nei miei articoli che in alcuni programmi i fusibili sono impostati in modo speculare. Ricordare fusibile programmato=0 , UN Non programmato=1 . Nei programmi Costruttore di algoritmi, UniProf i fusibili sono impostati in un modo e nei programmi PonyProg,CodeVisionAVR, AVR Studio, SinaProg e alcuni altri, i fusibili devono essere impostati in modo speculare rispetto all'elenco precedente dei programmi.

Da molto tempo in Internet sono apparsi i cosiddetti “calcolatori di fusibili”, si tratta di applicazioni speciali progettate per aiutare nella configurazione di un microcontrollore. L'applicazione è intuitiva, penso che lo capirai, nell'elenco dei controller selezioniamo il MK di cui abbiamo bisogno, quindi selezioniamo le funzioni necessarie e sotto sono spuntate le scatole dei fusibili, tutto è molto semplice.

Queste applicazioni sono molto convenienti perché... ad esempio, recentemente, molto spesso gli autori dei loro progetti scrivono i valori dei fusibili in lettere o numeri incomprensibili, o in parole che un principiante non capisce cosa significhi e quali fusibili dovrebbero essere impostati (spesso puoi trovare un commento sul articolo “quali fusibili impostare?”). Il calcolatore dei fusibili ci aiuta molto in questo senso.

Penso che ora, se ti viene chiesto "cosa sono i fusibili e perché sono necessari?", sarai in grado di spiegare a una persona il loro scopo, ma per ora è tutto!

Negli articoli precedenti ti avevo consigliato di non interferire con queste parti. E c'erano delle ragioni per questo, poiché impostando questi bit in modo errato è possibile bloccare in modo permanente il controller per ulteriori flashing o qualsiasi altro utilizzo.

Ma senza conoscere questa caratteristica del controller non andrai lontano. Quindi scriverò tutto in ordine. Versioni diverse di controller hanno un numero diverso di FUSIBILI, alcuni potrebbero mancare, ma i principali sono sempre presenti. Esaminiamoli.

I bit di configurazione si trovano in un'area di memoria speciale e possono essere modificati solo tramite il programmatore durante la scrittura del controllore. C'è un byte alto e un byte basso. Il byte basso è solitamente responsabile della frequenza e il byte alto per tutti i tipi di palline.

Quindi, la cosa principale:

L'AVR Atmel adotta la seguente notazione: un bit del fusibile reimpostato su zero è considerato attivo, ovvero incluso.

Esempio Il bit RSTDSBL, come suggerisce il nome, è RESET DISABLE. Se abiliti questa opzione, la gamba RESET si trasforma in una porta I/O, ma per questo perdi la possibilità di aggiornare il controller tramite ISP.

Quindi, per disattivare RESET (e ottenere un grosso bug con il firmware in cambio di un piccolo suggerimento sotto forma di una gamba aggiuntiva), è necessario scrivere 0 su questo bit.

Da un lato, è illogico e distorto. È come se la notazione accettata in tutto il mondo fosse che lo zero è spento, ma qui, sai, è il contrario. D'altra parte, questo è il loro controllore, fanno quello che vogliono. Ricordalo una volta e basta. E in generale, nell'elettronica, spesso prendono lo zero come segnale.


Tuttavia, i controller sono realizzati da ingegneri elettronici e i programmi firmware sono realizzati da programmatori. Com'è logico. E così questi programmatori hanno fatto un pasticcio infernale con le caselle di controllo. Dovrebbero accettare una volta per tutte come standard che un segno di spunta sia 1 e non ON (che, lasciatemelo ricordare, è zero). E quindi, in alcuni programmi lampeggianti, un segno di spunta significa che l'opzione è abilitata (in FUSE il bit è scritto 0), in altri, solitamente scritti da ingegneri elettronici, il segno di spunta significa uno. Quelli. esattamente il contrario.

Cosa succede se lo mescoli? E sarà MOLTO brutto. Il controller entrerà nella modalità sbagliata e potrebbe bloccarsi in modo permanente. Quelli. L’ho chiesto una volta e basta. Era arrivato.

No, puoi salvarlo, ma per questo avrai bisogno di ulteriori trucchi sotto forma di un programmatore ad alta tensione, un adattatore JTAG o un generatore di orologio. Tutto dipende dalla modalità in cui guidi il controller con le impostazioni errate.

Per un principiante, di solito è più facile andare a comprare un nuovo MK che ripristinarne uno bloccato. Ma non abbiate fretta di gettarlo nella spazzatura. Segnalo e mettilo da parte per il futuro, lo capirai e lo ravviverai.

Configurazione dell'orologio
Per impostazione predefinita, tutti i controller AVR (ad eccezione delle serie precedenti AT90S2313, AT90S8535, ecc.) sono configurati per funzionare da una sorgente di clock interna. Quelli. Tutto quello che devi fare è applicare loro energia e inizieranno a funzionare. Non è necessario altro.

I bit sono responsabili della sorgente dell'orologio CKSEL
Impostandoli correttamente, è possibile selezionare la frequenza del controller, nonché la sorgente del segnale dell'orologio.

  • CKSEL3…0 = 0000 — Sorgente del segnale esterno.

Quelli. All'ingresso XTAL1 vengono forniti impulsi rettangolari. Questo a volte viene fatto nei sistemi sincroni, quando diversi controller funzionano da un generatore.

Digressione tecnica
Spesso entrano in questa modalità quando provano a impostare il controller per funzionare da un quarzo esterno (CKSEL=1111), ma confondono la notazione o per scherzo con la notazione inversa dei bit in tutti i tipi di programmi lampeggianti perversi . Una volta che il cristallo è stato bloccato. Ma, in effetti, è impossibile bloccare saldamente il cristallo usando CKSEL. Di solito tutto si risolve saldando il quarzo e partendo da questo quarzo. Il peggio che può succedere è che avrai bisogno di un generatore di clock esterno. Il che farebbe rivivere il cristallo. È realizzato in cinque minuti da qualsiasi chip logico TTL, ad esempio K155LA3: ci sono molti circuiti su Internet. O su un timer 555, oppure puoi prendere un secondo MK e scriverci sopra un semplice programma che fa sobbalzare la gamba. E se hai un oscilloscopio, puoi ottenere da esso il segnale del generatore di controllo: il suo terminale dovrebbe trovarsi su qualsiasi oscillatore. La terra oscillava verso la terra del controller e l'uscita del generatore verso XTAL1.

Ma cosa fare se il prurito è insopportabile, il controller è bloccato e non c'è un chip per la rianimazione a portata di mano? A volte il metodo del dito funziona qui. La cosa divertente è che un mira molto freddo con una frequenza di circa 50 Hz è diretto al corpo umano. Chiunque abbia afferrato con le mani le sonde di un oscilloscopio ricorda quali sciocchezze appaiono immediatamente sullo schermo: eccola! Perché non utilizzare questa guida come segnale orario? Quindi saldi un filo al pin XTAL1, lo prendi con la mano e premi leggi o scrivi il controller :) Ti avviso subito, il metodo funziona come un disastro, non la prima volta, ci vuole molto tempo da leggere e talvolta con errori, ma ci vuole un po' di tempo per riscrivere i bit FUSE sul lato corretto e dovrebbe essere sufficiente. Sono riuscito a fare questo trucco un paio di volte.

CKSEL3…0 = 0100 – 8 MHz dall'oscillatore interno (solitamente questi sono i valori predefiniti)
Per la maggior parte degli AVR, questa configurazione CKSEL significa clock dall'oscillatore interno a 8 MHz, ma potrebbero esserci delle variazioni. Quindi in questo caso guarda attentamente la scheda tecnica. Alla piastra delle modalità operative dell'oscillatore RC calibrato interno

A volte è necessario, ad esempio, disporre di un generatore di clock esterno, in modo che possa essere regolato senza interferire con il firmware. Per fare ciò è possibile collegare una catena RC come mostrato nel diagramma e calcolare la frequenza utilizzando la formula f = 1/3RC, dove f sarà la frequenza in hertz e R e C, rispettivamente, la resistenza del resistore e la capacità del condensatore, in ohm e farad.

  • CKSEL3…0 = 0101 – per frequenze inferiori a 0,9 MHz
  • CKSEL3…0 = 0110 – da 0,9 a 3 MHz
  • CKSEL3…0 = 0111 – da 3 a 8 MHz
  • CKSEL3…0 = 1000 – da 8 a 12 MHz

Questa targa è valida solo per ATmega16; altri MK potrebbero differire. Controlla la scheda tecnica per i dettagli!

Il problema con l'oscillatore interno e i circuiti RC esterni è solitamente l'instabilità di frequenza, il che significa che se ci crei un orologio, mentirà, non molto, ma lo farà. Pertanto, a volte è utile far funzionare il controller sul quarzo; inoltre, solo sul quarzo è possibile ottenere la massima frequenza, e quindi le prestazioni del processore.

  • CKSEL3…0 = 1001 – quarzo “orologio” a bassa frequenza.

Diverse decine di kilohertz.
Utilizzato in applicazioni a bassa velocità, soprattutto quando sono richiesti un funzionamento preciso e un basso consumo energetico.

Per il quarzo ordinario la situazione è leggermente diversa. Anche in questo caso la frequenza massima del quarzo dipende dalla punta CKOPT quando CKOPT = 1 allora:

  • CKSEL3…0 = 1010 o 1011 - da 0,4 a 0,9 MHz
  • CKSEL3…0 = 1100 o 1101 - da 0,9 a 3 MHz
  • CKSEL3…0 = 1110 o 1111 – da 3 a 8 MHz (o da 1 a 16 MHz con CKOPT=0)

E se CKOPTè uguale a 0, quindi con gli stessi valori di CKSEL è possibile impostare il quarzo da 1 a 16MHz.

Naturalmente il quarzo 16MHz può essere installato solo su Mega senza l'indice “L”. (Sebbene, come dimostra la pratica, Lku può anche essere overcloccato abbastanza bene. Il mio ATMega8535L ha funzionato a 16 MHz, ma c'erano strani effetti nell'operazione. Pertanto, non l'ho pervertito così tanto e ho rimosso l'overclocking). Ancora una volta, tutto quanto sopra corrisponde esattamente solo a Mega 16; altri potrebbero differire leggermente.

Morso CKOPT specifica l'oscillazione del segnale di clock. Quelli. ampiezza delle oscillazioni all'uscita dal quarzo. Quando CKOPT = 1, l'intervallo è piccolo, per questo motivo si ottiene un consumo energetico inferiore, ma la resistenza alle interferenze è ridotta, soprattutto a velocità elevate (e il massimo, a giudicare dalla tabella sopra, non può essere raggiunto affatto. Di più appunto, può iniziare, ma nessuno dà garanzie attendibili). Ma se CKOPT è attivato e vi viene scritto 0, l'oscillazione del segnale cambierà immediatamente da 0 a potenza. Ciò aumenterà il consumo energetico, ma aumenterà la resistenza alle interferenze e quindi la velocità massima. Quando si overclocca l'MK, è ancora più necessario impostare CKOPT su 0.

Vale la pena menzionare anche il bit SCKDIV8, che non è presente nell'Atmega16, ma si trova spesso in altri controller AVR. Questo è un divisore di orologio. Quando è installato, ad es. a zero, la frequenza impostata nei bit CKSEL0...3 viene divisa per 8, che è ciò su cui Dlinny si è bloccato una volta, cercando a lungo di capire perché per lui non funzionava. La bellezza è che questo divisore può essere disabilitato a livello di codice scrivendo il coefficiente di divisione desiderato, ad esempio uno, nel registro CLKPR. Lo scherzo è che SCKDIV8 è attivo per impostazione predefinita! Perciò stai attento!

Bit SUT impostare la velocità iniziale del MK dopo aver rimosso RESET o collegato l'alimentazione. Il valore varia da 4 ms a 65 ms. In tutta la mia pratica, non ho ancora avuto l'opportunità di utilizzare questa opzione: non ce n'è bisogno. Quindi l'ho impostato su un massimo di 65 ms: sarà più affidabile.

Morso RSTDISBL capace di girare una linea Ripristina in una delle gambe della porta, il che a volte è molto necessario quando un piccolo Tiny non ha abbastanza gambe per tutte le attività, ma dobbiamo ricordare che se disabiliti Reset, la possibilità di flashare il controller utilizzando cinque fili decade automaticamente. E per ricablare avrai bisogno di un programmatore parallelo ad alta tensione, che costa diverse migliaia ed è problematico da fare in ginocchio, anche se è possibile.

La seconda parte zapodlyansky è SPIEN Se lo imposti su 1, perderai immediatamente anche la possibilità di eseguire il flashing utilizzando il percorso semplice e di nuovo avrai bisogno di un programmatore parallelo. È però rassicurante che sia impossibile resettarlo tramite SPI, almeno nei nuovi AVR (nei vecchi, nell'AT90S*** era possibile)

WDTONè responsabile del Dog Timer, noto anche come Watch Dog. Questo timer riavvia il processore se non viene ripristinato periodicamente, evitando blocchi. Se WDTON è impostato su 0, il cane non può essere affatto spento.

BODLEVEL E BODEN- Questa è una modalità di controllo della tensione. Il fatto è che a una certa soglia di tensione, al di sotto del livello critico, il controller può iniziare a diventare molto difettoso. Può danneggiare spontaneamente, ad esempio, EEPROM o qualcos'altro. Beh, cosa hai pensato, se non ti do da mangiare per un paio di settimane, inizierai ad avere problemi anche tu :)

Quindi, per risolvere questo problema, l'AVR dispone di un supervisore di potenza integrato. Si assicura che la tensione non sia inferiore a un livello adeguato. E se la tensione non è sufficiente, preme semplicemente RESET e non consente l'avvio del controller. Questi due fusibili sono quelli che guidano questa funzione. BODEN include e BODLEVEL consente di selezionare uno dei due livelli critici. Quale? Non lo rivelo, guarda nella scheda tecnica (sezione Controllo e ripristino del sistema).

JTAGEN- Abilita JTAG. Attivo per impostazione predefinita. Quelli. JTAG abilitato. Per questo motivo, MEGA16 (così come 32 e altri che hanno JTAG) non possono utilizzare i pin della porta C responsabili di JTAG. Ma puoi collegare un debugger JTAG e usarlo per entrare nel cervello del controller.

EESAVE— Protezione EEPROM contro la cancellazione. Se accendi questa cosa, quando il MK sarà completamente ripristinato, la zona EEPROM non verrà cancellata. Utile, ad esempio, se durante il funzionamento vengono scritti dati preziosi nella EEPROM.

BOOTRS— trasferimento del vettore di partenza nell'area del bootloader. Se questa casella di controllo è abilitata, il MK non inizia dall'indirizzo 00000, ma dall'indirizzo del settore di avvio ed esegue prima il bootloader. Maggiori dettagli a riguardo sono stati scritti nell'articolo sul firmware tramite caricatore.

STIVALIZ0..1— un gruppo di bit che determina la dimensione del settore di avvio. Consulta la scheda tecnica per maggiori dettagli. Differiscono da controller a controller.

Bit di blocco
Questo, in realtà, non ha nulla a che fare con i fusibili. Questi sono bit di sicurezza. L'impostazione di questi bit disabilita la lettura dal cristallo. O flash, o EEPROM, o entrambi contemporaneamente. Necessario solo se vendi i tuoi dispositivi. In modo che i malvagi concorrenti non diffondano il firmware e non ordinino più di 9.000 cloni del tuo dispositivo dalla Cina, lasciandoti senza pantaloni. Non rappresentano alcun pericolo. Se blocchi il cristallo con loro, esegui una cancellazione completa e non ci saranno problemi.

Una caratteristica dei bit di blocco installati è che il firmware è leggibile: i byte sono in ordine. Quelli. 00,01, 02, 03, 04... FF, 00... Hai visto queste schifezze? Quindi non è il tuo destino rubare il firmware: è protetto =)

Misure di sicurezza
E la regola principale quando si lavora con i bit FUSE è ATTENZIONE, ATTENZIONE e ANCORA ATTENZIONE! Non impostare mai FUSE senza controllare la scheda tecnica, anche se la copi da una fonte attendibile.

Assicurati di capire cosa significa il segno di spunta nel programma lampeggiante. Zero o uno. Acceso o spento! Non esiste una norma!!!

Se i bit fuzz sono specificati da due numeri, il bit più significativo e quello meno significativo, vengono impostati come nel foglio dati. Dove 0 è abilitato.

La seconda regola ferrea per lavorare con FUSE. Ricordalo per sempre e non dire che non ho insegnato.

PRIMA LEGGIAMO QUELLI CHE ABBIAMO, POI SCRIVIAMO QUELLI CHE CI SERVONO

Leggi - Modifica - Scrivi. L'unico modo. Perché? Sì, spesso accade così: ho aperto la scheda FUSE, ma il programmatore è stato stupido e non li ha contati. Di conseguenza, hai celle vuote ovunque. Soddisfatto, ho impostato solo quelli che ti servono SKSEL, e poi ho premuto WRITE. È qui che arriva, di solito, il ragazzo. Perché Non solo quelli modificati, ma l'intera sezione viene scritta nel controller. Con quelle stesse celle vuote. Immagina che casino sarà lì. Stessa cosa! E poi corrono a lamentarsi nei commenti e nei forum, dicendo che non ho toccato niente del genere: è proprio lì. Sì, proprio adesso!

Quindi, ancora una volta: leggi, modifica, scrivi!

Traccia:
Come è possibile determinare a colpo d'occhio quale tipo di bit del fusibile (diretto o inverso) si trova in un programma di flashing sconosciuto?
Metodo deduttivo: premere Leggi Fusibili e osservare lo stato del bit SPIEN, questo bit è sempre attivo e se viene resettato il programmatore non sarà nemmeno in grado di rilevare il controller. Se SPIEN è 1, i fusibili sono invertiti, come in PonyProg. Se zero significa secondo la notazione Atmel.

L'impostazione dei bit Fuse e Lock (bit di configurazione e blocco) dei microcontrollori (MCU) della famiglia AVR, soprattutto per i principianti, è un compito piuttosto difficile e spesso può causare confusione durante l'impostazione e la programmazione dell'MCU. Se ne sbagli qualcosa o lo imposti in modo errato, ciò potrebbe portare ad un funzionamento errato del programma o, peggio ancora, all'impossibilità di programmare il circuito MK tramite l'interfaccia seriale.

Nonostante il fatto che la documentazione tecnica di ogni MK fornisca informazioni complete su Fuse e Lock bit, i principianti spesso si sentono un po' insicuri prima di eseguire il comando per scrivere la configurazione e i lock bit. Nell'articolo vedremo le caratteristiche principali dei bit di configurazione della famiglia AVR MK.

Fusibili e pezzi di blocco

Prima di entrare nei dettagli dei bit di configurazione, c'è una cosa da capire e ricordare:

  • Bit fusibile = 1, significa che non è programmato (cancellato, inattivo);
  • Bit fusibile = 0 significa che è programmato (impostato, attivo).

Questa è una delle principali fonti di confusione durante la programmazione dei bit Fuse e Lock. Siamo abituati a pensare che impostare il valore di un parametro significhi scrivere 1, giusto? Con i bit AVR Fuse è il contrario, impostare qualsiasi bit significa scrivere 0, e questo deve essere ricordato.

I bit di configurazione si trovano in un'area separata della memoria non volatile. Ad esempio, il MK ha quattro byte di configurazione che devono essere programmati per il corretto funzionamento. Uno di questi byte contiene i bit di blocco, i restanti tre (spesso chiamati alto, basso ed esteso) contengono i bit di configurazione. Questo insieme di bit definisce le impostazioni iniziali dell'MCU: sorgente di clock, area del bootloader, operazione di ripristino dell'hardware, timer watchdog, ecc. Innanzitutto esamineremo i bit di blocco (Figura 1).

A seconda del tipo di microcontrollore AVR, il numero di bit di Lock può variare, ma i due bit meno significativi sono sempre presenti. Bit LB1 e LB2 vengono utilizzati per bloccare l'accesso alla memoria Flash incorporata. Probabilmente sai che gli sviluppatori di qualsiasi dispositivo bloccano quasi sempre la lettura del firmware MK per proteggere la loro proprietà intellettuale e prevenire la creazione di duplicati e falsi. Leggere un microcontrollore bloccato è come una caramella per gli hacker hardware, ma questo è un argomento diverso. Quindi, se hai bisogno di proteggere il tuo firmware dalla copia, devi bloccare il contenuto della memoria del microcontrollore, altrimenti lasciare i bit invariati. Altri bit di blocco ( BLB01, BLB02, BLB11 e BLB11 ) può essere utilizzato per bloccare la scrittura/lettura nella/dalla memoria Flash, sia dall'area applicazione che dalla sezione bootloader. I bit di blocco vengono programmati raramente (a seconda delle specifiche dell'applicazione), non ci concentreremo su di essi. Anche se se ne programma uno qualsiasi, i bit di blocco vengono ripristinati (impostati a 1) durante il comando Chip Erase.

Quelli che ci interessano di più sono gli aspetti di configurazione; dovrai affrontarli molto spesso, che ti piaccia o no. La posizione di alcuni bit del fusibile nei tre byte di configurazione varia a seconda dell'MCU utilizzato. Considereremo ad esempio l'ATmega328P, che ha tre byte di configurazione (Figura 2).

Figura 2. Composizione dei byte di configurazione e valori iniziali dei bit Fuse del microcontrollore ATmega328P.

Guarda la composizione del byte basso. Vedi un gruppo di 4 bit identici CKSEL0, CKSEL1, CKSEL2, CKSEL3 . Vengono utilizzati per selezionare il tipo di sorgente di clock per il microcontrollore MK. Per impostazione predefinita (impostazioni di fabbrica), il microcontrollore è configurato per funzionare da un oscillatore RC interno da 8 MHz. Logicamente, questa è l'opzione più sicura per lavorare con un microcontrollore. Ma, come sai, i dispositivi della famiglia AVR possono funzionare da diverse sorgenti di frequenza di clock:

  • oscillatore RC interno calibrato (default 8 MHz);
  • oscillatore RC esterno;
  • risuonatore esterno ceramico o al quarzo;
  • quarzo esterno a bassa frequenza;
  • sorgente di clock esterna.

Per ciascuna delle modalità di clock presentate è disponibile una gamma di impostazioni del bit Fuse CKSEL0..3 , che vengono utilizzati per controllare la frequenza del generatore di clock e il tempo in cui il microcontrollore ritorna alla modalità operativa dalla modalità a basso consumo. Questi bit sono strettamente correlati ai bit SUT0 e SUT1 , che controlla effettivamente il tempo di avvio del microcontrollore dopo l'applicazione dell'alimentazione. Il ritardo del trigger è necessario per stabilizzare la generazione di risonatori ceramici e cristalli. I valori esatti del tempo impiegato dal microcontrollore per raggiungere la modalità operativa sono riportati nella documentazione tecnica.

Bit di configurazione CKOUT consente/proibisce l'uscita della frequenza di clock su uno dei pin MK; per ATmega328P al pin PORTB0 (per il clock di altri dispositivi), indipendentemente dalla sorgente di clock MK utilizzata. Se il bit è programmato, le funzioni primarie e alternative della porta PB0 non sono disponibili per l'applicazione utente.

L'ultimo bit nel byte basso è CKDIV8 . Per impostazione predefinita, questo bit è impostato, il che significa che un divisore di frequenza da 8 MHz con un fattore 8 è collegato all'oscillatore RC interno, quindi la frequenza di clock del sistema MK in questo caso sarà pari a 1 MHz. Se hai bisogno di una velocità di clock di 8 MHz, bit CKDIV8 deve essere ripristinato.

Ora concentriamoci sul byte di configurazione di ordine superiore.

La prima parte è BOOTRS , che viene cancellato per impostazione predefinita. Se questo bit è impostato, dopo aver collegato l'alimentazione al microcontrollore o dopo un ripristino, il microcontrollore inizierà l'esecuzione del programma dal settore di avvio. In poche parole, se un'applicazione richiede le funzioni del bootloader dalla memoria Flash, è necessario programmare questo bit. Se hai solo bisogno di programmare il microcontrollore tramite l'interfaccia in-circuit, puoi lasciare intatto questo bit.

Quando si utilizza un bootloader, i bit diventano importanti STIVALIZ0 e STIVALIZ1 . Definiscono l'area di memoria Flash per il bootloader. Se il codice del bootloader della tua applicazione è piccolo, puoi utilizzare i bit di configurazione per allocare un'area più piccola di memoria Flash per il bootloader e lasciare il resto per l'applicazione.

La prossima parte EESAVE . Se programmato (0), il contenuto della memoria dati non volatile EEPROM rimarrà intatto durante la procedura Chip Erase. Nella maggior parte dei casi questa è una funzionalità utile, ad esempio quando la EEPROM memorizza dati importanti o parametri di calibrazione e il firmware deve essere aggiornato, quindi programmare il bit prima di sostituire il firmware EESAVE .

Dopo aver impostato il bit WDTON Il timer watchdog del microcontrollore si attiva immediatamente dopo l'applicazione dell'alimentazione e non può essere disattivato tramite software. In questo caso, il timer watchdog eseguirà costantemente la sua funzione di ripristino periodico del microcontrollore, a meno che non venga eseguito uno speciale comando di reset del timer watchdog nel codice del programma. Se morso WDTON non è installato, il timer watchdog è abilitato/disabilitato dal software.

Morso SPIEN progettato per disabilitare l'interfaccia di programmazione seriale del microcontrollore. In effetti, non è possibile modificare lo stato di questo bit utilizzando l'interfaccia seriale (i microcontrollori AVR supportano altre due modalità di programmazione parallela), ma sono noti casi di modifica dello stato del bit SPIEN in caso di funzionamento errato o guasto del programmatore in circuito.

Una situazione simile con il bit RSTDSBL - serve per disabilitare la funzione di reset hardware, in altre parole, il pin di reset del MK viene utilizzato come porta I/O. In alcune situazioni (MCU con un numero ridotto di linee I/O) ciò è molto conveniente, ma in generale non è consigliabile. Impostazione bit errata RSTDSBL potrebbe privarti della possibilità di programmare il microcontrollore tramite SPI, poiché la presenza di un segnale di reset è un prerequisito per abilitare la modalità di programmazione.

Morso DWEN utilizzato per abilitare una speciale interfaccia di debug DebugWire per i microcontrollori AVR. Cambia lo stato del bit SPIEN, RSTDSBL e DWEN tramite un'interfaccia seriale non è possibile; ciò richiederà un programmatore parallelo con supporto per la modalità di programmazione ad alta tensione o una connessione tramite l'interfaccia DebugWire.

Un'altra cosa degna di nota CKOPT nel byte alto della configurazione ( è assente nell'ATmega328P, ma è presente negli altri AVR MK), controlla la modalità operativa dell'amplificatore del generatore di clock. Se il bit è programmato (0), il segnale di uscita del generatore di clock ha uno swing (ampiezza) pari alla tensione di alimentazione. Questa opzione può essere utilizzata quando il microcontrollore funzionerà in un ambiente con un livello elevato di rumore e anche quando si prevede di collegare un altro microcontrollore al pin XTAL2. Negli altri casi, questa modalità deve essere disabilitata ( CKOPT=1 ), poiché il consumo energetico del microcontrollore aumenta, e questo non è gradito nei dispositivi alimentati a batteria.

Ultimo byte di configurazione (esteso). Per il microcontrollore Atmega328P contiene tre bit: BODLEVEL0, BODLEVEL1, BODLEVEL2 . Questi bit hanno lo scopo di impostare la soglia per il circuito rilevatore della tensione di alimentazione: quando la tensione di alimentazione raggiunge il livello impostato, il microcontrollore si resetta.

Calcolatore del valore del bit del fusibile

Quando devi programmare un nuovo MK, puoi utilizzare la descrizione tecnica del microcontrollore per impostare i bit del fusibile. Ma esiste un modo più comodo e semplice: il calcolatore Fuse-bit, uno strumento online sviluppato da Mark Hammerling (Figura 3). Seleziona in modo indipendente il tipo di microcontrollore e abiliti/disabiliti le opzioni necessarie e la configurazione del bit del fusibile verrà aggiornata automaticamente.

Inoltre, è possibile impostare individualmente i bit Fuse in una forma separata, anche i valori dei byte basso, alto ed esteso della configurazione verranno aggiornati automaticamente (Figura 4), mentre i comandi vengono generati per il programmatore AVRDude.

Se possiedi un cellulare o un tablet Android puoi utilizzare l'applicazione gratuita AVR Fuse Calculator, che svolge le stesse funzioni e genera comandi per il programmatore AVRDude. Il database del programma contiene 144 AVR MK.

Regole di base per principianti:

  • Non modificare mai lo stato dei bit DWEN, SPIEN e RSTDSBL. Ad essi, infatti, non è possibile accedere tramite l'interfaccia di programmazione seriale;
  • Ricontrolla i bit CKSEL. L'impostazione errata del tipo di orologio causa molti problemi;
  • Se non stai producendo prodotti commerciali, non modificare lo stato dei bit di blocco;
  • Se non sei sicuro della corretta impostazione dei Fuse bit, è meglio fare riferimento alla documentazione tecnica o porre una domanda agli specialisti del forum.

Pubblicato il 16/07/2012

I fusibili sono diversi byte speciali che possono essere solo flashati e sono responsabili di varie impostazioni del microcontrollore. I fusibili possono differire per i diversi microcontrollori. Consultare pertanto la documentazione per informazioni più dettagliate. Poiché questo viene fatto per ultimo, fornirò qui una breve descrizione dei fusibili ed elencherò gli errori più comuni quando si lavora con i fusibili.

Vorrei sottolineare che viene considerato impostato un bit ripristinato su 0. Per i principianti, ciò spesso causa confusione quando si lavora con programmi firmware diversi.
Poiché il segno di spunta di fronte al fusibile non è sempre chiaramente 1 o 0 (nel senso di set). Gli sviluppatori del software hanno inteso che se è presente un segno di spunta, il bit viene considerato impostato (ovvero =0).

Famiglia
ATminuscolo
Famiglia
ATmega
2313 25 /
45/
85
13 26 261 /
461/
861
8 16 48 /
88/
168
128 169 329 8515 8535

RISERVATO
M103С+ S8515СS8535С
OCDEN + + + +
JTAGEN + + + +

AUTOPRGEN
+ + + + +
DWEN+ + + + + +

EESAVE
+ + + + + + + + + + + + +

SPIEN
+ + + + + + + + + + + + +

WDTON
+ + + + + + + + + + +

BODLEVEL2
+ + + + +

BODLEVEL1
+ + + + + + +

BODLEVEL0
+ + + CORPO
LIVELLO
+ CORPO
LIVELLO
CORPO
LIVELLO
+ CORPO
LIVELLO
+ + CORPO
LIVELLO
CORPO
LIVELLO

BODEN
+ + + + + +
RSTDISBL+ + + + + + + +

CKDIV8
+ + + + + + +

CKOUT
+ + + + + +
SUT1+ + + + + + + + + + + + +
SUT0+ + + + + + + + + + + + +
CKOPT + + + + + +
CKSEL3+ + + + + + + + + + + +
CKSEL2+ + + + + + + + + + + +
CKSEL1+ + + + + + + + + + + + +
CKSEL0+ + + + + + + + + + + + +

PLLCK
+
BOOTRS + + + + + + + +

STIVALIZ1
+ + + + + + + +

STIVALIZ0
+ + + + + + + +

Sul tavolo fusibile-pezzi di popolare AVR. Titoli a sinistra fusibile-bit secondo la scheda tecnica, le prime due righe elencano le famiglie e i tipi di MK specifici e all'intersezione di righe e colonne c'è un segno più , se dato fusibile-bit è presente in questo MK o specificato Nome , diverso da quello standard. Se manca un bit, non c'è nulla nella cella corrispondente. Lo scopo di ciascun bit del fusibile AVR: RISERVATO- questo bit è riservato ad alcuni scopi sconosciuti ai comuni mortali da parte dell'azienda Atmel. In nessun caso si consiglia di modificarne le condizioni (vale a dire, dovrebbe essere lasciato così come è stato installato durante la produzione dell'MK). In questa linea
Esistono bit con nomi diversi, di norma si tratta di bit per abilitare la modalità di compatibilità con tipi di microcontrollori obsoleti, che sono stati sostituiti da nuovi. Di solito alla fine del titolo fusibile-bit ha un simbolo CON- da COMPATIBILE(compatibile).

OCDEN- il fusibile abilita il circuito interno del debugger ( O N C anca D ebug IT capace). Non lasciare questo bit impostato nei prodotti commerciali! Altrimenti, il tuo programma può essere letto dalla memoria del MK.

JTAGEN- Il bit del fusibile abilita l'interfaccia di programmazione-debug JTAG . Paragonato a SPI-interfaccia, JTAG ha capacità avanzate. Non è consigliabile lasciare impostato questo bit inutilmente, poiché in questo caso aumenta la corrente consumata dal MK.

AUTOPRGEN- un bit che consente al programma MK di scrivere nella memoria del programma, ovvero di eseguire l'autoprogrammazione.

DWEN- punta del fusibile che consente il funzionamento DebugWire– Questa è un'interfaccia di debug a filo singolo. Non è consigliabile lasciarlo installato nei prodotti commerciali.

EESAVE- bit del fusibile, dopo aver impostato quale, quando si cancella la memoria MK, il contenuto EEPROM I dati verranno mantenuti intatti, ovvero non verranno cancellati.

SPIEN- bit fusibile, che consente il funzionamento dell'interfaccia di programmazione in-circuit MK SPI. Questo bit può essere facilmente ripristinato utilizzando un programmatore parallelo (o JTAG, se consentito e disponibile nel MK). Tutti i MK sono prodotti con la punta installata SPIEN, rimuovilo dall'interfaccia SPI impossibile .

WDTON- bit del fusibile, dopo aver impostato il timer del watchdog WDT si accende immediatamente dopo l'applicazione dell'alimentazione e non può essere disabilitato dal software. Se il bit non è impostato, si accende e si spegne WDT può essere controllato tramite software.

gruppo di bit del fusibile BODLEVEL. Può esserci uno o più bit di questo tipo, quindi vengono numerati a partire da zero. Il valore di questi bit del fusibile determina la soglia di attivazione del circuito CORPO- rilevatore del livello della tensione di alimentazione; quando la tensione di alimentazione scende al di sotto di questo livello, il MK verrà “ripristinato”.

BODEN- bit del fusibile, che accende il circuito del rilevatore hardware per un livello di tensione di alimentazione inaccettabile, ad es. diagramma CORPO.

RSTDISBL- bit del fusibile, che disconnette il segnale di reset esterno dal pin del microcontrollore e collega ad esso il circuito della porta I/O. Questo bit è disponibile solo in quei microcontrollori il cui pin RESET di ripristino hardware è combinato con una delle porte I/O. L'impostazione errata di questo bit del fusibile può disabilitare il RESET e non sarà più possibile eseguire il flashing tramite ISP. Non impostare questo bit se intendi continuare a lavorare con l'MCU utilizzando programmatori seriali. "Revive" MK con installato RSTDISBLÈ possibile solo con un programmatore parallelo e non per tutti i MK.

CKDIV8- bit del fusibile, che include una divisione preliminare della frequenza del generatore di clock al quarzo (o altro esistente) per 8. Cioè, quando questo bit è acceso e viene utilizzato un risonatore al quarzo da 8 MHz, la frequenza di clock effettiva dell'MK sarà 1 MHz.

CKOUT- bit del fusibile, che consente l'uscita della frequenza di clock su uno dei pin MK (per sincronizzare altri dispositivi).

SUT1 E SUT0- fusibili che controllano la modalità di lancio dei generatori di clock MK. Associato ai bit descritti di seguito che determinano il tipo e la frequenza del generatore di clock, la connessione è molto complicata e confusa. Se installati in modo errato, le situazioni potrebbero comportare un avvio instabile del generatore o un ripristino ripetuto dell'MC mentre viene fornita alimentazione.

CKOPT- un bit che determina la modalità operativa del generatore di orologio integrato per lavorare con risuonatori al quarzo. Cambia davvero il guadagno dell'inverter integrato nel circuito del generatore e, quindi, la tensione di uscita sulla gamba XTAL2. Un'installazione errata può portare ad un avvio instabile dell'oscillatore al quarzo, fino alla sua eccitazione con un'armonica sbagliata. (A causa di ciòLa punta al quarzo si è avviata solo quando il MK è stato alimentato con una tensione non superiore a 3,6 V, oppure solo dopo aver toccato con una pinzetta il pin XTAL1)

Gruppo di bit CKSEL0CKSEL3- bit del fusibile, la cui combinazione determina il tipo e la frequenza del generatore di clock operativo. In totale sono possibili fino a 16 combinazioni, ma non tutte sono definite per tutti i tipi di MK. L'impostazione errata della combinazione di questi bit può rendere il MK "morto": non funzionerà nel circuito senza fornire un segnale di clock al pin XTAL1.

PLLCK- bit fusibile, che consente l'uso del sintetizzatore di frequenza integrato per sincronizzare il nucleo MK.

BOOTRS- bit fusibile, che determina l'indirizzo da cui inizierà l'esecuzione del programma dopo un reset - se il bit è impostato, il programma inizierà non dall'indirizzo 0000h (come al solito), ma dall'indirizzo dell'area del bootloader (Boot loader).

gruppo di bit del fusibile STIVALIZ- due bit del fusibile che determinano la dimensione dell'area di memoria del programma allocata per il bootloader ( Boot loader). La combinazione di questi bit, in particolare, determina il punto in cui inizia l'esecuzione del programma dopo un reset, se il bit è impostato BOOTRS.

Gli errori più comuni durante l'installazione dei fusibili:

1. Installazione del fusibile RSTDISBL. L'impostazione errata di questo bit del fusibile disabilita RIPRISTINA e non sarai più in grado di eseguire il flashing ISP. Ciò richiederà un programmatore seriale o qualcosa del genere.

2. Installazione errata CKSEL0, CKSEL1, CKSEL2, CKSEL3. Questi fusibili determinano la sorgente di clock del microcontrollore. Se si seleziona accidentalmente la frequenza sbagliata dell'oscillatore RC interno, non è fatale. Programmazione tramite ISP sarà possibile e sarai in grado di correggere la situazione. E se imposti accidentalmente il clock da una fonte esterna, una catena RC o un risonatore al quarzo, e non ne hai uno nel tuo circuito, allora programmalo di conseguenza ISP diventerà anche impossibile. In sostanza, il microcontrollore attenderà il clock da un circuito inesistente. Come uscire da questa situazione? È molto semplice: fornisci al microcontrollore una sorgente di clock e correggi i fusibili. Molto spesso installato CKSEL tutti zeri – clock da un generatore esterno. In questo caso, puoi assemblare un circuito che generi un meandro (la frequenza non gioca un ruolo speciale, l'importante è che rientri nelle capacità del microcontrollore) e applicarlo alla gamba XTAL1. Dopodiché è possibile eseguire il flashing del microcontrollore tramite ISP. La prima cosa da fare è ripristinare i fusibili alle impostazioni di fabbrica. Se CKSEL tutti sono impostati su 1 – clock dal quarzo esterno. Appendere il quarzo e il microcontrollore sarà nuovamente accessibile tramite ISP.