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)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#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. 2. LPC1343 z włączonym CRP2 (tryb ISP przez UART i FlashMagic)