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

[STM32F10X][C/Ride-7] upgrade programu przy Read-Out Protect

xadamus 26 Gru 2011 23:25 867 5
  • #1 26 Gru 2011 23:25
    xadamus
    Poziom 9  

    Witam.
    Jestem w trakcie pisania programu do zdalnego/lokalnego upgrade'u oprogramowania. Produkcyjnie program oczywiscie ma byc zabezpieczeony przez odczytem i tu pojawil sie problem. Okazalo sie ze przy RDP aktywnym (Read-Out protect) sa automatycznie zabezpieczone przed zapisem pierwsze strony flasha, co uniemozliwia mi calkowity upgrade softu. Przy RDP wylaczonym wszystko juz mi pieknie dziala (mass erase + wykonanie funkcji upgrade z RAM przepisujacej program z zewnetrznego flasha do wewnetrznego) . Niestety potem przy RDP ustawionym nie moge zapisac pierwszych sektorow z wyzej wymienionego powodu. Czy jest mozliwosc odbezpieczenia tych sektorow bez ruszania bitu RDP ? Bo wylaczenie przed upgradem RDP, powoduje automatyczny mass erase ale potem niestety potrzebny jest reset procesora, a wiec nie ma juz kodu ktory moglby wykonac upgrade...

    pozdrowka

    0 5
  • #2 27 Gru 2011 08:25
    Freddie Chopin
    Specjalista - Mikrokontrolery

    xadamus napisał:
    Bo wylaczenie przed upgradem RDP, powoduje automatyczny mass erase ale potem niestety potrzebny jest reset procesora, a wiec nie ma juz kodu ktory moglby wykonac upgrade...

    Trzeba przekopiować odpowiedni kod do RAM - reset go nie kasuje. Trzeba oczywiście zadbać o to, żeby układ uruchomił się potem z tego RAMu... Ewentualnie na początku flasha trzymasz niezmienialny bootloader (ten Twój). Ewentualnie po prostu nie używasz pierwszej strony flasha [;

    4\/3!!

    0
  • #3 27 Gru 2011 11:54
    xadamus
    Poziom 9  

    A jak wymusic uruchomienie procesora z RAM bez manipulowania pinami BOOTx ? (bo upgrade bedzie głownie zdalny). I co powinienem zainicjowac aby poprawnie dzialaly procedury C bez uzywania zadnych bibliotek (np. stos itp)

    A co do trzeciej opcji (nie uzywanie pierwszych stron flasha): jak to zrobic aby linker umiescil tablice wektora przerwan pod innym np 0x800:1000 ale jednoczesnie oryginalny (po resecie) adres bazowy wektora przerwan byl rownoczesnie pod adresem 0x800:0000 ?

    pozdrowka

    0
  • #4 27 Gru 2011 12:30
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Sprawa jest dosyć skomplikowana, proponuję po jednym pytaniu na raz

    xadamus napisał:
    mus"]A jak wymusic uruchomienie procesora z RAM bez manipulowania pinami BOOTx ?

    To niestety trzeba zrobić w jakiś sposób sprzętowo, lub poexperymentować z różnymi trybami resetu programowego (są dwa - być może w jednym można przestawić tablicę wektorów do RAM i zresetować układ, a potem on się uruchomi tak jak trzeba - bez zwracania uwagi na piny BOOTx).

    xadamus napisał:
    I co powinienem zainicjowac aby poprawnie dzialaly procedury C bez uzywania zadnych bibliotek (np. stos itp)

    Stos i zmienne (;

    xadamus napisał:
    A co do trzeciej opcji (nie uzywanie pierwszych stron flasha): jak to zrobic aby linker umiescil tablice wektora przerwan pod innym np 0x800:1000 ale jednoczesnie oryginalny (po resecie) adres bazowy wektora przerwan byl rownoczesnie pod adresem 0x800:0000 ?

    Można zrobić dwie kopie wektora przerwań - na przykład.

    4\/3!!

    0
  • #5 27 Gru 2011 14:19
    markosik20
    Poziom 33  

    Proponuję Ci coś co stworzyłem dla LPC'ka (z pomocą Freddie'go).
    1. Na pierwsze sektory Flash'a piszesz bootloader który zawsze startuje jako pierwszy.
    2. Bottloader sprawdza czy ma zrobić upgrade, a jeżeli nie , to uruchamia właściwy program.
    3. Sektory z boottloader'em możesz zablokować do odczytu.

    Wtedy właściwy plik .bin z programem możesz bez problemu udostępniać (bo nikt go nie uruchomi nie wiedząc z którego miejsca powinien startować). Dodatkowo możesz sobie każdy bajt w pliku .bin zaszyfrować po swojemu co jeszcze bardziej utrudni pracę komuś kto chciałby to rozszyfrować. Takie rozwiązanie pozwala na bezproblemowe udostępnianie upgrade'u dla swoich urządzeń. Jeszcze w sofcie możesz sobie zaszyfrować numer seryjny procka i program nie zostanie uruchomiony na sprzęcie który nie wyszedł od Ciebie :-)

    0
  • #6 27 Gru 2011 15:44
    Freddie Chopin
    Specjalista - Mikrokontrolery

    markosik20 napisał:
    nikt go nie uruchomi nie wiedząc z którego miejsca powinien startować

    Mając bina i wiedząc, że to na Cortexa taką informację można odczytać po trzech sekundach - wystarczy przejrzeć adresy z tablicy wektorów.

    4\/3!!

    0