Tłumaczenie artykułu od inżyniera George'a Hilliarda
Klikalne
Jestem inżynierem systemów wbudowanych. W wolnym czasie często poszukuję rzeczy, które mogłyby być użyte w projektowaniu przyszłych systemów, lub czegoś z kręgu moich zainteresowań.
Jedną z takich dziedzin są tanie komputery, które mogą obsługiwać Linuxa, a im tańsze, tym lepsze. Dlatego zagłębiłem się w świat mało znanych procesorów.
Pomyślałem: „Te procesory są tak tanie, że można je praktycznie rozdawać za darmo”. Po chwili wpadłem na pomysł stworzenia gołej karty do Linuxa w formacie wizytówki.
Jak tylko o tym pomyślałem, zdecydowałem, że byłoby to bardzo fajne do zrealizowania. Już do , miały one różne interesujące możliwości, takie jak emulacja kart flash, miganie światełkami czy nawet bezprzewodowa transmisja danych. Jednak wizytówek z obsługą Linuxa nigdy nie spotkałem.
Zrobiłem więc taką dla siebie.
To jest finalna wersja produktu. W pełni funkcjonalny, minimalny komputer oparty na ARM, na którym działa moja specjalna wersja Linuxa, stworzona za pomocą Buildroot.

W rogu ma port USB. Po podłączeniu do komputera uruchamia się w około 6 sekund i jest widoczna jako karta flash oraz wirtualny port szeregowy, przez który można uzyskać dostęp do powłoki karty. Na pamięci USB znajduje się plik README, kopia mojego CV i kilka moich zdjęć. W powłoce znajduje się kilka gier, klasyki z Uniksa, takie jak fortune i rogue, mała wersja gry 2048 oraz interpreter MicroPython.
Wszystko to zrealizowano za pomocą bardzo małego chipu flash o pojemności 8 MB. Bootloader zajmuje 256 KB, jądro 1,6 MB, a cały system plików root – 2,4 MB. Dlatego na wirtualnej pamięci flash pozostaje dużo miejsca. Jest tam również katalog domowy dostępny do zapisu – jeśli ktoś zrobi coś, co chciałby zapisać. To wszystko również jest przechowywane na chipie flash.
Całe urządzenie kosztuje mniej niż 3 $. Jest wystarczająco tanie, aby można je było rozdawać. Jeśli otrzymałeś takie urządzenie ode mnie, to znaczy, że najprawdopodobniej próbuję na Tobie zrobić wrażenie.
Projektowanie i budowa
Zaplanowałem i złożyłem wszystko sam. To moja praca, którą lubię, a większość trudności polegała na znalezieniu wystarczająco tanich części do tego hobby.
Wybór procesora był najważniejszą decyzją, która wpłynęła na koszt i wykonalność projektu. Po intensywnych badaniach wybrałem F1C100s, stosunkowo mało znany procesor produkcji Allwinner, zoptymalizowany pod kątem kosztów (tj. niesamowicie tani). W jednej obudowie znajdują się zarówno RAM, jak i CPU. Procesory kupiłem na Taobao. Wszystkie pozostałe komponenty zostały zakupione na LCSC.
Płytki zamówiłem w JLC. Za 8 dolarów zrobili mi 10 kopii. Jakość ich imponuje, szczególnie w tej cenie; nie są tak dokładne jak w OSHPark, ale wciąż wyglądają dobrze.
Pierwsza partia była matowo-czarna. Prezentowały się ładnie, ale były bardzo podatne na zabrudzenia.

Pierwsza partia miała kilka problemów. Po pierwsze, złącze USB było za krótkie, aby pewnie wpasować się w różne porty USB. Po drugie, ścieżki dla pamięci flash były źle wykonane, ale obejrzę to, wyginając kontakty.

Sprawdzając wszystko w działaniu, zamówiłem nową partię płytek; zdjęcie jednej z nich możecie zobaczyć na początku artykułu.
Z powodu małego rozmiaru wszystkich tych drobnych komponentów postanowiłem skorzystać z lutowania przez reflow [reflow solder] przy użyciu . Mam dostęp do lasera, więc wyciąłem na nim szablon do lutowania z folii do laminowania. Szablon wyszedł całkiem dobrze. Otwory na kontakty procesora o średnicy 0,2 mm wymagały szczególnej staranności przy jakości wykonania – kluczowe było odpowiednie skupienie lasera i dobranie jego mocy.

Do trzymania płytki podczas nakładania pasty świetnie pasują inne płytki
Nałożyłem pastę lutowniczą i ręcznie ułożyłem komponenty. Zauważyłem, aby nigdzie w procesie nie używać ołowiu – wszystkie płytki, komponenty i pasta spełniają standard – aby nie dręczyła mnie sumienie, gdy będę je rozdawał ludziom.

