Atmega fusebit doctor (HVPP+HVSP) – napraw fusebity

mega_fusebit_doctor_1Atmega fusebit doctor, jak sama nazwa mówi, to urządzenie do naprawienia nieumiejętnie przestawionych fusebitów w mikrokontrolerach z rodziny AVR. Największymi problemami jest ustawienie nieprawidłowego źródła zegarowego (fusebity CKSEL), wyłączenie programowania SPI (fusebit SPIEN), lub ustawienie pinu reset w tryb I/O (fusebit RSTDISBL). To proste urządzenie w ułamek sekundy naprawi mikrokontroler nadając mu ustawienia fabryczne.

Programowanie wysokonapięciowe

mega_fusebit_doctor_3O ile w pierwszym wypadku można poratować się generatorem zegarowym lub generatorem RC/kwarcowym, to w drugim i trzecim przywrócenie mikrokontrolera do życia nie jest możliwe przy pomocy programatora szeregowego SPI. Mało osób decyduje się na budowę programatora równoległego, a to dla tego że jest niewygodny w użyciu, a to dla tego że taniej kupić nowy mikrokontroler niż się bawić w jakieś naprawy. Na dłuższą metę jednak, zbudowanie tego urządzenia okazuje się bardzo dobrym pomysłem.

Przedstawiane urządzenie wykorzystuje możliwość programowania równoległego oraz szeregowego wysokonapięciowego. Są to metody programowania pozwalające dobrać się do układu z wyłączonym resetem czy isp:
HVPP = high voltage parallel programming = wysokonapięciowe programowanie równoległe.
HVSP = high voltage serial programming = wysokonapięciowe programowanie szeregowe.

Lista obsługiwanych układów:

Urządzenie obsługuje obecnie 145 układów, choć nie ze wszystkimi było testowane. Testowane układy są podświetlone na zielono. Zgłaszasz problem – wydaję poprawkę :)
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

Opis:

mega_doctor_renderUrządzenie jest niezwykle proste i tanie w budowie, wystarczy tylko Atmega8 (lub kompatybilny, patrz dalej) w roli doktora, dwie diody LED, zworka, stabilizator, tranzystory. Wystarczy podłączyć „uwalony” uC i wcisnąc przycisk START a układ wykona żądaną operację i nasz pacjent zostanie przywrócony do życia. Na płytce znajdują się trzy gniazda, dla procesorów zgodnych pinowo z atmega8, atmega16, i attiny2313 – czyli takich najpopularniejszych. Dodatkowo na płytce znajduje się złącze goldpin żeńskie z wyprowadzonymi wszystkimi potrzebnymi sygnałami, do podłączania adapterów:
#1 HVPP adapter” jako rozszerzenie HVPP dla procesorów kompatybilnych z 20pin Attiny26 oraz 40pin Atmega8515
HVSP adapter” dla procesorów HVSP 8pin oraz 14 pin attiny, których nie można programować równolegle z powodu zbyt małej ilości pinów.
Istnieje możliwość wykonania własnych dodatkowych adapterów pod inne rodzaje procesorów w obudowach DIP czy też SMD. Nie trzeba jednak wykonywać adaptera aby naprawić jeden procek, można to zrobić przy pomocy płytki stykowej łącząc sygnały z odpowiednimi pinami. Jak? Zajrzyj do noty katalogowej twojego AVRa, przejdź do „memory programming” a następnie „parallel programming” – nazwy sygnałów i pinów jak na tacy. Wszystkie piny są podpisane pod podstawką DIP40, a w załączniku znajduje się też projekt „pustego” adaptera. Płytka jednostronna, o wymiarach 55mm x 92mm. Na wierzchniej części należy wlutować kilka zworek, lub, płytkę można wykonać także jako dwustronną. Zasilanie 12V stabilizowane. Rezystory R7 do R23 moga mieć wartości od 100 ohm do 1K, proponuję raczej 330ohm. Należy pamiętać że trzy piny bitów z linii danych są także wykorzystywane przez programator ISP do aktualizacji programu – urządzenie nie będzie prawidłowo działało jeśli np podlutujemy się do nich z programatorem.

