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

Bootloader AVR AES AVR231

marcinzaw1 30 Sty 2011 21:35 4365 22
  • #1 9080418
    marcinzaw1
    Poziom 15  
    Witam,
    Koledzy proszę o podpowiedź jak skorzystać z noty Atmela AVR231 odnośnie stworzenia bootloadera szyfrowanego AES. Przejrzałem notę i nie wiek skąd pobrać kody źródłowe bootloadera i jak się zabrać do stworzenia pliku pod Atmegę16. Może ktoś z Was bawił się już tym bootloaderem.
    Z góry dziękuje za pomoc
  • #2 9081536
    JarekC
    Poziom 32  
    Witam,

    Widzę że ATMEL zmienił wygląd stron i podobnie jak po zmianie w ST nic nie można znaleźć.

    Bezpośredni link do kodów źródłowych do AV231 masz tu:
    Link

    Proces generowania bootlodera jest dokładnie opisany w nocie aplikacyjnej ale kod
    źródłowy i projekt są przygotowane dla kompilatora IAR. Nie wiem czy ktoś to przeniósł na GCC lub WinAVR.

    Drmowe środowisko IAR z ograniczeniem do 4kB można ściągnąć bezpośrednio od IARa.

    Sam AES bootloader sprawuje się bardzo dobrze. Z jedną uwagą: musiałem przekompilować program "Create" gdyż ten gotowy nie działał poprawnie,
    ale teraz już nie pamiętam co szwankowało.

    Pozdrawiam
    JarekC
  • #3 9081815
    marcinzaw1
    Poziom 15  
    Witam,
    dziękuje Kolego za podpowiedź, a powiedz jak wygląda sprawa softu od strony PC-ta, jest może jakiś gotowiec z którego można skorzystać?
  • #5 9082066
    acid12
    Poziom 21  
    na avr-freaks był temat, ktoś przerobił ten kod pod gcc.
  • #6 9446268
    marcinzaw1
    Poziom 15  
    Witam,
    Koledzy muszę odgrzebać ten temat niestety
    staram się zrobić plik konfiguracyjny do bootloader i nie wiem jakie wartości wpisać :
    PAGE_SIZE = [FILL IN: Target AVR page size in bytes]
    MEM_SIZE = [FILL IN: Application Section size in bytes]

    a chcę to skonfigurować pod Atmegę16
  • #7 9446350
    tmf
    VIP Zasłużony dla elektroda
    Musisz z noty katalogowej odczytać wielkość strony pamięci FLASH (w sekcji poświęconej programowaniu znajdziesz tą informację), MEM_SIZE to raczej znasz - 16kB :)
  • #8 9446923
    marcinzaw1
    Poziom 15  
    Witam,
    No masz rację Kolego z tym 16kB -to nie pomyślałem:)
    a w jaki sposób utworzyć pliki aeskeys.inc ? create wywala mi same błędy - jej składni użyć?
  • #9 9447084
    hotdog
    Poziom 26  
    MEM_SIZE musi być pomniejszony o rozmiar bootloadera.

    Wszystko masz napisane w PDF i w pliku readme.

    Cytat:
    PAGE_SIZE = 128
    MEM_SIZE = 14336
  • #10 9447336
    marcinzaw1
    Poziom 15  
    Witam,
    Mam już wygenerowany aeskeys.inc oraz bootldr.h. W jaki sposób użyć polecenia update? co muszę uzyskać używając tego polecenia. I drugie pytanie zaszyforwany plik do czego ma służyć - ten wygenerowany za pomocą create -o
  • #11 9448888
    hotdog
    Poziom 26  
    update to program do update'u softu.

    Najprościej jak potrafie:
    - towrzysz plik XXX.conf
    - używasz go do wygnerowania plików potrzebnych do kompilacji bootloadera (aeskeys.inc i bootldr.h)
    - kompilujesz bootloader, dodwawajc w nim kosmetyczne zmiany jak np przycisk wyzwalania itd.
    - wgrywasz bootloader ustawiając lockibity (wszystko na prohibit poza spm i lpm w sekcji aplikacji)
    - generujesz plik update za pomocą wygenerowanego hexa (flash + oddzielnie ewentualny eeprom) i pliku XXX.conf
    - wgrywasz program za pomocą aplikacji update

    Jak pojawi się nowa wersja to wykonujesz 2 ostatnie kroki.

    Oczywiście na etapie produkcyjnym możesz też całosć skórcić (połączyć bootloader z programem w jeden plik). Wtedy poprostu wgrywasz cały hex + eeprom, ustawiasz fusbity i lockbity masz już wgrany bootloader z docelowym programem.

    W pdf'ie jest naperawdę wszystko opisane na BDB poziomie.
  • #12 9449292
    marcinzaw1
    Poziom 15  
    Witam,
    Panowie utknąłem w martwym punkcie i proszę o pomoc
    Mam już wygenerowany plik zaszyfrowany ,
    podczas kompilacji IAR wyskoczył mi błąd odnośnie WDTCR - wypisuje mi błędy ze w pliku loader.c jest niezdefiniowany WDTCR. Z pliku tego usunąłem fragment do obsługi WDTCR i udało się skompilować plik a w efekcie otrzymałem plik xxx.a90.
    Plik ten wgrałem za pomocą AVR Studio do procka. Po wgraniu diody dołączone do pinów ( teraz już nie pamiętam których - ale to któreś z portu B ) zaczęły pulsować bardzo szybko, po czym po jakimś czasie pulsowanie to ustaje. Jednakże za pomocą komendy update -comx -9600 nie udaje się wgrać zaszyfrowanego pliku - mam komunikat o braku odpowiedzie z układu.

    Proszę o pomoc w którym miejscu może być błąd
    W jaki sposób można scalić bootloadera z plikiem programu i wgrać to na starcie za jednym razem?
  • #13 9449586
    hotdog
    Poziom 26  
    a ustawienia kwarcu się zgadzają z tym co jest wpisane jako bound we funkcjach inicjalizacji uarta?
  • #14 9449621
    marcinzaw1
    Poziom 15  
    witam,
    teraz to niewiem nawet co napisać:)
    a jak to sprawdzić?
    ja pracuję z kwarcem 16MHz- gdzie mam tą wartość ustwić w bootloaderze?
  • #15 9449666
    hotdog
    Poziom 26  
    uart_init lub coś takiego

    wpisywany jest tam do rejestru bound rate obliczony ze wzoru (lub odczytany z tabelki).
  • #16 9449749
    marcinzaw1
    Poziom 15  
    To przetestuję jutro rano
    w tym bootloaderze to się nazywa UBRRL.
    a ten błąd WDTCR w pliku loader.c z czego może wynikać?
  • #17 9450596
    marcinzaw1
    Poziom 15  
    Witam,
    no niestety nic to nie dało
    bootloader nie reaguje na wciskanie przycisku do wyzwalania, jedynie pulsuje diodami podłączonymi do protu B.
    Może nie jest wstanie zresetować się żeby załadować program- czy ten błąd w loader.c może mieć na to wpływ?

    Dodano po 1 [godziny] 18 [minuty]:

    Witam,
    Wgrałem teraz bootloader'a AVR231 ale zrobionego pod gcc i sytuacja jest identyczna. Diody podłączone do portu B pulsują ( wprawdzie wolniej ale pulsują). Czy to normalne że po wgraniu bootloadera te diody pulsują? Czy po wciśnięciu przycisku wyzwalającego powinno zmienić się to pulsowanie? U mnie czy jest wciśnięty czy też nie - nie ma to żadnego znaczenia dla pulsowania diodek.
    Bardzo proszę o pomoc.
  • #18 9450818
    hotdog
    Poziom 26  
    Akurat wyzwalanie i sygnalizacja to są rzeczy zależne od Ciebie. Pokaż najpierw kod z pliku main.

    Zmienia się te rzeczy w zależności od projektu itd. Ja np u Siebie czasami robiłem wyzwalanie przez eeprom (docelowy program ustawiał wartość w eepromie i resetował uC, przy kolejnym starcie bootloader odczytywał bajt z eepromu i go ewentualnie aktywował).

    Przekompilowywanie na GCC to moim zdaniem głupi pomysł.

    Co masz w ogóle do dyspozycji? 2 diody i przycisk? Jak tak to zrób sobie jedną diodą sygnalizację wejścia drugą normalnej pracy.

    Pozdrawiam.
  • #19 9450889
    marcinzaw1
    Poziom 15  
    
    /=============================================================================
    // Copyright (C) 2003 Atmel Corporation
    //
    // File:			bootldr.c
    // Compiler:		IAR Atmel AVR C/EC++ Compiler
    // Output Size:
    // Created:			4-Feb-2003	JP (Atmel Finland)
    // Modified:
    //
    // Support Mail:	avr@atmel.com
    //
    // Description:		Start point of the program execution. Customize this
    //					for your own needs. Currently, if switch SW2 is
    //					pressed during reset, the boot loader is switched to
    //					update mode i.e. ready to receive encrypted frames and
    //					program the contents into flash or eeprom memory.
    //
    //					Before executing the application, the boot loader checks
    //					the condition of the Application Section (if CRC_CHECK is
    //					defined in 'bootldr.h' which is generated using 'create'
    //					tool). If Application Section is not intact, it is not
    //					executed.
    //
    // Other Info:
    //=============================================================================
    
    #include <avr/io.h>
    #include <avr/pgmspace.h>
    #include <util/delay.h>
    
    #include "aesglobal.h"
    #include "bootldr.h"
    #include "loader.h"
    #include "bus.h"
    #include "crc.h"
    
    
    //=============================================================================
    // Starts here!
    //=============================================================================
    
    int main(void)
    {
        // enable pullup - give port time to settle
        set_bit(PORTD, PD2);
    
        busInit();
    
        // Loop forever (loops only if Application Section is damaged)
        for (;;)
        {
            // Key pressed? Yes -> run the loader routine
            if (!(PIND & (1 << PD2)))
            {
                loader();
            }
    
    #if defined(CRC_CHECK)
            // Check that the Application Section contents is undamaged
            // by calculating the CRC of the whole memory.
            {
    			#ifndef RAMPZ
                	uint16_t p = 0x000000;
    			#else
                	uint32_t p = 0x000000;
    			#endif
    
    			uint16_t crc = 0;
    
                do
                {
    			#ifndef RAMPZ
    				crc = CRC(crc, pgm_read_byte(p));
    			#else
                    crc = CRC(crc, pgm_read_byte_far(p));
    			#endif
                }
                while (++p < MEM_SIZE);
    
                // Application Section damaged
                //   -> do not jump to Reset Vector of the Application Section
                if (crc)
                {
                    DDRB = 0xff;
                    for(;;)
                    {
                        PORTB ^= 0xff;
                        _delay_ms(1000);
                    }
                }
            }
    #endif
    
            asm volatile ("jmp 0");
        }
    }
    

    tak wygląda ten plik
    a jak zrobić żeby dwie diody sygnalizowały poszczególne stany- czyli pracy i boota?
  • #20 9452549
    hotdog
    Poziom 26  
    zapalasz jedną przed funkcją loader, a drugą przed funkcją asm volatile("jmp 0");

    Pozdr.
  • #21 9455018
    marcinzaw1
    Poziom 15  
    Witam,
    Kolego nie jestem zbyt biegły w jeżyku C,
    jak możesz to powiedz mi jak to zrobić w powyższym listingu - może dopiszesz mi to na tamtym listingu,
    A na podstawie tego listingu diody dołączone do portu B- co takiego sygnalizują?
    Z góry dziękuje
  • #22 9461162
    marcinzaw1
    Poziom 15  
    Witam,
    Udało mi się zmusić bootlader żeby za pomocą narzędzia update zostały przesłany zaszyfrowany plik. Transfer przebiega do końca i jest zakończony powodzeniem. Jednakże po kilku sekundach atmega się resetu i nie ma w sobie zapisanego pliku z programem. Co może być źle jeszcze ustawione?
  • #23 9467864
    marcinzaw1
    Poziom 15  
    Witam,
    I dziękuje za pomoc - wprawdzie niewielką ale zawsze coś,
    udało mi się rozgryźć temat bootloadera AVR231 - chętnie służę pomocą.
REKLAMA