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)

 

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)

 

 

O autorze