ATMEGA16, problem ze startem, fuse BOOTRST

Feb 02, 2005 7 Replies

Witam wszystkich!



_Sprzęt_:



- urządzenie oparte na ATMEGA16,



- program napisany w WINAVR,



- programator ISPCABLE II firmy Propox - pracowałem na dedykowanym software Propox'u (ProprogRS 1.1g) i AVRStudio (ISPCABLE pracuje wtedy jako emulacja AVRProg).



_Problem_: Po załadowaniu do nowego urządzenia program nie startuje. Czasem po wielu próbach zmian fuse'ów udaje się przestawić procesor w taki stan, że zaczyna działać poprawnie - tzn. program startuje i realizuje wszystkie funkcje.



Procesor od tego momentu już działa ("na zawsze") - tzn. uruchamia poprawnie program, po skasowaniu flash'a i ponownym załadowaniu wszystko jest OK.



Niestety problem powtarza się z "dziewiczym" procesorem. Trzeba wykonać parę "magiczych" zmian w fusach i czasem to pomaga a czasem nie.



Procesor działa z zewnętrznym kwarcem, nie używam BOOT'a, używam Brown-Out'a. Sygnał zegarowy na oscylku jest Ok. Kwarc 16MHz, procesor ATMEGA16-16I - czyli też nie jest to przetaktowanie.



_Uwagi_: Mam podejrzenie, że chodzi o fuse BOOTRST, najczęściej przy manipulacjach przy tym bicie procesor "rusza".



Tylko, że wg. datasheta Atmela ten bit jest "not programmed" w nowych procesorach co znaczy "startuj od adresu 0, nie używamy boot'a" wiec to raczej nie jest przyczyną.



Jak myślicie gdzie jest przyczyna takiego zachowania?



P.S. Wiem, że w oprogramowaniu Propox'a jest błąd - nie programuje dobrze tego fuse'a - czekam na upgrade, może to być przyczyna. Ale może coś jeszcze...


Sprawdź w innym programie, np PonyProg, bedziesz wiedział czy to wina softu.

Niestety PonyProg nie obsluguje ProProg'a (chyba, że nie mogę znaleźć) a tylko takiego symuluje ISPCABLE:(.

Jak na razie nie chciałbym wykonywać zmian sprzętowych aby podłączyć piny ISP bezpośrednio do komputera (bo ISPCABLE ma być standardowym programatorem na produkcji), oczywiście jeśli nie rozwiążę problemu trzeba będzie to zrobić

Dzięki za odpowiedź.

Do¶æ rado¶nie do tego podchodzisz ;-) Ja do fuse-bitów podchodzê jak do je¿a, co i tak nie uchroni³o mnie od gar¶ci zablokowanych procesorów czekaj±cych lepsze czasy. :-( Od czasu gdy u¿ywam tylko jednego programu obs³uguj±cego programator (akurat u mnie wbudowanego w kompilator C) przesta³em marnowaæ procesory. TG

W ATMEGA16 nie ma aż tak dużo fuse-ów, przy pierwszych próbach robiłem to uważnie, nie skutkowało. W końcu podszedłem metodą "brute-force" - zadziałało, ale niestety nie ma reguły.

Nowa informacja: jesli zostawię włączone urządzenie to po pewnym czasie ~5 minut program "wskakuje", działa dobrze do następnego restetu. Sugerowałoby to, że po starcie procesor uruchamia program od któregoś z adresów BOOT'owych gdzie nie ma BOOT'a tylko część programu, tam wskakuje w jakąś niezamierzoną pętlę, po której skończeniu wraca do adresu "0" gdzie jest początek programu handlowego. Co sugeruje, że rzeczywiście jest problem z fuse'm BOOTRST

Pewnego dnia Paweł Sklarow przemówił ludzkim głosem:

Na stronie propoxu w dziale download jest link do ponyproga, więc powinien on obsłużyć ten programator. Zdejmij obudowę i zobacz co jest w środku. Jeśli jakiś bufor w stylu 244, 245 itp. to jest to pewnie klon stk200/300.

_jak_ _zwykle_ okazało się, że błąd jest w programie. Przy starcie program odczytuje konfiguracje z zewnętrznego EEPROM'a i jesli są w tym eepromie wartości fabryczne to czytanie konfiguracji trwa bardzo długo, co sugeruje, że procesor nie działa. Tymczasem on sobie czyta tą p* konfigurację. Dziękuje za wsparcie.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required