UWAGA!
Podczas montażu podstawki DIP40 należy usunąć z niej metalowe złącza od 29 do 37 pinu! Ścieżki przechodzące w tych miejscach nie mogą zostać elektrycznie połączone z pinami włożonego procesora, a biegną tamtędy aby uprościć samą płytkę. Na obrazku po lewej zaznaczyłem które to piny.


Działanie układu:

fusebit_doctor_adapters_4Zworka ALLOW ERASE zezwala na wymazanie całej pamięci w przypadku ustawionych Lockbitów (bez ich wykasowania nie jest możliwe przestawienie Fusebitów). Po podłączeniu układu i wciśnięciu przycisku START program inicjuje tryb programowania wysokonapięciowego. Czy jest to HVSP czy HVPP zależy od konfiguracji sprzętowej, po ludzku mówiąc, układ sam wykryje włożony adapter HVSP i automatycznie będzie w tym trybie pracował. Bez tego adaptera pracuje w trybie HVPP. Pierwsze co układ robi, to czeka na stan wysoki na pinie RDY/BSY co oznacza prawidłowe wejście w tryb programowania. Po tym odczytuje sygnaturę podłączonego mikrokontrolera i sprawdza czy jest w stanie go obsłużyć. Następny krok to wymazanie całej pamięci jeśli użytkownik na to zezwolił. Następnie sprawdzane są lockbity, i jeśli nie blokują dostępu, doktor odczytuje fusebity i porównuje je z fabrycznymi zapisanymi w bazie. Jeśli się różnią, zapisuje te fabryczne, uwzględniając czy dany model pacjenta posiada extended fusebits, czy nie. Niektóre starsze układy AVR mają jedynie jeden bajt fusków – LOW – i to także jest brane pod uwagę. Program na końcu weryfikuje poprawność zapisanych danych i zapala odpowiednią diodę.

Oznaczenia diod:

świeci zielona – fusebity naprawione i zweryfikowane, układ naprawiony. Jeśli jest ustawione zabezpieczenie lockbit, to tylko sprawdza czy fuski odpowiadają fabrycznym, i jeśli tak to także zapali tę diodę.
świeci czerwona – problem z odczytaniem sygnatury, brak układu, lub brak sygnatury w bazie.
migająca zielona – sygnatura odczytana, fusebity się nie zgadzają z fabrycznymi, ale ustawione są lockbity i trzeba zezwolić na wymazanie pamięci aby je naprawić (czytaj dalej).
migająca czerwona – sygnatura odczytana, lockbity wyłączone, ale nie można z jakichś powodów zapisać nowych fusebitów.

Terminal:

Terminal jest tylko opcjonalny, urządzenie działa bez niego a wszystkiego dowiemy się z samych diod…
Na płytce dodatkowo znajduje się złącze opisane jako RS232, jest to wyjście UARTa, podłączając się pod nie, dowiemy się wszystkiego o przebiegu operacji naprawy – przykładowe zrzuty w galerii poniżej. Informacje przez uart są wysyłane na bieżąco. Aby połączyć urządzenie z komputerem, użyć należy odpowiedniego konwertera. Jeśli w komputerze mamy gniazdo COM dla RS232, użyć można prostego konwertera zbudowanego w oparciu o układ MAX232 (np taki). Jeśli używamy laptopa, użyć należy konwertera na USB (może być taki lub taki).

Ustawienia dla terminala:
baudrate: 4800
parity: none
databits: 8
stopbits: 1
handshake: none

Inne:

prototype_docW roli układu-doktora można użyć jednego z następujących mikrokontrolerów: Atmega8, Atmega88, Atmega88P, Atmega168, Atmega168P, Atmega328, Atmega328P – oraz ich nowsze/niskonapięciowe wersje „A” czy też „L”. Wsady znajdują się w odpowiednio opisanych folderach.
Zasilanie układu to stabilizowane 12V. Większe napięcie może uszkodzić naprawiany układ!

