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

mała sieć AVR na rs485, upgrade oporogramowania

hotdog 30 Wrz 2008 12:37 2240 8
REKLAMA
  • #1 5584937
    hotdog
    Poziom 26  
    Witam. Jestem w trakcie wykonywania małej sieci AVR'ów na rs485. Czy jest możliwość wgrania nowego oprogramowania do wszystkich układów naraz przez rs485? Jeżeli nie to czy jest możliwość do każdego po kolei? Czy inne wtedy mogą pracować, czy muszą być odłączone? Sieć mam "typową" 10 układów slave różniących się tylko eppromem (program taki sam) opracowany protokół zapytań-odpowiedzi. Żaden slave bez zapytania nie nadaje. Sterowanie kierunkiem transmisji przez port w µC, half duplex.

    Proszę o wskazanie kierunku w jakim mogę iść, ew projekty w miarę opracowane, w których zastosowano podobne rozwiązania.

    pozdrawiam hot-dog
  • REKLAMA
  • Pomocny post
    #2 5585003
    BoskiDialer
    Poziom 34  
    Zastanów się nad napisaniem własnego bootloadera. W nim musisz zawrzeć minimalny sterownik do obsługi Twojego protokołu (np odczyt adresu z eeprom, podstawowa komunikacja przez sieć jak nadawanie, odbiór), trochę kodu do programowania pamięci flash oraz zaimplementować prosty klient, który będzie odbierał dane przez sieć i zapisywał je do pamięci flash. Nie jest to żaden problem, trzeba tylko napisać trochę kodu, dużo też zależy od pomysłu samej komunikacji - czy wysyłasz jeden program jako broadcast do wszystkich jednocześnie bez potwierdzeń czy jako unicast do każdego układu z osobna z weryfikacją, czy jak. Aby nie trzeba było układów resetować manualnie, można dodać funkcję programowego resetu do właściwej aplikacji tak, aby nastąpił skok do bootloadera. Bootloader może po pewnym czasie bezczynności (np 0,5s) przechodzić do właściwego programu, wtedy można łatwo aktualizować układy selektywnie podczas gdy reszta sieci nadal działa. Po napisaniu minimalnego sterownika ograniczeniem staje się tylko maksymalny rozmiar bootloadera.
  • REKLAMA
  • #3 5585051
    hotdog
    Poziom 26  
    może coś napiszę sam, a tymczasem, czy mogę skorzystać z jakiegoś gotowego rozwiązania, zakładając że wyłączę na czas aktualizacji inne slave'y (zostawie tylko aktualizowanego). Czy sterowanie kierunkiem transmisji przez uC nie jest problemem? Czy gotowe rozwiązania zapewniają weryfikację? Może ktoś wskazać sprawdzony i w miarę dobrze opisany projekt bootloadera. Może szukam gotowca, ale na razie nie chce się nad tym skupiać. Na razie trzeba udoskonalić program slave'ów, napisać dla mastera i zrobić jakieś sensowne raportowanie na PC. Pozdrawiam.
  • #4 5585077
    BoskiDialer
    Poziom 34  
    Każde rozwiązanie jest dopasowane do konkretnego układu, więc tutaj możesz mieć problem ze znalezieniem gotowca. Jakkolwiek napisanie prostego bootloadera wcale nie jest skomplikowane.
  • REKLAMA
  • #5 5585129
    hotdog
    Poziom 26  
    na razie dzieki Tobie BoskiDialer a jak ktoś ma jeszcze jakieś sugestie to proszę pisać

    pozdrawiam hot-dog
  • Pomocny post
    #6 5585894
    acid12
    Poziom 21  
    inne sugestie ? ale całość została juz wyłożona, chcesz zdalnie wgrywać soft przez rs485, żeby to zrobić musisz napisać bootloader, czemu napisać a nie ściągnąć ? bo musi on być opracowany dla dla twojego protokołu którego używasz do przesyłania danych przez rs485.

    jezeli na wszystkich prockach ma być ten sam soft, to mój pomysł jest taki, że wysyłasz sygnał reset, uC po resecie wchodzi do bootloadera (sam) i czeka powiedzmy 50ms, jeżeli nic nie pojawi się na wejściach rs485 to uruchamia program, a jak rozpoczniesz transmisje (w jaki sposób włąśnie zależy od Ciebie) to bootloader zczyta dane i zapisze do flasha.

    O programowaniu pamięci jest w datasheecie.
    o bootloaderze tez. a na elektrodzie też już było kilka wątków, btw to nie jest proste, ale jak masz już gotową komunikacje po rs485 więc pewnie masz pojęcie jak i co się robi i pewnie sobie poradzisz :]

    w BL musisz zawrzeć chocby prymitywna obsługe rs485, może być bez potwierdzeń ale to juz zalezy od rozleglosci i struktury sieci, ale to pewnie przerabiałęś przy projekowaniu 'normalnej' pracy.

    bezpieczniej, adresować po 1 uC, wysylać reset, i updatować jego soft. Reszta uC nie będzie zapisywać instrukcji bo nie zostały zaadresowane :)

    w czasie update wysyłac bity potwierdzeń etc :) jak skończysz z pierwszym klockiem, przejść do następnego :)
  • Pomocny post
    #7 5586797
    zagwizdow
    Poziom 17  
    U atmela jest gotowy kod bootloadera ( plus plik exela generujacy konfiguracje dla konkretnego procka) włączanego stanem pinu co można sobie przerobić , są też kody programu na PC.

    ---
    AVR109: Self Programming
    i program chyba z avr911
  • #8 5588287
    hotdog
    Poziom 26  
    acid12 Ale jak już napisałem, jak bym wyłączył/odłączył inne urządzenia, to była by to w sumie normalna komunikacja jak po uart/rs z tym że jest sterowanie kierunkiem transmisji. Gdybym zrobił automatyczne sterowanie kierunkiem transmisji, to był by to praktycznie przezroczysty UART. OK, nieważne. Dzięki za odpowiedzi...

    pozdrawiam
  • REKLAMA
REKLAMA