LinkedIn YouTube Facebook
Szukaj

Newsletter

Proszę czekać.

Dziękujemy za zgłoszenie!

Wstecz
Artykuły

Zastosowanie zabezpieczenia kodu przed odczytem w mikrokontrolerach LPC1100 oraz LPC1300

Bootloadery zastępcze/szyfrowane

Jeżeli projektant zamierza poświęcić więcej wysiłku na dodatkowe zwiększenie ochrony urządzenia przed kradzieżą projektu, to pod uwagę są brane aktualizacje w miejscach zastosowania. Jeśli pewna aplikacja włącza poziom CRP, to zwykle dobrą praktyką jest opracowanie własnego szyfrowanego zastępczego bootloadera do aktualizacji w miejscu zastosowania. Dystrybucja nieszyfrowanego kodu w procesie aktualizacji nie jest zgodna z koncepcją zapewnienia ochrony projektu.

Dla projektów bazujących na rodzinie mikrokontrolerów  LPC1300 i wykorzystujących interfejs USB można również rozważyć implementację bazującego na USB szyfrowanego bootloadera zastępczego, jak jest zazwyczaj stosowane w systemie DFU (Device Field Upgrade – uaktualnienie urządzenia w miejscu zastosowania)

Tryb NO_ISP

Rodziny produktów LPC1100/LPC1300 wyposażono w nowy tryb CRP: „NO_ISP”. Takie rozwiązanie powstrzymuje układowy bootloader przed próbkowaniem pinu ISP przy uruchamianiu. Istnieją przypadki, w których urządzenia zewnętrzne mogą sterować sygnałem na pinie ISP urządzenia. W przypadku awarii zasilania, objawiającej się zanikiem lub spadkiem napięcia zasilania, układy LPC1100/LPC1300 może się ponownie uruchomić i okaże się, że pin ISP został błędnie zinterpretowany. Aby nie dopuścić do przypadkowego wywołania ISP, projektanci mogą włączyć tryb „NO_ISP” (Brak ISP). Należy pamiętać, że tryb NO_ISP nie zapobiega kradzieży własności intelektualnej, ponieważ dostęp debuggera pozostaje włączony, a zawartość pamięci Flash może być odczytana za pomocą tego mechanizmu.

Przykład: Zastosowanie CRP z LPCXpresso

Platforma LPCXpresso jest dostarczana z projektami dla rodzin produktów zarówno LPC1100, jak i LPC1300, które korzystają z zabezpieczeń CRP. Projektanci, którzy planują wykorzystanie zabezpieczeń CRP w swoich aplikacjach mogą użyć tych przykładowych projektów jako punktu wyjścia dla swoich własnych projektów.

Przy korzystaniu z ISP w oparciu o UART z mikrokontrolerem LPC1300 i FlashMagic, należy odnieść się do instrukcji obsługi użytkownika płytki rozwojowej LPCXpresso Base Board’s User Manual, w celu poznania szczegółów na temat poprawnej konfiguracji zworek. Przy wszystkich zworkach znajdujących się w domyślnych pozycjach, płytka ewaluacyjna LPC1300 będzie działać w trybie włączonego ISP przez USB (USB based ISP mode).

Układ LPC1100 jest w stanie działać z programem FlashMagic przy wszystkich zworkach znajdujących się w domyślnych pozycjach.

Kontrola zabezpieczeń CRP w projektach LPCXpresso odbywa się w dwóch częściach:

  • zdefiniowanie stałej, która ustawia odpowiedni poziom zabezpieczenia CRP,
  • skonfigurowanie linkera (programu łączącego) za pomocą własnych skryptów w celu umieszczenia stałej w komórce pamięci CRP o adresie (0x2FC).

Na listingu 1 pokazano, w jaki sposób programista może zdefiniować stałą, która zostanie przypisana pożądanemu poziomowi zabezpieczenia CRP. Definicja atrybutów gwarantuje, że stała (w tym przykładzie CRP_WORD) zostanie umieszczona przez linker w specjalnej sekcji pamięci „crp”.

 

Listing 1. Fragment kodu z przykładu CRP (kod źródłowy w języku C)

#define NO_CRP	0xFFFFFFFF
…
#define NO_ISP_MAGIC	0x4E697370
…
#define CRP1_MAGIC	0x12345678
…
#define CRP2_MAGIC	0x87654321
…
/*ZAGROŻENIE CRP3 ZABLOKUJE CZĘŚĆ DLA WSZYSTKICH ODCZYTÓW I ZAPISÓW*/
/*********** #define CRP3_MAGIC xxxx 0x43218765 *************/
…
#define CURRENT_CRP_SETTING NO_CRP
…
  attribute 	 ((section(".crp"))) const uint32 t CRP_WORD =
CURRENT_CRP_SETTING;
…

 

Druga część procesu złożonego z dwóch etapów polega na skonfigurowaniu linkera w celu umieszczenia stałej we właściwej komórce pamięci. Odbywa się to poprzez własne skrypty linkera. Proces ręcznej konfiguracji linkera w LPCXpresso jest opisany w Załączniku A.

Główną różnicę między własnym (użytkownika) skryptem linkera, a generowanym automatycznie, widać na listingu 2. Należy zauważyć, że sekcja „crp” jest zdefiniowana w skrypcie, i zaczyna się od adresu 0x2FC, tj. komórki pamięci CRP dla układów LPC1100/LPC1300.

 

Rys. 1. LPC1343 z włączonym CRP2 (tryb ISP przez USB)

Rys. 1. LPC1343 z włączonym CRP2 (tryb ISP przez USB)

 

 

Rys. 2. LPC1343 z włączonym CRP2 (tryb ISP przez UART i FlashMagic)

Rys. 2. LPC1343 z włączonym CRP2 (tryb ISP przez UART i FlashMagic)

 

 

Polski portal branżowy dedykowany zagadnieniom elektroniki. Przeznaczony jest dla inżynierów i konstruktorów, projektantów hardware i programistów oraz dla studentów uczelni technicznych i miłośników elektroniki. Zaglądają tu właściciele startupów, dyrektorzy działów R&D, zarządzający średniego szczebla i prezesi dużych przedsiębiorstw. Oprócz artykułów technicznych, czytelnik znajdzie tu porady i pełne kursy przedmiotowe, informacje o trendach w elektronice, a także oferty pracy. Przeczyta wywiady, przejrzy aktualności z branży w kraju i na świecie oraz zadeklaruje swój udział w wydarzeniach, szkoleniach i konferencjach. Mikrokontroler.pl pełni również rolę patrona medialnego imprez targowych, konkursów, hackathonów i seminariów. Zapraszamy do współpracy!