KursyPoradnikiInspirujące DIYForum

Czym są moduły SOM? Przykład na bazie VisionSOM-6ULL

Czym są moduły SOM? Przykład na bazie VisionSOM-6ULL

Opisywaliśmy już różne zestawy uruchomieniowe i płytki związane z popularnymi platformami typu Arduino/RPi. Nigdy nie zajmowaliśmy się jednak dokładniej modułami typu SOM.

Wpis ten jest więc krótkim wprowadzeniem do tematu SOM. W artykule przedstawiony został przykładowy moduł polskiej firmy SoMLabs.

Co odróżnia SOM od SBC?

Na początek kilka słów o samych modułach SOM, czyli System-On-Module. Większość osób czytających wpisy publikowane na Forbocie kojarzy na pewno temat SBC, czyli komputerów jednopłytkowych. Do tego grona zaliczamy przykładowo popularne Raspberry Pi. Na takim mini-komputerze znajdziemy system operacyjny (np. Linux) oraz zasoby niezbędne do jego działania. Wystarczy podłączyć zasilanie i można przystępować do pracy (przykłady w kursie podstaw Raspberry Pi).

Raspberry Pi jako przykład SBC

Przykładowy komputer SBC - Raspberry Pi

Komputery jednopłytkowe (SBC) świetnie sprawdzają się w wielu zastosowaniach, jednak w niektórych przypadkach bywają problematyczne. Przykładowo mogą one nie pasować do urządzenia, które mamy zamiar produkować seryjnie.

Kolejnym problemem bywa wybór procesora. Producenci SBC produkują i sprzedają na ogół znaczne ilości komputerków i mają dużo lepszy dostęp do wsparcia oraz dokumentacji producenta użytego układu. Okazuje się, że wielu producentów procesorów nie oferuje detalicznie swoich wyrobów (gdzie detalicznie może oznaczać nawet tysiące sztuk rocznie), nie udostępnia również dokumentacji, albo dostarcza ją w formie absolutnie szczątkowej.

Co jeśli nie SBC?

Wydawałoby się, że najlepszym rozwiązaniem w takiej sytuacji jest wybranie dostępnego i dobrze udokumentowanego układu oraz zaprojektowanie PCB od podstaw. Takie podejście bardzo dobrze się sprawdza w produkcji wielkoseryjnej (bo minimalizuje koszty). Nie każda firma ma jednak odpowiednie środki i doświadczenie, które pozwalałoby na stworzenie swojego układu od zera.

Budowa własnych SBC może być dużym wyzwaniem

Budowa własnych SBC może być dużym wyzwaniem

Właśnie tutaj z pomocą przychodzą moduły SOM, które zawierają na sobie najważniejsze elementy. Ich użycie ułatwia zaprojektowanie urządzenia i pozwala na skrócenie czasu pojawienia się produktu na rynku, co bywa ogromną zaletą.

Czym są gotowe moduły SOM?

System-On-Module, to niewielka, wielowarstwowa płytka drukowana, na której znajdują się elementy niezbędne do pracy systemu. Na ogół są to elementy pracujące z wysokimi częstotliwościami, czyli mikroprocesor (albo raczej SoC), układy pamięci oraz elementy niezbędne do zasilania układu. Brak tu jednak standardowych złącz oraz peryferiów, które nie są niezbędne do uruchomienia systemu.

Przykład modułu SBC i SOM - porównanie skali i wyglądu

Przykład modułu SBC i SOM - porównanie skali i wyglądu

Dzięki użyciu modułu SOM pozostała część projektowanego przez nas urządzenia może być wykonana za pomocą tańszych technologii (np. prostsza PCB o mniejszej liczbie warstw). W odróżnieniu od SBC, moduły SOM nie są kompletnymi urządzeniami. Udostępniają znacznie więcej zasobów procesora (np. wyprowadzeń), ale wymagają od projektanta przygotowania płytki, która je wykorzysta.

VisionSOM-6ULL - przykładowy moduł SOM

Jednym z producentów modułów SOM jest polska firma SomLabs. W dalszej części artykułu zajmiemy się jednym z produktów tego producenta, konkretnie mowa o module VisionSOM-6ULL. Moduł ten ma kształt, złącze i wielkość identyczną jak moduły pamięci typu SODIMM, które używane są chociażby w laptopach. Dzięki temu, jak widać na poniższym zdjęciu, wszystkie wyprowadzenia są o wiele łatwiej dostępne, niż w przypadku obudowy mikroprocesora o odpowiednich możliwościach (BGA).

