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

[Rozwiązano] Jak zachowa się AT32 po skoku bootloadera na pusty adres 0x0?

Mirek_1 07 Sty 2024 16:55 231 3
REKLAMA
  • #1 20896386
    Mirek_1
    Poziom 4  
    Witam

    Chciałem się dowiedzieć jak to jest z tym bootloaderem. Mianowice jeżeli wgram kod boodloadera dla at32 powiedzmy pod adres 0x7800 i tam mam aplikację która powoduje załadowanie programu głównego. To gdy wgram tylko bootloader początkową pamięc mam pustą to cz będzie dochodziło do restartu procesora jak po jakimś czasie w boodloaderze zostanie wywołana funkcja skoku pod adres 0x0. Wykona się restart procesora i uruchomie bootloader. Dobrze myślę?
  • REKLAMA
  • Pomocny post
    #2 20896457
    bart-projects
    Poziom 29  
    Procesor za pierwszym razem skoczy pod adres wskazany w FuseBits. To może być 0x00 lub adres gdzie znajdzie Bootloader. To sie ustawia w FuseBits.

    Jesli nie ustawiłeś w FuseBits że ma skoczyć pod adres Bootloadera, ale wgrałeś jego kod to procesor wystartuje od zera, ale szybko przeleci się po pustym flash czyli FFFFFFFFF... i napotka Bootloader.

    Teraz znowu są opcje. Jeśli Bootloader jest takiego typu że ma tylko czekać określoną chwilę na nowy soft a jak go nie ma to procesor ma skoczyć pod adres 0x00 to tam skoczy i znów w koło Macieju przeleci się po pustym flash...

    Są jednak Bootloadery które czekaja na soft w nieskończoność i każą procesorowi skoczyć pod adres 0x00 dopiero jak dostaną soft lub jak stwierdzą że soft istnieje.

    Ogólnie to ustaw Reset Vector na Bootloader i go też wgraj a pustą przestrzenią Aplikacji na razie się nie przejmuj.

    Programatorem mozna też wgrać za jednym zamachem Aplikację właściwą i Bootloader po czym ustawić Boot Reset Vector .... jak widzisz kombinacji jest dużo.

    Należy jeszcze rozgraniczyć jedną rzecz. Skok z Bootloadera pod adres 0x00 nie jest resetem procesora. Jesli Bootloader zmieni jakieś domyslne ustawienia procesora POR (Power On Reset) to one się po skoku pod 0x00 nie zmienią.
  • REKLAMA
  • Pomocny post
    #3 20896563
    tmf
    VIP Zasłużony dla elektroda
    Pusty FLASH ma 0xFFFF, co w AVR odpowiada instrukcji sbrs r31, 7, która w tym przypadku nie szkodzi. Więc tak jak napisał kol. @bart-projects, procesor przeleci przez FLASH i w końcu dojdzie do bootloadera (no chyba, że masz WD po drodze...). Tylko tak się nie robi - co jeśli po poprzednich programach we FLASH będą jakieś śmieci? Możesz ne mieć tyle szczęścia i procesor zacznie wykonywać jakiś dziwny kod lub wpadnie w pętlę, w efekcie nigdy nie trafi do bootloadera.
    Poprawnie należy to rozwiązać tak, że fusebity wskazują na wektor reset w bootloaderze, który jest uruchamiany zawsze jako pierwszy. Jak chcesz odpalić aplikację, to sprawdzasz np. CRC kodu w FLASH, jeśli jest ok, to świadczy, że jest prawidłowy kod aplikacji, więc skaczesz na jej początek, jeśli nie, to czekasz w bootloaderze na nowy wsad.
    Tak BTW, jeśli bootloader modyfikuje sporo rzeczy w MCU, to start aplikacji warto wykonać poprzez reset inicjowany przez WD. Odwrócenie wszystkiego co zmienił kod BL może być pracochłonne, a przede wszystkim jest mało uniwersalne.
  • #4 20899117
    Mirek_1
    Poziom 4  
    jak wyżej
REKLAMA