Atmega fusebit doctor (HVPP+HVSP) – napraw fusebity
3 maj 2010 | | Dodał manekinen
Atmega 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.
O 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:
Urzą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:
Zworka 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:
W roli układu-doktora można użyć jednego z następujących mikrokontrolerów: 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:
video file is located on a free server, so give it a few seconds to buffer
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 :)
Powiadomienia o nowych aktualizacjach – twitter.com/manekinen
FAQ – czyli często zadawane Pytania i Odpowiedzi:
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: 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.