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

AVR231 - Bootloader nie działa aktualizacja wraz z eeprom, bez eeprom działa

Karol966 22 Sie 2016 20:37 1467 16
REKLAMA
  • #1 15884851
    Karol966
    Poziom 31  
    Witam

    Jak w temacie, gdy używam do aktualizacji szyfrowanego pliku *.hex to update przebiega prawidłowo do końca i program działa. Gdy jednak użyję dodatkowo pliku *.epp to wówczas zawiesza się aktualizacja przy samym końcu. Gdy robiłem plik do aktualizacji samego eepromu również nie działała jego aktualizacja.
    Aplikacja używa zmiennych typu EEMEM z jednym wyjątkiem - zapisuje ona jedną wartość pod adres E2END (lub ją kasuje). Podobnie jest w przypadku bootloadera - również zapisuje on jakąś tam wartość pod ten sam adres E2END (nie pamiętam jaką).

    Oto w jaki sposób generuję update.enc:
    Cytat:

    GCreate -c boot_tft.h -e TFT_.eep -f tft_.hex -o update.enc


    _____________________________________

    Druga sprawa, czy ktoś również ma taki problem, że plik update.exe nie pozwala na używanie portów COM z numerem wyższym niż 9? :( jest to bardzo uciążliwe bo przy każdej aktualizacji nowo zbudowanego urządzenia muszę specjalnie zmieniać numer portu COM, jaki przydzielił mu windows.
    Do aktualizacji za pomocą pliku update.exe wykonałem sobie prosty plik bat ale z tego co pamiętam, bez tego pliku również nie mogłem podać wyższego portu COM niż 9. W przeciwnym razie kończy się to komunikatem o braku takiego numeru portu lub jego zajętości.

    Cytat:

    ECHO Please type com port number for serial adapter
    echo and press Enter on keyboard
    echo .
    set /p comnbr=COM PORT NUMBER [1-9]?:
    echo .
    ::update.exe update.enc -COM%comnbr% -19200
    update.exe update.enc -COM%comnbr% -115200
    pause
  • REKLAMA
  • #2 15884881
    grko
    Poziom 33  
    Dla portów większych niż 9 nazwa portu musi mieć format:

    Kod: Bash
    Zaloguj się, aby zobaczyć kod


    Taki już urok łindołsa
  • Pomocny post
    #4 15884908
    grko
    Poziom 33  
    Spróbuj zamienić ta linie:

    Kod: Bash
    Zaloguj się, aby zobaczyć kod


    Jeżeli nie zadziała to przydałyby się źródła do update.exe.
  • #5 15884984
    Karol966
    Poziom 31  
    Niestety nie działa. Chciałem też jednocześnie wyświetlić listę dostępnych portów com coś jak tutaj:
    http://empegbbs.com/ubbthreads.php/topics/352184/Windows_command_to_quickly_lis ale stamtąd też mi nic nie działa - nie jestem zbyt obeznany z windowsem. Pobrałem program stąd: https://todbot.com/blog/2012/03/02/listcomports-windows-command-line-tool-for-usb-to-serial/
    dodałem jego wywołanie w swoim pliku bat no i razem jakoś działa. Tzn działa wyświetlenie samych portów (nie wiem czy na dowolnym windowsie to zadziała).
    Źródła tego programu update są tutaj: www.atmel.com/images/AVR231.zip (z tego co pamiętam jest tam folder PC a w nim źródła programu update).
  • REKLAMA
  • #6 15885015
    grko
    Poziom 33  
    No to w takim wypadku musisz zmienić i przekompilować źródła tego programu tak aby otwierał porty o numerze większym niż 9.
  • #7 15885024
    Karol966
    Poziom 31  
    Patrzyłem na te źródła - nie znalazłem podejrzanego fragmentu, który mógłby powodować takie zachowanie. Widziałeś to źródło, co jest w nim źle? Dziwne by było, gdyby jego twórca czyli Atmel nie wiedział, o takim babolu.
    Dzięki za zainteresowanie tematem - za same dobre chęci klikam pomógł :)
  • #8 15885049
    grko
    Poziom 33  
    Cytat:
    Dziwne by było, gdyby jego twórca czyli Atmel nie wiedział, o takim babolu.


    Nie wiedział najwidoczniej...

    Tu masz interesujące Cie fragmenty:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #9 15885053
    Karol966
    Poziom 31  
    grko napisał:
    -\\\\.\\COM%comnbr%

    Jesteś pewien, że ma być taki zapis? : \\\\.\\
    Tu znalazłem nieco inny https://batchloaf.wordpress.com/2013/02/12/si...nding-characters-to-a-serial-port-in-windows/
    Niestety żaden nie działa, nawet gdy robię na sztywno:
    update.exe update.enc -\\\\.\\COM32 -115200
  • REKLAMA
  • #10 15885058
    grko
    Poziom 33  
    I nie zadziała żaden tego typu zapis. Trzeba źródła poprawić.
  • #11 15885089
    Karol966
    Poziom 31  
    Czyżby problem jest z
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod



    Plik comport.cpp
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Plik update.cpp
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Plik comport.h
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Plik update.h
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #12 15885118
    grko
    Poziom 33  
    Cytat:

    Czyżby problem jest z


    Tak. Dokładnie z tym jest problem. Pisałem o tym 2 posty wyżej. Należy wygenerować taką nazwę portu dla metody comPort->open aby mogła otworzyć porty > 9.
  • #13 15885123
    Karol966
    Poziom 31  
    Dodatkowo:
    char comPortName[5]; // Name of the COM port that is used for
    // transferring
    - 5 znaków to zdaje się za mało, nie wiem czy znak '-' też jest kopiowany oraz czy jest tam znak końca stringa, wydaje mi się, że faktycznie Atmel nie przeanalizował sprawy z większą ilością portów COM
  • REKLAMA
  • #14 15885132
    grko
    Poziom 33  
    Cytat:

    5 znaków to zdaje się za mało ...


    To nie jedyny błąd w tym programie. Na chwilę obecną to pisze po stosie dla portów > 9. Anyway, jest to do naprawienia.
  • #15 15885204
    Karol966
    Poziom 31  
    Na sztywno przed samym open(comPortName, baudrate, 2000);
    dałem:
    strcpy(comPortName, "COM32");
    Ale i tak wynik jest ten sam: printf("Error: %s in use or does not exist.\n", comPortName); czyli nie da się takiego portu otworzyć, czyli co, kolejna funkcja/ metoda jest do poprawki?
  • #16 15885209
    grko
    Poziom 33  
    A post numer dwa przeczytałeś uważnie?
REKLAMA