Atmega fusebit doctor

22 08 2012

Neretai pradedantieji ar net patyrę Atmel mikroprocesorių programuotojai susiduria su netinkamų Fuse bitų įrašymu. Po tokio įvykio mikrorocesorius pradeda veikti neteisingai ar net dar blogiau – jis apsimeta mirusiu ir programatorius jo tiesiog nemato. Taigi šiame įraše papasakosiu kaip atgaivinti mikrokontrolerius kai atsitinka tokių klaidų.

Kas tie Fusebits?

Atmel mikroprocesoriuose sritis kurioje kaupiami esminiai mikrovaldiklio startavimo parametrai vadinami Fusebits. Tai kaip kompiuterio BIOS tik čia viskas telpa į viso labo 3 baitus (arba 24 bitus). Startavimo metu mikrokontroleris nuskaito šiuos bitus ir pagal juos tęsia tolesnį savo darbą.

Pavojingiausi ir dažnai sukeliantys problemų yra šie Fuse nustatymai:

  • CKSEL – nurodo kas yra mikrovaldiklio taktinio dažnio šaltinis. Šiuo atveju tai keli bitai, kurie nusako ar bus naudojamas išorinis kvarcas/rezonatorius, ar išorinis žemo dažnio kristalas, ar išorinis RC generatorius, ar vidinis RC generatorius (šis būna įjungtas vos nupirkus mikroschemą), ar atskiras išorinis signalų generatorius. Daugiau apie tai lietuviškai: http://www.dreifas.net/comment/1469. Tais atvejais bei bitai užrogramuojami neteisingai ir prie mikrovaldiklio nėra prijungtas atitinkamas taktinio dažnio šaltinis mikrovaldiklis nėra tiesiog nestartuoja.
  • SPIEN – nurodo ar leistinas SPI (Serial Programing Interface). Jei ši funkcija išjungta tuomet mikrovaldiklis bus nepasiekiamas per programatorių.
  • RSTDISBL – nurodo ar funkcionuoja Reset funkcija. Reset funkcija reikalinga programatoriui pradedant bendrauti su mikrovaldikliu.
  • Visi kiti, kaip Brown-out detektorius ar Boot sektoriaus dydžio, parametrai nelabai įtakoja programatoriaus darbo su mikrovaldikliu.

Įvedus netinkamus tris pirmus paminėtus parametrus gręsia tikimybė, kad programuotojas nebematys mikroshemos ir nebeleis pataisyti tų pačių blogų Fuse nustatymų. Tokiu atveju gali poadėti  aukštos įtampos programatoriai (HVSP ar HVPP priklausomai nuo programuojamo mikrovaldiklio) arba dar vienas toks nuostabus įrenginys, kuris automatiškai aptinka mikroschemą ir į ją įrašo pradinius (angl. default) Fusebits reikšmes. Tai atlikus su mikrovaldikliu toliau galima bendrauti per standartini SPI programatorių ir bandyti įvesti teisingus Fusebits dar kartą. Kitu atveju tektu padėti į stalčiu sugadinta mikrovaldiklį ir eiti pirkti naujo kainuojančio nuo 5 litų..

Atmega fusebit doctor

Kadangi pradėdamas programuoti Attiny2313 mikrovaldiklius kelis jų numarinau, o perėjęs prie brangesnių Atmega168 ir Atmega328 šios prabangos jau nebegaliu sau leisti, nusprendžiau pasigaminti įrenginį su kuriuo galėčiau atgaivinti pažeistus Atmel.

Taigi pasigaminau šį prietaisą:

img8238d

Instrukcijas, aprašymą, schemas bei Atmega esančios jame kodą rasite prietaiso kurėjo svetainėje: http://diy.elektroda.eu/atmega-fusebit-doctor-hvpp/?lang=en.

Čia tik paminėsiu kelis pagrindinius dalykus bei naudojimasi.

Prietaiso aprašymas

Įrenginys palaiko net 145 Atmel įrenginius:

