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

Jak stworzyć szyfrowany bootloader AES dla Atmega16 z notą AVR231?

marcinzaw1 30 Sty 2011 21:35 4542 22
REKLAMA
  • #1 9080418
    marcinzaw1
    Poziom 15  
    Posty: 76
    Pomógł: 16
    Ocena: 1
    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
  • REKLAMA
  • #2 9081536
    JarekC
    Poziom 32  
    Posty: 1508
    Pomógł: 231
    Ocena: 397
    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  
    Posty: 76
    Pomógł: 16
    Ocena: 1
    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ć?
  • REKLAMA
  • #5 9082066
    acid12
    Poziom 21  
    Posty: 388
    Pomógł: 41
    Ocena: 23
    na avr-freaks był temat, ktoś przerobił ten kod pod gcc.
  • REKLAMA
  • #6 9446268
    marcinzaw1
    Poziom 15  
    Posty: 76
    Pomógł: 16
    Ocena: 1
    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
    Posty: 14318
    Pomógł: 2090
    Ocena: 2203
    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  
    Posty: 76
    Pomógł: 16
    Ocena: 1
    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ć?
  • REKLAMA
  • #9 9447084
    hotdog
    Poziom 26  
    Posty: 1106
    Pomógł: 95
    Ocena: 108
    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  
    Posty: 76
    Pomógł: 16
    Ocena: 1
    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  
    Posty: 1106
    Pomógł: 95
    Ocena: 108
    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  
    Posty: 76
    Pomógł: 16
    Ocena: 1
    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  
    Posty: 1106
    Pomógł: 95
    Ocena: 108
    a ustawienia kwarcu się zgadzają z tym co jest wpisane jako bound we funkcjach inicjalizacji uarta?
  • #14 9449621
    marcinzaw1
    Poziom 15  
    Posty: 76
    Pomógł: 16
    Ocena: 1
    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  
    Posty: 1106
    Pomógł: 95
    Ocena: 108
    uart_init lub coś takiego

    wpisywany jest tam do rejestru bound rate obliczony ze wzoru (lub odczytany z tabelki).
  • #16 9449749
    marcinzaw1
    Poziom 15  
    Posty: 76
    Pomógł: 16
    Ocena: 1
    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  
    Posty: 76
    Pomógł: 16
    Ocena: 1
    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  
    Posty: 1106
    Pomógł: 95
    Ocena: 108
    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  
    Posty: 76
    Pomógł: 16
    Ocena: 1
    
    /=============================================================================
    // 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  
    Posty: 1106
    Pomógł: 95
    Ocena: 108
    zapalasz jedną przed funkcją loader, a drugą przed funkcją asm volatile("jmp 0");

    Pozdr.
  • #21 9455018
    marcinzaw1
    Poziom 15  
    Posty: 76
    Pomógł: 16
    Ocena: 1
    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  
    Posty: 76
    Pomógł: 16
    Ocena: 1
    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  
    Posty: 76
    Pomógł: 16
    Ocena: 1
    Witam,
    I dziękuje za pomoc - wprawdzie niewielką ale zawsze coś,
    udało mi się rozgryźć temat bootloadera AVR231 - chętnie służę pomocą.

Podsumowanie tematu

✨ W dyskusji poruszono temat tworzenia szyfrowanego bootloadera AES dla mikrokontrolera Atmega16, korzystając z noty aplikacyjnej AVR231. Użytkownicy dzielili się doświadczeniami związanymi z pozyskiwaniem kodów źródłowych oraz konfiguracją bootloadera. Wskazano, że dostępne są zarówno źródła, jak i skompilowane wersje oprogramowania dla PC. Uczestnicy omawiali również problemy związane z błędami kompilacji, konfiguracją plików oraz ustawieniami kwarcu. Wskazówki dotyczyły m.in. generowania plików konfiguracyjnych, użycia polecenia update oraz integracji bootloadera z aplikacją. Ostatecznie, jeden z uczestników zdołał przesłać zaszyfrowany plik, jednak napotkał problem z resetowaniem Atmegi po zakończeniu transferu.
Wygenerowane przez model językowy.
REKLAMA