Z tą partią nieco się pomyliłem, jednak pasta lutownicza wybacza błędy, więc wszystko złożyło się normalnie.
Na ułożenie każdego komponentu potrzebowałem około 10 sekund, więc starałem się zminimalizować ich liczbę. Więcej szczegółów o projektowaniu płytki można przeczytać w innej .
Lista materiałów i koszt
Trzymałem się ścisłego budżetu. Wizytówka wyszła dokładnie taka, jak planowałem – nie żałuję jej rozdawania! Oczywiście nie zamierzam jej rozdawać każdemu, ponieważ produkcja każdej sztuki zajmuje czas, a mój czas nie jest uwzględniony w kosztach wizytówki (jakby był darmowy).
Komponent
Cena
F1C100s
$1.42
PCB
$0.80
8MB flash
$0.17
Wszystkie pozostałe komponenty
$0.49
Podsumowując
$2.88
Oczywiście są jeszcze inne wydatki, które trudno oszacować, takie jak wysyłka (ponieważ rozkłada się na komponenty przeznaczone dla kilku projektów). Jednak dla płyty z obsługą Linuxa to zdecydowanie bardzo tanio. Ta analiza daje również niezłe wyobrażenie o kosztach produkcji urządzeń w najniższym segmencie cenowym: możecie być pewni, że dla firm jest to jeszcze tańsze niż dla mnie!
Możliwości
Co powiedzieć? Karta ładowała bardzo okrojoną wersję Linuxa w 6 sekund. Ze względu na formę i koszt karta nie ma I/O, wsparcia sieciowego ani dużej ilości pamięci do uruchamiania wymagających programów. Niemniej jednak udało mi się wpakować w obraz oprogramowania mnóstwo ciekawych rzeczy.
USB
Z USB można było pomyśleć o wielu interesujących rozwiązaniach, ale wybrałem najprostszy wariant, aby użytkownicy z dużym prawdopodobieństwem mogli wszystko uruchomić, jeśli zdecydują się spróbować mojej wizytówki. Linux pozwala karcie zachować się jak „urządzenie” z obsługą . Niektóre sterowniki wziąłem z wcześniejszych projektów, które obejmowały ten procesor, więc mam dostęp do całej funkcjonalności platformy USB gadget framework. Postanowiłem emulować wcześniej wygenerowany dysk flash i zapewnić dostęp do powłoki przez wirtualny port szeregowy.
Powłoka
Po zalogowaniu jako użytkownik root na konsolę szeregowej można uruchomić następujące programy:
- rogue: klasyczna przygodowa gra Unix o lochach;
- 2048: prosta gra w 2048 w trybie konsoli;
- fortune: wyświetlanie różnych aforyzmów. Postanowiłem nie dodawać całej bazy cytatów, aby pozostało miejsce na inne funkcje;
- : bardzo mały interpreter Python.
Emulacja dysku Flash
Podczas kompilacji narzędzia do budowy generują mały obraz FAT32 i dodają go jako jedną z partycji UBI. Podsystem gadżetów Linux przedstawia go komputerowi jako urządzenie pamięci.
Jeśli chcesz zobaczyć, co znajduje się na pendrive, najłatwiej to zrobić, zapoznając się z . Znajdziesz tam również kilka zdjęć i moje CV.
Resources
Źródła
Moje drzewo Buildroot jest dostępne na GitHubie — . Tam znajduje się kod generacji obrazu NOR, który jest instalowany za pomocą trybu download przez USB w procesorze. Zawiera także wszystkie definicje pakietów dla gier i innych programów, które dodałem do Buildroot po tym, jak wszystko działało. Jeśli chcesz użyć F1C100s w swoim projekcie, to będzie doskonały punkt wyjścia (nie krępuj się ).
Użyłem Linux v4.9 dla F1C100s autorstwa Icenowy, trochę go przerobiłem. Na mojej karcie działa prawie standardowa v5.2. Jest dostępna na GitHubie — .
Myślę, że mam dziś najlepszy port U-Boot dla F1C100s na świecie, i jest on częściowo również oparty na pracy Icenowy (niespodzianka, uruchomienie U-Boota jak należy okazało się dość nieprzyjemnym zadaniem). Możesz również znaleźć go na GitHubie — .
Dokumentacja dla F1C100s
Znalazłem dość ubogą dokumentację F1C100s, więc zamieszczam ją tutaj:
- – ogólne informacje i pinout.
- – definicje rejestrów dla F1C600, który tak naprawdę jest tym samym F1C100s, ale przemianowanym z rzekomym wsparciem dla Linuxa (ha!).
- Aktywnie czerpałem informacje z dokumentacji od – platformy deweloperskiej, którą wykorzystałem do konfiguracji oprogramowania.
Dla ciekawych zamieszczam .

Podsumowanie
W trakcie pracy nad tym projektem wiele się nauczyłem – to mój pierwszy projekt, w którym używałem pieca do lutowania stopowego. Nauczyłem się również, jak znajdować zasoby dla komponentów z ubogą dokumentacją.
Korzytałem z posiadanego doświadczenia w pracy z systemem embedded Linux oraz w projektowaniu płytek. Projekt ma swoje niedociągnięcia, ale dobrze pokazuje wszystkie moje umiejętności.
Osobom zainteresowanym szczegółami pracy z embedded Linux polecam przeczytać moją serię artykułów na ten temat: . Tam dokładnie opisuję, jak tworzyć oprogramowanie i sprzęt od podstaw dla małych i tanich systemów Linux, podobnych do mojej wizytówki.
Źródło: habr.com