1kB:
AT90s1200, Attiny11, Attiny12, Attiny13/A, Attiny15
2kB:
Attiny2313/A, Attiny24/A, Attiny26, Attiny261/A, Attiny28, AT90s2333, Attiny22, Attiny25, AT90s2313, AT90s2323, AT90s2343
4kB:
Atmega48/A, Atmega48P/PA, Attiny461/A, Attiny43U, Attiny4313, Attiny44/A, Attiny48, AT90s4433, AT90s4414, AT90s4434, Attiny45
8kB:
Atmega8515, Atmega8535, Atmega8/A, Atmega88/A, Atmega88P/PA, AT90pwm1, AT90pwm2, AT90pwm2B, AT90pwm3, AT90pwm3B, AT90pwm81, AT90usb82, Attiny84, Attiny85, Attiny861/A, Attiny87, Attiny88, AT90s8515, AT90s8535
16kB:
Atmega16/A, Atmega16U2, Atmega16U4, Atmega16M1, Atmega161, Atmega162, Atmega163, Atmega164A, Atmega164P/PA, Atmega165A/P/PA, Atmega168/A, Atmega168P/PA, Atmega169A/PA, Attiny167, AT90pwm216, AT90pwm316, AT90usb162
32kB:
Atmega32/A, Atmega32C1, Atmega323/A, Atmega32U2, Atmega32U4, Atmega32U6, Atmega32M1, Atmega324A, Atmega324P, Atmega324PA, Atmega325, Atmega3250, Atmega325A/PA, Atmega3250A/PA, Atmega328, Atmega328P, Atmega329, Atmega3290, Atmega329A/PA, Atmega3290A/PA, AT90can32
64kB:
Atmega64/A, Atmega64C1, Atmega64M1, Atmega649, Atmega6490, Atmega649A/P, Atmega6490A/P, Atmega640, Atmega644/A, Atmega644P/PA, Atmega645, Atmega645A/P, Atmega6450, Atmega6450A/P, AT90usb646, AT90usb647, AT90can64
128kB:
Atmega103, Atmega128/A, Atmega1280, Atmega1281, Atmega1284, Atmega1284P, AT90usb1286, AT90usb1287, AT90can128
256kB:
Atmega2560, Atmega2561

Prietaisas susideda iš tryjų moduliu:

  1. Pagrindinis modulis su Atmega mikrovaldikliu (Atmega8, Atmega88, Atmega88P, Atmega168, Atmega168P, Atmega328 arba Atmega328P), kuris gali gelbėti pagrindinius Atmel kontrolerius (28 kontaktų atmega8, atmega16, atmega32, 20 kontaktų attiny2313 ir 40 kontaktų atmega atmega161, atmega162 ir t.t.).
  2. “#1 adapter” HVPP adapteris, skirtas 20 kontaktų attiny26, 40 kontaktų atmega8515 ir t.t pajungti.
  3. “HVSP adapter” skirtas 8 ir 14 kontaktų mikrokontroleriams per SP jungtį pajungti.

Serial terminalo sąsaja su kompiuteriu leidžia stebėti ar net įtakoti Fuse atstatymo darbus.

Pats įrenginys matinamas +12V įtampa, kuri privalo būti stabilizuota (kitaip gali būti blogai gaivinamiems mikrovaldikliams).

Naudojimasis

Visas valdymas susideda vos iš kelių elementų:

  • Erace trumpilkis – nurodoma ar reikia mikrokontrolerį ištrinti;
  • Start mygtukas – juo pradedamas Fuse tikrinimas ir atkurimas;
  • Raudonas LED – informuoja apie nesėkminga darbą;
  • Žalias LED – informuoja apie sėkmingą Fuse atstatymą;

Štai taip atrodo Atmega328 atstatymas:

Norint gautu daugiau informacijos apie darbo procesą teraikia pajungti GND ir TX jungti pire kompiuterio per kompiuterio per USB-TTL ar RS232-TTL konverterį ir Fuse atstatymo metu galėsite matyti (Serial porti terminale) sekančia informaciją:

Welcome
AVR Atmega fusebit doctor (HVPP+HVSP) version 2.11
http://diy.elektroda.eu/atmega-fusebit-doctor-hvpp
Usage in commercial/profit purposes not allowed

AUTOMATIC HVPP MODE

Init programming… DONE
Read signature… 1E 95 0F
Searching chip… no names in 8kB ver
Chip erase… DISALLOWED
Read fusebits… L:62 H:D9 E:FF
Should be… L:62 H:D9 E:FF
Lockbits… DISABLED (CF)
Writing 62 D9 FF… DONE
Verifying… L:62 H:D9 E:FF – OK!
45 fixed chips

Thank You

Jei bus pajungtas ir RX kontaktas, tuomet prietaisas automatiškai pereina į rankinį rėžimą, kuomet vartotojas kompiuterio pagalba pats gali įvesti norimus Fuse bitus:

Welcome
AVR Atmega fusebit doctor (HVPP+HVSP) version 2.11
http://diy.elektroda.eu/atmega-fusebit-doctor-hvpp
Usage in commercial/profit purposes not allowed

MANUAL HVPP MODE

Init programming… DONE
Read signature… 1E 95 0F
Searching chip… no names in 8kB ver
Read fusebits… L:62 H:D9 E:FF
Should be… L:62 H:D9 E:FF
Lockbits… DISABLED (CF)

What to do?…
1 – write fusebits
2 – modify fusebits
3 – set lockbits
4 – chip erase
5 – end

Alternatyvos