Program został napisany na podstawie opisu programowania równoległego oraz szeregowego wysokonapięciowego, zawartego w każdej z not katalogowych mikrokontrolerów AVR, (memory programming – parallel/serial programming). Projekt rozpoczęty jeszcze w 2008 roku, ale z braku czasu porzucony, teraz (2010) wykonany na nowo. Jeśli szukasz dedykowanego urządzenia do odblokowania procesorów Attiny, sprawdź mój poprzedni projekt, Attiny fusebit doctor. W projekcie ujawniły się jednak błędy a nie jest on już rozwijany z powodu powstania „Atmega fusebit doctor” który obsługuje wszystkie procesorki Attiny. Opublikowałem tam jednak kod źródłowy, i posiłkując się w/w rozdziałem noty katalogowej, można szybko zrozumieć omawiany mechanizm.


Fusebity:

Wewnętrzny zegar 1MHz oraz włączony bit EESAVE, patrz plik README.
Jeśli używasz nowego układu w roli doktora, to nie musisz nic przestawiać ponieważ fabryczne ustawienia są dobre i układ działa już na wewnętrznym 1MHz. Bit EESAVE nie jest konieczny, powoduje on że zawartość pamięci eeprom nie jest kasowana w przypadku aktualizacji programu – w eeprom układ zapisuje licznik naprawionych układów, którego wartość jest słana po rs232 w celach czysto statystycznych. Więc olej ten fusebit jeśli chcesz.



AKTUALIZACJA 2.1X DAJE NOWĄ FUNKCJONALNOŚĆ!

Wyślij własne fusebity i lockbity przez terminal, pracuj z układami z uszkodzoną sygnaturą. Jeśli dołączysz pin Tx terminala do pinu RX doctora – tryb manualny uruchomi się automatycznie. Wymaga to aby pin Tx terminala był w stanie wysokim w czasie bezczynności, musi on podciągnąć rezystor ściągający 10K. Jeśli tak się nie stanie (połączenie przychodzące odłączone) to doctor będzie pracował w trybie automatycznym (jak dotychczas).

CO I JAK:
Najpierw, doctor odczyta sygnaturę. Jeśli odczyt się nie powiedzie, poprosi o ręczne jej wpisanie. Wpisz dwa ostatnie bajty sygnatury w HEX (4 znaki) i wduś enter.

Następnie doctor spróbuje odczytać układ na podstawie podanej sygnatury.
Jeśli się powiedzie, wybierz jedną z opcji:
1 – write fusebits – zapis fusebitów wartościami z bufora (początkowo fabryczne).
2 – modify fusebits – opcja pozwala na ręczną zmianę fusebitów, dane w buforze się zmienią. Wpisz jeden bajt w HEX (2 znaki) i wduś enter. Powtarzaj dla każdego bajtu (jeśli istnieje).
3 – set lockbits – wpisz wartość lockbajtu, jeden bajt w HEX (2 znaki) i wduś enter.
Pamiętaj że nieużywane bity zawsze muszą być 1! Np, jeśli chcesz włączyć LB1 i LB2, wpisz FC (11111100)
4 – erase the chip – wymazanie całej pamięci i lockbitów, dla bezpieczeństwa wymagana zworka „allow erase”.
5 – end – zakończ programowanie i zwolnij napięcia – można wyjąć układ.

Zobacz jak został naprawiony Attiny13 z uszkodzoną sygnaturą.
Zobacz jak ten sam układ został z powrotem „zepsuty”.
Nie sugeruj się diodami w trybie manualnym – migają jak chcą :)
UWAGA – Firmware 2.1x WYMAGA aktualizacji płytki do wersji 2h!


Galeria:


Pliki:

POBIERZ – ARCHIWUM wszystkich poprzednich aktualizacji. Wsady + płytki.
Historia zmian w pliku README. -WERSJA SMD TUTAJ-
Nie musisz tego pobierać, najnowszy komplet plików znajduje się poniżej.


POBIERZ – AKTUALIZACJA #11, 30.04.2011:
Program ver.2.11 – poprawki
Fusebity: patrz plik README

Poprawiono błąd nie zapisywania się fusebajta HIGH (dotyczy wszystkich procków!)
To „tylko” literówka którą sieknąłem przy optymalizowaniu programu do 2.10 :)

POBIERZ – Adapter SMD:
4 pola układów, kompatybilnych z: T2313, M8, M16, M128 – wszystkie przetestowane.
Do dociśnięcia układu należy użyć silnych spinaczy do papieru.


FAQ – czyli często zadawane Pytania i Odpowiedzi: (aktualizacja 2014-02-01)

