Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Attiny13 i fusebit RSTDISBL -ręczne odblokowanie.

Manio95 31 Oct 2010 00:46 5291 15
  • #1
    Manio95
    Level 21  
    Witam.
    Ponieważ wykonuję sobie miernik na atiny13 nózkę reset trzeba było ustawić jako wejście/wyjście ale muszę zmienić w kodzie jedną liczbę lecz mam tylko zwykły programator i nie mam dostępu do wysokonapięciowego.
    Na stronie https://www.elektroda.pl/rtvforum/topic1102119.html można wyczytać:


    Quote:
    Nie potrzeba żadnego programatora. Ręcznie zwierasz piny ustawiając adres i komendę, i dajesz impuls na pin WR. Później ustawiasz dane na 8-bitowej linii danych portu B (czyli 8 bitów fusów) i znowu pin WR. Akurat przestawienie fusebitów to kilka ruchów, i można je zapisać bez wcześniejszego odczytywania. Pisze oczywiście o programowaniu równoległym wysokonapięciowym, jak wejść w ten tryb masz także opisane w podpunkcie "entering programming mode". Więc jeśli programujesz to nie będziesz miał większego problemu ze zrozumieniem tego mechanizmu.
    I to jest właśnie najprostszy i najtańszy (0zł) sposób na odblokowanie.
    Pozdrawiam.

    Z czego wynika, że nie potrzeba do tego żadnego programatora.
    Tam jest opisane attiny2313 a jak już wspomniałem ja mam attiny13 i znalazłem w PDF-ie:
    Attiny13 i fusebit RSTDISBL -ręczne odblokowanie. Attiny13 i fusebit RSTDISBL -ręczne odblokowanie.
    Jest opisane co trzeba zrobić i czy tu również da się to zrobić po prostu za pomocą przycisków?
    Jest jeszcze opis ale nie bardzo rozumiem:
    Quote:
    High-Voltage Serial Programming Algorithm
    To program and verify the ATtiny13 in the High-voltage Serial Programming mode, the following
    sequence is recommended (See instruction formats in Table 17-13 on page 110):
    The following algorithm puts the device in High-voltage Serial Programming mode:
    1. Set Prog_enable pins listed in Table 17-11 to “000”, RESET pin to “0” and Vcc to 0V.
    2. Apply 4.5 - 5.5V between VCC and GND. Ensure that Vcc reaches at least 1.8V within
    the next 20μs.
    3. Wait 20 - 60μs, and apply 11.5 - 12.5V to RESET.
    4. Keep the Prog_enable pins unchanged for at least 10μs after the High-voltage has
    been applied to ensure the Prog_enable Signature has been latched.
    5. Release the Prog_enable[2] pin to avoid drive contention on the Prog_enable[2]/SDO
    pin.
    6. Wait at least 300μs before giving any serial instructions on SDI/SII.
    7. Exit Programming mode by power the device down or by bringing RESET pin to 0V.
    If the rise time of the Vcc is unable to fulfill the requirements listed above, the following alternative
    algorithm can be used.
    1. Set Prog_enable pins listed in Table 17-11 to “000”, RESET pin to “0” and Vcc to 0V.
    2. Apply 4.5 - 5.5V between VCC and GND.
    3. Monitor Vcc, and as soon as Vcc reaches 0.9 - 1.1V, apply 11.5 - 12.5V to RESET.
    4. Keep the Prog_enable pins unchanged for at least 10μs after theHigh-voltage has been
    applied to ensure the Prog_enable Signature has been latched.
    5. Release the Prog_enable[2] pin to avoid drive contention on the Prog_enable[2]/SDO
    pin.
    Table 17-10. Pin Name Mapping
    Signal Name in High-voltage
    Serial Programming Mode Pin Name I/O Function
    SDI PB0 I Serial Data Input
    SII PB1 I Serial Instruction Input
    SDO PB2 O Serial Data Output
    SCI PB3 I Serial Clock Input (min. 220ns period)
    Table 17-11. Pin Values Used to Enter Programming Mode
    Pin Symbol Value
    SDI Prog_enable[0] 0
    SII Prog_enable[1] 0
    SDO Prog_enable[2] 0
    110
    2535J–AVR–08/10
    ATtiny13
    6. Wait until Vcc actually reaches 4.5 - 5.5V before giving any serialinstructions on
    SDI/SII.
    7. Exit Programming mode by power the device down or by bringing RESET pin to 0V.

    Jeżeli mógłby ktoś wytłumaczyć co mam po kolei naciskać (oraz z czym połączyć) abym odblokował tego atttiny to byłbym bardzo wdzięczny.
    Oczywiście wiem, że na pin reset trzeba podać 12V
    Bardzo dziękuję za wszelką pomoc bo ceny mikroprocesorów poszy w górę więc zależy mi na odblokowaniu tego attiny.
    Pozdrawiam
  • Helpful post
    #2
    manekinen
    Level 29  
    Z attiny13 będzie ciężej się uporać przy ręcznym odblokowywaniu bo tutaj mamy interfejs szeregowy - HVSP.

    Polecam wykonać taki układ: https://www.elektroda.pl/rtvforum/topic1570269.html nawet w pająku.

    Jeśli nadal chcesz zrobić to ręcznie, to zobacz tutaj: https://www.elektroda.pl/rtvforum/viewtopic.php?p=8055689#8055689 jest to kod źródłowy tego urządzenia i pomoże w ręcznym odblokowaniu...

    Algorytm wprowadzenia procka w tryb programowania już wkleiłeś...

    Teraz interesuje nas wysłanie fusebajta HIGH w którym znajduje się fusebit RSTDISBL - domyślna jego wartość to FF (11111111 binarnie).
    Wykonujesz to co masz w tabeli 55 "write fuse high bits", instrukcje od 1 do 4.

    Code:

          Sdi_data = &B01000000
          Sii_data = &B01001100
          _send

          Sdi_data = &B11111111 - to jest nasza wartość fuska HIGH
          Sii_data = &B00101100
          _send

          Sdi_data = &B00000000
          Sii_data = &B01110100
          _send

          Sdi_data = &B00000000
          Sii_data = &B01111100
          _send

    Podprogram SEND wygląda tak:
    Wysyła na piny SDI i SII po kolei wszystkie bity zaczynając od najstarszego
    Code:

    Reset Sdi
    Reset Sii
    _clock

    Licznik = 8
    Do

    Decr Licznik
    Sdi = Sdi_data.licznik
    Sii = Sii_data.licznik
    _clock
    Loop Until Licznik = 0

    Reset Sdi
    Reset Sii
    _clock
    _clock

    CLOCK to sygnał zegarowy, wrzuca na pin SCI na chwilkę stan wysoki, wygląda to tak:
    Code:

    Waitus 1
    Set Sci
    Waitus 1
    Reset Sci


    Po wysłaniu ostatniej ramki czekamy na stan wysoki na pine SDO co będzie oznaczało zapisanie fuska.

    Część sprzętowa wyglądałaby tak że piny SDI i SII podciągnięte będą do zasilania rezystorami 1K i zwierane do masy zwyrkami (jumperami)
    Pin SCI ściągnięty do masy rezystorem 1K i zabezpieczony do masy kondensatorem 10nF (drgania styków) a zwierany do zasilania przyciskiem chwilowym. Ustawiasz kolejno wszystkie bity na SDI i SII i zatwierdzasz przyciskiem na SCI.

    Jak widzisz jest to trochę zagmatwane ale możliwe do wykonania ręcznie. Procki z interfejsem równoległym to bajka w porównaniu z tym, tam wystarczy raz ustawić adres i komendę a potem adres i wartość fusków i zrobimy to w praktycznie dwóch krokach
  • #3
    Manio95
    Level 21  
    Niestety nie złożę tego https://www.elektroda.pl/rtvforum/topic1570269.html bo nie mam na razie "dostępu" (pieniędzy) na attiny2313.
    Jeśli dobrze zrozumiałem to mam tylko podłączyć SDI i SII poprzez microswitch do masy i rezystorami 1K do "+" , SCI rezystorem 1k do masy kondensatorem do masy a zwierany do "+" poprzez przycisk chwilowy (właśnie o jaki przycisk chodzi?)

    Quote:
    Po wysłaniu ostatniej ramki czekamy na stan wysoki na pine SDO co będzie oznaczało zapisanie fuska.

    Czyli do SDO można podłączyć diodę aby wiedzieć kiedy to się wykona?

    Nie bardzo rozumiem o co w tym chodzi:
    Quote:
    Ustawiasz kolejno wszystkie bity na SDI i SII i zatwierdzasz przyciskiem na SCI.

    Jeśli mógłbyś napisać jak mam to ustawić (co po kolei naciskać) abym dobrze to zrozumiał.
    Pozdrawiam
    Mariusz
  • #4
    manekinen
    Level 29  
    Tak wygląda hardware do samej zabawy.
    Attiny13 i fusebit RSTDISBL -ręczne odblokowanie.
    Do wprowadzenia w tryb programowania PB0 PB1 oraz PB2 musisz ściągnąć do masy. Dioda na SDO będzie zbędna, zapisanie wykona się tak szybko że nawet nie zauważysz mignięcia.

    Wysłałem Cię do tego fragmentu tabelki:
    Attiny13 i fusebit RSTDISBL -ręczne odblokowanie.
    W moim wcześniejszym poście masz już podstawione wartości FEDCB - to są bity fusków. Jak widzisz przy zapisie linia SDO nas nie interesuje.

    Teraz jumperami SDI i SII ustawiasz stany wysokie lub niskie, wysyłając kolejno wszystkie bity z tabeli.

    Każda ramka w instrukcji wygląda w następujący sposób:
    Przykładowo, pierwsze:
    SDI = 0_0100_0000_00
    SII = 0_0100_1100_00
    Pierwsze bity to zera, więc zakładasz obydwa jumpery ustawiając stany niskie. Klikasz przycisk. Następne to również zera, więc po prostu klikasz przycisk. Kolejne to jedynki, więc zdejmujesz zworki ustawiając stan wysoki i klikasz przycisk. Jedziesz tak aż do końca tabeli - nie myląc się oczywiście :)

    Najpierw oczywiście trzeba wprowadzić procek w tryb programowania tym algorytmem który wkleiłeś wcześniej. Niestety nie będzie wiadomo czy procek poprawnie wszedł w tryb programowania czy też nie, więc całe to wysyłanie danych może być równie wykonane na darmo :(

    Powodzenia i wiele cierpliwości - przyda się :)
  • #5
    Manio95
    Level 21  
    Jeszcze nie rozumiem dwóch rzeczy (jakoś nie umiem tego pojąć).
    Napisał Pan:
    Quote:
    Najpierw oczywiście trzeba wprowadzić procek w tryb programowania tym algorytmem który wkleiłeś wcześniej
    Czyli chodzi Panu o ten algorytm z pierwszego postu. Czytając go prze tłumacza rozumiem go tak:
    1. PB0, PB1 i PB2 podłączyć do 0, reset podłączyć do 0 i VCC do 0V
    2.Następnie zasilić attiny 4,5-5,5V (a czy tamto ma dalej zostać podłączone do 0? bo jak VCC ma być i do 0 i "+" zasilania?) Upewnij się, że Vcc osiągnie co najmniej 1.8V w następne 20μs.-też nie wiem o co tu chodzi?
    3.Odczekać 20 - 60μs i zastosuj 11.5 - 12.5V na RESET
    4. Przechowywać Prog_enable piny bez zmian co najmniej 10μs od wysokiego napięcia ma zostały zastosowane w celu zapewnienia Prog_enable Signature został zamknięta.-też nie bardzo wiem o co chodzi w tym.
    5. Zwolnij Prog_enable [2] pin, aby uniknąć niezgody dysk na Prog_enable [2] / SDO
    6. Odczekaj co najmniej 300μs przed podania numeru seryjnego instrukcje SDI / SII.-i w tym miejscu mam zrobić to co opisałeś?
    7. Wyjście z trybu programowania przez moc urządzenia w dół lub poprzez RESET pin do 0V.(tak przetłumaczyło)

    Nie wiem czy dalsza część jest istotna?

    I jeszcze jedno:
    Quote:
    W moim wcześniejszym poście masz już podstawione wartości FEDCB - to są bity fusków.

    A więc co mam "wstawić" w miejsce tego FEDCB?
    Pozdrawiam i liczę na waszą pomoc.

    Jak wziąłem kod programu to zobaczyłem:
    Quote:

    _init:
    'Set Prog_enable pins listed in Table ## to “000”, RESET pin to “0” and Vcc to 0V
    ' (set low on startup)

    'Apply 4.5 - 5.5V between VCC and GND. Ensure that Vcc reaches at least 1.8V within the next 20µs.
    Reset Pow 'włączany stanem L

    'Wait 20 - 60µs, and apply 11.5 - 12.5V to RESET
    Waitus 40
    Set Res 'włączany stanem H

    'Keep the Prog_enable pins unchanged for at least 10µs after the High-voltage has been applied to ensure the Prog_enable Signature has been latched.
    Waitus 20

    'Release the Prog_enable[2] pin to avoid drive contention on the Prog_enable[2]/SDO pin.
    Reset Portd.5 'reset enable2(t44)
    Ddrd = &B1011111 'enable t44 jako wejście
    Reset Porta.0 'reset enable2(sdo)
    Ddra = &B10 'SDO jako wejście

    'Wait at least 300µs before giving any serial instructions on SDI/SII.
    Waitus 500
    Return

    Czyli wpierw musiałbym podłączyć sii,sdo i sdi do minusa.
    Następnie podłączyć do attiny zasilanie 4,5-5,5V.
    Potem podłączyć na reset 11,5-12,5V i odczekać 20µs
    No i teraz musiałbym odłączyć pin SDO i odczekać 500µs.
    No i miałbym zacząć teraz robić to z tymi bitami. Dobrze to zrozumiałem?
    A od strony technicznej mogło by to być tak:
    Attiny13 i fusebit RSTDISBL -ręczne odblokowanie.
    Dodane dwie zworki-reset do 12V i SDO do masy.
    Ale jeszcze i tak nie wiem co z tym FEDCB.
  • #6
    manekinen
    Level 29  
    Dokładnie tak, tymi czasami w mikrosekundach się nie przejmuj bo choćbyś się zes... to i tak przy ręcznej zabawie takich czasów nie zapewnisz, więc po prostu wykonuj punkty po kolei.

    SDO do masy podepnij przez jakiś opornik 100ohm-1Kohm. SDI i SII normalnie. Zasilanie i reset podłącz jednocześnie, ale tak aby reset nie był jako pierwszy. Odłącz SDO. Wysyłasz calutki ciąg. Ten kondensator 10nF ma zapobiec drganiom styków, ale dla pewności użyj sprawnego przycisku bo efekt może być taki że jedno przyciśnięcie spowoduje wysłanie np dwóch impulsów a wtedy już cały ciąg danych będzie błędny.

    FEDCB to bity fusków, podstawiasz tam wartości takie jakie chcesz zaprogramować do bajta high. Domyślne to stany "1" czyli bity nie zaprogramowane. Tak więc wysłanie w tym miejscu ciągu 11111 przywróci między innymi funkcję resetu na PB5.
  • #7
    Manio95
    Level 21  
    No próbowałem już dwa razy i nic.
    A takie pytanie: Jak się pomylę to czynność mogę potem wykonać jeszcze raz?
    PS.Attiny działa dalej tak jak działała-wiem, bo wsadziłem ją do testu do tego ukałdu w którym pracuje.
    Próbowałem już 7 razy i sprawdzałem miernikiem czy wszystko jest ok i nie udało mi się :( Na pewno się nie mylę w tym aż 7 prób)
    Napisałeś:
    Quote:
    Wysyłasz calutki ciąg
    To znaczy, że mam wysłać całą tą tabelę czy coś innego? Bo ja oczywiście wysyłam całą po kolei.
  • #8
    manekinen
    Level 29  
    To powinno pomóc:
    Attiny13 i fusebit RSTDISBL -ręczne odblokowanie.

    Obrazek reprezentuje wysłanie dwóch bajtów danych (jeden na SDI i jeden na SII, jednocześnie oczywiście). Łącznie przypada 11 sygnałów zegarowych na SCI, pierwszy (0) oraz dwa ostatnie (9 i 10) to te dodatkowe bity 0_0000_0000_00.

    Czyli wysyłając 2x4 bajty, łącznie wychodzi 44 taktów na SCI. No i wysyłasz wszystko ciurkiem.

    Kolejna rzecz, nie jest to udokumentowane, ale podczas wysyłania danych, na SDO są wystawiane jakieś dane zwrotne więc możesz tam podpiąć diodę tak aby się świeciła przy stanie wysokim. Nie jest to także napisane wprost, ale wnioskuję że powinna się ona także zaświecić po przejściu w tryb programowania (proszą nas aby po podaniu 12v na reset, odłączyć pin SDO od masy aby uniknąć konfliktu stanów, więc powinien wystąpić tam stan wysoki).

    Bardziej już nie mogę pomóc, wszystko już masz wyjaśnione.
  • #9
    Manio95
    Level 21  
    Podłączyłem diodę między SDO a masą przez rezystor 100ohm i zobaczyłem, że jak mam podłączone od razu 12V (czyli włączam je razem) to dioda się nie świeci i jak zrobię całą tą tabelę zero efektu.
    Ale jak podłącze 12V trochę po 5V to dioda się zaświeca i raz potrafi świecić cały ten cykl a raz potrafi w różnych momentach po naciśnięciu gasnąć i po ponownym zapalać się (ale to nie, że za każdym naciśnięciem się gasi i zapala tylko czasem) i za każdym razem zapala się i gasi w innym momencie.
    Attiny tak jak zablokowane tak zablokowane dalej i program w niej zawarty działa.
    manekinen wrote:
    To powinno pomóc:
    Attiny13 i fusebit RSTDISBL -ręczne odblokowanie.

    Przyznam się, że nie bardzo rozumiem ten obrazek.
    A mam robić to tak
    Mam założone dwie zworki i klikam, znów klikam, ściągam obie klikam, zakładam obie klikam, klikam, ściągam z sii klikam, klikam, wsadzam na ssi i klikam, klikam, klikam, klikam i tak wszystkie cztery kolumny-bo właśnie tak to robię.

    Chciałem zakupić attiny2313 byłem w wszystkich sklepach w mojej okolicy i nie mają (ani atmegi 8 ) są tylko inne ale za 27zł a jak kupię na allegro to też wyjdzie 20zł :(
  • #10
    manekinen
    Level 29  
    Manio95 wrote:
    Ale jak podłącze 12V trochę po 5V to dioda się zaświeca i raz potrafi świecić cały ten cykl a raz potrafi w różnych momentach po naciśnięciu gasnąć i po ponownym zapalać się

    No i bardzo dobrze, taki sam efekt na SDO miałem przy swoich pierwszych zabawach (badałem to analizatorem stanów logicznych)... po prawidłowym wejściu w tryb programowania na SDO pojawiały się różne stany - co nie jest udokumentowane właśnie.

    Manio95 wrote:
    Mam założone dwie zworki i klikam, znów klikam, ściągam obie klikam, zakładam obie klikam, klikam, ściągam z sii klikam, klikam, wsadzam na ssi i klikam, klikam, klikam, klikam i tak wszystkie cztery kolumny-bo właśnie tak to robię.

    Dobrze. Łącznie ma wyjść 44 "klików". W ten sam sposób robi to "fusebit doctor" tyle że robi to bardzo szybko, a przed tym odczytuje z procka kilka rzeczy - co nie jest wymagane.

    Możesz spróbować dać kilka dodatkowych taktów na SCI przed rozpoczęciem wysyłania. Nic więcej nie poradzę, próbuj :)
  • #11
    Manio95
    Level 21  
    Raz udało mi się zrobić tak, że po zakończeniu wprowadzania bitów i odłączeniu pinu reset dioda zaczęła migać i w tym momencie postanowiłem tak jak pisze w"High-Voltage Serial Programming Algorithm" podłączyć reset do 0 ale jak to nic nie dało to odłączyłem zasilanie i dalej nic. Będę próbować aż do czasu gdy uda mi się zakupić attiny2313 (lub jakiś podobny) no chyba, że mi się wcześniej to uda.
    Dziękuję za pomoc.
  • #12
    manekinen
    Level 29  
    Akurat wychodzenie z trybu programowania nie ma znaczenia, można po prostu odłączyć zasilanie i tyle. Po odłączeniu resetu, prawdopodobnie zaczął wykonywać się program i dioda sobie mrugała w rytm tego co program robił na PB2.

    Możesz się też pobawić w odczyt, np sygnatury. "Read signature bytes" w tabelce. bb oznaczają adres bajtu - 00 to pierwszy bajt który zawsze ma być 1E. W miejscu q_qqqq_qqq otrzymasz osiem bitów pierwszego bajtu sygnatury - zapisuj sobie stany i przekonwertuj BIN>HEX.

    Ewentualnie spróbuj wysłać komendę "chip erase".

    Być może znajdzie się ktoś kto się jeszcze podejmie tej samobójczej metody i mu się uda :)
  • #13
    Manio95
    Level 21  
    manekinen wrote:
    Po odłączeniu resetu, prawdopodobnie zaczął wykonywać się program i dioda sobie mrugała w rytm tego co program robił na PB2.


    Tylko, że jak wykonuje się program to dioda miga w wysoką częstotliwością i słabo a mi zaczęła migać po tym około 1 mignięcie/sek i z "pełną mocą" co może jest trochę dziwnym zjawiskiem.
    Układ tak dla pewności składam od nowa i może teraz mi się uda ją odblokować.
    Mogę też wiedzieć, czy to normalne, że na SCI normalnie z dwoma zworkami jest 0.09V z jedną 0.12V a bez zworek jest 2V?
  • #14
    spirol
    Level 12  
    czy ustawienie taktowania 128000 i podziału przez 8 może zablokować attiny13?
  • #15
    manekinen
    Level 29  
    Manio95 wrote:
    Mogę też wiedzieć, czy to normalne, że na SCI normalnie z dwoma zworkami jest 0.09V z jedną 0.12V a bez zworek jest 2V?

    Ma być 0V, rezystor 1K ściąga pin do masy. Jeśli jest inaczej, to znaczy że pin pracuje jako wyjście - czyt. układ nie jest w rybie programowania. Zmierz też prąd potrzebny do ściągnięcia pinów SII i SDI, powinien być znikomy, do 1mA.
  • #16
    Manio95
    Level 21  
    No niestety ręcznie się nie udało ale zamówiłem już dwie attiny2313 więc zrobię se na pająku tego Attiny fusebit doctor. Napiszę jakie rezultaty.