Yra ir kitų įrenginių kurie padeda pašalinti Fusebits klaidas. Tereikia panarstyti google ir rasime tokiu projetų kaip:

Apibendrinimas

Tačiau šis prietaisas man tinkamiausias dėl kelių priežasčių:

  • Palaiko praktiškai visus Atmel šeimos mikrokontrolerius;
  • Lengva naudotis – idedi mikroschemą, paspaudi mygtuką ir viskas;
  • Man neproblema yra 12V stabilizuota srovė (kituose projektuose mačiau naudojant 5V į 12V booster);
  • Serial sąsaja leidžia sužinoti detalesnę informacija jei atstatymas nepavyko;

Turint šį prietaisą gali sau leisti daryti klaidas nustatant Fuse bitus.


Veiksmai

Information

9 responses

28 02 2013
gintaras

Gerb. MINDAUGAI
padariau sita superbloka ,bet niekaip negaliu uzsiprogramint MEGA8 del fuse bitu nustatymo.Naudoju AVR STUDIO 4 programa ir AVRISP mkII programatoriu .STUDIJOS 4 periferijoj nera visu fuse bit nustatymu kuriuos nurodo pr. autorius.Todel neeksperimentuoju,nes susikaupe gan nemazai atmegu kurias reikia prikelti .Beda ta ,kad sioje sferoje esu naujokas. Busiu dekingas uz patarima.Su pagarba Gintaras.

28 02 2013
mindogas

Sveikas.
Tavo atveju tau tereikia irasyti tik du baitus: L:0xE1 H:0xD1. AVR STUDIO kaip speju jie aprasomi kiek kitokiu formatu tad geriausiai tau butu bitus tiesiog irasyneti per AVRDude programą panaudojus tekstine eilute “-U lfuse:w:0xe1:m -U hfuse:w:0xd1:m“. Zinoma tai imanoma jei tavo programuotojas suderinamas su AVRDude, o taip greiciausiai ir yra.
Žaidžiant su AVR studio galima apseiti ir taip – vienintelis fuse bitas kuri reikia pakeiti tai EESAVE (EEPROM memory is preserved through chip erase) High fuse biutas. Jis turi buti 0 (orginaliame atmega8 jis buna 1).

2 03 2013
gintaras

Irasiau L; 0xE1 H; 0xD1 ijungus EESAVE ,bet shema nerodo givybes zenklu ,ijungus maitinima nedega LEDas

2 03 2013
mindogas

Jau del to reiktu kaltinti schema ar blogai įrašyta pačią programą.

2 03 2013
gintaras

shema pertikrinau fusus irasiau kaip nurodete ,klausimas ar +5ir+12v turi buti paduodamas i paralelini MV paspaudus “start“ jungikli

2 03 2013
mindogas

Į gydoma mikrovaldikli eina dvi srovės: +5V maitinimui bei +12V į reset koją. Įrenginiui esant stendby rėžime šios linijos (+5 ir RES pažymėtos korpuse) turi duoti 0V, o kai paspaudi START +5V ir +12V kam kaip priklauso. Tikiuosi to klausei.

Dar vienas pasitikslinimas – ar tikrai įrašiai butent Atmega8 skirta hex nes ju ten yra pridėta keliems mikrokontroleriams? 🙂

2 03 2013
gintaras

taip del sroviu tai atsakymas ok. del hex.pasitikslinsiu nes jau pats pasimeciau

25 03 2013
Vytenis

Jaigu blogai nustatai CKSEL , nereikia sio aparato. Uztenka kita mikre uzprogramuoti kad duotu 1mHz signala pvz:
int main(void)
{
DDRC = 0xFF;
while(1) {
PORTC ^= 0xFF;
}
}
Prijungiam betkuri PORTC kontakta prie XTAL1 neveikiancios mikres ir ji veiks 1Mhz~ dazniu, pakeiciam fuse joje kaip norim nes jau dabar su ja ISP snekes

25 03 2013
gintaras

Pasileido superblock.Turejau 12 mk kuriu neprikele rimtas programisius .Per 3 min. atgavo samone 11mk.Dekoju Mindaugui uz kantrybe

Parašykite komentarą

Įveskite savo duomenis žemiau arba prisijunkite per socialinį tinklą:

WordPress.com Logo

Jūs komentuojate naudodamiesi savo WordPress.com paskyra. Atsijungti / Keisti )

Twitter picture

Jūs komentuojate naudodamiesi savo Twitter paskyra. Atsijungti / Keisti )

Facebook photo

Jūs komentuojate naudodamiesi savo Facebook paskyra. Atsijungti / Keisti )

Google+ photo

Jūs komentuojate naudodamiesi savo Google+ paskyra. Atsijungti / Keisti )

Connecting to %s




%d bloggers like this: