Skopiowano link do schowka!

Dlaczego potrzebujesz odpowiedniego modułu ładującego do modułów Riverdi STM32

Jeśli integrujesz moduł wyświetlacza Riverdi STM32, użycie niewłaściwego modułu ładującego (External Loader) nie zawsze powoduje błąd. Równie dobrze może to po prostu sprawić, że grafika w twoim projekcie będzie brakować lub będzie nieaktualna. Riverdi udostępnia dedykowany moduł ładujący dla każdej rodziny modułów zamiast jednego uniwersalnego, bo każdy moduł korzysta z własnej konfiguracji pamięci zewnętrznej. W poniższych sekcjach wyjaśniamy, kiedy wszystko dzieje się automatycznie, a kiedy musisz to sprawdzić samodzielnie.

Dlaczego to ma znaczenie – pamięć flash wewnętrzna a zewnętrzna

Podczas programowania modułów wyświetlaczy embedded Riverdi STM32 warto pamiętać, że firmware może korzystać nie tylko z wewnętrznej pamięci flash mikrokontrolera STM32, ale także z zewnętrznej pamięci flash dostępnej w module.

W aplikacjach TouchGFX ta pamięć zewnętrzna jest często wykorzystywana do przechowywania zasobów graficznych, takich jak obrazy, czcionki i inne elementy GUI.

Aby narzędzia do programowania STM32 mogły poprawnie uzyskać dostęp do tej pamięci zewnętrznej i ją zaprogramować, trzeba użyć odpowiedniego pliku ładownika zewnętrznego (.stldr).

Czym jest zewnętrzny moduł ładujący?

STM32CubeProgrammer może bezpośrednio programować wewnętrzną pamięć flash mikrokontrolera. Pamięć zewnętrzna podłączona przez interfejsy takie jak QSPI czy OctoSPI wymaga jednak dodatkowych informacji o tym, jak ją zainicjować i jak uzyskać do niej dostęp.

Właśnie to zapewnia External Loader. Plik .stldr zawiera procedury potrzebne narzędziom do programowania ST do wykonywania takich operacji jak:

  • inicjalizacja interfejsu pamięci zewnętrznej
  • wyłączanie zewnętrznej lampy błyskowej
  • dane programowe
  • odczytywanie danych
  • sprawdzanie zaprogramowanej treści

Programowanie w TouchGFX Designer (zazwyczaj automatyczne)

Korzystając z TouchGFX Designer, proces ten zazwyczaj przebiega bezproblemowo. Szablony przygotowane dla modułów Riverdi zawierają już konfigurację niezbędną do obsługi zewnętrznej pamięci flash. W przypadku korzystania z opcji „Run on Target” proces programowania jest skonfigurowany tak, aby wykorzystywano odpowiedni moduł External Loader.

Z punktu widzenia użytkownika programowanie pamięci zewnętrznej może więc wydawać się procesem automatycznym. W typowym projekcie TouchGFX zazwyczaj nie trzeba za każdym razem ręcznie wybierać modułu ładującego. Moduł ten jest generowany w folderze GCC projektu zaraz po utworzeniu projektu na podstawie szablonu Riverdi.

selecting a template

Programowanie bezpośrednio z STM32CubeProgrammer (wymagana ręczna weryfikacja)

Sytuacja wygląda inaczej, gdy programujesz firmware bezpośrednio za pomocą STM32CubeProgrammer. CubeProgrammer nie zawsze automatycznie wybiera właściwy moduł External Loader dla konkretnego modułu Riverdi.

To, że program STM32CubeProgrammer nawiązał połączenie z MCU przez ST-LINK, nie oznacza, że ma też dostęp do zewnętrznej pamięci flash.

Przed rozpoczęciem programowania warto więc zajrzeć do sekcji „Ładowarki zewnętrzne” i upewnić się, że wybrano właściwą ładowarkę dla docelowego modułu Riverdi i jego pamięci zewnętrznej.

Jeśli na liście nie ma potrzebnego modułu ładującego, może być konieczne skopiowanie odpowiedniego pliku .stldr do katalogu instalacyjnego STM32CubeProgrammer, zazwyczaj:

STM32CubeProgrammerbinExternalLoader 

To, jaki dokładnie program ładujący zostanie użyty, zależy od rodziny modułów Riverdi i ich konfiguracji sprzętowej.

Programowanie w STM32CubeIDE

Ta sama zasada obowiązuje podczas programowania lub debugowania projektu bezpośrednio w STM32CubeIDE. Jeśli aplikacja korzysta z zasobów przechowywanych w zewnętrznej pamięci flash, konfigurację debugowania należy sprawdzić w sekcji:

