Datorkunskap, hjälp och reparation

Atmega8 säkring som standard. avr mikrokontroller: säkringsbitar

Vad är SÄKRING bitar? Orden verkar vara bekanta, men många vet inte riktigt deras syfte, de bockar av och blinkar, enheten fungerar och okej. Jag vill berätta lite om dessa FUSE-beats.

SÄKRING bitar ( säkringar) - ja, om på ett enkelt sätt, då konfigurerar de vissa parametrar för mikrokontroller, detta är ett slags verktyg för att finjustera dem Säkringar inkluderar eller konfigurerar sådana parametrar som:
- generatorfrekvens, extern eller intern generator
- förbud mot att läsa mikrokontrollerns firmware
- aktivera eller inaktivera timers
- frekvensdelning av kvartsoscillatorn
- EEPROM raderingsskydd
…etc. Varje mikrokontroller har sina egna säkringar, olika mikrokontroller har olika lista med säkringar, till exempel har ATmega8 ingen CKOUT-säkring, men den finns i ATtiny2313. I datablad för mikrokontroller är alla dessa säkringar målade.

Huvudsaken regeln när du arbetar med säkringar är att inte skynda dig att avslöja dem om du definitivt inte är säker på att dina handlingar är korrekta.

Låt oss nu skriva ner namnen på några säkringar, deras beteckningar och vad de påverkar. I allmänhet finns det säkringar för att skydda programmet från kopiering (lock-bits), säkringar som ställer in vissa funktioner, samt de så kallade "höga" och "låga" bytena. Den mest populära säkringen, som visas nästan alltid, är:

CKSEL, det finns bara fyra sådana säkringar med olika bokstäver, detta är en grupp CKSEL 0,CKSEL 1,CKSEL 2 ochCKSEL 3, bestäm klockgeneratorns frekvens och dess typ, klockpulser är nödvändiga för driften av nästan vilken mikrokontroller som helst. Många mikrokontroller har en intern oscillator, men vi kan ansluta en extern och ställa in säkringarna att fungera från en extern generator. En extern kvartsresonator är ansluten till utgångarna XTAL 1 och XTAL 2, dessutom är ett par kondensatorer ~ 20pF lödda i ena änden till kvarts, den andra till minus. Om du gör ett misstag när du installerar dessa säkringar, kan mikrokontrollern "blockera" för att återställa kontrollern, en klocksignal skickas till XTAL1-benet, för närvarande finns det en hel del scheman för att återställa kontroller låsta på detta sätt . Denna generator kan tillverkas av nästan vilken logik som helst, eller till och med från en 555 timer.

Det finns enkla kretsar som använder 1 transistor, ett par motstånd och en kvartsresonator, och mer komplexa som använder K155LA3 mikrokretsar. Dessa metoder återupplivar till 100 % kontroller med en sådan defekt

Säkringsgrupp SUT1 och SUT0- säkringsbitar som styr startläget för MC-klockgeneratorerna, samt ställer in starthastigheten för MC:n efter att strömmen har lagts på. i samband med säkringar cksel, nämligen CKSEL0.

CKOPT- bit, bestämmer driften av den inbyggda oscillatorn för att arbeta med kvartsresonatorer, ställer in "amplituden" för svängningarna av klocksignalen på kvartsen. Denna bit programmeras ganska ofta.

RSTDISBL- en mycket farlig säkring, en felaktig inställning kan inaktivera utgången RESET, varefter möjligheten att programmera Internetleverantören med programmeraren försvinner. Bit RSTDISBL vänder utgången ÅTERSTÄLLA till I/O-porten.

SPIEN- säkring, som gör att MK:n kan arbeta via SPI-gränssnittet. Alla mikrokontroller levereras med biten redan inställd. SPIEN. Anses vara en farlig säkring.