P: Brak żadnego znaku życia, diody się nie zapalają.
O: Poważne błędy na płytce lub źle zaprogramowany procesor.

P: Zapala się czerwona dioda.
O: Procesor nie jest rozpoznawany. Wykonaj pomiar napięć. W czasie bezczynności, zmierz napięcia na liniach +12 RESET oraz +5 SUPPLY w złączu goldpin żeńskim – powinny wynosić 0V, lub być bliskie 0V. Po naciśnięciu przycisku START, napięcia te na czas około sekundy powędrują do wartości bliskich +5V oraz +12V. Jeśli jest inaczej, upewnij się że użyłeś dobrych tranzystorów i wlutowałeś je poprawnie.

P: Zapala się czerwona dioda.
O:Błędy na płytce, ścieżki są gęsto upakowane i bardzo możliwe że jest gdzieś niewidoczna przerwa, zwarcie, lub zimny lut. Sprawdź wszystko miernikiem, ale DOKŁADNIE.

P: Zapala się czerwona dioda.
O: Podłącz urządzenie do terminala aby odebrać log z naprawy. Wciśnij start aby odebrać dane.

P: Odebrano „Init programming…” i nic więcej – LUB – odebrana sygnatura to „00 01 02″ lub „FF FF FF”.
O: Włożony procesor jest uszkodzony, lub występują błędy na płytce – patrz wyżej.

P: Odebrana sygnatura to „1E 90 00″, ” 1E 1E 1E”, lub coś podobnego (przypominającego sensowne dane)
O: Włożony procesor jest sprawny, inicjuje się, na płytce są zwarcia na liniach DATA, BS, XA.

P: Zapaliła się zielona dioda / odebrano „Verifying… – OK!” ale procesor nadal nie działa w zwykłym programatorze
O: Fusebity na 100% zostały naprawione, procesor posiada uszkodzony sprzętowy SPI lub posiada inne uszkodzenie.

P: Co w logu robi „Read Signature… FAIL!” oraz „Trying T2313 pinout… OK”?
O: Wszystkie układy z 20pinami trzeba traktować nieco inaczej. Urządzenie domyślnie próbuje odczytać procesor wg standardowego schematu, i jeśli się to nie powiedzie („FAIL!”), to próbuje schematu dla ukłaów 20pinowych zgodnych z T2313 i dopiero układ zostaje odczytany. Jest to normalne zachowanie, nie jest to żaden błąd.

P: Co na początku logu robią krzaki typu „<[2J" ?
O: Jest to sekwencja czyszczenia ekranu terminala, w ustawieniach włącz emulację „VT100″.

P: Próbuję wysłać znaki na terminal w wersji 2.10, ale żadne się nie pojawiają.
O: Upewnij się że w ustawieniach terminala opcję handshake ustawiłeś na NONE.

P: Po wpisaniu znaków nie mogę ich zatwierdzić enterem i wpisać kolejnych.
O: Przy wciśnięciu „enter/return” terminal musi wysłać znaki CRLF, sprawdź w jego ustawieniach.

P: To mi nadal nie pomaga, próbowałem wszystkiego i ciągle mam problem.
O: Zapytaj w komentarzach poniżej :) Podaj wersję softu oraz wersję płytki z którymi walczysz. Wklej odebrany log naprawy (w formie tekstowej).

P: Czy rezystory szeregowe 1K (R7 do R23) są tu na prawdę potrzebne?
O: Nie, możesz zbudować układ bez nich. Pamiętaj jednak, że jeśli z jakiegoś powodu pacjent nie wejdzie w tryb programowania i będzie wykonywał swój kod, to konflikt stanów na pinach obydwu mikrokontrolerów może je nieodwracalnie uszkodzić. Te rezystory są zabezpieczeniem przed takimi sytuacjami, i sugeruję zbudowanie pełnego układu wg schematu.

