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

[ATMega8][ASM] Bootloader

01 Lut 2010 14:09 4998 15
  • Poziom 14  
    Witam

    W załączniku bootloader z programem na PC.

    Obecnie obsługuje ATMega8 (sprawdzone), ATMega16, ATMega32 i ATMega64

    Aby go wykorzystać należy pozmieniać w pliku bootloader.asm ustawienia dotyczące zegara, dla wewnętrznego oscylatora wskazane jest wpisanie bajtu kalibracji, portu USART itp, oraz przekompilować go i wgrać.
    Trzeba uruchomić program, dać Wykryj, zrestartować mikrokontroler, wczytać pliki i można programować. Po operacji wyjść z bootloadera i program powinien działać.
  • Poziom 38  
    Jakim załączniku?

    Dodano po 6 [minuty]:

    0xff był chyba traktowany jako NOP, patrzyłeś jak to jest w "fabrycznych" bootloaderach z Atmela?:)
  • Poziom 42  
    skok do właściwego programu? - użyj watchdoga i masz przejście do programu głównego w wersji "miodzio"
  • Poziom 14  
    Nop ma opcode 0x0000, więc raczej nie pomija instrukcji, w liście instrukcji nie znalazłem takiej z 0xFFFF, więc może ją jako reset traktuje

    Czy przy ustawionym FUSEBIT'ie BOOTRST mi nie skoczy ponownie do bootloader'a ?

    A i mam pytanie czy jeśli wywołam bootloader z poziomu programu (jeśli jest taka możliwość), to czy będzie on miał dostęp do SPM ?
  • Poziom 42  
    No tak oczywiście się walnąłem, jak najbardziej wyjście z Bootloadera do programu głównego trza by było zrobić tak:

    Code:
                "clr r30"
    
                "clr r31"
                "ijmp"


    natomiast watchdoga właśnie użyć do tego aby z programu głównego odpalić bootloader ;) sorki
  • Moderator Mikrokontrolery Projektowanie
    No jak, oczywiscie z bootloadera wyjscie lepiej zrealizowac za pomoca watchdoga. To przeciez aplikacja oczekuje, ze procesor bedzie zainicjowany jak po resecie, a nie bootloader. Bootloader normalnie wywoluje sie z programu, ew. stosuje sie rozwiazanie, ze po resecie procesor sprawdza jakis sygnal i wchodzi do bootloadera lub aplikacji. Wiecej na ten temat w zalaczniku (gdzies jest to w necie, ale zgubilem link). A 0xFFFF to efektywnie opcode NOP.
  • Poziom 42  
    tmf napisał:
    No jak, oczywiscie z bootloadera wyjscie lepiej zrealizowac za pomoca watchdoga. To przeciez aplikacja oczekuje, ze procesor bedzie zainicjowany jak po resecie, a nie bootloader. Bootloader normalnie wywoluje sie z programu, ew. stosuje sie rozwiazanie, ze po resecie procesor sprawdza jakis sygnal i wchodzi do bootloadera lub aplikacji. .


    tak można zrobić ale to nie jest najlepsze rozwiązanie i masz nawet to napisane w tym twoim PDF'ie który podałeś.

    Najkorzystniej jest zrobić tak, żeby wcale nie aplikacja pierwsza startowała tylko właśnie Bootloader po resecie systemu. W tym celu trzeba (warto) zaprogramować Fusebit BootRST . W takiej więc sytuacji użycie watchdoga nic nie da bo po resecie znowu odpali się bootloader.

    Dlaczego lepiej tak? bo nawet jeśli w trakcie ładowania wsadu nastąpi jakiś nieprzewidziany CRASH to zawsze ładnie po resecie odpali się bootloader, który znowu będzie mógł podjąć próbę wgrania właściwego wsadu

    A gdyby robić tak jak ty mówisz to będzie wielka kiszka w przypadku awarii podczas ładowania wsadu przez bootloader.
  • Moderator Mikrokontrolery Projektowanie
    Czy bedzie kiszka czy nie to zalezy jak program/bootloader sa napisane. Opcji jest wiele, co zreszta w tym pdfie jest opisane, wystarczy tylko chciec przeczytac ze zrozumieniem. Startowanie od bootloadera za kazdym razem ma pewne wady, ale nie bede sie powtarzal - wszystko jest ladnie opisane w tym tutorialu.
  • Poziom 14  
    Obecnie zrobiłem bootloader "cichym", czekającym 1s (konfigurowalne w źródle) i jeśli nie otrzyma instrukcji to przechodzi do programu głównego.

    Znalazłby się ktoś chętny do napisania współpracującego z tym programu ? :)
  • Poziom 14  
    Jest tylko jedno ale ten program powyżej 512B programu jest płatny, a ja myślałem o czymś za free, poza tym ten bootloader można upchnąć w 238B (odczyt + zapis Flash), albo w 366B (odczyt i zapis FLASH, EEPROM + zapis LockBit'ów) lub wiele innych kombinacji (wybierane #define ... 0 (wyłączone) lub #define ... 0x.. (włączone).

    Chcący dopasować się do tamtego programu kod musiałby się rozrosnąć

    Przy pisaniu programu na PC utknąłem na tym, że mi blue-screen'a wyrzuca gdy chcę coś odebrać z RS'a (niewiem czy to wina przejściówki OTI - z kabla do komórki), czy tego że chcę odebrać Stringa, w każdym bądź razie jeszcze powalczę z programem, jak mi zdenerwowanie kolejnymi restartami PC przejdzie.
  • Moderator Mikrokontrolery Projektowanie
    To byś potrzebował cały manual jak to zrobić - tematu nie da się opisać w paru zdaniach. Więc albo żmudne googlanie, albo inwestycja w literaturę. Inna sprawa to, że jeśli zadajesz takie pytanie to może pakowanie się w bootloader to nie najlepszy pomysł? Ew.kup procek w zgranym bootloaderem, np. firmowym Atmela. Do tego masz darmowy FLIP do wgrywania programu.
  • Moderator Mikrokontrolery Projektowanie
    Nie, tylko niektóre nowe AVR, zwykle posiadające USB. ATMega8 to już i tak zabytek i warto o nim zapomnieć.
  • Poziom 12  
    Jak znajdę czas (studia) to zacznę pisać program do wrzucenia hex-a, chyba, że program już jest napisany... to bym go chciał przeportować do Javy :)
    Nie wiem czy będzię to wadą, ale programuje w Javie i tylko w tym języku będę mógł się na ten temat wypowiedzieć...

    tmf napisał:
    ATMega8 to już i tak zabytek i warto o nim zapomnieć.


    Ja na studiach poznaje dopiero '51 i wykładowca się nad tym tak rozczula jakie to jest genialne i zatrzymał się na latach '80 z technologią. Gdyby mnie to nie interesowało to z rdzeniem AVR nie miałbym teoretycznie styczności.