Samoprogramowanie AVR cz.1. Opis gotowego bootloadera

Samoprogramowanie AVR cz.1. Opis gotowego bootloadera
Pobierz PDF Download icon
Konstruktorom i elektronikom zajmującym się systemami embedded bardzo dobrze znane są zalety stosowania specjalnych programów startowych, tzw. bootloaderów. Dzięki nim można w prosty sposób zbudować mechanizm zdalnej aktualizacji oprogramowania, bez konieczności podłączania programatora. W przeszłości pisaliśmy w EP na temat bootloaderów przeznaczonych dla mikrokontrolerów AVR. W związku z bardzo dużym zainteresowaniem tym tematem oraz ogromną popularnością mikrokontrolerów ATmega, zdecydowaliśmy się opisać ciekawe rozwiązania bootloaderów.
108 ELEKTRONIKA PRAKTYCZNA 11/2009 notatnik konstruktora można zmontować w postaci tzw. pająka. Do kompilacji programu zastosujemy program ICCAVR, którego wersję demonstracyjną można ściągnąć ze strony http://www.image- craft.com. Jest ona wystarczająca na potrzeby tego artykułu. Program MegaLoad oraz pliki bootloadera możemy pobrać ze strony auto- ra, tj. http://www.microsyl.com. Konfiguracja i kompilacja bootloadera Pierwszym krokiem jest wybór możli- wości bootloadera, czyli czy wystarcza nam tylko programowanie pamięci programu, czy też potrzeba, aby mógł on również za- programować wewnętrzną pamięć EEPROM i  bezpieczniki BLB (Boot Lock Bits). Funk- cja programowania EEPROM wiąże się ze zwiększeniem rozmiaru programu, a  co za tym idzie, innych ustawień bezpieczników decydujących o  wielkości pamięci poświę- conej na bootloader, czyli sekcji BLS (z 256 na 512 słowa). W artykule będzie zaprezen- towana opcja z możliwością programowania pamięci Flash, EEPROM oraz bezpieczników BLB, czyli wszystkiego, co oferuje program MegaLoad. Program bootloadera możemy skompi- lować, gdy mamy zainstalowany kompilator ICC, program MegaLoad oraz rozpakowany Konstruktorom i  elektronikom zajmującym się systemami embedded bardzo dobrze znane są zalety stosowania specjalnych programów startowych, tzw. bootloaderów. Dzięki nim można w  prosty sposób zbudować mechanizm zdalnej aktualizacji oprogramowania, bez konieczności podłączania programatora. W  przeszłości pisaliśmy w  EP na temat bootloaderów przeznaczonych dla mikrokontrolerów AVR. W  związku z  bardzo dużym zainteresowaniem tym tematem oraz ogromną popularnością mikrokontrolerów ATmega, zdecydowaliśmy się opisać ciekawe rozwiązania bootloaderów. Samoprogramowanie AVR (1) Opis gotowego bootloadera Zaczynamy Program bootloadera  komunikuje się z komputerem za pomocą portu szeregowego (istnieje również możliwość wykorzystania interfejsu RS485). Na potrzeby tego artykułu zbudowano prostą aplikację, której schemat pokazano na rys.  1. Wykorzystano w  niej mikrokontroler ATmega32, a  do konwersji poziomów popularny MAX232. Dzięki temu prostemu układowi można przetestować boo- tloader. Do uruchomienia będzie potrzebny do- wolny programator procesorów AVR, np. Po- nyProg, który jest prosty w budowie, a opro- gramowanie i schemat można za darmo ścią- gnąć ze strony http://www.lancos.com/prog. html. Jedyne, co trzeba zakupić, to części; nie trzeba nawet wykonywać płytki ? układ W  Internecie można znaleźć kilka dar- mowych propozycji gotowego programu do samoprogramowania mikrokontrolerów AVR. Interesującą propozycją jest program MegaLoad, który obsługuje prawie każdy mi- krokontroler z rodziny ATmega. Dodatkowo, jest on prosty w  konfiguracji. Kolejną jego zaletą jest to, że program obsługi napisano w C#.NET, co zapewnia jego względnie ła- twą migrację pomiędzy różnymi systemami. Drugą interesującą propozycją jest program napisany przez inżynierów Atmela. Do jego atutów można zaliczyć to, że bootloader jest obsługiwany z poziomu AVR Studio. Na po- czątku zajmiemy się MegaLoadem, gdyż jest najbardziej uniwersalnym rozwiązaniem. W kolejnej części cyklu opiszemy bootloader zgodnym z notą aplikacyjną AVR109. 109ELEKTRONIKA PRAKTYCZNA 11/2009 Samoprogramowanie AVR (ze strony ściągamy w postaci archiwum zip) kod źródłowy bootloadera. Po uruchomieniu ICC, otwieramy projekt (wybieramy z menu Project?>Open) BootLoad.prj. Znajdziemy go oczywiście w  katalogu, do którego roz- pakowaliśmy kod źródłowy. Po prawej stro- nie otwartego okna ukazują się pliki, które wchodzą w skład projektu; klikamy dwa razy na plik main.c, co spowoduje otwarcie go do edycji. Teraz można rozpocząć konfigurację. Na początek w  MCU selection ustawiamy dla jakiego typu procesora ma być skompilowa- ny bootloader. Robimy to poprzez usunięcie znaku komentarza ?//? przed odpowiednią nazwą typu mikrokontrolera (w  naszym przypadku #define MEGATYPE 32). Jed- nocześnie należy pamiętać, aby dodać ?//? przed wszystkimi innymi nazwami typów, gdyż inaczej przy kompilacji zostanie zgło- szony błąd. W sekcji MCU Frequency należy wpisać wartość częstotliwości oscylatora w Hz, którego używa się do taktowania mi- krokontrolera (np. dla kwarcu 8 MHz, #de- fine XTAL 8000000). Teraz w sekcji Bootload on UART x trzeba wybrać, z  którego portu szeregowego ma korzystać mikrokontroler do komunikacji z  komputerem. Jeśli proce- sor ma tylko jeden port USART, to wybór jest oczywisty: #define UART 0. Tak też jest w  przypadku ATmegi32. Gdy mikrokontro- ler ma więcej portów, wtedy można wybrać, z którego ma korzystać program. Postępuje- my tak samo jak wcześniej, kasując ?//? przed wybranym portem, a  wstawiając ?//? przed pozostałymi. W  kolejnej sekcji o  nazwie BaudRate ustawia się prędkość transmisji danych. Podaje się ją w bodach, czyli bitach/ sekundę (np. #define BAUDRATE 9600). Te- raz w sekcji EEPROM programming zaznacza się, czy bootloader ma mieć możliwość pro- gramowania wewnętrznej pamięci EEPROM, co jak już wcześniej wspomniałem, wiąże się z  większym zapotrzebowaniem na pamięć programu. W sekcji LockBit programming decyduje- my, czy potrzebna jest nam możliwość pro- gramowania bezpieczników. Zamiast interfejsu RS232 MegaLoad może używać do komunikacji RS485 half duplex. Jeśli chcemy skorzystać z tej opcji, to wyłączamy RS232 i konfigurujemy sekcję RS485. Zostało jeszcze tylko otwarcie pliku assembly.s i  wstawienie 1 przy nazwie mi- krokontrolera, dla którego ma być skompilo- wany bootloader (przy innych musi być 0!). Po zapisaniu zmian można przejść do kom- pilacji. Należy zacząć od konfiguracji kompi- latora, to znaczy wyboru procesora, dla którego kompilowany jest program oraz że plik wynikowy będzie używany jako boot- loader. Trzeba też podać wielkość sekcji BSL. Dokonuje się tego, wybierając z  menu Pro- ject?>Options... Po otwarciu nowego okna w zakładce Target wybieramy procesor, a na dole w polu Program type zaznaczamy Boot Loader i wybieramy Boot size, czyli wielkość sekcji BSL. Tak jak wspomniano wcześniej, ustawiamy 256 Words w przypadku bez pro- gramowania EEPROM, a z jego programowa- niem ? 512 Words. Na rys. 2 pokazano przy- kładowy wygląd ekranu konfiguracji. Po tych czynnościach można już skom- pilować projekt, naciskając ikonkę Project Build lub F9 . Jeśli wszystko zostało wykona- ne poprawnie, to kompilacja powinna zakoń- czyć się sukcesem. Programowanie procesora Czas najwyższy na to, żeby zaprogramo- wać procesor. Zastosujemy do tego progra- mator PonyProg, ale schemat postępowania jest oczywiście taki sam dla każdego progra- matora. Zaczynamy od ustawienia bezpiecz- ników. Sposoby na wywoływanie bootloade- ra są dwa: albo z  programu aplikacyjnego, albo podczas restartu procesora. W przykła- dzie skorzystamy z drugiej opcji. W tym celu należy ustawić odpowiednie bezpieczniki BOOTSZx. Ich kombinacja jest uzależniona od typu procesora oraz od wielkości BSL, jaką, potrzebujemy (kombinacje znajdziemy w  dokumentacji procesora) oraz jeśli chce- my, by po resecie startował program bootlo- adera, to ustawiamy bezpiecznik BOOTRST. Dla przykładowego układu będziemy potrze- bowali BSL o wielkości 512 słowa, co odpo- wiada konfiguracji BOOTsz1 = 1, BOOTSZ0 = 0. Ustawienia bezpieczników przedstawia rys.? 3. Po zaznaczeniu odpowiednich bez- pieczników naciskamy przycisk Write, w ten sposób zapisują się nasze ustawienia do procesora. Teraz trzeba załadować program bootloadera. Zaczynamy od otwarcia skom- pilowanego wcześniej bootloadera, wybie- ramy z menu File?>Open Program (FLASH) File... i otwieramy plik BootLoad.hex. Musi- my także wybrać typ mikrokontrolera, który chcemy zaprogramować. Dokonujemy tego w menu Device, a następnie programuje jego pamięć Flash poprzez wybranie z  menu Command?>Write Program (FLASH). Pamięć programu powinna zostać zaprogramowana, a następnie zweryfikowana. Na rys. 4 przed- stawiono programowanie procesora z  przy- kładu. Jeśli wszystko pójdzie bez przeszkód, to przechodzimy do ostatniego i moim zda- niem najprzyjemniejszego etapu, w  którym będziemy mogli zobaczyć efekt naszej pracy. Programowanie Ostatnim etapem będzie podłączenie do komputera układu i  zaprogramowanie mi- krokontrolera (sekcji aplikacji). Uruchamia- my program MegaLoad i podłączamy układ poprzez port com. Po uruchomieniu progra- mu wyświetlane jest okienko jak na rys. 5. Rys. 1. Rys. 2. Rys. 3. 110 ELEKTRONIKA PRAKTYCZNA 11/2009 notatnik konstruktora Interfejs programu jest przejrzysty i czytelny, więc z jego obsługą nie powinno być proble- mów. Wybieramy port, do którego jest podłą- czony nasz procesor i z jaką prędkością ma się odbyć transmisja (koniecznie taka sama, jak zostało ustawione podczas konfiguracji). Następnie wybieramy plik, w  którym jest skompilowany program (w  sekcji File to be programed in the Flash, klikamy przycisk Open) oraz jeśli chcemy zaprogramować EEPROM, to musimy wskazać plik (w sekcji File to be programed in the EEPROM, klika- my przycisk Open), w którym jest zawartość EEPROM. Teraz jeśli chcemy, wybieramy ustawienia bezpieczników (tylko ostrożnie), robimy to w  sekcji BootLoader Lock Bits to be programed (znaczenia poszczególnych ustawień bitów omawiałem w  poprzednim artykule). Po dokonaniu tych czynności zosta- je nam tylko zresetowanie procesora, co po- winno rozpocząć proces programowania. Jeśli wszystko przebiegło bez kłopotów, to wgrany program powinien działać od razu, jednak jeśliby się tak nie stało, może pomóc naci- śnięcie przycisku Send reset w  sekcji Com- mand lub odłączenie zasilania układu. Jeśli te operacje nie pomogą, to znaczy, że gdzieś podczas konfigurowania bootloadera popełni- liśmy błąd lub prędkość z jaką komunikuje się mikrokontroler z PC, jest źle dobrana. Możemy sprawdzić teraz, czy nasz pro- gram rzeczywiście został bezbłędnie zapi- sany w  pamięci mikrokontrolera. W  tym celu należy podłączyć programator i zwery- fikować pamięć procesora z  plikiem, który wgraliśmy. Należy pamiętać, że w  pamięci znajduje się nie tylko nasz program, ale rów- nież bootloader, dlatego jeśli będziemy wery- rys. 4. rys. 5. fikować całą pamięć (włącznie z sekcją BSL) i porównywać ją z plikiem, który wgraliśmy, to rezultat weryfikacji będzie negatywny. Teraz, po każdorazowym uruchomieniu/ restarcie układu program bootloadera spraw- dzi, czy ma programować pamięć. Jeśli wy- nik będzie negatywny, wówczas normalnie zostanie uruchomiona aplikacja zapisana w pamięci mikrokontrolera. Podsumowanie Bootloader autorstwa Sylvain Bissonnette jest bardzo elastyczny, przez co nadaje się do wielu różnych zastosowań. W oknie programu znajduje się sekcja Thanks to read, w której au- tor prosi o wsparcie jego pracy, do czego gorąco zachęcam, gdyż jego program jest wykonany solidnie, działa naprawdę stabilnie i nadaje się do różnych zastosowań, o czym mam nadzieję również przekonają się Czytelnicy. Paweł klaja pklaja@o2.pl R E K L A M A
Artykuł ukazał się w
Listopad 2009
DO POBRANIA
Pobierz PDF Download icon
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik czerwiec 2020

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio lipiec 2020

Świat Radio

Magazyn użytkowników eteru

APA - Automatyka Podzespoły Aplikacje czerwiec 2020

APA - Automatyka Podzespoły Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna czerwiec 2020

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Praktyczny Kurs Elektroniki 2018

Praktyczny Kurs Elektroniki

24 pasjonujące projekty elektroniczne

Elektronika dla Wszystkich czerwiec 2020

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów