logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Atmega328p - jak odblokować mikrokontroler po błędnej zmianie fusebitów?

jaromas 18 Gru 2015 19:41 2712 16
  • #1 15251775
    jaromas
    Poziom 12  
    Witam,

    przez przypadek pomyliłem lfuse i hfuse w Atmega328p, poszło w mikrokontroler coś takiego:

    Atmega328p - jak odblokować mikrokontroler po błędnej zmianie fusebitów?

    mikrokontroler nie jest rozpoznawalny przez programator, czy jest jakakolwiek szansa go postawić spowrotem?

    Pozdrawiam
  • #2 15252453
    fanatykstaroci
    Poziom 13  
    Mi kolega odblokował kiedyś atmegę, zablokowaną w podobny sposób (dokładnie nie pamiętam.. to było lata temu) za pomocą programatora równoległego... czy jakoś tak. Chyba coś w ten deseń:
    Link

    Znalazłem też taki link.. ale nie wiem czy pomoże, jak masz zablokowany odczyt z generatora zewnętrznego...
    Link
  • #3 15252603
    michalko12
    Specjalista - Mikrokontrolery
    vonar napisał:
    Podłączyć zewnętrzny generator do XTAL1 i przeprogramować fusebity.
    edit: To nie wystarczy, nie zauważyłem wykasowania SPIEN...

    Pozostaje programowanie wysokonapięciowe (hasło do poszukania: AVR fusebit doctor).
    Godny polecenia projekt autorstwa kol. manekinen: https://www.elektroda.pl/rtvforum/topic1716521.html#8289220


    A czy przy wykasowanym SPIEN można odczytać wartość fusów? Czy SPIEN można wykasować programatorem szeregowym?

    Zewnętrzny generator powinien wystarczyć, a jak nie to zakup nowego uC jest najtańszą opcją.
  • #4 15252786
    vonar
    Poziom 28  
    No tak, w m328p (i w ogóle większości AVR) nie można zmienić SPIEN przez ISP.
  • #5 15253013
    jaromas
    Poziom 12  
    Podłączyłem zewnętrzny generator (na HD74HC14P) pod xtal1, dało się odczytać fusebity ale nie da się ich zmienić na domyślne, wyskakuje błąd,odczytane fusebity:

    Atmega328p - jak odblokować mikrokontroler po błędnej zmianie fusebitów?

    czyli taka konfiguracja:

    Atmega328p - jak odblokować mikrokontroler po błędnej zmianie fusebitów?

    Czy da się jeszcze coś z tym zrobić? Wytrawiłem już płytkę do AVR doctora, ale może da się bez niego?
  • #6 15253081
    michalko12
    Specjalista - Mikrokontrolery
    Zwiększ częstotliwość generatora, lub zmniejsz prędkość transmisji jeśli masz taką możliwość.
    Problemem może być też typ generatora, tzn wypełnienie sygnału powinno być 50/50, a z tego co pamiętam to ten generator ma coś w okolicach 25/75.

    Jaką masz częstotliwość tego generatora?

    Edit:
    Z odczytanych wartości CKSEL wynika, że powinno pomóc podłączenie rezonatora 8 -16MHz z kondensatorami 12-22p
  • #7 15253552
    jaromas
    Poziom 12  
    Ten generator robiłem kiedyś do odblokowania Atmegi8 i wtedy się udało, nie pamiętam już częstotliwości, a wszystko jest w pająku zalane czarnym termoglutem.

    Wlutowałem kwarc 16Mhz i 2x 22p, rezultat taki sam jak przy generatorze.

    Ponizej log z avrdude przy próbie zapisania domyślnych fusebitów:

    Zapis Lockbit:
    
    avrdude.exe: AVR device initialized and ready to accept instructions
    
    Reading | ################################################## | 100% 0.00s
    
    avrdude.exe: Device signature = 0x1e950f
    avrdude.exe: reading input file "0xFF"
    avrdude.exe: writing lock (1 bytes):
    
    Writing |  ***failed;  
    ################################################## | 100% 0.03s
    
    avrdude.exe: 1 bytes of lock written
    avrdude.exe: verifying lock memory against 0xFF:
    avrdude.exe: load data lock data from input file 0xFF:
    avrdude.exe: input file 0xFF contains 1 bytes
    avrdude.exe: reading on-chip lock data:
    
    Reading | ################################################## | 100% 0.00s
    
    avrdude.exe: verifying ...
    avrdude.exe: verification error, first mismatch at byte 0x0000
                 0xff != 0x3f
    avrdude.exe: verification error; content mismatch
    
    avrdude.exe done.  Thank you.
    
    


    Zapis pozostałych:
    
    avrdude.exe: AVR device initialized and ready to accept instructions
    
    Reading | ################################################## | 100% 0.00s
    
    avrdude.exe: Device signature = 0x1e950f
    avrdude.exe: reading input file "0xD9"
    avrdude.exe: writing hfuse (1 bytes):
    
    Writing | ################################################## | 100% -0.00s
    
    avrdude.exe: 1 bytes of hfuse written
    avrdude.exe: verifying hfuse memory against 0xD9:
    avrdude.exe: load data hfuse data from input file 0xD9:
    avrdude.exe: input file 0xD9 contains 1 bytes
    avrdude.exe: reading on-chip hfuse data:
    
    Reading | ################################################## | 100% 0.00s
    
    avrdude.exe: verifying ...
    avrdude.exe: 1 bytes of hfuse verified
    avrdude.exe: reading input file "0x62"
    avrdude.exe: writing lfuse (1 bytes):
    
    Writing | ################################################## | 100% 0.00s
    
    avrdude.exe: 1 bytes of lfuse written
    avrdude.exe: verifying lfuse memory against 0x62:
    avrdude.exe: load data lfuse data from input file 0x62:
    avrdude.exe: input file 0x62 contains 1 bytes
    avrdude.exe: reading on-chip lfuse data:
    
    Reading | ################################################## | 100% 0.00s
    
    avrdude.exe: verifying ...
    avrdude.exe: 1 bytes of lfuse verified
    avrdude.exe: reading input file "0xFF"
    avrdude.exe: writing efuse (1 bytes):
    
    Writing |  ***failed;  
    ################################################## | 100% 0.03s
    
    avrdude.exe: 1 bytes of efuse written
    avrdude.exe: verifying efuse memory against 0xFF:
    avrdude.exe: load data efuse data from input file 0xFF:
    avrdude.exe: input file 0xFF contains 1 bytes
    avrdude.exe: reading on-chip efuse data:
    
    Reading | ################################################## | 100% 0.00s
    
    avrdude.exe: verifying ...
    avrdude.exe: verification error, first mismatch at byte 0x0000
                 0xff != 0x07
    avrdude.exe: verification error; content mismatch
    
    avrdude.exe done.  Thank you.
    


    Procesor przyjmuje nowy flash i eeprom bez błędów, problem jest ciągle z błędnymi fusebitami. Pozostał tylko avr doctor? Wiem że zabawa jest nieopłacalna ale to bardziej ambicjonalna sprawa :)

    Pozdrawiam
  • Pomocny post
    #8 15253704
    michalko12
    Specjalista - Mikrokontrolery
    Masz komunikację z procesorem, każdy inny programator raczej nic nowego nie wniesie do sprawy. Może okazać się, że procesor jest uszkodzony.

    Robiłeś pełny Chip Erase?
    Zasilanie masz pewne?
  • Pomocny post
    #9 15253804
    Konto nie istnieje
    Konto nie istnieje  
  • #10 15253921
    jaromas
    Poziom 12  
    Czyściłem kilka razy, ustawiłem fusebity na domyslne, tych co nie chcą się zmienić nie ruszałem i układ działa, nie są ustawione tak jak powinny ale nie robi to już mi żadnej różnicy skoro działa :) AVR doctora złożę kiedyś przy okazji skoro już mam płytki wytrawione:
    Atmega328p - jak odblokować mikrokontroler po błędnej zmianie fusebitów?

    Dziękuję za pomoc i pozdrawiam
  • #11 15256142
    yokoon
    Poziom 29  
    szczywronek napisał:
    yokoon napisał:
    Można zmienić ale tylko raz.
    Nie, nie można.
    mega328, datasheet napisał:
    The SPIEN Fuse is not accessible in serial programming mode.

    Witam.
    Nie bardzo rozumiem takie stwierdzenie, że nie można zmienić bitu SPIEN przez ISP.
    Mam na płytce stykowej Atmega88 w której program PWM i obsługa wyświetlacza LCD. I np. w Bascom otwieram zakładkę Lock and fuse bits i mogę włączyć lub wyłączyć SPI w układzie. Domyślnie ustawione enabled, oczywiście jeżeli odznaczę i zapiszę w procku to nie będę mógł zaprogramować po ISP.
    Podobnie jest w MkAvrCalculator.
  • #12 15256229
    dondu
    Moderator na urlopie...
    yokoon napisał:
    mega328, datasheet napisał:
    The SPIEN Fuse is not accessible in serial programming mode.

    Nie bardzo rozumiem takie stwierdzenie, że nie można zmienić bitu SPIEN przez ISP.

    Jest to specjalne zabezpieczenie wprowadzone przez producenta mikrokontrolerów nie pozwalające za pomocą programowania szeregowego (ISP) na wyłączenie możliwości programowania szeregowego po to, by nie utracić kontroli nad mikrokontrolerem.

    Innymi słowy programując szeregowo nie można wyłączyć tej opcji. Można to natomiast zrobić programując programatorem równoległym. Spróbuj, a się przekonasz.
  • #13 15256265
    szczywronek
    Poziom 28  
    @yokoon tu nie ma co rozumieć. Po prostu ten bit konfiguracyjny jest niedostępny i już. Spróbuj zrobić to co opisałeś i sam się przekonasz, że Ci się nie uda. Dowód (najpierw sprawdzam czy jest komunikacja z megą8, potem próbuję ustawić hfuse z SPIEN=1 i na koniec ponownie sprawdzam czy mega "gada"):
    Kod: Bash
    Zaloguj się, aby zobaczyć kod
    AVRDude na powyższym listingu krzyczy, bo nie udało mu się zapisać bajtu konfiguracyjnego.

    ------

    Swoją drogą, skoro jest zabezpieczenie przed wyłączeniem SPI, to mogli pójść za ciosem i zablokować też RSTDISBL.
  • #14 15256627
    yokoon
    Poziom 29  
    szczywronek napisał:
    @yokoon tu nie ma co rozumieć. Po prostu ten bit konfiguracyjny jest niedostępny i już. Spróbuj zrobić to co opisałeś i sam się przekonasz, że Ci się nie uda. Dowód (najpierw sprawdzam czy jest komunikacja z megą8, potem próbuję ustawić hfuse z SPIEN=1 i na koniec ponownie sprawdzam czy mega "gada"):
    Kod: Bash
    Zaloguj się, aby zobaczyć kod
    AVRDude na powyższym listingu krzyczy, bo nie udało mu się zapisać bajtu konfiguracyjnego.

    ------

    Swoją drogą, skoro jest zabezpieczenie przed wyłączeniem SPI, to mogli pójść za ciosem i zablokować też RSTDISBL.


    No właśnie, że jest dostępny tylko nie wiem czy po ustawieniu 1 da się zapisać ową zmianę w procku. Jeszcze nie próbowałem.
  • #15 15256659
    dondu
    Moderator na urlopie...
    yokoon napisał:
    No właśnie, że jest dostępny tylko nie wiem czy po ustawieniu 1 da się zapisać ową zmianę w procku.

    W programie wykorzystywanym do programowania możesz nawet mrówki wkładać do mikrokontrolera, ale jeśli jego producent sprzętowo ograniczył tę możliwość (cytat z dokumentacji otrzymałeś) to takiej możliwości nie ma.

    yokoon napisał:
    Jeszcze nie próbowałem.

    1. To spróbuj,
    2. albo przeczytaj dokumentację mikrokontrolera (zacytowaną powyżej),
    3. albo przeanalizuj log programowania załączony przez kol. szczywronek.
  • #16 15256755
    yokoon
    Poziom 29  
    Dobrze teraz już wiem, że jest to zabezpieczenie wprowadzone przez producenta.
    Za bardzo sugerowałem się możliwościami programów.

    Dzięki za podpowiedzi.
  • #17 15256801
    Konto nie istnieje
    Konto nie istnieje  
REKLAMA