Użycie AVR Studio do kompilacji AVRUB 1. Utwórz nowy folder, skopiuj wszystkie pliki z avrub do niego. 2. Otwórz AVR Studio, utwórz nowy projekt, dodaj plik bootldr.c do grupy "Source Files". 3. Otwórz plik "bootcfg.h", zmodyfikuj parametry, zapisz plik po zmianach. 4. Naciśnij przycisk na toolbarze, otwórz okno opcji projektu. 5. Wybierz docelowy mikrokontroler;
6. W zakładce ustawień pamięci, dodaj segment Flash I nazwij go '.text'. Adres segmentu jest obliczany w słowach 2-bajtowych. 7. Naciśnij przycisk na toolbarze, skompiluj projekt. 8. Jeżeli kompilacja się powiedzie, otwórz programator, np.: avrisp, wgraj bootloader do mikrokontrolera; 9. Ustaw fuse bits;
10. Ustaw lockbits jeżeli to potrzebne. Możesz ustawić fuse i lockbits zgodnie z zaleceniami w nocie aplikacyjnej "AVR231: AES bootloader". 11. Uruchom avrubd.exe;
12. Otwórz skompilowany project (HEX lub bin); 13. Kliknij przycisk na toolbarze, ustaw opcje programu; 14. Ustaw opcje pliku bootcfg.h;
15. Jeżeli nie jesteś pewien, jak ustawić te parametry, kliknij aby importować plik "bootcfg.h", który ma predefiniowane wartości; 16. Teraz możesz przetestować bootloader. Naciśnij i nagrywanie rozpocznie się. Sprawdź połączenie komunikacyjne Zanim zaczniesz używać bootloader, powinieneś sprawdzić połączenie szeregowe. Jeżeli będą problemy, bootloader nie uruchomi się. W folderze avrub znajduje się plik test.c. Jest on używany do testowania połączenia szeregowego. Zanim skompilujesz test.c, powinieneś ustawić parametry w testcfg.h, np.: F_CPU i BAUDRATE, takie same, jak w bootcfg.h. Teraz możesz skompilować test.c i zaprogramować nim mikrokontroler AVR. Uruchom Hyper Terminal w Windows, jeżeli komunikacja jest poprawna, w oknie terminala zobaczysz znaki '>'. Jeżeli naciśniesz dowolny klawisz, odbierany znak zmieni się na taki sam. Jeżeli Hyper Terminal nie odbiera niczego, oznacza to błędy w odbiorczej części układu. Jeżeli naciskasz dowolny klawisz, ale odbierany znak się nie zmienia, oznacza to, że nadawcza część układu nie działa poprawnie.
Użycie aurubd do ładowania plików 1. Uruchom avrubd. 2. Załaduj skompilowany plik (hex/bin). 3. Naciśnij przycisk, ustaw parametry
Connect key musi być taki sam, jak w bootcfg.h 4. Kliknij przycisk I ładowanie pliku się rozpocznie. AVRUBD wyśle connect key aby ustanowić połączenie.
5. Gdy mikrokontroler odbierze poprawnie connect key, odpowie echem sygnału. Następnie dane z bufora przesłane zostaną do mikrokontrolera protokołem X-Modem. 6. Po załadowaniu, mikrokontroler przejdzie do wykonywania kodu użytkownika. Użycie funkcji autocode do generacji bootcfg.h Aby umożliwić poprawną pracę bootloadera, należy poprawnie skonfigurować parametry w bootcfg.h. Dla początkującego może to być trudne. Najłatwiejszą drogą do poprawnego skonfigurowania parametrów jest użycie funkcji autocode. Kliknij przycisk i uruchomisz funkcję autocode. Są w niej dwie zakładki: General i Key. Zakładka General zawiera większość parametrów, zakładka Key zawiera parametry klucza.
AVRUBD używa interfejsu graficznego do konfiguracji parametrów. Po ustawieniu wszystkich parametrów użyj przycisku: Reset wszystkich parametrów do wartości domyślnych. Zalecane parametry. Zestaw parametrów dla hyperterm. Parametry dla najmniejszego rozmiaru kodu. Wyjście z funkcji autocode. Użycie wybranych parametrów do utworzenia pliku bootcfg.h. Jednocześnie utworzony zostanie plik avrub.bat, można go użyć do kompilacji avrub bez konieczności użycia makefile. Parametry RS485/RS422 LEDEn WDGEn ChipCheck Verbose Decrypt Zaznacz, jeżeli używasz trybu RS485/RS422. Użycie LED do wskazywania stanu bootloadera. Zezwolenie na watch dog. Weryfikacja danych po zaprogramowaniu flasha. Wyświetlanie komunikatu użytkownika. Deszyfruj bufor danych przed zapisem do flasha. MCU type Typ mikrokontrolera AVR. Wybierz taki, jakiego używasz. Boot sector address zależy od typu AVR. Każdy mikrokontroler BootStart AVR ma dwa fuse bits do ustawienia rozmiaru boot sektora. Niektóre programy liczą go w słowach dwubajtowych, inne w bajtach, należy zachować czujność. F_CPU Częstotliwość zegara taktującego. (w Hz) BaudRate Szybkość portu UART. COMPORTNo Numer portu UART, może być 0/1/2/3. Rozmiar bufora danych. Standardowy protokół X-Modem używa BUFFERSIZE bufora 128 bajtowego. Avrubd pozwala wybrać dowolną wartość dla różnych aplikacji. timeclk Bazowy okres czasu. Po każdym jego upływie AVRUB sprawdza connect key. TimeOutCnt Każdy impuls timeclk generuje zdarzenie timeout (<=255). Największe opóźnienie wynosi timeclk * TimeOutCnt(ms). TimeOutCntC Największe dopuszczalne opóźnienie przy odbiorze danych (<=255) InitDelay Początkowe opóźnienie po inicjalizacji UART (niektóre starsze mikrokontrolery AVR tego potrzebują)
LEVELMODE CRCMODE Algorithm ConnectKey EncryptKey DecryptKey Bootloader trigger mode: IO pin level or uart connect key. Metoda liczenia sumy kontrolnej CRC (XMODEM CRC lub proste sumowanie) Algorytm szyfrowania, deszyfrowania. AVRUBD wysyła ConnectKey próbując nawiązać połączenie z mikrokontrolerem. Connectkey składa się z dwucyfrowych liczb szesnastkowych rozdzielonych spacją. Ten klucz jest używany przez AVRUBD do zaszyfrowania kodu. Jeżeli zaznaczyłeś opcję szyfrowania, powinieneś zaszyfrować kod przed zaprogramowaniem nim mikrokontrolera. Ten klucz jest używany przez AVRUBD do deszyfrowania kodu w buforze przed zapisaniem go do pamięci Flash mikrokontrolera. - zalecane zaznaczenie Użycie funkcji szyfrowania W wielu przypadkach szyfrujemy pliki wynikowe, by chronić nasz produkt. W nocie aplikacyjnej Atmela AVR231 opisano, jak używać algorytmu AES w bootloaderze. Jest to skuteczna, ale trudna dla początkujących metoda, dlatego została wbudowana w AVRUBD. AVRUBD wykorzystuje algorytmy PC1 i AES: AES (Rijndael) jest szeroko znany z wysokiego poziomu bezpieczeństwa i dlatego szeroko stosowany. PC1 (Pukall Cipher 1) jest prostym i łatwym w implementacji algorytmem, zajmuje niewiele pamięci RAM i ROM, jest szybki. Więcej o nim przeczytasz w http://membres.lycos.fr/pc1/. Moduł szyfrowania PC1 pochodzi z http://membres.lycos.fr/pc1/, AES z noty Atmela AVR231. Oba zostały zoptymalizowane dla GCC i 8 bitowych kontrolrrów AVR do uzyskania najmniejszego rozmiaru kodu. Tu jest porównanie zoptymalizowanego kodu AES i kodu z VR231, możesz sprawdzić w AVRStudio czas implementacji, rozmiar kodu i rezultaty działania. Przed zaszyfrowaniem kodu powinieneś wybrać algorytm oraz wpisać klucz szyfrowania w "AutoCode". Algorytm i klucz szyfrowania nuszą być takie same, jakich używa AVRUB.
Po wybraniu algorytmu szyfrowania i pary kluczy EncryptKey/DecryptKey(w PC1 i AES, EncryptKey jest taki sam, jak DecryptKey), możesz zaszyfrować bufor używając przycisku i deszyfrować używając przycisku. Po zaszyfrowaniu, możesz załadować plik do mikrokontrolera, możesz także zapisać go do pliku i dać użytkownikowi bez obawy, że go zdekoduje i pozna sekrety Twojego kodu. Ze względów bezpieczeństwa AVRUBD nie zapisuje ani EncryptKey ani DecryptKey. Każdorazowo po uruchomieniu AVRUBD należy je wpisać ponownie. Trzeba więc przechowywać oba klucze w bezpiecznym miejscu.