AVR unLocker

O co se jedná?

  Zjednodušeně řečeno se jená o udělátko, které dokáže "odemknout" zablokovaný AVR. Občas se stane (i v lepších rodinách), že si uživatel nastaví špatně tzv. pojistky (někdy nazývané taky anglicky fuses). A výsledkem může být špatně nastavený oscilátor (nebo příliš pomalý), "vypnutí" funkce RESET, "vypnutí" SPI programování atd, což může způsobit zamezení reprogramovaní čipu. A právě pro tyto případy je tady AVR unLocker! Předem upozorňuji, že zařízení zresetuje AVR do továrního nastavení. To znamená že mohou být smazána VŠECHNA DATA z paměti! Buďte si jistí, že máte řádnou zálohu! Tady je názorné foto.

AVR unBlocker 00

Jak to celé funguje?

  Jednoduše :) Dost zjednodušený algoritmus je na následujícím obrázku.

Blokové schéma AVR unBlockeru

  Nejprve se zkouší komunikace skrze SPI rozhraní. Pokud se totiž naváže komunikace s cílovým (léčeným) čipem, pak je dost velká šance, že půjdou pojistky nastavit do továrního nastavení a to bez mazání flash, nebo EEPROM paměti -> program zůstane zachován.
  Pokud se ale odblokování nezadaří, pak je potřeba smazat celé nastavení a to včetně lock bitů a pojistek. To se bohužel neobejde bez smazání flash a EEPROM. A na to je vhodné vysokonapěťové (high voltage) programování. Laicky řečeno, programuje se hrubou silou.
  A pokud se nepodaří navázat komunikaci ani přez vysokonapěťové programování, tak se celý proces opakuje. To je pro případ, že uživatel ještě nevložil čip do správné patice, tak aby se nemuselo celé zařízení resetovat. Jinak během "oťukávání" se s cílovým čipem se zkouší jednotlivé oscilátory. To je zase pro případ, že pokud by byl na cílovém AVR nastaven například RC oscilátor a my bychom žádný RC oscilátor nepřipojili, pak by nebyla ani možná komunikace, protože cílové AVR by nemělo zdroj hodin.
  V následující tabulce je přehled jednotlivých verzí HW a firmwaru. Hardware je zpětně kompatibilní, ale logicky přijdete o některé vymoženosti. Aktuálně se vyvíjí firmware v céčku. Přece jenom v této aplikaci MCU většinu času čeká, takže je zbytečné mít vypiplaný software na rychlost. Navíc kód je o něco srozumitelnější a čitelnější. Na databázi se sem tam pracuje. Aktuálně chybí podpora pro většinu ATtiny, Xmega a sériové vysokonapěťové programování. Podpora pro ATmega je snad kompletní. Případnou úpravu zdrojových kódů databáze zvládne i začátečník. Stačí upravit soubor "chip_database.c" a projekt překompilovat.

Demo videa

Odemčení ATtiny13 - nastaven RC oscilátor


Odemčení ATmega32 - nataven externí clock


Odemčení ATmega8 - reset: disabled , SPI: disabled

Protože bylo vyplé SPI a RESET také, bylo zapotřebí použít vysokonapěťové programování, aby se unLocker "domluvil" s cílovým čipem (ATmega8).

Download

Vše na jednom místě a aktuální:

git clone --recursive git@gitlab.com:AVRunLocker/avrunlocker.git



Staré verze:
HW design Firmware
AVR un 00  (404x)

HW neumožňuje vysokonapěťové programování pro ATtiny a podobné!

Zastaralé. Pokud možno, nepoužívat

Chybí ochranné odpory

Soubory pro Eagle 5

AVR un 0.1  (564x)

Teoreticky odblokuje drtivou většinu (pokud se upraví databáze)

Neumí sériové vysokonapěťové programování.

Jazyk: assembler.

Na vývoji se podepsal nedostatek času a fakt, že projekt "musel" být hotov do určitého termínu

Podporuje: ATmega8, ATmega16, ATmega32, ATmega48, ATmega88, ATmega128 ATmega168, ATmega8535, ATtiny13 ale databáze se dá snadno modifikovat

AVR un 01  (1384x)

Po HW stránce umožňuje vysokonapěťové programování pro všechny typy

