Elektroda.pl
Elektroda.pl
X
Serwerowe OpowieściSerwerowe Opowieści
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

HEXLoader - bootloader AVR z obsluga HEX (bez softu na PC!)

master_pablo 13 Lip 2009 00:20 10937 18
  • HEXLoader - bootloader AVR z obsluga HEX (bez softu na PC!)
    Witam!

    Chcialem sie podzielic moja nowa, czysto programowa konstrukcja. Jest to bootloader dla mikrokontrolerow AVR, tym odrozniajacy sie od wiekszosci tego typu programow (chocby ostatnio zaprezentowanego przez kolege mirekk36 AVR Boot Loadera), ze nie potrzebuje dodatkowego programu na PC i przyjmuje bezposrednio pliki Intel HEX! Inspiracja byl wlasnie wspomniany AVR Boot Loader (ktory wymaga dedykowanego programu na PC), chip45boot (ktory przyjmuje malo popularne pliki Motorola Srec i wymaga kilkuset ms przerwy po wyslaniu kazdego wiersza pliku) i chip45boot (ktory z kolei przyjmuje pliki Intel HEX i obsluguje kontrole przeplywu, ale zajmuje 2kB, a jego kod jest dostepny za oplata).

    Cechy bootloadera:
    - komunikacja z mikrokontrolerem z wgranym bootloaderem nastepuje poprzez UART (tylko linie TXD i RXD) z programowa kontrola przeplywu XON/XOFF,
    - do wydawania komend, odbierania wynikow i wysylania plikow Intel HEX wykorzystuje sie zwykly terminal (np. HyperTerminal, RealTerm, Terminal by Br@y) - taki program jest firmowo dostepny w kazdym systemie z wyjatkiem Visty, mozna te znalezc setki lepszych lub gorszych zamiennikow,
    - bootloader umozliwia w podstawowej wersji kasowanie i zapisywanie Flashu, a bardziej rozbudowanej kasowanie i zapisywanie EEPROMu, odczytywanie i zapisywanie lockbitow, odczytywanie fusebitow i odczytywanie sygnatury - wszystko zalezy od konfiguracji i mozliwosci mikrokontrolera (np. ATmega32 nie udostepnia odczytywania sygnatury). Jest tez przygotowane miejsce pod odczyt Flashu i EEPROMu, ale w koncu tego nie napisalem. Wiecej funkcji juz chyba bootloader nie moze zaoferowac. Podstawowa wersja na "klasyczne" ATmegi (8, 32) miesci sie w 1000 bajtow.
    - bootloader obsluguje uC z wiecej niz 64kB Flashu (niesprawdzone),
    - staralem sie, zeby program byl maksymalnie odporny na bledy w plikach HEX i ogolnie bledo- i idiotoodporny. Jesli nie uda sie poprawnie zaprogramowac Flashu, to jest on czyszczony, by nie odpalic jakiegos dziwnego programu.
    - program cechuje minimalne zuzycie (niszczenie, a nie zajetosc) pamieci Flash i EEPROM, sa one kasowane i programowane tylko wtedy, gdy naprawde trzeba. Dziesieciokrotne podanie komendy czyszczenia spowoduje tylko jednokrotne jej wykonanie, strony pelne 0xff nie sa programowane po kasowaniu itp.
    - open-source, kod w C.

    Na screenie jest przyklad wykorzystania na ATmega32 (czerwone znaki to moje komendy, zolte - odpowiedz bootloadera). I tak po kolei:
    - b - wlaczenie bootloadera (czeka ustalony czas po starcie)
    - l - odczyt "dolnych" fusebitow - wynik 0x2e
    - h - odczyt "gornych" fusebitow - wynik 0xda
    - x - odczyt "rozszerzonych" fusebitow - niedostepne w ATmega32
    - kr - odczyt lockbitow - wynik 0xff
    - fr - proba odczytu Flash (kod jeszcze nienapisany, wiec niedostepny)
    - fe - czyszczenie Flash
    - fw - zapis Flash, potem wysylamy plik HEX z programem
    - ee - czyszczenie EEPROM
    - ew - proba zapisu EEPROM, wystapil timeout, przez 10 sekund nie odebrano poprawnego HEX rekordu
    - ew - zapis EEPROM, teraz juz plik zostal wyslany
    - kw - zapis lockbitow - wartosc 0xf3
    - fe - proba czyszczenia Flash, nie pozwalaja na to ustawienia lockbitow,
    - fw - proba zapisu Flash, nie pozwalaja na to ustawienia lockbitow,
    - q - uruchomienie zaladowanego programu!

    Reszta informacji jest w Doxygenowej dokumentacji (chociaz po angielsku, to dosyc prosto) w paczce.

    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
    O autorze
    master_pablo
    Poziom 16  
    Offline 
    Specjalizuje się w: elektronika cyfrowa, programowanie
    master_pablo napisał 275 postów o ocenie 28, pomógł 11 razy. Jest z nami od 2005 roku.
  • Serwerowe OpowieściSerwerowe Opowieści
  • #2
    mirekk36
    Poziom 42  
    no i widzę, że kolega wprowadził swój plan w życie - super

    na czym polega dokładniej tutaj obsługa XON/XOFF ? (jeśli mógłbym prosić o 2 słówka wyjaśnienia)
  • #4
    elektronik999
    Poziom 26  
    avatar napisał:
    Bede upiardliwy - projekt fajny - opis do d.
    czemu ?
    Uprzejmie prosze o wyjasnienie w jakis sposob mam uzyc tego loadera na windows..np vista bez instalowania dodatkowego oprogramowania ?
    Opis blednie sugeruje ze nic nie trzba instalowac - co jest nieprawda !

    opis dobry czytanie do d.

    Code:
    Wystarczy zwykly terminal (HyperTerminal, RealTerm), ktory obsluguje XON/XOFF i wysylanie plikow - takie cos jest dostepne w kazdym systemie. Wszystko dzieje sie z poziomu tego terminala - tam wpisujemy komendy i wysylamy pliki Intel HEX do mikrokontrolera. 
  • #5
    master_pablo
    Poziom 16  
    Nie ma juz HyperTerminala w Viscie? A to przepraszam. Ale chyba sie nie pomyle, gdy stwierdze, ze kazdy, kto ma troche do czynienia z elektronika i mikrokontrolerami ma juz jakis program terminalowy zainstalowany, czy chociaz zachomikowany gdzies na komputerze. Tak wiec mysle, ze stwierdzenie jest uzasadnione. A jak wciaz Ci to nie pasuje, to stwierdzmy, ze trzeba zainstalowac program wielozadaniowy, do wykorzystania z innymi projektami, a nie specjalizowany i do wykorzystania tylko z tym jednym bootloaderem.

    Co do obslugi XON/XOFF, to dziala to tak, ze w tablicy ASCII sa zdefiniowane znaki Device Control 1 (XON, 0x11) i DC3 (XOFF, 0x13), po ktorych transmisja jest odpowiednio wznawiana i wstrzymywana.
    Tak wiec po starcie program wysyla XON i czeka na komendy. Gdy teraz uzytkownik zechce zaprogramowac Flash, to program wysyla XOFF (zeby wstrzymac transmisje na czas kasowania pamieci), a nastepnie XON -> odbiera jeden rekord HEX (jedna linie) -> XOFF i tak w kolko do konca pliku. Dzieki temu mozna przetwarzac plik liniami i nie trzeba sie z tym spieszyc, bo terminal nie wysle nastepnej linii przed otrzymaniem znaku XON.
  • Serwerowe OpowieściSerwerowe Opowieści
  • #6
    Infinyty
    Poziom 12  
    To brakuje jeszcze programu na pc dla leniwych, czyli wszystko co dostępne bez znania komend.

    Chyba napisałem zrozumiale. :D

    Poza tym program genialny!
  • #7
    master_pablo
    Poziom 16  
    Infinyty napisał:
    To brakuje jeszcze programu na pc dla leniwych, czyli wszystko co dostępne bez znania komend.
    :D

    A ja wlasnie im dluzej korzystam z komputera, tym bardziej jestem przekonany do programow konsolowych itp. :)
  • #8
    Infinyty
    Poziom 12  
    To mam jeszcze jedno pytanie, których lini używa się w porcie com?.
    chyba dobrze zrozumiałem, że programowanie idze po comi'e do procka
  • #9
    master_pablo
    Poziom 16  
    Tak, korzystamy z UARTu, potrzebne sa tylko linie TXD i RXD, bo kontrola przeplywu jest software'owa. Linie RTS czy DTR mozna podlaczyc do linii resetu uC i odpowiednio nia sterujac np. w RealTermie (w HyperTerminalu sie nie da chyba) wymusic reset procka, aby ponownie uruchomic bootloader bez koniecznosci wciskania jakiegos fizycznego guziczka.

    Edit: zmienilem opis w pierwszym poscie na bardziej klarowny.
  • #10
    markosik20
    Poziom 33  
    Ja muszę przyznać że obsługa bootloadera w AVR tylko za pomocą komend terminalowych jest dobra tylko i wyłącznie w bezproblemowym przenoszeniu między różnymi systemami operacyjnymi. W innym przypadku powoduje tylko niepotrzebne błędy w interpretacji rozkazów wpisywanych w terminalu.
    Aplikacje do obsługi bootloadera nie wymagają instalacji (są odpalane bezpośrednio z dysku) lecz są 100 razy przyjemniejsze w użytkowaniu. Osobiście dobrawadzałoby mnie do rozpaczy szukanie opisu komend (przecież nie programuje się procesorów codzienne żeby to pamiętać) i wklepywanie na piechotę do terminala. Po to są robione nakładki (wszystko i tak jest obsługiwane przez RS232) żeby ułatwić człowiekowi życie i programować tylko jednym przyciskiem....a opcja wyboru ustawień do konkretnego projektu powoduje że mogę wgrać program do AVR'ka zrobionego rok temu przy pomocy jednego kliknięcia.
    Odpalam program, wybieram ustawienia, włączam urządzenie i wszystko się ładnie wgrywa...bez niepotrzebnego klepania po klawiaturze i nerwów czy nie pomyliłem komend "wink:.
    Czekamy na "nakładkę" graficzną :wink:.
  • #11
    elektronik999
    Poziom 26  
    Napisanie takiego programu w delphi7 to kwestia paru minut. Niestety przesiadłem się na c++ w którym to już takie łatwe nie jest
  • #12
    master_pablo
    Poziom 16  
    Ja tam jestem zdania, ze nie nalezy mnozyc bytow ponad miare :). Poza tym w koncu tylko bootloader. Zapamietanie, ze "fe" oznacza "Flash erase", a "ew" "EEPROM write" nie powinno przekraczac mozliwosci przecietnego czlowieka. Dorobie jeszcze pod "?" pomoc i w ogole bedzie miod ;).
    Zreszta klocenie sie o to, czy lepsze klikanie w przyciski, czy wpisywanie komend, to jak klocenie sie, czy lepszy jest Windows czy Linux. Kazdego zadowoli cos innego.
  • #13
    mick
    Poziom 15  
    Program bardzo fajny, oczywiście konsola to kwestia gustu, windowsowcy nie lubią konsol i już :)

    Szukam bootloadera oraz programu do niego aby można programować jeden sterownik z wielu podpiętych na magistrali RS485. Czyli coś w rodzaju: zdalnie resetuję sterownik o pewnym adresie i w tenże sterownik ładuję zmodyfikowany firmware... czy jest coś takiego?
  • #14
    master_pablo
    Poziom 16  
    Mysle, ze moglbys spokojnie wykorzystac moj program za podstawe, trzeba by tylko zmienic go tak, ze zamiast 'b' wysylaloby sie adres modulu, zeby wlaczyc bootloader. A reszta zalezy od tego, jakim sie protokolem poslugujesz. No i musialbys do swojego softu dla tych modulow dodac opcje resetowania.
  • #15
    hessuss
    Poziom 13  
    Wszystko fajnie tylko czemu nie działa ??
    Ściągnąłem twoje źródła, wrzuciłem w WinAVR-20090313 , przestawiłem kwarc na 8000000 ( używam wewnętrznego oscylatorka ) a baud na 9600 , skompilowałem, wrzuciłem to ponnyprogiem, resztę poustawiałem jak na prtscr poniżej, gdzie robię błąd?

    Dodam żę napisałem programik który czeka na znaki na eresie i potem je wyświetla na ekraniku i działa to bez problemu. Więc max 232 raczej poprawnie podłączony i komunikacja po uart też działa. choć echa nie robiłem.

    HEXLoader - bootloader AVR z obsluga HEX (bez softu na PC!) HEXLoader - bootloader AVR z obsluga HEX (bez softu na PC!) HEXLoader - bootloader AVR z obsluga HEX (bez softu na PC!) HEXLoader - bootloader AVR z obsluga HEX (bez softu na PC!)
  • #16
    master_pablo
    Poziom 16  
    Najbardziej podstawowa wersja obsluguje tylko zapis pamieci Flash. Wlacz bootloader komenda 'b', potem operacje na pamieci Flash - 'f' i zapis - 'w'. Potem wysylasz plik. Jak bedziesz dalej mial problemy, to przyjrzyj sie mojemu screenshotowi i opisowi. Zeby byla dostepna reszta opcji musisz przestawic odpowiednie definicje w main.c z 0 na 1, np. ENABLE_EEPROM_WRITE.
  • #17
    markosik20
    Poziom 33  
    mick napisał:

    Szukam bootloadera oraz programu do niego aby można programować jeden sterownik z wielu podpiętych na magistrali RS485.


    master_pablo napisał:
    Mysle, ze moglbys spokojnie wykorzystac moj program za podstawe,...


    Niestety to nie jest takie proste (trzeba praktycznie przebudować cały wsad ). Sterowanie przepływem za pomocą Xon/Xoff skutecznie uniemożliwia wykorzystanie bootloader'a w transmisji RS485 HalfDuplex.
  • #18
    eros81
    Poziom 14  
    Witam
    a czy na AtMedze8 ruszy ten bootloader ??
  • #19
    monty_p
    Poziom 18  
    ATmega 8 to klasyk. Pewnie że ruszy :)

    Wystarczy że uważnie przeczytasz pierwszy post autora a znajdziesz odpowiedź na swoje pytanie ;)

    Pozdrawiam