GangFlasher-ST – szybkie programowanie systemowej pamięci Flash w modułach VisionSOM-STM32MP1
Firma Elprotronic specjalizuje się w przemysłowych rozwiązaniach programistycznych dla systemów wbudowanych. W ofercie kanadyjskiego producenta można znaleźć nie tylko dedykowane rozwiązania sprzętowe, ale też innowacyjne oprogramowanie optymalizujące procesy programowania pod kątem skrócenia czasu programowania i zwiększenia liczby jednocześnie programowanych układów. Przykładem możliwości rozwiązań tej firmy jest program GangFlasher-ST, który umożliwia jednoczesne programowanie pamięci Flash w 8 systemach docelowych z prędkościami nawet do 20x wyższymi niż standardowe połączenie DFU USB.
Każdy, kto staje przed zadaniem stworzenia autorskiego oprogramowania dla swojego systemu wbudowanego, zdaje sobie sprawę z faktu, że im bardziej rozbudowany program, tym dłużej będzie trwał zapis jego binarnej postaci w pamięci urządzenia. Od wielu lat, w systemach embedded króluje Linux, pozwalając na tworzenie coraz bardziej rozbudowanych aplikacji o bardzo zaawansowanych funkcjach, ale też o niebanalnej oprawie graficznej. Niejednokrotnie wynikowe obrazy systemów rozmiarami przekraczają gigabajty, zaś uwieńczeniem projektu jest przeważnie zapis tych plików do pamięci Flash fizycznego modułu. Producenci systemów mikroprocesorowych starają się ułatwiać programistom proces wgrywania kodu, często rezygnując z konieczności używania drogich i zaawansowanych programatorów sprzętowych, wykorzystując w ich miejsce dostępne w systemie złącze USB-OTG, pracujące w trybie DFU (Device Firmware Update).
Ceną za ułatwienie dokonywania zapisu bywa prędkość wykonywania tej operacji, która w przypadku części systemów na rynku ograniczona jest możliwościami interfejsu USB pracującego w trybie Full Speed (12 Mb/s). W warunkach produkcyjnych częstym problemem jest również niska przejrzystość interfejsu oprogramowania ładującego CubeMX – w szczególności, gdy programowana jest większa liczba modułów urządzeń. Nie zawsze bowiem od razu jasne jest, która z wielu podłączonych płytek jest właśnie programowana, która jest już gotowa do uruchomienia, a na której wystąpił błąd programowania.
GangFlasher-ST
Ktokolwiek miał styczność z mikroprocesorami STM32MP1, najpewniej wie, że możliwe jest programowanie ich w systemie, m.in. przez interfejs USB-OTG. Tą drogą można zarówno dokonać ładowania do Flash-u obrazów partycji, jak i zapisania do układu konfiguracji bitów OTP (One-Time Programmable). Niestety w mikroprocesorach z tej rodziny, komunikacja poprzez USB-OTG domyślnie funkcjonuje tylko w trybie DFU i ma bardzo ograniczoną prędkość, a przecież nieraz przesyłane są pliki o rozmiarach setek megabajtów. Jeśli więc w pamięci systemu Embedded ma znaleźć się kompletny obraz systemu Linux, sam proces programowania w tym trybie może trwać nawet powyżej 10 minut.
Problem ten postanowiła definitywnie rozwiązać kanadyjska firma Elprotronic, prezentując swoje rozwiązanie – program GangFlasher-ST, dedykowany dla systemów działających w oparciu o mikrokontrolery oraz mikroprocesory serii STM32MP1.
Oprogramowanie to w przypadku komunikacji z STM32MP1, wykorzystuje pełną przepustowość interfejsu USB 2.0, pracującego w trybie High-Speed (480 Mb/s), co daje znaczne korzyści czasowe w stosunku do wgrywania za pośrednictwem „domyślnego” trybu DFU (12 Mb/s). Różnica w sposobie komunikacji poprzez USB pozwala na osiągnięcie realnej przepływności danych powyżej 40 MiB/s. Oprogramowanie GangFlasher-ST umożliwia równoczesne programowanie tym sposobem nawet do 8 układów docelowych, co z pewnością jest rozwiązaniem wielu problemów znanych w realiach produkcyjnych – gdzie liczy się zarówno ilość jak i czas. Dzięki tworzeniu niezależnych wątków do obsługi programowania układów docelowych, czynności zapisu wykonywane są równolegle, a wystąpienie ewentualnego błędu na którejkolwiek z programowanych płytek nie rzutuje na wydajność czy stabilność całości procesu.
Fot. 1. Wygląd okna programu GangFlasher-ST podczas jednoczesnego programowania pamięci Flash w 8 systemach VisionSOM-STM32MP1
Graficzny interfejs użytkownika programu GangFlasher-ST (rysunek 1) jest nastawiony na proste, intuicyjne i przejrzyste programowanie wielu płytek docelowych w warunkach produkcyjnych. Duży nacisk położono na łatwą i szybką identyfikację dołączonych płytek i wyświetlanie w czytelny sposób statusu kolejnych etapów programowania. Nie zabrakło jednak też przydatnych wskaźników – jak na przykład wskaźnika globalnego statusu czy licznika ilości zaprogramowanych modułów.
Szczególną uwagę warto zwrócić na dolne okna tekstowe raportów, przedstawiające w czytelny sposób informacje z przebiegu programowania. Możliwy jest wybór wyświetlania zarówno logów dla wszystkich płyt jednocześnie, jak i tylko dla jednej wybranej z ośmiu. Ułożenie przycisków jest intuicyjne i nie pozostawia pola do przypadku. Użytkownik ma możliwość zarówno automatycznego, jak i ręcznego przypisania w programie portów USB komputera do poszczególnych płyt docelowych, tak by w każdej chwili mieć pewność, które z fizycznych urządzeń odpowiada danej pozycji na liście aplikacji. Aby jednak zwiększyć pewność identyfikacji, aplikacja GangFlasher-ST pozwala również na przypisanie fizycznych linii GPIO procesora STM32MP1 do sygnalizacji stanów, takich jak: programowanie, sukces, błąd. Oznacza to dokładnie tyle, że łatwo i intuicyjnie można skonfigurować np. wbudowane w system Embedded diody świecące do sygnalizacji błędu lub poprawnego zaprogramowania pamięci urządzenia. Mając więc na stanowisku pracy podłączonych 8 płyt docelowych, jednym rzutem oka można bezbłędnie ocenić, która z nich nie wymaga już dalszej obsługi i może być zmieniona na jeszcze nie zaprogramowany egzemplarz.
Moduły SOM firmy SoMLabs ze wsparciem w aplikacji GangFlasher-ST
Dla ułatwienia obsługi, producent przygotował konfiguracje dla konkretnych, popularnych modeli zestawów uruchomieniowych, bazujących na układach STM32MP1 (fotografia 2). Wśród wyróżnionych w ten sposób produktów znalazły się moduły VisionSoM-STM32MP1 (SLS18) polskiego producenta SoMLabs. Dzięki temu użytkownik mający jedynie dedykowany dla danej płyty obraz systemu operacyjnego może bez zbędnych trudności rozpocząć pracę z takowym urządzeniem.
Fot. 2. Wygląd modułów VisionSOM-STM32MP1
W jednym ze swoich benchmarków, producent Elprotronic określa rzeczywiste, zmierzone prędkości zapisu do pamięci na poziomie 33 MB/s i odczytu na poziomie 75 MiB/s przy jednoczesnej obsłudze ośmiu płyt VisionCB-STM32MP1-STD (fotografia 3) z umieszczonymi w nich modułami VisionSoM-STM32MP1 w wersji z pamięcią eMMC. Takie prędkości pozwoliły na zaprogramowanie wszystkich ośmiu płyt przykładowym obrazem o rozmiarze ok. 930 MB w czasie zaledwie 86 sekund! Dla porównania, ładowanie tego samego obrazu do jednej płytki, za pomocą narzędzia producenta trwa niemalże 10 minut.
Fot. 3. Wygląd płyty bazowej VisionCB-STM32MP1-STD z zainstalowanym modułem VisionSOM-STM32MP1
Nie tylko dla Windows
Niewątpliwie w świecie urządzeń wbudowanych Linux jest systemem bezkonkurencyjnym. Coraz częściej jednak system ten też pojawia się na komputerach klasy PC, szczególnie tam, gdzie potrzeba jest niezawodności i przewidywalności działania – a więc m.in. w realiach produkcyjnych. Mając to na uwadze, producent udostępnia GangFlasher’a nie tylko w wersji na systemy operacyjne Windows, ale też i na system Ubuntu i Raspbian. Co również bardzo istotne, GangFlasher-ST może pracować nie tylko w formie graficznej, ale i tekstowej – co z pewnością ułatwi jego integrację z istniejącymi już stanowiskami testowymi. Producent oferuje dwa typy licencji programu: Licencja „GangFlasher-ST Lite” pozwala na programowanie jednego układu docelowego, zaś licencja „GangFlasher-ST Standard” – aż do ośmiu układów docelowych.