mlodedrwale - arcyciekawy i przewspaniały blog o wszystkim

DIY Wszystkie

Witam, w dzisiejszym wpisie pragnę przedstawić Państwu rewelacyjny jak na moje możliwości, wspaniały i bardzo użyteczny Bootloader dla procesorów z rodziny AtMega!

Programator bootloader procesorów avr atmega

Jest to prosty w użyciu, zajmujący mniej niż 512 bajtów (256 słów), całkowicie darmowy (licencja MIT) otwartoźródłowy, łatwy w konfiguracji bootloader mający dość duże możliwości:

  • Komunikacja przez RS232, lub przejściówkę USB <-> RS232
  • Odczyt i zapis pamięci Flash
  • Podczas przesyłania danych w czasie zapisu pamięci flash sprawdzana jest suma kontrolna (XOR)
  • Odczyt i zapis pamięci EEPROM
  • Weryfikacja poprawności zapisu pamięci FLASH oraz EEPROM
  • Odczyt Fusebitów i Lockbitów
  • Sam inicjuje reset procesora
  • Graficzny interfejs (program z interfejsem konsolowym w drodze)
  • Ta sama wersja programu działa pod Windowsem(.Net Framework)  jak i Linuxem (potrzebne Mono)


Bootloader ten jest rozwiniętą wersją programu zamieszczonego na portalu Elektroda: http://www.elektroda.pl/rtvforum/topic1698801-0.html przez użytkownika TokamakPl.

AVR Ferret, bo tak się nazywa obsługuje na razie następujące procesory:

  • Atmega48
  • Atmega8
  • Atmega8A
  • Atmega88
  • Atmega16
  • Atmega162
  • Atmega168
  • Atmega169
  • Atmega3250
  • Atmega328
  • Atmega32
  • Atmega3290
  • Atmega644

W niedługim czasie mam nadzieję powiększyć tą listę, ale wiadomo jak to w życiu bywa 🙂

Konfiguracja bootloadera

Kod źródłowy bootloadera składa się z dwu plików: „main.c” i „makefile”. Pliku „main.c” nie ruszamy, cała konfiguracja sprowadza się do edycji 3 linijek w pliku „makefile”:

Po „MCU = ” wpisujemy nazwę jednego z obsługiwanych procesorów z tej listy: „atmega48; atmega8; atmega8a; atmega88; atmega16; atmega162; atmega168; atmega169; Atmega3250; atmega328; atmega32; atmega3290; atmega644”. Np.:

Następnie po „F_CPU = ” wpisujemy częstotliwość, z jaką będzie współpracował nasz procesor. Np.:

Po „BAUD = ” wpisujemy prędkość portu szeregowego, z jaką chcemy się z procesorem porozumiewać, dozwolone wartości to: 2400; 4800; 9600; 19200; 38400; 57600; 115200.  Np.:

UWAGA!
Prędkość transmisji musi być dostosowana do prędkości z jaką pracuje procesor. By się upewnić, czy prędkość transmisji jest prawidłowa, proponuję skorzystać z tabelek zawartych w datasheecie lub np. na stronie: http://www.wormfood.net/avrbaudcalc.php

Po edycji przystępujemy do kompilacji bootloadera.

Jeśli w  naszym systemie zmienna $PATH prowadzi do programów make, avr-gcc itd. to w konsoli, w katalogu z plikiem makefile i main.c wydajemy polecenie make i po chwili otrzymujemy gotowy bootloader: „main.hex”.

Jeśli natomiast korzystamy tylko z AVR Studio musimy wykonać więcej operacji:

1. Otwieramy AVR Studio i klikamy: „File -> New -> Project”.
2. Następnie wybieramy „C Executable Project”, nazwę (np „AVR Ferret”) i katalog (należy zapamiętać ścieżkę do tego katalogu) dla naszego Bootloadera:

AVR Studio atmel bootloader konfiguracja 1

3. Usuwamy niepotrzebny, automatycznie wygenerowany plik:

AVR Studio atmel bootloader konfiguracja 2

4. Dodajemy pliki „main.c” i „makefile”:

AVR Studio atmel bootloader konfiguracja 3

AVR Studio atmel bootloader konfiguracja 4

5. Następnie wybieramy ALT+F7, lub: „Project->AVR Ferret Properties”  i w zakładce „Build” zaznaczamy „Use External Makefile”.  Wybieramy plik makefile, który znajduje się w katalogu z projektem który stworzyliśmy przed chwilą (w punkcie 2.)

AVR Studio atmel bootloader konfiguracja 5

6. Dalej klikamy F7  lub „Build -> Build Solution” i po chwili otrzymujemy gotowy bootloader „main.hex”

AVR Studio atmel bootloader konfiguracja 6

Zanim wgramy wsad bootloadera do procesora, powinniśmy ustawić Fusebity, najepiej wyliczyć je na podstawie kalkulatora, np: http://www.engbedded.com/fusecalc. Należy uaktywnić bootloader za pomocą bitu BOOTRST = ” Boot Reset vector Enabled” i wybrać wielkość sekcji bootloadera („Boot Flash Section”) – ma być 256 słów (czyli 512 bajtów!). W przypadku większych mikrokontrolerów, w których minimalną wielkością do wyboru jest 512 słów, wybieramy właśnie tę, minimalną wartość. Przykładowe ustawienie dla AtMega8:

Teraz wystarczy za pomocą dowolnego programatora wgrać do procesora plik „main.hex” oraz zainstalować aplikację na komputerze.

Ze względu na to, że szanuję inteligencję czytelnika, nie będę opisywał instalacji programu ani sposobu jego użytkowania, ograniczę się jedynie do opcji, która może budzić wątpliwości, a mianowicie „Reset Line” (niestety w obecnej wersji program jest jedynie w wersji angielskiej).

Reset Line służy do resetowania procesora w momencie kiedy chcemy połączyć się z bootloaderem. Mamy do wyboru dwie linie, RTS lub DTR oraz brak resetu sprzętowego: „None”. RTS i DTR są to linie portu szeregowego (lub przejściówki USB <-> RS232), wybraną z nich powinniśmy podłączyć tak do pinu Reset  procesora jak na schemacie poniżej:

Podłączenie reset avr atmega przez kondensator do FT232

Dzięki temu programator może wykonać automatycznie reset procesora, niezbędny do połączenia z bootloaderem. Wybranie opcji „None” zmusza nas do ręcznego wywołania resetu w ciągu max 2-3 sekund od wciśnięcia przycisków programowania lub testowania połączenia. Opcja ta jest przydatna, gdy korzystamy z przejściówek USB <-> RS232 nie posiadających wyprowadzonych linii DTR i RTS.

Ograniczenia automatycznego resetu:

Uwaga: należy pamiętać, że podłączenie linii reset do RTS lub DSR będzie skutkowało resetem procesora przy każdej zmianie stanu na tych pinach. Większość terminali używa domyślnie tych pinów, więc połączenie procesora z terminalem będzie skutkowało resetem 🙁

Aby uniknąć tej sytuacji należy albo zastosować zworkę odłączającą pin resetu od tych linii, lub skorzystać z terminala, w którym można wyłączyć linie RTS lub DSR, np: REALTERM

 

Podłączenie procesora

Aby bootloader działał prawidłowo, linie RXD i TXD procesora muszą być podłączone do linii TXD i RXD przejściówki USB <-> RS232 (polecam przejściówki oparte na układzie FT232). Linia TXD procesora musi być podłączona do linii RXD przejściówki, a linia RXD procesora do linii TXD przejściówki. Jeśli nie korzystamy z przejściówki tylko ze zwykłego klasycznego portu RS232 zasada jest ta sama, ale musimy pamiętać o dostosowaniu napięć Procesor <-> Port RS232, można tego dokonać za pomocą specjalizowanych układów scalonych (MAX232, MAX2323 itp.).

 

 ŚCIĄGNIJ AVR FERRET
DOWNLOAD AVR FERRET

 

Jeśli coś jest niezrozumiałe, proszę o komentarz lub kontakt przez formularz