P: Rezystory ściągające linie 12V i 5V (R24 i R27) dosyć mocno się grzeją w trybie ręcznym, układ przez to pobiera sporo prądu, czy mogę je zmienić na jakieś większe?
O: Tak, ale układ może działać niepoprawnie ze wszystkimi pacjentami. Napięcia podczas spoczynku muszą mieć wartości bliskie 0V, a podczas załączania i wyłączania tych napięć zbocza powinny być odpowiednio strome aby zachować zależności czasowe (patrz nota, inicjowanie programowania wysokonapięciowego). Jako że w układzie zastosowane są zwykłe tranzystory bipolarne, te rezystory gwarantują zachowanie powyższych wymogów. Ciekawym przypadkiem z jakim się spotkałem była attiny2313 w której zapisywały się wszystkie fuski oprócz RSTDISBL, ponieważ jak się okazało poprzez nieodpowiednio strome zbocza napięcia 12V, procesor prawdopodobnie pracował w trybie równoległym ale nie wysokonapięciowym i nie pozwalał na zmianę tego fuska – jest to moja własna interpretacja także mogę się mylić.

P: Mój procesor jest odczytywany ale doctor nie może zmienić w nim fusebitów, mimo tego że mam założoną zworkę allow erase.
O: Jeśli programator ISP również nie potrafi zmienić fusków ale je odczytuje, to pacjent jest uszkodzony i nic z tym nie zrobimy.

P: Bez włożonego pacjenta układ zachowuje się dziwnie, zawiesza się, a jak przystawię palec do płytki to rusza.
O: Układ nie jest przeznaczony do pracy „na pusto”. Dzieje się tak, ponieważ przy próbie inicjacji trybu wysokonapięciowego, układ czeka na stan wysoki od pacjenta na pinie RDY. Pin ten nie jest ściągnięty do masy i zachowuje się jako wejście o wysokiej impedancji, dla tego ładunek elektrostatyczny z palca jest odczytywany jako stan wysoki i układ rusza dalej z programem.

P: Nie wyświetlają mi się nazwy układów w logu, zamiast nich jest „no names in 8kB ver”.
O: Nazwy nie są wyświetlane przy korzystaniu ze wsadów 8kB, t.j. dla atmega8 i atmega88 – ponieważ nazwy nie mieszczą się w ich pamięci. Jeśli zależy ci na wyświetlaniu nazw, użyj układu atmega168 lub atmega328 i wgraj odpowiedni wsad.

ZAWSZE wgrywaj najnowszą wersję wsadu. Pliki hex oraz bin to wsady dla pamięci flash, użyj jednego z nich. Pamięci eeprom nie programujemy.

Русский перевод – Евгений из GetChip Блог.


Atmega fusebit doctor (HVPP+HVSP) – napraw fusebity
0 votes, 0.00 avg. rating (0% score)

1 058 Comments

  1. Fantasy, Did you set the jumper so it can Write?. Flashing green usually means signature ok, fusebits are wrong. Lockbits enabled, chip erase permission required. There is a guide up at top part of this page.

  2. Thank you for your wonderful project!!! i builded the circuit on breadboard and i rescued one atmega8A and one atmega328P (both dip socket). its working good. Then i used to try on TQFP ic’s and no luck! i double checked connections but same result. i connected pind from datasheet same as dip socket names. am i doing something wrong? thank you in advance…

    • Did not understand how to connect atmega2560 if you can tell me .
      thank you

  3. the socket oft the Mega16/32 is very near to the Tiny2313.
    So I can’t use it with Textool-sokets. Now I have made a external socket for the Mega16/32, and do not placed it on the main board.
    Maybe it is possible to make the 1k resistors smaller, so there is more place between M16/32 and T2313.
    I have stand up the 7805 to have more place for a additional 5-to-12-Volt-converter. Just single in line: GND, 5V in, GND, 12V out ;-)

  4. I am trying to revive an ATMEGA328p. I assambled everything on a breadboard (for IC1 I am using Atmega8 and my bricked Atmega328p is connected as IC4), I haven’t powered yet because I don’t understand one thing in the schematic: on IC4, in 9 is Xtal1 but on the IC2 Xtal1 is marked as pin 9 and as pin5 too. Which pin of IC2 do I have to use?
    Thanks!

    • OK, my bad, after pushing so many Dupont wires in the breadboard I missed the right notation… pin 9 on IC2 is DATA6 as a matter of fact.

  5. Hoooray, it worked! My 328p is alive again. This little great device worked at the first try even my build was an sophisticated „octopus” breadboard :))

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Proszę pozostawić te dwa pola tak jak są: