Witam wszystkich,
Mój pomysł na firmware EFC-01 jest taki.
1. Nowy bootloader Dlaczego ? Obecny jest bardzo ubogi i nie daje za wiele możliwości. Po pierwsze mikrokontroler STM32F32429VIT6 dysponuje sporą ilością pamięci FLASH (2MB), więc można by go podzielić na partycje aby możliwe było używanie kilku różnych firmwarów w zależności od wybranej opcji. Pozwoli to na szybsze testowanie nowych wersji alternatywnego firmwaru.
Obecny podział jest taki:
Notacja "0x...." oznacza zapis w systemie szesnastkowym, brak prefixu 0x to zapis jest w systemie dziesiętnm. To dla osób nie związanych z programowaniem.
FLASH memory
Adres początkowy: 0x08000000
Adres końcowy: 0x08200000
Rozmiar: 0x200000 (2097152 bajtów)
SLOT0: (bootloader)
Adres początkowy: 0x08000000
Adres końcowy: 0x08020000
Rozmiar: 0x20000 (131072 bajtów)
SLOT1: (firware)
Adres początkowy: 0x08020000
Adres końcowy: 0x08095000
Rozmiar: 0x75000 (479232 bajtów)
Dodam, że nie zrozumiałe jest dla mnie wprowadzone ograniczenie przez Zamela co do SLOT1 o wielkości 0x75000 bajtów. Ograniczenie wynika ze sposobu obliczania sumy kontrolnej firmwaru w bootloaderze. Bootloader programuje w zakres pamięci od 0x08020000 wszystko co podamy na USB jako plik aktualizacji (ogólnie to tak wygląda bo szczegóły implementacji są troszeczkę bardziej zawiłe). Jednak przy starcie kontrolera obliczana i sprawdzana jest własnie suma kontrolna dla bloku o wielkości 0x75000 bajtów, która jeżeli jest błędna powoduje odmowę uruchomienia takiego oprogramowania.
Tak więc na moje zmarnowany zostaje zakres od 0x08095000 do 0x08200000 czyli 0x16B000 bajtów (1486848 bajtów),
to się nazywa rozrzutność.Proponowany przeze mnie nowy podział:
SLOT0: (bootloader)
Adres początkowy: 0x08000000
Adres końcowy: 0x08020000
Rozmiar: 0x20000 (131072 bajtów)
SLOT1: (firware-1)
Adres początkowy: 0x08020000
Adres końcowy: 0x08100000
Rozmiar: 0xE0000 (917504 bajtów)
SLOT2: (unused)
Adres początkowy: 0x08100000
Adres końcowy: 0x08120000
Rozmiar: 0x20000 (131072 bajtów)
SLOT3: (firware-2)
Adres początkowy: 0x08120000
Adres końcowy: 0x08200000
Rozmiar: 0xE0000 (917504 bajtów)
* SLOT1 - możliwe będzie umieszczenie oryginalnego firmwaru Zamela lub alternatywnego
* SLOT2 - na razie nie wykorzystany (może firmware wykonujący kopię zapasową karty SD na włożonego Pendriva lub odtwarzający kopie z Pena na kartę SD).
* SLOT3 - możliwe będzie umieszczenie tylko alternatywnego firmwaru.
Można zawsze sobie zaktualizować tylko wybrany SLOT i przetestować zmiany w danym firmwarze. Ograniczenie będzie tylko takie, że firmware ZAMELa będzie mysiał zawsze lądować w SLOT1 (nie możliwy do zmiany adres bazowy w pamięci FLASH - 0x08020000). Alternatywny będzie zawsze dostępny w dwóch wersjach dla SLOT1 i SLOT3.
Postaram się również ująć w bootloaderze możliwość aktualizacji z alternatywnych źródeł (np. aktualizacje pobierane z zewnętrznego serwera).
Wybór SLOTu będzie możliwy do wykonania podczas startu kontrolera przy użyciu przycisku RESET lub też poprzez specjalnie przygotowany pendrive. Pomiędzy restartami kontrolera będzie uruchamiany ostatni ustawiony SLOT. Więcej szczegółów opiszę w miarę pisania oprogramowania.
Nowy bootloader też będzie implementował funkcję sum kontrolnych i nie będzie możliwe wgranie innego firmwaru niż ten od Zamela lub alternatywnego. Ograniczenie to pozostawię ze względu na obietnicę jaką dałem Zamelowi, że nie otworzę zupełnie dostępu do kontrolera bo dało by to możliwość odczytania klucza używanego do szyfrowania/deszyfrowania pakietów radiowych. To niestety kolejny ZONK zamela, że dla całego systemy ExtaLife klucz jest niezmienny i taki sam dla wszystkich urządzeń. Obecnie SLOT0 zawiera powyższe klucze. Po ujawnieniu kluczy system komunikacji radiowej przestałby być bezpieczny i pozwoliłby na sniffowanie i podszywanie. A chyba nikt z nas nie chciałby żeby obcy sobie np otwierali bramę garażową w naszym domu
.
2. Firmware aktualizujący bootloaderDo aktualizacji bootloadera będzię niezbędne napisanie nowego firmwaru który go podmieni z zachowaniem pewnych informacji zawartych w przestrzeni SLOT0 (dane niezbędne do prawidłowej obsługi komunikacji systemu ExtaLife). Wykonanie tej operacji będzie konieczne w kilku krokach bo aktualizator bootloader będzie musiał tymczasowo nadpisać wersję w SLOT1 uruchomić się z niej, dokonać aktualizacji bootloadera w SLOT0 i ponownie załadować firmware właściwy do SLOT1. Instrukcja krok-po-kroku będzie dołączona przy publikacji nowego bootloader'a i aktualizatora.
3. Firmware alternatywnyTO BE CONTINUED...