Uruchom → Konfiguracje debugowania → Debugger → Ładowarki zewnętrzne 

Trzeba dodać i włączyć odpowiedni moduł ładujący. Jest to szczególnie ważne w projektach TouchGFX, gdzie zasoby graficzne są mapowane do pamięci zewnętrznej.

Co się stanie, jeśli użyjesz niewłaściwego modułu ładującego?

Część procesu programowania może mimo wszystko zakończyć się powodzeniem, nawet jeśli użyto niewłaściwego modułu ładującego, co może utrudnić zdiagnozowanie problemu. Na przykład kod aplikacji znajdujący się w wewnętrznej pamięci flash układu STM32 może zostać poprawnie zaprogramowany, podczas gdy dane przeznaczone do zewnętrznej pamięci flash w ogóle nie zostaną zaprogramowane.

W aplikacji TouchGFX może to spowodować:

  • brakujące zdjęcia
  • brakujące czcionki
  • nieprawidłowo wyświetlane elementy GUI
  • zasoby graficzne pozostałe po poprzedniej wersji firmware
  • błędy podczas kasowania lub programowania zewnętrznej pamięci flash
  • błędy weryfikacyjne

Właśnie dlatego problem ten może występować nieregularnie: zależy to od tego, jakiego narzędzia i jakiego schematu pracy używasz, a nie od samego sprzętu. To też jedno z możliwych wyjaśnień sytuacji, w której aplikacja działa poprawnie, gdy jest programowana bezpośrednio z TouchGFX, ale nie zachowuje się prawidłowo, gdy to samo firmware MCU jest programowane za pomocą STM32CubeProgrammer – samo firmware MCU może być obecne i działać, podczas gdy zasoby graficzne przechowywane w pamięci zewnętrznej mogą brakować lub być nieaktualne.

Program ładujący musi dokładnie odpowiadać konfiguracji sprzętowej

Nie warto wybierać zewnętrznego ładowacza tylko na podstawie rodziny STM32. Ładowacz jest dostosowany do konkretnej konfiguracji sprzętowej, która może obejmować:

  • MCU STM32
  • interfejs pamięci
  • zewnętrzne urządzenie Flash
  • konfiguracja płyty głównej

Dwa urządzenia korzystające z tego samego mikrokontrolera STM32 mogą mieć różne zewnętrzne pamięci flash lub różne konfiguracje QSPI/OSPI. W związku z tym mogą wymagać różnych zewnętrznych programatorów. Użycie niewłaściwego pliku .stldr może uniemożliwić programowi CubeProgrammer prawidłową inicjalizację, kasowanie lub programowanie pamięci.

Informacje o programach ładujących według rodzin modułów

Moduły STM32U5 A9 / G9 (5″)

External Loader for STM32U5A9/G9 modules

Moduły oparte na układzie STM32H7 (7″, 10″, 12″)

External Loader for STM32H7-based modules

Wniosek – zawsze sprawdzaj, gdzie znajdują się dane firmware’u

Podczas programowania modułu Riverdi STM32 zawsze sprawdź, gdzie są zapisane poszczególne części firmware’u. Jeśli aplikacja zawiera dane przeznaczone zarówno do wewnętrznej, jak i zewnętrznej pamięci flash, samo podłączenie do STM32 przez ST-LINK nie wystarczy – żeby poprawnie zaprogramować pamięć zewnętrzną, potrzebny jest odpowiedni moduł External Loader.

TouchGFX zazwyczaj zajmuje się tą konfiguracją automatycznie, korzystając z szablonu przygotowanego dla wybranego sprzętu. Jednak gdy korzystasz bezpośrednio z STM32CubeProgrammer lub STM32CubeIDE, zawsze sprawdź, czy rzeczywiście wybrano i włączono właściwy External Loader.

Powinno to być jedną z pierwszych rzeczy, które warto sprawdzić, gdy moduł Riverdi uruchamia się po zaprogramowaniu, a GUI jest niekompletne, brakuje zasobów graficznych albo programista zgłasza problemy z dostępem do zewnętrznej pamięci flash.

 

ODKRYJ NASZĄ

Whitepaper

Osiągnij idealną interakcję użytkownika z wyświetlaczem dzięki odpowiedniemu czujnikowi Touch Sensor IC. Czy kiedykolwiek zmagałeś się z problemami związanymi z fantomowymi dotknięciami lub certyfikacją? Rozwiń swoje prace B+R jak profesjonalista dzięki naszemu Whitepaperowi!

Przejdź do naszego katalogu produktów i zobacz, jak możesz oszczędzać dzięki jakości, nie na jakości.

Skontaktuj się z nami już teraz, oszczędzaj dzięki jakości, nie na jakości.