Díky ochranným odporům snížena spotřeba (pokud jdou výstupy "proti sobě")

Kvůli ochranným odporům je možné, že se někdy načte špatně signatura (zpravidla poslední bajt). Je to kvůli zvýšení časové konstanty -> na SW opravě se pracuje... (stačí zvětšit intervaly)

Soubory pro Eagle 5

AVR un 0.2  (1095x)

Teoreticky odblokuje drtivou většinu.

Neumí sériové vysokonapěťové programování.

Jazyk: C.

Mírně vylepšená assemblerovské verze. Databáze AVR není nějak rozsáhlá a je potřeba ji časem rozšířit. Ale případná modifikace je velice triviální, takže je možné si pro daný případ jen upravit soubor "chip_database.c"

Podporuje: ATmega8, ATmega32, ATmega48, ATmega88, ATmega168, ATtiny13

20.12.2012

AVR un 0.2.1  (716x)

Teoreticky odblokuje drtivou většinu (pokud se upraví databáze)

Neumí sériové vysokonapěťové programování.

Jazyk: C.

Pouze přidány další AVR do databáze.

Podporuje: ATmega8, ATmega8A, ATmega16, ATmega16A, ATmega32, ATmega32A, ATmega48, ATmega48A, ATmega48PA, ATmega64, ATmega64A, ATmega88, ATmega88A, ATmega88PA, ATmega103, ATmega128, ATmega128A, ATmega161, ATmega162, ATmega163, ATmega165, ATmega165A, ATmega165PA, ATmega168, ATmega168A, ATmega168PA, ATmega169, ATmega169PA, ATmega169A, ATmega323, ATmega324A, ATmega324PA, ATmega325, ATmega325A, ATmega325PA, ATmega328, ATmega329, ATmega329P, ATmega406, ATmega640, ATmega644, ATmega644A, ATmega644PA, ATmega645, ATmega645A, ATmega645P, ATmega649, ATmega649A, ATmega649P, ATmega1280, ATmega1281, ATmega1284, ATmega1284P, ATmega2560, ATmega2561, ATmega3250, ATmega3250A, ATmega325PA, ATmega3290, ATmega3290A, ATmega329PA, ATmega6450, ATmega6450A, ATmega6450P, ATmega8515, ATmega8535, ATtiny13

30.12.2012

AVR un 0.3  (1793x)

Podporuje paralelní a sériové vysokonapěťové programování

Jazyk: C.

Pouze přidány další AVR do databáze.

Podporuje: ATmega8, ATmega8A, ATmega16, ATmega16A, ATmega32, ATmega32A, ATmega48, ATmega48A, ATmega48PA, ATmega64, ATmega64A, ATmega88, ATmega88A, ATmega88PA, ATmega103, ATmega128, ATmega128A, ATmega161, ATmega162, ATmega163, ATmega165, ATmega165A, ATmega165PA, ATmega168, ATmega168A, ATmega168PA, ATmega169, ATmega169PA, ATmega169A, ATmega323, ATmega324A, ATmega324PA, ATmega325, ATmega325A, ATmega325PA, ATmega328, ATmega329, ATmega329P, ATmega406, ATmega640, ATmega644, ATmega644A, ATmega644PA, ATmega645, ATmega645A, ATmega645P, ATmega649, ATmega649A, ATmega649P, ATmega1280, ATmega1281, ATmega1284, ATmega1284P, ATmega2560, ATmega2561, ATmega3250, ATmega3250A, ATmega325PA, ATmega3290, ATmega3290A, ATmega329PA, ATmega6450, ATmega6450A, ATmega6450P, ATmega8515, ATmega8535, ATtiny13, ATtiny15, ATtiny22, ATtiny24, ATtiny25, ATtiny26, ATtiny28, ATtiny40, ATtiny43, ATtiny44, ATtiny45, ATtiny48, ATtiny84, ATtiny85, ATtiny87, ATtiny88, ATtiny167, ATtiny261, ATtiny461, ATtiny861, ATtiny2313, ATtiny4313

Databázi lze snadno rozšířit

28.06.2014

AVR un 0.3.1  (1397x)

Podporuje paralelní a sériové vysokonapěťové programování

Jazyk: C.

Upraveny parametry DC/DC měniče (ve vyjímečných případech mohlo dojít k "zaseknutí" celé aplikace)