komentarzy 12

  1. […] Jak zainstalować bootloader? Tak jak zwykły program! Ściągamy pliki źródłowe ze strony: http://www.mlodedrwale.pl/2013/06/09/bootlader-avr-ferret/ lub klikając odnośnik – AVRFerret. Kompilujemy je wg, instrukcji z tej strony, dla modułu […]

  2. […] płytce nie ma wyprowadzonego złącza do programowania – przed wlutowaniem atmegi wgrałem do niej bootloader dzięki czemu udało się jeszcze bardziej uprościć płytkę. Mikrokontroler korzysta z […]

  3. mrKoval napisał(a):

    Czekam na konfigurację dla ATmega128.
    Używam Atmegę8, 32 i tylko 128 mi brakuje.
    Kawał dobrej roboty i zostało już naprawdę niewiele, żeby dokończyć dzieło!

    • mlodedrwale napisał(a):

      Cześć!
      Na Atmegę128 bootloader napiszę dopiero jak ją kupię, żebym mógł testować soft. A pewnie kupię ją jak będę robił jakiś większy projekt który będzie potrzebował tego procka, bo szkoda mi kupować, żeby leżał w szufladzie 🙂

      Pozdrawiam!

  4. Robert napisał(a):

    Witam!
    Projekt bardzo fajny mam jednak pytanie czy po odpowiedniej modyfikacji taki bootloader był by wstanie wgrać mi plik HEX do zewnętrznego eeproma po szynie I2C? Potrzebuje właśnie czegoś takiego. Można by było liczyć na jakąś pomoc?

    Pozdrawiam

    • mlodedrwale napisał(a):

      Cześć!
      Pewnie, że by się dało, trzeba by wprowadzić odpowiednią funkcję do bootloadera i do programu sterującego, niestety to powiększy rozmiar bootloadera i może on nie zmieścić się w 512 bajtach.

      Na razie nie mam czasu na zajmowanie się rozwojem bootloadera, więc proponuję powalczyć samemu, tym bardziej, że kody źródłowe są udostępnione 🙂

      Pozdrawiam!

  5. […] Jak zainstalować bootloader? Tak jak zwykły program! Ściągamy pliki źródłowe ze strony: http://www.mlodedrwale.pl/2013/06/09/bootlader-avr-ferret/ lub klikając odnośnik – AVRFerret. Kompilujemy je wg, instrukcji z tej strony, dla modułu […]

  6. […] od routera o napięciu 5V i wydajności 3A. Płytka przystosowana jest do programowania za pomocą bootloadera AVR Ferret. Wyzwalanie aparatu odbywa sie za pomocą tranzystora zwierającego ze sobą 2 przewody wężyka […]

  7. szymon12w napisał(a):

    Gdzie można ustawić czas oczekiwania na połączenie? Nie mam możliwości wyprowadzenia linii do pinu RESET. Według tego co pisze po wybraniu opcji „None” program powinien oczekiwać do 3 sekund na zrobienie resetu, lecz tak na prawdę procesor trzeba zresetować w momencie kliknięcia Connect inaczej wyświetla błąd.
    Pozdrawiam

  8. Dnuk napisał(a):

    Próbuję wrzucić bootloader z ustawieniami ATmega644 do 644P.
    Niby są one kompatybilne wstecznie (poza różnymi sygnaturami) ale po wypaleniu program wywala „Wrong response from processor”.
    Czy jest to problem z sygnaturą, czy zupełnie co innego?
    Jak dopasować ten bootloader do 644P?

  9. Artyum napisał(a):

    Ponawiam pytanie kolegi odnośnie atmega644p (i przy okazji również 168p) i uprzejmie proszę o wskazówkę 🙂 Pozdrawiam i gratuluję dobrej roboty!

  10. neo_84 napisał(a):

    MEAG! dziekóweczka fajny programik i działa nie spotkałem lepszego w sieci no oprócz płatnego bootloadera pana mirka36 atnel. Ale jego program jest płatny i bez możliwości wgrania epromu. Oby wiecej takich dobrych i pomocnych dusz

Dodaj komentarz