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

[STM32] - Zabezpieczenie pamięci flash przed odczytem.

dziechu 06 Kwi 2014 00:26 3093 12
REKLAMA
  • #1 13479847
    dziechu
    Poziom 27  
    Posty: 1609
    Pomógł: 27
    Ocena: 69
    Tak dopiero dzisiaj wpadł mi do głowy ten temat - czy procesory STM32 można jakoś zabezpieczyć przed odczytem/kopiowaniem programu? Tak jak to jest np. w AVRach? Nic na ten temat nie znalazłem w dokumentacji.
  • REKLAMA
  • Pomocny post
    #2 13480103
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    No to wyjątkowo słabo tą dokumentację przeglądałeś (;

    Na pierwszej stronie manuala masz coś takiego:

    Cytat:
    For information on programming, erasing and protection of the internal Flash memory
    please refer to:
    ● PM0075, the Flash programming manual for low-, medium- high-density and
    connectivity line STM32F10xxx devices
    ● PM0068, the Flash programming manual for XL-density STM32F10xxx devices.


    Oczywiście dla innych rodzin będą inne numery dokumentów, ale nazwa podobna "flash programing ...".

    4\/3!!
  • #3 13480286
    dziechu
    Poziom 27  
    Posty: 1609
    Pomógł: 27
    Ocena: 69
    No to tylko potwierdza któryś tam raz tezę o braku uporządkowania informacji w dokumentacji STM. Fakt - nigdy nie przeczytałem np. RM0008 od deski do deski, zawsze czytam tylko fragment dotyczący konkretnego fragmentu procesora (nie wystarczy przeczytać jakiś 1100 stronicowy dokument, trzeba jeszcze zapamiętać gdzie co było...). W tym wypadku znowu - zamiast przeczytać CAŁY dokument, ograniczyłem się do fragmentu Embedded Flash memory, (zarówno w RM0008 jak i STM32F103xC.... itd.) a co za osioł by właśnie tam szukał i co za osioł by tam umieścił taką informację! Dziękuję za naprowadzenie.

    Dodam że podobna sytuacja była z taktowaniem timerów - informacja o tym, że timy są taktowane x1 jeżeli szyna dla niego nie jest dzielona i x2 jeżeli jest, jest przy opisie RCC, ok, może tam być, ale taka informacja jest potrzebna przy konfiguracji TIM a nie RCC, więc tym bardziej powinna być choćby krótka notka przy np. prescalerze, żeby wiedzieć lub choćby przypomnieć sobie dla uniknięcia niespodzianek.
  • REKLAMA
  • #4 13480329
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    dziechu napisał:
    Dziękuję za naprowadzenie.

    Ctrl+F, wpisujesz "protection" i klikasz ENTER - ot cała filozofia. Ja też nigdy nie przeczytałem tego dokumentu w całości, bo i po co [;
  • #5 13480369
    dziechu
    Poziom 27  
    Posty: 1609
    Pomógł: 27
    Ocena: 69
    Freddie Chopin napisał:
    Ctrl+F, wpisujesz "protection" i klikasz ENTER

    No tak, na to nie wpadłem:) Nie świadczy to jednak dobrze o dokumencie, skoro nie można szukać tam gdzie można by się takiej informacji spodziewać, ale trzeba po całym dokumencie.

    A jak w praktyce się to robi? I jak to działa? Bo ustawiane jest programowo, a programator 'wchodzi' do pamięci nie uruchamiając programu, nie bardzo rozumiem zasadę.
  • REKLAMA
  • Pomocny post
    #6 13480975
    nsvinc
    Poziom 35  
    Posty: 2870
    Pomógł: 262
    Ocena: 88
    Kontroler flasha to nadal tylko peryferial memory-mapped, wiec SFR w ktorym ustawiasz protekcje niczym sie nie rozni od SFRów od np. SPI, i dokladnie tak samo mozna go zapisać przez SWD/JTAG. A to juz wprost odpowiedz na twoje pytanie.
    SWD/JTAG pozwala na rw dowolnego 32bitowego adresu w losowym momencie, niezaleznie od tego, czy rdzen wykonuje kod, czy nie.
  • #7 13481577
    dziechu
    Poziom 27  
    Posty: 1609
    Pomógł: 27
    Ocena: 69
    Ok, ale nadal nie rozumiem - Co z tego że że odpowiedni SFR zapiszę np. w trakcie programowania, jak przecież żaden rejestr nie utrzymuje wartości bez zasilania - po wyłączeniu napięcia zasilania wszystkie rejestry tracą swoje wartości. Wytłumacz jaśniej, bo zupełnie nie wiem jak to ma działać. Czy to jest jakiś rejestr w pamięci flash? Ustawiany jest w trakcie programowania? Nie widzę zadnych opcji typu protect w menu w ST_Link Utility.

    Dodano po 4 [minuty]:

    Ok, jest w Option bytes opcja Read Out Protection.

    Jeżeli ustawię Enabled i Apply, zostanie zabezpieczony program przed odczytem, tak? Czy nie stracę dostępu do procesora? Będzie można znowu ustawić Disabled, ale wtedy zostanie skasowana pamięć czy jak? Proszę o informacje jak tego używać, zanim stracę dostęp do jakiegoś procesora:) Wolę nie eksperymentować z takimi ustawieniami przed uzyskaniem pewności.
  • REKLAMA
  • #9 13481682
    dziechu
    Poziom 27  
    Posty: 1609
    Pomógł: 27
    Ocena: 69
    A, PM0042, bo na pierwszej stronie RM0008 Rev13 mam RM0042 - copy-paste:
    -----------------------
    RM0042, the Flash programming manual for low-, medium- high-density and
    connectivity line STM32F10xxx devices
    -----------------------
    i miałem problem ze znalezieniem - nie wiem czy zmieniają nazwy, czy kolejny błąd. Ale tak po ludzku - chciałbym się dowiedzieć od kogoś kto tego używa, nie tylko czytać "jak powinno działać" - bo może będzie jakiś kolejny błąd... ;)
  • #11 13481721
    dziechu
    Poziom 27  
    Posty: 1609
    Pomógł: 27
    Ocena: 69
    No to już jakaś pocieszająca informacja, choć raz już miałem problem wprowadzając w programie blokadę SWD i JTAG, musiałem trochę pokombinować z programatorem i przyciskiem RESET, żeby programator załapał kontakt z procesorem przed wykonaniem pierwszych rozkazów.

    Dodano po 7 [minuty]:

    Mam pytanie bardziej praktyczne - jak tego używać w ST_Link Utility. W Option bytes w Read Out Protection muszę ustawić Enable i kliknąć Apply, tak? Na dole mam Write Protection i wszystkie Page - to dotyczy tylko blokady zapisu i do blokady czytanie tam nie trzeba nic zaznaczać, tak?

    Dodano po 59 [minuty]:

    Ok, to tak działa - po włączeniu zabezpieczenia Read Out Protection - Enable i Apply, procesor staje się niedostępny dla odczytu pamięci flash. Po ponownym odbezpieczeniu - Disable - Apply, procesor się odblokowuje, ale zostaje skasowana cała pamięć flash.
  • #12 13482053
    nsvinc
    Poziom 35  
    Posty: 2870
    Pomógł: 262
    Ocena: 88
    o no widzisz, opanowales temat ;) co do stlinka nie pomoge, nigdy w zyciu go w rekach nie mialem...

    Cytat:
    wprowadzając w programie blokadę SWD i JTAG[...]

    Znam to ;] Jednak jesli chcesz maximum security, to dopisujesz druga instrukcje w rozbiegowce (tuz po inicjalizacji stosu) ktora wylacza SWD/JTAG (jeden zapis stalej pc-relative do AFIO->MAPR). Wtedy jest hardcore ;]

    STM32 ciezko wprowadzic w głuchy stan, w przeciwienstwie do gwiazdeczek od NXP, tam to rdzen bardzo latwo moze wylaczyc wszystkie zegary, w tym swoj, na zawsze; zadnych zabezpieczen nie ma. Wtedy tylko pomaga wstać go do bootloadera w ROMie aby odzyskac komunikacje po SWD...
  • #13 13553092
    dziechu
    Poziom 27  
    Posty: 1609
    Pomógł: 27
    Ocena: 69
    Ok, to tak działa - po włączeniu zabezpieczenia Read Out Protection - Enable i Apply, procesor staje się niedostępny dla odczytu pamięci flash. Po ponownym odbezpieczeniu - Disable - Apply, procesor się odblokowuje, ale zostaje skasowana cała pamięć flash.

Podsumowanie tematu

✨ W dyskusji poruszono temat zabezpieczenia pamięci flash w procesorach STM32 przed odczytem i kopiowaniem programów. Użytkownicy wskazali, że dokumentacja STM32, mimo że zawiera informacje o ochronie, jest nieuporządkowana, co utrudnia znalezienie potrzebnych danych. Zwrócono uwagę na możliwość ustawienia opcji Read Out Protection w narzędziu ST-Link Utility, co skutkuje zablokowaniem dostępu do pamięci flash. Użytkownicy podkreślili, że po włączeniu tej opcji procesor staje się niedostępny dla odczytu, a przy wyłączeniu tej ochrony cała pamięć flash jest kasowana. Wskazano również na możliwość dalszego zwiększenia bezpieczeństwa poprzez wyłączenie interfejsów SWD/JTAG po inicjalizacji.
Wygenerowane przez model językowy.
REKLAMA