Co więcej, liczba wyprowadzeń oraz ich "upakowanie" pozostawia typowe komputery jednopłytkowe daleko w tyle. Dzięki wykorzystaniu popularnego standardu SODIMM moduł SOM można łatwo łączyć z resztą układu za pomocą gniazd przygotowanych z myślą o tym standardzie:

Ganizdo SODIMM

Standardowe złącze pasujące
do opisywanego modułu SOM

Ten niewielki moduł wyposażony został w większość niezbędnych elementów:

  • mikroprocesor i.MX6 ULL z rdzeniem Cortex-A7 o taktowaniu do 792 MHz,
  • 512 MB pamięci RAM DDR3,
  • gniazdo kart micro-SD,
  • moduł łączności bezprzewodowej WiFi i Bluetooth,
  • rezonator kwarcowy oraz stabilizatory napięcia.

Więcej informacji o module znaleźć można na stronie producenta. Przy okazji jedna drobna uwaga: na stronie znajdują się informacje o wszystkich dostępnych i niedostępnych konfiguracjach. Przykładowo znajdziemy tam wpis o częstotliwości taktowania do 900 MHz, jednak moduły dostępne w sprzedaży pracują z częstotliwością do 792 MHz.

Najlepiej jest więc sprawdzić listę konfiguracji dostępnych na stronie KAMAMI. W sprzedaży znajdziemy tam 8 konfiguracji modułu VisionSOM-6ULL. Wszystkie bazują na tym samym mikroprocesorze, ale różnią się typem pamięci nieulotnej, ilością pamięci RAM oraz obecnością modułu WiFi/BT.

Testowany moduł VisionSOM-6ULL

Testowany moduł VisionSOM-6ULL

Na pierwszy rzut oka parametry modułu SOM mogą wydawać się niezbyt oszałamiające - jeden rdzeń o taktowaniu 792 MHz, 512 MB pamięci RAM, 256 MB pamięci NAND lub 4GB eMMC wypadają blado przy najnowszych, wielordzeniowych SBC.

Jednak takie parametry są "więcej niż wystarczające" w przypadku systemów wbudowanych. Cechą charakterystyczną takich systemów jest ich specjalizacja, czyli wykonywanie określonego zadania i tylko tego zadania. To odróżnia je od systemów ogólnego przeznaczenia, które znamy z komputerów PC. To nie ma być uniwersalny komputer, na którym możemy zrobić wszystko.

Płytka ewaluacyjna do VisionSOM-6ULL

Jak wspominaliśmy wcześniej, moduły SOM idealnie nadają się do użycia z własną płytką - może to być robot z Linuksem na pokładzie lub kolejny model urządzenia nad którym pracujemy. Jednak do pisania oprogramowania, poznawania układu lub nauki nie musimy od razu projektować własnej płytki.

Firma SomLabs przygotowała dwa modele gotowych płytek ewaluacyjnych:

  • VisionCB-6ULL-STD - skrót STD w nazwie pozwala się domyślać, że jest to standardowa płytka bazowa (CB - carrier board).
  • VisionCB-6ULL-IND - mniejsza wersja płytki bazowej, skrót IND oznacza, że jej przeznaczeniem są zastosowanie produkcyjne.

Zestaw VisionCB-6ULL-STD + moduł VisionSOM-6ULL

Po umieszczeniu modułu SOM w złączu płytki bazowej otrzymujemy typowy komputer jednopłytkowy, czyli SBC. Jednak to co go wyróżnia to budowa modułowa. W razie awarii możemy wymienić sam moduł SOM, ale co ważniejsze moduł możemy wykorzystać w kolejnych wersjach naszego projektu, np. gdy opracujemy własną płytkę bazową.

W ramach testów nie projektowaliśmy własnej płytki, skoncentrowaliśmy się na poznaniu możliwości domyślnego zestawu. O module SOM napisaliśmy już wcześniej, teraz kilka słów o płytce bazowej.