EESAVE- Det är bekvämt att läsa som EEPROOM SAVE, betyder bokstavligen "spara EEPROOM", denna säkring skyddar EEPROM från radering. Till exempel, när du laddar upp firmware till styrenheten igen, kan du lägga EESAVE = 0, och när du raderar MK kommer EEPROOM att förbli orörd.

BOOTSZ, består av en grupp bitar BOOTSZ1 och BOOTSZ0, bestäm storleken på minnesområdet för programmen som ska skrivas, associerade med biten BOOTRST.

BOOTRST, anger adressen från vilken körningen av programmet ska startas. Om biten är satt d.v.s. om BOOTRST=0, då kommer början av programmet att vara från adressen till starthanterarens område (Boot Loader).

BODEN- bit, som när den är inställd ( BODEN=0), kommer att styra matningsspänningen, vid extremt låga spänningar kan mikrokontrollern starta om, misslyckas och så vidare. Relaterat till BODLEVEL.

BODLEVEL. - bestämmer driftögonblicket för matningsspänningsnivådetektorn, när matningsspänningen sjunker under nivån kommer styrenheten att "startas om".

SELFPRGEN- bit som tillåter ( SELFPRGEN=0) eller förbjuder ( SELFPRGEN=1) programmet för att skriva till minnet.

OCDEN– denna säkring tillåter eller förbjuder läsning av programmet från styrenhetens minne.

Jag nämnde en gång i mina artiklar att i vissa program speglas säkringarna. Kom ihåg programmerad säkring=0 , a inte programmerad=1 . I program Algoritmbyggare, UniProf säkringar ställs in på ett sätt och i program ponyprog,CodeVisionAVR, AVR Studio, SinaProg och några andra, säkringar måste speglas jämfört med den tidigare listan med program.

Under lång tid dök så kallade "fuze-kalkylatorer" upp på Internet, dessa är speciella applikationer som är utformade för att hjälpa till med att konfigurera mikrokontrollern. Applikationen är intuitiv, jag tror att du kommer att ta reda på det, i listan över kontroller väljer vi den MK vi behöver, sedan väljer vi de nödvändiga funktionerna, och säkringarna är bockade nedan, allt är väldigt enkelt.

Dessa applikationer är mycket bekväma, eftersom. till exempel, nyligen, väldigt ofta skriver författarna till deras projekt säkringsvärden i obegripliga bokstäver eller siffror, eller i ord, det är inte klart för en nybörjare vad detta betyder och vilka säkringar som ska ställas in samtidigt (du kan hittar ofta en kommentar till artikeln "vilka säkringar ska ställas in?"). Säkringskalkylatorn hjälper oss mycket i detta avseende.

Jag tror att nu, om du får frågan "vad är säkringar, och varför behövs de?", kommer du att kunna förklara för en person deras syfte, men för nu är det allt!

Allt är väldigt enkelt - små kommentarer på bilden hjälper.

Dessa är verktygen för att arbeta med säkringsbitar. Välja!


(Besökt 149 580 gånger, 38 besök idag)

Kapitel:

