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

Kolejny Bootloader AVR

mlodedrwale 18 Cze 2013 16:53 21015 38
  • Kolejny Bootloader AVR


    Witam!

    Jakiś czas temu zacząłem bawić się procesorami AVR. Jako programatora wykorzystywałem moduł FT232. Po jakimś czasie gdy zacząłem ów moduł wykorzystywać również do transmisji danych między procesorem a komputerem (UART) pomyślałem, że aby zmniejszyć kabelkologię (FT232 podłączony jako programator + RX +TX) do programowania wykorzystam bootloader.

    Długo szukałem takiego, który spełniał by moje oczekiwania, ale te bootloadery które znalazłem, albo nie działały, albo były płatne, albo nie potrafiłem z nich skorzystać. ;)

    Dlatego ucieszyłem się, gdy znalazłem ten wątek:
    https://www.elektroda.pl/rtvforum/topic1698801-0.html

    Programator kolegi TokamakPl działał bez problemu! Prawie.
    Niestety w miarę użytkowania, okazało się, że co kilka programowań program nie nawiązywał połączenia z procesorem i wykrzaczał się niemiłosiernie. Poza tym nie akceptował plików hex, tylko pliki binarne!

    Po pewnym czasie te cechy zaczęły mnie doprowadzać do szału i postanowiłem napisać swój program obsługujący bootloader, przy okazji ucząc się nowego dla mnie języka C#.

    Przy okazji wprowadziłem kilka poprawek w samym kodzie bootloadera i dodałem obsługę kilku nowych procesorów (mam zamiar dodać więcej). Na dzień dzisiejszy obsługiwane są:

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

    Zalety programu:
    - zajmuje mniej niż 512 bajtów (256 słów) pamięci procesora
    - 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)
    - obsługa plików hex


    TODO:
    - sprawdzanie czy program zmieści się w urządzeniu;
    - odczyt i zapis EEPROM stronami, na razie jest bajt po bajcie, co jest mało efektywne;
    - offset dla plików hex - na razie program obsługuje tylko pliki hex zaczynające się od adresu 0;



    W załączniku program, i źródła zarówno bootloadera jak i samego programu obsługującego.
    Z góry dziękuję za wszelkie sugestie!

    Więcej informacji na stronie programu.

    Pozdrawiam.

    Changelog:
    - poprawiony makefile
    - naprawiony błąd przy zapisie ustawień na linuksie, związany z niewłaściwym separatorem w ścieżce pliku
    Załączniki:
    • AVRFerret01e.zip (664.07 KB) Musisz być zalogowany, aby pobrać ten załącznik.

    Fajne? Ranking DIY
    O autorze
    mlodedrwale
    Poziom 12  
    Offline 
    mlodedrwale napisał 94 postów o ocenie 154, pomógł 1 razy. Mieszka w mieście Warszawa. Jest z nami od 2003 roku.
  • #2 12430704
    tehaceole

    Poziom 28  
    Posty: 1224
    Pomógł: 102
    Ocena: 212
    Hej Kolego
    Wizualnie całkeim fajnie Ci to wyszło. Kilka lat temu też publikowałem tutaj swój bootloader: TOMLOADER. Program został całkiem ciepło przyjęty ale... Podobnie jak Ty udostępniałem tutaj kody aplikacji C#. Jakież było moje zdziwienie, gdy kilku userów elektrody zwyzywało mnie od "programistycznych ekshibicjonistów z parciem na szkło" etc... Mam nadzieję, że tym razem to nie nastąpi. :)

    Najważniejsze, że osiągnałeś tak samo jak ja wtedy swój cel: nauczyłeś się jak zrobic to samemu. A to bezcenna lekcja. :)
    Konto firmowe:
    ST - SYSTEM
    Maszkowo 24 B, Maszkowo, 75-558 | Strona WWW: www.stsystem.pl
  • #3 12430928
    mkpl
    Poziom 37  
    Posty: 5678
    Pomógł: 306
    Ocena: 862
    Bootloader pierwsza klasa. Jedyny jaki do tej pory poprawnie mi ruszył. Dzięki ! i wyrazy szacunku :D

    Jak zabezpieczyć procesor przed skasowaniem Flash? Pierwsze programowanie bootloaderem jest ok a potem go nadpisuje
  • #4 12431459
    korneliuszo
    Poziom 17  
    Posty: 185
    Pomógł: 15
    Ocena: 30
    Na linuxie program nie działa bezproblemowo. (testowałem tylko czy w ogóle się uruchamia)

    Odpalam plik z katalogu bin/Release/

    Przy pierwszym uruchomieniu okno programu się pojawia.
    Przy kolejnych próbach uruchomienia nie umie znaleźć pliku z ustawieniami.
    Tworzy go w folderze bin o nazwie Release\settings.xml
    Po przekopiowaniu go ręcznie do katalogu Release i zmianie nazwy program wstaje, lecz ustawienia zapisują się do złego pliku.

    @mkpl
    prawdopodobnie fusebity nie ustawiłeś by normalnie startował bootloader.

    Po pierwszym wgraniu programu po prostu procek leci po całym flashu do adresu bootloadera i działa. Po zaprogramowaniu go z poziomu bootloadera, kod wgrany od razu zaczyna się wykonywać.
  • #5 12431522
    mlodedrwale
    Poziom 12  
    Posty: 94
    Pomógł: 1
    Ocena: 154
    @tehaceole, myślę że nikt mnie od ekshibicjonistów nie będzie wyzywał ;) Z drugiej strony konstruktywna krytyka jest jednym z powodów, dla których umieściłem tu ten projekt.


    mkpl napisał:

    Pierwsze programowanie bootloaderem jest ok a potem go nadpisuje


    Nie bardzo rozumiem, co nadpisuje co?

    korneliuszo napisał:

    Dzięki! Funkcje z zapisem ustawień dodałem w ostatniej chwili i nie miałem jej przetestowanej na linuxie.

    Na razie usuwam informacje o bezproblemowym działaniu na tym systemie i ogarnę sprawę w wolnej chwili!
  • #6 12431571
    mkpl
    Poziom 37  
    Posty: 5678
    Pomógł: 306
    Ocena: 862
    Wgrywam następująco. W jakiejś wersji MKavr Calculator. LOW 0xFF HI 0xC9 i LOCK 0x0F i niby fajnie wpisuje odczyt wszystko smiga do pierwszego programowania. Zaprogramuję ale już tracę komunikację z bootloaderem
  • #7 12431595
    mlodedrwale
    Poziom 12  
    Posty: 94
    Pomógł: 1
    Ocena: 154
    @mkpl, a co to za procek? I jak długi jest wsad?
  • #8 12431651
    mkpl
    Poziom 37  
    Posty: 5678
    Pomógł: 306
    Ocena: 862
    Atmega8 na kwarcu 16MHz. Wsad 2% flash. W zasadzie to program tylko cyklicznie wysyła "Bootloader A8 test" przez rs232. Próbowałem też inne wsady od tak wgrać ale ich długość nie większa jak 4kb.
  • #9 12431695
    mlodedrwale
    Poziom 12  
    Posty: 94
    Pomógł: 1
    Ocena: 154
    @mkpl Masz złe fusebity ustawione, powinny być Low: FF, High: CC

    wejdź na stronkę: http://www.engbedded.com/fusecalc i wpisz na dole swoje a potem te co proponuję i wszytko powinno stać sie jasne :)
  • #11 12432469
    mlodedrwale
    Poziom 12  
    Posty: 94
    Pomógł: 1
    Ocena: 154
    @domints: tak, masz rację z tym był problem, wczoraj pogrzebałem w kodzie i to naprawiłem.
    Użyłem Path.Combine zamiast lepienia ścieżki za pomocą dodawania stringów, ale Path.DirectorySeparatorChar też powinien się dobrze sprawować!

    Zaraz wrzucę poprawioną wersję!
    Edit, już wrzuciłem!
  • #12 12435210
    pawel3110
    Poziom 15  
    Posty: 351
    Pomógł: 4
    Ocena: 25
    Gratuluje projektu i liczę na jego owocną kontynuację;)
    Mam tylko sugestię, że dobrze by było dodać opcję programowego wywołania resetu przez wysłanie odpowiedniej komendy (może nawet dającej się ustawić w programie)
  • #13 12435525
    studzin
    Poziom 17  
    Posty: 304
    Pomógł: 1
    Ocena: 19
    W sumie to było by nawet ciekawe, bo jak mamy kilka procków na jednej magistrali to możemy wywołać którą sztukę chcemy zaktualizować.
  • #14 12435643
    mlodedrwale
    Poziom 12  
    Posty: 94
    Pomógł: 1
    Ocena: 154
    pawel3110, studzin. tak - też o tym myślę! Dzisiaj zamówiłem moduł bluetooth który powinien przyjść za jakieś 2 tygodnie. Do tego czasu planuję popracować nad czytelnością kodu i wprowadzeniem kilku bardziej podstawowych usprawnień (tych zapisanych jako "TODO" ;) ). Jak będę miał dostęp do bluetooth to popracuję nad programowaniem przez niego (dłuższe timingi) i przy okazji zajmę się resetem za pomocą komendy na USART.
  • #15 12437133
    Karol966
    Poziom 31  
    Posty: 2041
    Pomógł: 83
    Ocena: 650
    studzin napisał:
    W sumie to było by nawet ciekawe, bo jak mamy kilka procków na jednej magistrali to możemy wywołać którą sztukę chcemy zaktualizować.


    Mógłbyś napisać w jaki sposób chciałbyś rozwiązać programowe wybieranie programowanego procesora?
    Wg książki tmf aby programować wiele procesorów w 1 układzie należy rozdzielić linie SCK...
    Osobiście rozdzielałem sygnał reset gdyż mój układ nie zajmował linii łącza ISP w czasie normalnej pracy procesorów.
    PS. Czy przy rozdzielaniu linii SCK nie powinno się wymusić na niej domyślnie jakiegoś stanu (pull-up/ pull-down)?
  • #16 12437211
    studzin
    Poziom 17  
    Posty: 304
    Pomógł: 1
    Ocena: 19
    Jak mamy bootloader to możemy programować procesor za pomocą interfejsów komunikacyjnych. Wówczas wykorzystujemy serialowe rx/tx. Program na pc wysyła na magistralę komunikat "procesor numer 002 zresetuj się". Procek wchodzi w tryb bootloadera i następuje programowanie.

    Tak przynajmniej ja to widzę.
  • #17 12437298
    mlassota
    Poziom 18  
    Posty: 372
    Pomógł: 11
    Ocena: 85
    Wszystko fajnie ale z poziomu loadera zrobić się tego nie da - Procek - chyba że mam mylne wyobrażenie - działa tak - reset/lodader/program - jeśli w programie zapiszesz np po odebraniu komendy "porcek 02 reset" np. przeładuje watchdog'a" nastąpi reset i znowu procesor przejdzie przez loader... chyba że jest inaczej...
  • #18 12437322
    Karol966
    Poziom 31  
    Posty: 2041
    Pomógł: 83
    Ocena: 650
    No tak, przecież tu ciągle mowa o bootloaderze a nie o programowaniu przez ISP, moja gafa.
    Tak czy inaczej trzeba by założyć adresy procesorów na stałe by główny program wiedział który to "procesor nr 002".
  • #19 12437474
    studzin
    Poziom 17  
    Posty: 304
    Pomógł: 1
    Ocena: 19
    Dokładnie tak ma być, że funkcja wywolujaca reset ma być w głównym programie.
  • #20 12441042
    otapi
    Poziom 26  
    Posty: 640
    Pomógł: 86
    Ocena: 103
    Hmmm a ja zapytam tak. Jaki jest sens używania bootloadera? Mniej kabli? nie sądzę i tak trzeba użyć przynajmniej konwertera na np. max232 + zazwyczaj przejściówki RS > USB. Zatem dlaczego ma byc to bardziej funkcjonalne niż programator np. USBasp?
  • #21 12441090
    studzin
    Poziom 17  
    Posty: 304
    Pomógł: 1
    Ocena: 19
    Ojjj powodów jest cała masa.
    -można to zrobić bezprzewodowo np. po bluetooth(jak w układ wkomponujemy odpowiedni moduł)
    -klient może to zrobić bez większego ryzyka w domu(można mu załączyć przejściówkę, lub dodać ft232rl od razu na płytkę)
    -jeśli masz urządzenia umieszczone w trudno dostępnych miejscach, a masz wyprowadzony jakiś interfejs do komunikacji z innymi urządzeniami to nie musisz marnować czasu na demontaż + unieruchomienie układu na dłuższy czas.



    Zresztą Arduino by nie było takie popularne gdyby nie bootloader.
  • #22 12444671
    DariuszEE
    Poziom 17  
    Posty: 347
    Pomógł: 5
    Ocena: 33
    Witaj
    Proponuję Ci dorobienie "DYNAMIC baudrate" czyli dynamicznie zmienianą prędkość portu RS232 , dokonujesz w początkowym okresie programowania resetu inicjalizujesz transmisję np. na 9600 , procesory się dogadują po czym przechodzisz do wyższych prędkości np. 115200 lub wyżej :-)
  • #23 12444747
    mlodedrwale
    Poziom 12  
    Posty: 94
    Pomógł: 1
    Ocena: 154
    DariuszEE, to by trochę kodu zajęło, a programowanie nawet przy niskich baudrate przebiega dość szybko. Ale kto wie, może w przyszłości pomyślę nad tym, chociaż najpierw postaram się dodać potrzebniejsze opcje (np. odczyt i zapis eeprom stronami).
  • #24 12444904
    DariuszEE
    Poziom 17  
    Posty: 347
    Pomógł: 5
    Ocena: 33
    spotkałem się z takim rozwiązaniem programując sterowniki PLC i przyznam się że :
    1. zrobiło to na mnie wówczas spore wrażenie :-)
    2. komfort pracy "programowania" po prostu bajka :-)
  • #25 12445926
    11111olo
    Poziom 42  
    Posty: 13609
    Pomógł: 1
    Ocena: 795
    To jest bardziej praktyczne.
  • #26 12446449
    mlodedrwale
    Poziom 12  
    Posty: 94
    Pomógł: 1
    Ocena: 154
    11111olo, to są zupełnie inne programy, jeśli ktoś korzysta z portu szeregowego/ ft232 mój jest wygodniejszy. Jeśli ktoś nie korzysta z ww. portów/przejściówek to wygodniejszy jest zwykły programator :P
  • #27 12446849
    11111olo
    Poziom 42  
    Posty: 13609
    Pomógł: 1
    Ocena: 795
    Port szeregowy jest wygodniejszy? Samo FT232L kosztuje ponad dyszkę, do tego instalowanie sterowników itd.

    Nie chodziło mi żeby Twoje dzieło ośmieszyć czy coś takiego. Po prostu moim zdaniem rs232 powinien już odejść do lamusa.
  • #28 12447031
    mlodedrwale
    Poziom 12  
    Posty: 94
    Pomógł: 1
    Ocena: 154
    11111olo, nie wiem jak ci to wytłumaczyć prościej niż w poprzednim moim poście, ale spróbuję:

    Dla naszych potrzeb podzielmy projekty bazujące na atmega na dwie grupy:

    1. grupa: projekty korzystające z portu szeregowego, lub przejściówki usb - port szeregowy (bluetooth - port szeregowy) lub innych. Nie wnikam tutaj w przyczynę tego, że projekt korzysta z takiego interfejsu, czy wymaga tego klient, czy jest nam tak wygodniej, czy jedna z setek innych przyczyn.

    2. grupa: projekty nie korzystające z ww. interfejsów.

    Teraz pytania:

    Jeśli projekt jest z pierwszej grupy, to poco dokładać sobie kabelków, złączy na płytce, podrażać i komplikować projekt dokładając dodatkowy zbędny interfejs, zabierający dodatkowo 1,5kB pamięci?

    Jeśli projekt jest z drugiej grupy, to czy nie lepiej skorzystać z byle jakiego, za to sprawdzonego i uniwersalnego programatora oszczędzając 2kb pamięci (pomijam konieczność ustawiania zworki przy każdym programowaniu)?

    Mam nadzieję, że jak odpowiesz sobie na te pytania wszystko stanie się jasne :)

    Pozdrawiam!
  • #29 12447318
    karlos79
    Poziom 33  
    Posty: 1768
    Pomógł: 254
    Ocena: 76
    Witam
    Kolego gratuluję udanego projektu :)
    Mam z gorącą prośbę, czy możesz dodać obsługę kontrolera Atmega164?

    Pozdrawiam
  • #30 12447723
    11111olo
    Poziom 42  
    Posty: 13609
    Pomógł: 1
    Ocena: 795
    mlodedrwale napisał:


    Dla naszych potrzeb podzielmy projekty bazujące na atmega na dwie grupy:

    1. grupa: projekty korzystające z portu szeregowego, lub przejściówki usb - port szeregowy (bluetooth - port szeregowy) lub innych. Nie wnikam tutaj w przyczynę tego, że projekt korzysta z takiego interfejsu, czy wymaga tego klient, czy jest nam tak wygodniej, czy jedna z setek innych przyczyn.

    2. grupa: projekty nie korzystające z ww. interfejsów.

    Teraz pytania:

    Jeśli projekt jest z pierwszej grupy, to poco dokładać sobie kabelków, złączy na płytce, podrażać i komplikować projekt dokładając dodatkowy zbędny interfejs, zabierający dodatkowo 1,5kB pamięci?

    Jeśli projekt jest z drugiej grupy, to czy nie lepiej skorzystać z byle jakiego, za to sprawdzonego i uniwersalnego programatora oszczędzając 2kb pamięci (pomijam konieczność ustawiania zworki przy każdym programowaniu)?

    Mam nadzieję, że jak odpowiesz sobie na te pytania wszystko stanie się jasne :)

    Pozdrawiam!


    Czy FT232L to nie jest podrażanie kosztów? Cały interfejs USB to kosztujący bagatela 2zł biznes.
    Nie wiem gdzie Ci wyszło że pożera 2kB ramu! Poza tym jak to z każdym bootloaderem działa tylko na czas programowania więc nie ma znaczenia ile pożera pamięci skoro po programowaniu już działa właściwy kod.

    Każdy ma swoje zdanie i dobrze;) Nie neguję tego rozwiązania ale moim zdaniem jak się da prościej i taniej to po co się pchać w rs232?

Podsumowanie tematu

✨ W dyskusji poruszono temat bootloaderów dla procesorów AVR, szczególnie w kontekście użycia modułu FT232 do programowania i komunikacji UART. Użytkownicy dzielili się doświadczeniami z różnymi bootloaderami, wskazując na problemy z komunikacją oraz konieczność ustawienia odpowiednich fusebitów. Wspomniano o zaletach bootloaderów, takich jak możliwość aktualizacji oprogramowania bez użycia programatora oraz opcjach bezprzewodowych, jak Bluetooth. Pojawiły się również sugestie dotyczące poprawy funkcjonalności, takie jak dynamiczna zmiana prędkości portu RS232 oraz programowe wywołanie resetu procesora. Dyskutowano także o zabezpieczeniach przed nieautoryzowanym dostępem do oprogramowania.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA