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

Aktualizacja oprogramowania w mikrokontrolerze przez moduł GSM SIM868E i bootloader AVR231

Karol966 21 Gru 2021 23:42 420 3
REKLAMA
  • #1 19776245
    Karol966
    Poziom 31  
    Cześć i czołem.

    Zastanawiam się w jaki sposób (o ile się da) mogę dokonać aktualizacji oprogramowania w mikrokontrolerze poprzez moduł GSM (SIM868E). Prototyp urządzenia wysyła dane na serwer przez HTTP metodą POST. Kolega obsługujący serwer zapewnił mnie że może z nim zrobić "wszystko" czyli być może mógłby zastosować tam algorytm update z AVR231 (co i jak jeszcze nie mam pojęcia więc to co napisałem może być całkowitą bzdurą - jeśli tak to przepraszam). Pytanie czy to dobry kierunek rozwiązania problemu aktualizacji oprogramowania?
    Znalazłem coś takiego: https://github.com/shadlyd15/AirBootGSM ale nie zdążyłem tego dokładnie przeanalizować po plikach a opis wydaje mi się niewiele tłumaczyć.

    PS. Jeżeli ktoś zna te moduły GSM to proszę aby napisał jakie znaczenie ma prędkość/ baud kupionego modułu? W handlu są dostępne zarówno 9600 jaki i 115200. Prędkości te można zmieniać poprzez firmware samego modułu (do narzędzia i samego pliku jeszcze nie dotarłem). Znalazłem jednak komendę AT do zmiany prędkości:
    Cytat:
    AT+IPR
    ale nawet jej nie zdążyłem przetestować bo po prostu ustawiłem baud w procku na na 9600 chociaż moduł mam fabrycznie 115200 po czym wysłałem zgodnie z datasheetem "AT" a moduł sam dopasował BAUD. Po co zatem to rozróżnienie modułów w ofertach dystrybutorów?

    Pozdrawiam,
    Karol
  • REKLAMA
  • #2 19776329
    mpier
    Poziom 29  
    Cześć,
    pewnie że możesz. Mikrokontrolerowi raczej wszystko jedno skąd pochodzą dane zapisane we flash przez bootloader. AVR231 przedstawia sposób zaszyfrowania wsadu, jeśli nie potrzebujesz AES, będzie łatwiej. Ogólnie coś takiego wyjdzie: start z przyciskiem "update", sprawdzenie nowego firmware na serwerze i zapisanie do flash, albo start bez przycisku, weryfikacja pamięci flash i uruchomienie programu.

    Pozdrawiam.
  • REKLAMA
  • #3 19776825
    Karol966
    Poziom 31  
    Dzięki za szybką odpowiedź. Wstępnie chciałem wykorzystać AVR231 z racji szyfrowania AES (chodzi o zabezpieczenie firmware uC), aczkolwiek tak myślę, że skoro to procesor będzie sam przechodził w tryb aktualizacji (znając serwer itd itp) a serwer będzie weryfikował jego ID (poprzez IMEI) to nawet jeśli ktoś już wpiął by się fizycznie między modułem SIM868 a mikrokontrolerem i skopiował czysty flash (podzielony na ramki, zgodnie z notą aplikacyjną) to i tak był by ten plik bezużyteczny. Czyli wydaje mi się, ze szyfrowanie przesyłanego firmware nie jest konieczna. Co o tym myślisz?

    W czasie wgrywania nowego firmware cały plik jest podzielony na ramki, po wysłaniu ramki jest oczekiwanie na potwierdzenie jej odbioru. Czyli komunikacja musi być dwustronna a pośrednikiem jest moduł GSM. Póki co niewiele wiem o tym jak to zrobić więc każde zagadnienie wydaje się zagadką.

    Masz jakaś sugestię w jaki sposób wykryć konieczność aktualizacji? Myślałem żeby np po północy sprawdzać na serwerze czy jest polecenie update za pomocą metody GET (pod wskazanym adresem miałby się znaleźć krótki tekst oznaczający że procesor ma przejść do bootloadera).

    Poniżej funkcja update (dla PC):
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Nie rozumiem skąd wiemy jaki jest rozmiar ramki danych frameSize? Czy przed pętlą:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    jest gdzieś inicjalizowana zmienna frameSize? Bo dopiero w pętli jest linia:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod



    PS. Potrafisz odpowiedzieć mi na wcześniejsze pytanie nt fabrycznego baudu? Programowo dałem radę go zmniejszyć, pytanie czy jeśli kupię moduły 9600 to również będę mógł zwiększyć baud do 115200?
  • #4 19777048
    mpier
    Poziom 29  
    Tego nie znam, ale na pierwszy rzut oka wychodzi, że długość danych zapisana jest na pierwszych dwóch bajtach "ramki", a frameSize to ta długość plus te dwa bajty. Dalej znowu dwa bajty (długość danych) i dane.

    Jeśli możesz zaprogramować ten modem własną aplikacją, to nie musisz modyfikować bootloadera, ale to może być trudne.

    Jeśli masz źródła bootloadera, to możliwe, że wystarczy dodać funkcję pobierającą ramki, np. za pomocą komend AT HTTP albo FTP.
REKLAMA