Jak mogę wykonywać przyrostowe aktualizacje za pomocą lampy błyskowej, którą można usunąć tylko blokowo?

11

Scenariusz

Chcę zaktualizować niedrogie urządzenie IoT bezprzewodowo za pomocą nowego oprogramowania układowego aktualizującego mikrokontroler (y) urządzenia. Pamięć mikrokontrolera to pamięć flash w zakresie od 32 do 128 KB (liczy się każdy cent). Ta tania pamięć ma jedno główne ograniczenie: można ją usunąć tylko blokowo.

Pytanie

Czy to oznacza, że ​​nie mogę dokonać aktualizacji różnicowych ( delta )? Czy zawsze muszę aktualizować całą pamięć kontrolera (lub przynajmniej istotne części)?

Chcę zmniejszyć potrzebę flashowania wszystkiego i zaryzykować zepsucie urządzenia tak bardzo, jak to możliwe. Czy istnieją jakieś strategie podczas flashowania mikrokontrolerów w powietrzu?

Helmar
źródło
Co jest ważniejsze dla twojego kosztu lub najniższego poziomu ryzyka?
Bence Kaulics,
@BenceKaulics znajduję właściwą równowagę między nimi, tak myślę. W końcu ryzyko cegieł to także (ważony) koszt.
Helmar

Odpowiedzi:

8

Prosta odpowiedź brzmi: tak - potrzebujesz dużej ilości bloków pamięci flash, aby obsłużyć bootloader i obrazy kodu A / B, jeśli chcesz wysokiej niezawodności. Przed aktywacją nowego obrazu możesz napisać całość, zweryfikować ją i potencjalnie spróbować ponownie.

Jednak to jest drogie / niezawodny strategia i są rzeczy, które można zrobić, aby zmniejszyć obciążenie. Wsparcie niskiego poziomu dla aktualizacji OTA może być również częścią oprogramowania układowego lub systemu operacyjnego urządzenia, więc możesz uniknąć samodzielnego tworzenia, chyba że chcesz się uczyć. Ta funkcja może być opisana jako FOTA.

Partycjonowanie bazy kodu pozwala na przyrostowe aktualizacje, najlepiej, aby bootloader był w stanie nawiązać połączenie sieciowe, pobrać i zweryfikować kod bez potrzeby korzystania z zapasowego kodu użytkownika. Dzięki bramie lokalnej zarządzanie tym zadaniem może być delegowane z tanich punktów końcowych.

Wiele urządzeń ma niewielką ilość flashowania z wymazywaniem słów, a nawet w przypadku niepowodzenia można zwykle ustawić bity bez konieczności usuwania całego bloku. Tych funkcji można używać do manipulowania tabelami skoków i łączenia ze sobą kodu, który jest aktualizowany w blokach wielkości bloków. Nawet jeśli początkowo planowałeś pełną przestrzeń kodu A / B, być może będziesz musiał wrócić do bardziej złożonego schematu, gdy baza kodów wzrośnie za bardzo.

Aby wyjaśnić funkcjonalność, którą można osiągnąć dzięki wyrafinowanemu bezprzewodowemu oprogramowaniu sprzętowemu, moduł ładujący i potencjalnie główny stos komunikacyjny mogą pozostać rezydentne, podczas gdy pełna pozostała przestrzeń aplikacji użytkownika zostanie ponownie flashowana. Nie wymaga to narzutu (szczególnie, jeśli partycjonowanie bloków jest miękkie). W scenariuszu, w którym stos komunikacyjny wymaga aktualizacji, region ogólnie używany dla kodu aplikacji może być tymczasowo używany podczas pobierania i weryfikacji. Osiągnięcie tego wymaga pewnego wsparcia w SoC, ale urządzenia 2. i 3. generacji zaprojektowane z myślą o tym istnieją już.

Sean Houlihane
źródło
6

Chcę zmniejszyć potrzebę flashowania wszystkiego i zaryzykować zepsucie urządzenia tak bardzo, jak to możliwe. Czy istnieją jakieś strategie podczas flashowania mikrokontrolerów w powietrzu?

Oprócz kodu, który wykonuje aktualizację, która byłaby względnie statyczna, musisz przechowywać dwa obrazy w pamięci: obraz aktywny i obraz zapasowy. Ilekroć musisz zaktualizować, zrób to w kopii zapasowej, a następnie przełącz ją na aktywną. Po stabilizacji zaktualizuj stary aktywny obraz, który powinien być twoją kopią zapasową.

Mając to na uwadze, można stosować algorytmy wyrównywania zużycia podczas aktualizacji obu obrazów. Kod takich algorytmów może zająć około 10-15% całkowitej pamięci, ale warto wydłużyć żywotność urządzenia.

Wyrównaniem zużycia zazwyczaj zarządza kontroler flash, który wykorzystuje algorytm wyrównywania zużycia, aby określić, który blok fizyczny ma być używany przy każdym programowaniu danych. Istnieją dwa rodzaje wyrównywania zużycia dysku SSD: dynamiczny i statyczny. Dynamiczne wyrównywanie zużycia puli usuwa bloki i wybiera blok o najniższej liczbie wymazań dla następnego zapisu.

Z drugiej strony, statyczne wyrównywanie zużycia wybiera blok docelowy o najniższej ogólnej liczbie wymazań, kasuje blok w razie potrzeby, zapisuje nowe dane w bloku i zapewnia przenoszenie bloków danych statycznych, gdy ich liczba wymazań jest mniejsza niż pewien próg. Ten dodatkowy krok przenoszenia danych może spowolnić wydajność zapisu z powodu narzutu na kontroler pamięci flash, ale statyczne wyrównywanie zużycia jest znacznie bardziej skuteczne niż dynamiczne wyrównywanie zużycia w celu przedłużenia żywotności urządzeń półprzewodnikowych.

( Techtarget.com: Wyrównanie zużycia )

Leon Carlo Valencia
źródło
6

Freescale Semiconductor opisuje niezawodny sposób bezprzewodowego uaktualnienia oprogramowania wewnętrznego dla swoich mikrokontrolerów Kinetis .

Nazywa się to: Program Flash Memory Swap .

Systemy korzystające z wymiany pamięci flash

W urządzeniach z dwoma lub więcej wewnętrznymi blokami flash, które obsługują zamianę, podstawowy adres pamięci każdego bloku flash można wymienić. Lokalizacja adresu każdego bloku flash zostanie zamieniona w logicznej mapie pamięci urządzenia. Po resecie wbudowany system wymiany pamięci flash zasadniczo wybiera, które oprogramowanie wykonuje na podstawie lokalizacji bloku pamięci flash w logicznej mapie pamięci. Pozwala to na tworzenie kopii zapasowych kodu z dodatkową łatwością programowania. Można wykonać z jednego bloku podczas kasowania / programowania drugiego bloku. W urządzeniach Kinetis system wymiany pamięci flash monitoruje / kontroluje wszystkie etapy przejścia ze starej aplikacji do nowej; istnieje dodatkowe zapewnienie niezawodnego działania w przypadku utraty zasilania podczas jednego z tych etapów.

Zalety

  • Łatwość programowania. Aplikacja zawsze wykonuje się poza dolnym blokiem na mapie pamięci.
  • Tolerancja na straty mocy.
  • Nie wymaga bootloadera. Bez opóźnień do uruchomienia głównej aplikacji.
  • Dobrze nadaje się do wielozadaniowego systemu operacyjnego. Minimalny czas przestoju aplikacji. W systemie wielozadaniowym można nadal wykonywać główne zadania aplikacji, podczas gdy zadania w tle są uruchomione, aby zaktualizować nową kopię aplikacji.
  • Kopia zapasowa kodu. Możliwe jest przywrócenie do znanej działającej aplikacji.

Niedogodności

  • Dodatkowa przestrzeń pamięci flash wymagana do przechowywania kopii zapasowej.

Możesz aktualizować bloki, a następnie zamieniać je.

wymiana pamięci podczas aktualizacji wizualizowana

Powiązany dokument zawiera szczegółowy opis.

Zapewnia bezpieczniejsze aktualizacje oprogramowania, ale ponieważ wymaga więcej pamięci flash, z pewnością kosztuje więcej . Również nie ma zastosowania do każdego typu mikrokontrolera, tylko te, które obsługują wewnętrzne bloki Flash-swap.

Bence Kaulics
źródło
2
Wygląda to świetnie i wygląda na rozwiązanie, które z pewnością należy wziąć pod uwagę, jeśli można je zrównoważyć z wymaganiami dotyczącymi kosztów. + 1
Helmar