Na pokładzie VisionCB-6ULL-STD znajdziemy:

  • konwerter UART-USB,
  • złącze Ethernet,
  • interfejsy USB Host oraz OTG,
  • złącza zgodne z Arduino,
  • złącza zgodne z Raspberry Pi,
  • gniazdo do podłączenia dedykowanego wyświetlacza,
  • 4 przyciski,
  • 4 diody LED,
  • gniazdo zasilania.
Płytka VisionCB-6ULL-STD z wpiętym modułem VisionSOM-6ULL

Płytka VisionCB-6ULL-STD z wpiętym modułem VisionSOM-6ULL

Cały zestaw pobiera 100-200 mA prądu (przy wyłączonym WiFi), może być więc zasilany przez USB. Jeśli jednak planujemy podłączać inne urządzenia do złącza USB Host, przydać się może zewnętrzny zasilacz - bez niego całość może działać niestabilnie.

Płytka wyposażona została w złącza zgodne z popularnymi standardami dla shieldów Arduino oraz HATów Raspberry Pi. Dzięki temu, podczas pracy nad własnymi urządzeniami można bardzo łatwo podłączać do modułu SOM popularne płytki rozszerzające z ciekawymi peryferiami.

Oprogramowanie

W przypadku modułów VisionSOM-6ULL producent przygotował trzy wersje sytemu operacyjnego, które można pobrać z Wiki firmy SoMLabs. Osobom niezaznajomionym z taką tematyką przyda się na pewno krótki opis dostępnych rozwiązań - poniżej omówione zostały dostępne opcje:

Opcja 1 - Yocto

Yocto jest bardzo popularną opcją. Jest to system budowania własnych dystrybucji Linuksa. Za jego pomocą możemy skompilować cały system zupełnie od podstaw, co więcej możemy do naszego systemu dodać menedżer pakietów oraz oczywiście same pakiety z oprogramowaniem.

Logo projektu yocto

Logo projektu yocto

Osoby znające dystrybucję Gentoo powinny być zadowolone, ponieważ Yocto zawiera wiele elementów wspólnych z Gentoo, podstawowa różnica to kompilacja skrośna, czyli przygotowywanie całego obrazu na stacji roboczej i jedynie uruchamianie gotowego oprogramowania w systemie docelowym. Takie podejście pozwala na ograniczenie wielkości obrazu oraz oszczędza mnóstwo czasu.

Opcja 2 - Buildroot

Kolejnym źródłem naszego systemu może być nieco starszy system budowania, czyli buildroot. Działa on znacznie szybciej niż Yocto (czyli nie wymaga tak potężnej stacji roboczej), domyślna wersja obrazu zajmuje również mniej miejsca w pamięci SOM. Buildroot bardzo dobrze nadaje się do tworzenia nieco mniejszych projektów (w przypadku dużych lepiej sprawdza się Yocto).

Logo projektu Buildroot

Logo projektu Buildroot

Również w tym przypadku, na stronie producenta, znajdziemy instrukcję obsługi systemu buildroot dla VisionSOM. Jedyny jej minus to bazowanie na Ubuntu 16.04, wersja dla 18.04 pewnie będzie dostępna niedługo (kod jest w repozytorium, ale nie ma o nim informacji na stronie).

Opcja 3 - Debian

Na pewno wiele osób doceni również możliwość wykorzystania Debiana. System ten jest znany chyba każdemu miłośnikowi Linuksa.

Logo projektu Debian

Logo projektu Debian

Na stronie VisionSOM znajdziemy nie tylko gotowy obraz systemu, ale wiele bardzo przydatnych porad jak wykonywać typowe czynności. Od nagrania obrazu, po napisanie programu, czy odtworzenie filmu. Informacje te mogą się przydać nawet tym osobom, które nie mają płytki VisionSOM.

Darmowe materiały szkoleniowe

Osoby chcące poznać nieco lepiej produkty VisionSOM oraz programowanie w systemie Linux mogą również skorzystać z darmowych warsztatów organizowanych przez firmę SomLabs. Jeśli aktualnie nie są planowane żadne szkolenia, to na powyższej stronie można się zapisać na powiadomienia mailowe o nowych terminach.

Na szczęście materiały szkoleniowe używane na warsztatach są dostępne w Internecie. Producent na swoim FTP udostępnia obszernego PDF (ponad 40 stron) oraz niezbędne pliki. Dzięki tym materiałom można nauczyć się samodzielnie podstaw pracy z tymi płytkami.