Podporuje: ATmega8, ATmega8A, ATmega16, ATmega16A, ATmega32, ATmega32A, ATmega48, ATmega48A, ATmega48PA, ATmega64, ATmega64A, ATmega88, ATmega88A, ATmega88PA, ATmega103, ATmega128, ATmega128A, ATmega161, ATmega162, ATmega163, ATmega165, ATmega165A, ATmega165PA, ATmega168, ATmega168A, ATmega168PA, ATmega169, ATmega169PA, ATmega169A, ATmega323, ATmega324A, ATmega324PA, ATmega325, ATmega325A, ATmega325PA, ATmega328, ATmega329, ATmega329P, ATmega406, ATmega640, ATmega644, ATmega644A, ATmega644PA, ATmega645, ATmega645A, ATmega645P, ATmega649, ATmega649A, ATmega649P, ATmega1280, ATmega1281, ATmega1284, ATmega1284P, ATmega2560, ATmega2561, ATmega3250, ATmega3250A, ATmega325PA, ATmega3290, ATmega3290A, ATmega329PA, ATmega6450, ATmega6450A, ATmega6450P, ATmega8515, ATmega8535, ATtiny13, ATtiny15, ATtiny22, ATtiny24, ATtiny25, ATtiny26, ATtiny28, ATtiny40, ATtiny43, ATtiny44, ATtiny45, ATtiny48, ATtiny84, ATtiny85, ATtiny87, ATtiny88, ATtiny167, ATtiny261, ATtiny461, ATtiny861, ATtiny2313, ATtiny4313

Databázi lze snadno rozšířit

26.07.2014

AVR un 0.3.2  (1359x)

Podporuje paralelní a sériové vysokonapěťové programování

Jazyk: C.

Přidána ATmega328P, opraveny fuses pro ATTiny26

Podporuje: ATmega8, ATmega8A, ATmega16, ATmega16A, ATmega32, ATmega32A, ATmega48, ATmega48A, ATmega48PA, ATmega64, ATmega64A, ATmega88, ATmega88A, ATmega88PA, ATmega103, ATmega128, ATmega128A, ATmega161, ATmega162, ATmega163, ATmega165, ATmega165A, ATmega165PA, ATmega168, ATmega168A, ATmega168PA, ATmega169, ATmega169PA, ATmega169A, ATmega323, ATmega324A, ATmega324PA, ATmega325, ATmega325A, ATmega325PA, ATmega328, ATmega329, ATmega329P, ATmega406, ATmega640, ATmega644, ATmega644A, ATmega644PA, ATmega645, ATmega645A, ATmega645P, ATmega649, ATmega649A, ATmega649P, ATmega1280, ATmega1281, ATmega1284, ATmega1284P, ATmega2560, ATmega2561, ATmega3250, ATmega3250A, ATmega325PA, ATmega3290, ATmega3290A, ATmega329PA, ATmega6450, ATmega6450A, ATmega6450P, ATmega8515, ATmega8535, ATtiny13, ATtiny15, ATtiny22, ATtiny24, ATtiny25, ATtiny26, ATtiny28, ATtiny40, ATtiny43, ATtiny44, ATtiny45, ATtiny48, ATtiny84, ATtiny85, ATtiny87, ATtiny88, ATtiny167, ATtiny261, ATtiny461, ATtiny861, ATtiny2313, ATtiny4313, ATmega328P

Databázi lze snadno rozšířit

20.09.2018

Projekt byl původně nazván "AVR unBlocker",ale po čase jsem ho přejmenoval na poněkud srozumitelnější (snad) název: "AVR unLocker". Proto je ve startších verzích použit jiný název.

Závěr

  Pokud použijete správné součástky a celé zapojení bude po HW stránce správně, tak by to mělo fachat napoprvé. Jediné, co se musí/nemusí nastavovat je kontrast pro LCD, který ale ani nemusí být připojen.
  Jak si můžete všimnout, tak display je přesně naopak, než bychom čekali. To je proto, že mě nenapadlo, že by někdo mohl vyrábět display zrovna takhle... Takže pokud chce někdo předelat desku a podělit se o ni, budu jedině rád.
  Pokud mátě jakékoli dotazy, tak pište na mail ;-)
TOPlist


Update: 2018.10.22