Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[attiny2313][FUSEBITS] - Programowanie fusebitow w ATtiny2313

IRFP640 14 Sie 2013 21:29 2127 11
  • #1 14 Sie 2013 21:29
    IRFP640
    Poziom 9  

    Postanowiłem napisać swój własny (choć ciasny) programator dla popularnych procków Attiny i Atmega. Sercem programatora jest obecnie ATmega8 komunikująca się z PC za pośrednictwem FT232R. ATmega8 ma za zadanie zaprogramować uC ATtiny2313. Obecnie wykonuje następujące czynności:
    wchodzi do trybu programowania (echo 0x53 jak w DS)
    odczytuje sygnaturę podłączonego procesora i sprawdza czy ta zgadza się z tą, która powinna się pojawić (programator jest wywoływany z AS6 z argumentem $(SolutionDir) stąd wiem co mam zaprogramować). To działa tzn. kiedy mam w opcjach projektu np. ATmega8 a podłącze Attiny2313 to rozpozna nieprawidłową sygnaturę.
    odczytuje fusebity - wynik taki sam jak z mkAvrCalculator - kiedy za jego pomocą zmieniam fusebity - mój programator reaguje na to i pokazuje te, które tam zapisałem.
    wprowadzenie rozkazu wyczyszczenia pamięci też odnosi skutek.
    Niestety nie mam pojęcia dlaczego nie mogę zapisać nowych fusebitów.
    Mam taki kod:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    bajt1, bajt2, bajt3 to bajty odebrane przez z PC - tą są wartości fusebitów, które mają się pojawić po zapisaniu ich. Niestety po resecie pozostają ciągle stare wartości.
    Konfiguracja spi i funkcja spi_send:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    ATmega8 działa na zewn. kwarcu 11.0592MHz.
    Czegoś nie doczytałem w DS albo nie zrozumiałem?
    Pozdrawiam wszystkich zainteresowanych :wink:

    0 11
  • #2 20 Sie 2013 20:18
    IRFP640
    Poziom 9  

    Tematu nie rozwiązano i już chyba nikt tu nie zajrzy. Czy powinienem zamknąć temat czy moderator go usunie?

    0
  • #3 30 Sie 2013 16:48
    mailmix
    Poziom 9  

    Bajty mógłbyś zapisywać w zewnętrznej pamięci EEPROM. Jak chciałbyś usunąć to kasujesz resetując go :)

    0
  • #4 03 Wrz 2013 17:15
    IRFP640
    Poziom 9  

    Bardziej chodzi o to, że nawet jak zapisze zamiast zmiennej bajt 0xFF to układ w ogóle nie reaguje na ten zapis. Tak, jakby nie chciał przyjąć nowych wartości fusebitów.

    0
  • #5 06 Wrz 2013 14:20
    mailmix
    Poziom 9  

    Spróbuj napisać polecenie, by czyścił ci na początku programu zmienną. Nie znam się jeżeli chodzi o programowanie w C, więc nie umiem Ci dokładnie wytłumaczyć :C
    I jeszcze jedno... Nie wiem czy się da, ale spróbuj ustawić zmienną na zapis i odczyt...

    0
  • #6 06 Wrz 2013 16:39
    IRFP640
    Poziom 9  

    Chyba nie dotarłeś do istoty problemu. Problem leży w gdzieś po stronie programowanego uC. Czy po zapisaniu fusebitów wymusić restart procka? Czy zrobić coś innego, co spowoduje zapisanie w pamięci uC nowych wartości fusebitów? Zmienne bajt1, bajt2 i bajt3 są odbierane z kompa i są takie, jakie mają być. Zresztą, nawet jak wstawię na siłę określone wartości fusebitów to nic się nie dzieje. Wszystko jest po staremu.

    0
  • #7 06 Wrz 2013 17:49
    435758
    Użytkownik usunął konto  
  • #8 07 Wrz 2013 22:48
    IRFP640
    Poziom 9  

    Dziwne pytanie gdyż "wchodzą" inne polecenia typu read fuse, read sygnature bytes, chip erase itd. Ale proszę, oto kod:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    pominięcie funkcji wait (lub zaniżenie tych wartość) faktycznie powodowało problemy z działaniem i uC nie nadawał bajtu 0x53. Jeśli program po stronie PC nie odbierze kodu 0xFE zaprzestaje wysyłania dalszych rozkazów i wywala odpowiedni komunikat.

    0
  • #9 07 Wrz 2013 23:37
    435758
    Użytkownik usunął konto  
  • #10 08 Wrz 2013 01:49
    IRFP640
    Poziom 9  

    Opóźnienia występują w przypadku zapisu flash albo eeprom, po wejściu do trybu programowania czy w funkcjach odczytu ich nie ma/nie znajduję ich. W ogóle w ISP.c nie ma nic o fusach, jest tylko flash i eeprom. Zobaczę jutro co się stanie jeśli jakieś wprowadzę.
    Dzięki za zainteresowanie, mam nadzieje, że w końcu to zacznie działać.
    Pozdrawiam, dobranoc.

    0
  • #11 08 Wrz 2013 07:27
    michalko12
    Specjalista - Mikrokontrolery

    Sprawdź lockbity, jeśli są zaprogramowane to fusebity dadzą się odczytać, ale nie dadzą się zmienić.

    0
  • #12 08 Wrz 2013 12:15
    IRFP640
    Poziom 9  

    Próby przeprowadzam na wyczyszczonej pamięci flash, po wykonaniu chip erase - to powinno wykasować pamięć flash i pamięć lockbitów.

    0