God eftermiddag, forumanvändare, jag ber om lite hjälp i en fråga, jag har säkert redan ställt den här, men jag frågar ändå, jag försöker ladda upp firmware till mega 48, Sinaprog ser det och skriver att allt är skrivet till styrenheten, men på något sätt händer det snabbt i ungefär en sekund, firmware för trappbelysning. När jag försöker installera och flasha säkringsbitarna läser programmet fabriksinställningarna, jag installerar det omvänt i enlighet med bilden för önskad firmware, den säger att allt är ok. men det returnerar 00 och signaturen är också 000000. säg mig vad som kan vara felet.

  • Valeriy

    Hej Eugene. Snälla hjälp. Hur kommer säkringarna att se ut i PONYPROG-programmet för detta
    enheter.RadioCat prefix "havsbris" för fläkten. Tack.


  • admin Inläggsförfattare

    Gå till kalkylator http://www.engbedded.com/fusecalc/
    Välj ATtiny13-chip
    Längst ner kommer det att finnas en säkringsbyte-installation
    För hög anger du F9
    För låg anger du 5A
    – Det här är från bilden på artikeln.
    Skaffa alla dina säkringar. Ställ in som den är

    Generellt sett fokusera på SPIEN - den ska alltid vara aktiv. Det vill säga om du läser säkringarna från MK (innan du byter dem) så måste du byta säkringarna så att SPIEN förblir orörd.

  • Att ställa in säkrings- och låsbitar (konfigurations- och låsbitar) för mikrokontroller (MK) i AVR-familjen, speciellt för nybörjare, är en ganska svår uppgift och kan ofta orsaka förvirring när man ställer in och programmerar MK. Om du missat lite eller ställt in det fel kan detta leda till felaktig programdrift eller, ännu värre, till oförmåga att programmera MCU i kretsen via det seriella gränssnittet.

    Trots det faktum att den tekniska dokumentationen för varje MCU ger omfattande information om säkrings- och låsbitar, känner nybörjare sig ofta lite osäkra innan de utför kommandot för att skriva konfigurations- och låsbitar. I artikeln kommer vi att överväga huvuddragen i konfigurationsbitarna i AVR-familjen av MKs.

    Säkrings- och låsbitar

    Innan vi går in på den detaljerade analysen av konfigurationsbitarna finns det en sak att förstå och komma ihåg:

    • Fuse-bit = 1, betyder att den inte är programmerad (återställ, inaktiv);
    • Säkringsbit = 0, betyder att den är programmerad (installerad, aktiv).

    Detta är en av huvudkällorna till förvirring vid programmering av säkrings- och låsbitar. Vi brukade tro att att sätta värdet på någon parameter innebär att man skriver 1, eller hur? Med AVR Fuse-bitarna är det tvärtom, att sätta vilken bit som helst innebär att skriva 0, och detta måste komma ihåg.

    Konfigurationsbitarna är placerade i ett separat område av icke-flyktigt minne. Till exempel har MK fyra konfigurationsbytes som måste programmeras för korrekt drift. En av dessa byte innehåller låsbitarna, de återstående tre (ofta kallade höga, låga och utökade) innehåller konfigurationsbitar. Denna uppsättning bitar ställer in de initiala inställningarna för MCU:n: klockkälla, bootloader-område, hårdvaruåterställningsoperation, watchdog-timer, etc. Först kommer vi att titta på blockeringsbitarna (Figur 1).

    Beroende på typen av AVR-mikrokontroller kan antalet låsbitar variera, men de två minst signifikanta bitarna finns alltid. bitar LB1 och LB2 används för att blockera åtkomst till det inbyggda Flash-minnet. Du vet förmodligen att utvecklarna av alla enheter nästan alltid blockerar läsningen av MK-firmware för att skydda deras immateriella rättigheter och förhindra skapandet av dubbletter och förfalskningar. Att läsa en låst mikrokontroller är som godis för hårdvaruhackare, men det är en separat fråga. Så om du behöver skydda din firmware från kopiering måste du låsa innehållet i mikrokontrollerns minne, annars lämna bitarna oförändrade. Andra låsbitar ( BLB01, BLB02, BLB11 och BLB11 ) kan användas för att blockera läsning/skrivning till/från Flash-minne, både från applikationsområdet och från starthanteraren. Låsbitar är sällan programmerade (beroende på applikationens detaljer), vi kommer inte att fokusera på dem. Även om du programmerar någon av dem, rensas låsbitarna (inställd på 1) under ett Chip Erase-kommando.

    Vi är mest intresserade av konfigurationsbitar, du kommer att behöva hantera dem väldigt ofta, oavsett om du gillar det eller inte. Placeringen av vissa säkringsbitar i de tre konfigurationsbytena skiljer sig beroende på vilken MCU som används. Till exempel kommer vi att överväga ATmega328P, som har tre konfigurationsbyte (Figur 2).

    Figur 2. Sammansättningen av konfigurationsbyten och de initiala värdena för säkringsbitarna i ATmega328P mikrokontroller.

    Titta på sammansättningen av den låga byten. Du ser en grupp med 4 identiska bitar CKSEL0, CKSEL1, CKSEL2, CKSEL3 . De används för att välja typ av klockkälla för MCU. Som standard (fabriksinställningar) är mikrokontrollern konfigurerad att arbeta från en intern 8 MHz RC-oscillator. Logiskt sett är detta det säkraste sättet att arbeta med en mikrokontroller. Men, som ni vet, kan enheter i AVR-familjen fungera från olika källor för klockfrekvens:

    • kalibrerad intern RC-oscillator (standard 8 MHz);
    • extern RC-oscillator;
    • extern keramisk eller kvartsresonator;
    • extern lågfrekvent kvarts;
    • extern klockkälla.

    För vart och ett av de presenterade klocklägena finns det en rad Fuse-bit-inställningar CKSEL0..3 , som används för att styra klockgeneratorns frekvens och den tid då mikrokontrollern lämnar driftläget från lågeffektläget. Dessa bitar är nära besläktade med bitarna SUT0 och SUT1 , som faktiskt styr starttiden för mikrokontrollern efter att strömmen har lagts på. Utlösningsfördröjningen är nödvändig för att stabilisera genereringen av keramiska resonatorer och kvarts. De exakta värdena för den tid då mikrokontrollern går in i driftläget anges i den tekniska dokumentationen.

    Konfigurationsbit CKOUT aktiverar/inaktiverar utmatningen av klockfrekvensen till en av utgångarna på MC; för ATmega328P till PORTB0-stiftet (för att klocka andra enheter), oavsett vilken klockkälla som används. Om biten är programmerad är de primära och alternativa funktionerna för PB0-porten inte tillgängliga för användarapplikationen.

    Den sista biten i den låga byten är CKDIV8 . Som standard är denna bit inställd, vilket innebär att en frekvensdelare på 8 är ansluten till den interna 8 MHz RC-oscillatorn, så systemklockfrekvensen för MCU:n i detta fall blir 1 MHz. Om du behöver 8 MHz klocka, bit CKDIV8 måste släppas.

    Låt oss nu fokusera på byten med hög konfiguration.

    Första slaget - BOOTRST , som återställs som standard. Om denna bit är inställd kommer mikrokontrollern att börja köra programmet från startsektorn efter att mikrokontrollern har slagits på eller efter en återställning. Enkelt uttryckt, om applikationen kräver funktionerna hos en bootloader från Flash-minnet, måste denna bit programmeras. Om du bara behöver programmera mikrokontrollern via in-circuit-gränssnittet, då kan du lämna denna bit orörd.

    När du använder bootloadern blir bitar viktiga BOOTSZ0 och BOOTSZ1 . De ställer in området för Flash-minne för bootloadern. Om din applikations starthanterarekod är liten kan konfigurationsbitar användas för att allokera ett mindre område av Flash-minne för starthanteraren och lämna resten till applikationen.

    Nästa beat EESAVE . Om programmerad (0), kommer innehållet i det icke-flyktiga dataminnet EEPROM att förbli intakt under Chip Erase-proceduren. I de flesta fall är detta en användbar funktion, till exempel när viktiga data eller kalibreringsparametrar lagras i EEPROM och en firmwareuppdatering behöver utföras, programmera biten innan du ändrar firmware. EESAVE .

    Efter att ha satt takten WDTON watchdog-timern på mikrokontrollern slås på omedelbart efter att strömmen har lagts på, och det är omöjligt att stänga av den programmatiskt. I detta fall kommer watchdog-timern ständigt att utföra sin funktion att periodiskt återställa mikrokontrollern, såvida inte ett speciellt watchdog-återställningskommando exekveras i programkoden. Om lite WDTON inte är inställd, aktiveras/inaktiveras watchdog-timern av programvaran.

    Bit SPIEN utformad för att inaktivera det seriella programmeringsgränssnittet för mikrokontrollern. I själva verket kan du inte ändra tillståndet för denna bit med hjälp av det seriella gränssnittet (AVR MCU:er stöder ytterligare två parallella programmeringslägen), men fall av ändring av bitens tillstånd är kända. SPIEN i händelse av felaktig användning eller fel på in-circuit programmeraren.

    En liknande situation med lite RSTDSBL - den används för att inaktivera hårdvaruåterställningsfunktionen, med andra ord, återställningsstiftet på MK används som en I/O-port. I vissa situationer (MK med ett litet antal I/O-linjer) är detta mycket bekvämt, men i allmänhet rekommenderas det inte. Fel bitinställning RSTDSBL kan beröva dig möjligheten att programmera mikrokontrollern via SPI, eftersom närvaron av en återställningssignal är en förutsättning för att aktivera programmeringsläget.

    Bit DWEN används för att aktivera det speciella felsökningsgränssnittet DebugWire för AVR-mikrokontroller. Ändra bitarnas tillstånd SPIEN, RSTDSBL och DWEN via det seriella gränssnittet är inte möjligt, detta kommer att kräva en parallell programmerare med stöd för högspänningsprogrammeringsläge eller en anslutning via DebugWire-gränssnittet.

    En annan bit att notera CKOPT i den höga byten av konfigurationen ( det saknas i ATmega328P, men det finns i andra MK AVR), styra klockgeneratorns förstärkares driftläge. Om biten är programmerad (0), så har klockgeneratorns utsignal en svängning (amplitud) lika med matningsspänningen. Du kan använda det här alternativet när mikrokontrollern kommer att fungera i en bullrig miljö, eller när du planerar att ansluta en annan mikrokontroller till XTAL2-stiftet. I andra fall måste detta läge inaktiveras ( CKOPT=1 ) eftersom strömförbrukningen för mikrokontrollern ökar, och detta är inte välkommet i batteridrivna enheter.

    Senaste konfigurationsbyte (förlängd). För Atmega328P mikrokontroller innehåller den tre bitar: BODLEVEL0, BODLEVEL1, BODLEVEL2 . Dessa bitar är avsedda att ställa in tröskeln för driften av matningsspänningsdetektorkretsen: när matningsspänningen når den inställda nivån återställs mikrokontrollern.

    Fuse Bit Calculator

    När du behöver programmera en ny MCU kan du använda databladet för mikrokontrollern för att ställa in säkringsbitarna. Men det finns ett bekvämare och enklare sätt - Fuse-bit-kalkylatorn - ett onlineverktyg utvecklat av Mark Hammerling (Figur 3). Du väljer typ av mikrokontroller och aktiverar/avaktiverar de nödvändiga alternativen, så kommer Fuse-bits-konfigurationen att uppdateras automatiskt.

    Dessutom kan du individuellt ställa in säkringsbitarna i en separat form, värdena för den låga, höga och utökade byten i konfigurationen kommer också att uppdateras automatiskt (Figur 4), kommandon för AVRDude-programmeraren genereras på samma tid.

    Om du har en Android-mobil eller surfplatta kan du använda den kostnadsfria applikationen AVR Fuse Calculator, som utför samma funktioner och genererar kommandon för AVRDude-programmeraren. Det finns 144 MK AVR i programmets databas.

    Grundläggande regler för nybörjare:

    • Ändra aldrig tillståndet för DWEN-, SPIEN- och RSTDSBL-bitarna. I själva verket finns det ingen tillgång till dem via det seriella programmeringsgränssnittet;
    • Dubbelkolla CKSEL-bitarna. Att ställa in klocktypen felaktigt orsakar många problem;
    • Om du inte gör kommersiella produkter, ändra inte tillståndet för låsbitarna;
    • Om du inte är säker på korrekt installation av Fuse-bitar är det bättre att hänvisa till den tekniska dokumentationen eller ställa en fråga på forumet till specialister.

    En fråga som behöver förtydligas under lång tid är vad som är en säkringsbit (nedan kallad säkringar) och hur man använder dem. För att underlätta förståelsen, låt oss kalla dem en inställning för mikrokontrollern, som bara kan ändras under firmware.

    De är bekväma eftersom det räcker att specificera konfigurationen av säkringarna en gång och, oavsett detta, ändra firmware så många gånger du vill - säkringarna kommer att förbli desamma. Det måste sägas att för vissa mikrokontroller finns specifika säkringar, ett exempel för Atmega8 övervägs här.

    CKSEL0-3- är ansvariga för att välja klockkällan för mikrokontrollern. I databladet finns en tabell från det för att uppskatta konfigurationen av bitarna.

    Till exempel vill vi arbeta från en extern kvarts på 8 MHz, för CAVR tar vi djärvt bort kryssrutorna CKSEL0-3 (dvs deras värden kommer att vara 1111). Schema för anslutning av kvarts. Kondensatorer 12-22 pF.

    Eller så vill vi arbeta från en intern generator på 8 MHz, vi ser värdeintervallet för CKSEL, vi vänder ner databladet och ser en detaljerad beskrivning:

    De där. i vårt fall är det sista alternativet lämpligt, ange det gärna i CKEL0-3=0010 och njut av superhastigheten.

    Om du av misstag ställer in klockning från en extern källa, men du inte har det, då - tyvärr mikrokontrollern blir oläsbar och oprogrammerbar. Men du bör inte bli upprörd, det är värt att plocka upp en extern kvarts och atmega kommer till liv igen.

    CKOPT- används endast i kombination med CKSEL-bitar, låter dig aktivera "gain mode". Mikrokontrollern i detta läge har en ökad strömförbrukning, men är mer immun mot brus. Inställning av denna bit tillåter drift vid frekvenser över 8 MHz, om mikrokontrollern själv stöder sådana frekvenser.

    SUT0-SUT1- dessa bitar är ansvariga för fördröjningen före start av mikrokontrollern. Så vitt jag förstår från databladet, hänför sig rekommendationerna angående dessa bitar främst till strömförsörjning, inklusive BODEN-biten

    BODEN- när biten är inställd styr mikrokontrollern matningsspänningen. När spänningen faller under en viss nivå återställs mikrokontrollern.

    BODLEVEL- bestämmer samma spänningsnivå, om säkringen är inställd, är den nedre strömförsörjningsgränsen 4V, om 2,6V inte är inställd.

    BOOTRST- låter dig starta programkörningen inte från början, utan från ett visst område av BOOTLOADER.

    BOOTSZ0-BOOTSZ1- gäller även för starthanteraren, bestäm storleken på minnet som tilldelats av starthanteraren.

    EESAVE- om biten är inställd, kommer EEProm-minnet inte att raderas under exekveringen av kommandot Erase Chip.

    WDTON- låter dig använda watchdog-timern.

    RSTDISBL- ansvarar för att tilldela återställningsutgången. Om inställt blir återställningsstiftet en normal I/O-port. Som ett resultat blir det omöjligt att använda det i sekventiell programmering, d.v.s. mikrokontrollern kan inte blinka utan en speciell programmerare.

    Observera att i vissa program finns det en lömsk bit - förbudet mot sekventiell programmering, efter att ha ställt in denna bit Mikrokontrollern kan inte blinka utan en speciell programmerare.

    För extern kristall vid 8MHz

    För extern kvarts 8-16MHz

    För internt vid 8MHz

  • Liknande inlägg