Przykładowy projekt na VisionSOM-6ULL

W ramach testowania tej płytki przygotowany został mały projekt, który bazował na wspomnianych materiałach szkoleniowych. Konkretnie mowa tu o trzecim ćwiczeniu, które omawia wykorzystanie Node.js. Dla testu, do modułu VisionSOM-6ULL podłączony został czujnik jakości powietrza SDS011, z którym można się komunikować za pomocą portu szeregowego.

Logo Node.js

Logo Node.js

Dla osób niezaznajomionych z tą technologią: Node.js jest frameworkiem przeznaczonym do tworzenia aplikacji internetowych w oparciu o język Java Script. Dzięki temu można używać tego samego języka zarówno po stronie przeglądarki, jak i serwera.

Podłączenie czujnika do modułu było banalne (zasilanie i UART):

Czujnik jakości powietrza podłączony do SOM

Czujnik jakości powietrza podłączony do SOM

Używanie Node.js jest zaskakująco proste. Nie ma potrzeby instalacji i konfiguracji serwera www, bazy danych itd. Wystarczy, że zainstalujemy Node.js lub użyjemy odpowiednio skonfigurowanej dystrybucji systemu, który znaleźć można w materiałach do wspomnianego wcześniej szkolenia. 

Aby uruchomić własny, minimalny serwer wystarczy napisać skrypt:

Tyle kodu wystarcza, aby na porcie numer 8080 został uruchomiony serwer, który na żądanie będzie odsyłał nieśmiertelny komunikat "Hello world!". Efekt działanie powyższego kodu:

Efekt działania prostego programu testowego

Efekt działania prostego programu testowego

Biblioteki dla Node.js można łatwo doinstalować narzędziem npm (można powiedzieć, że jest to taki odpowiednik pip dla Pythona). Do obsługi SDS011 najłatwiej wykorzystać gotową, wygodną bibliotekę, którą instaluje się za pomocą poniższego polecenia:

Mając materiały ze szkolenia i gotową bibliotekę można błyskawicznie przygotować prosty skrypt, który poza wypisywaniem Hello World oraz daty i godziny pozwala na wyświetlanie parametrów powietrza.

Zawartość pliku node03.js - nie jest najpiękniejszy, ale swoje (testowe) zadanie spełnia:

Zawartość pliku index.html, który wyświetla dane w przeglądarce:

Efekt działania powyższych kodów:

Prosty czujnik powietrza DIY

Prosty czujnik powietrza DIY

Podsumowanie

Głównym celem tego artykułu było ogólne przedstawienie tematyki modułów SOM, a czujnik jakości powietrza był tylko prostym przykładem. Wszystko po to, aby zasygnalizować istnienie tego typu modułów osobom, które nie miały wcześniej styczności z SOM.

Czy wpis był pomocny? Oceń go:

Średnia ocena 4.8 / 5. Głosów łącznie: 53

Nikt jeszcze nie głosował, bądź pierwszy!

Artykuł nie był pomocny? Jak możemy go poprawić? Wpisz swoje sugestie poniżej. Jeśli masz pytanie to zadaj je w komentarzu - ten formularz jest anonimowy, nie będziemy mogli Ci odpowiedzieć!

Moduły VisionSOM są przeznaczone głównie dla osób zainteresowanych projektowaniem własnych urządzeń. Jednak dostępność płytek ewaluacyjnych, materiałów szkoleniowych oraz instrukcji sprawia, że osoby chcące rozwijać swoje umiejętności w programowaniu na systemy wbudowane mogą wiele skorzystać poznając te rozwiązania. Na koniec podziękowania dla firmy SomLabs, która przekazała do testów moduły będące bazą tego artykułu.

Co warto wiedzieć o STM32MP1? Jak zacząć?
Co warto wiedzieć o STM32MP1? Jak zacząć?

Chyba wszyscy entuzjaści elektroniki słyszeli już o mikrokontrolerach STM32. W naszych kursach opisaliśmy podstawy F1 i F4, dzięki czemu... Czytaj dalej »

Autor: Piotr Bugalski
Redakcja: Damian Szymański

debian, linux, sbc, SOM, Yocto

Trwa ładowanie komentarzy...