Traduzione dell'articolo di ingegnere George Hilliard
Cliccabile
Sono un ingegnere di sistemi embedded. Nel mio tempo libero, spesso cerco ciò che può essere utilizzato nella progettazione di futuri sistemi o qualcosa che rientra nei miei interessi.
Una di queste aree è rappresentata dai computer economici in grado di supportare Linux, e più sono economici, meglio è. Così, mi sono immerso in un profondo tunnel di processori poco conosciuti.
Ho pensato: «Questi processori sono così economici che praticamente potrebbero essere dati via gratis». E dopo un po' mi è venuta l'idea di creare una scheda nuda per Linux nel formato di un biglietto da visita.
Non appena ho pensato a questo, ho deciso che sarebbe stato molto interessante realizzarlo. Avevo già fino a , e avevano varie interessanti funzionalità, come l'emulazione di schede flash, il lampeggiamento delle luci o persino la trasmissione dati wireless. Tuttavia, non ho mai incontrato biglietti da visita che supportassero Linux.
Così, me ne sono creato uno.
Questa è la versione finale del prodotto. Un computer minimale completo basato su ARM, su cui funziona la mia versione particolare di Linux, realizzata con Buildroot.

Nell'angolo c'è una porta USB. Se la colleghi al computer, si avvia in circa 6 secondi e viene riconosciuta come una chiavetta USB e una porta seriale virtuale, tramite la quale è possibile accedere alla shell della scheda. Sulla chiavetta c'è un file README, una copia del mio curriculum e alcune mie fotografie. Nella shell ci sono alcuni giochi, classici di Unix come fortune e rogue, una versione ridotta del gioco 2048 e un interprete di MicroPython.
Tutto questo è realizzato con un microchip flash molto piccolo da 8 MB. Il bootloader occupa 256 KB, il kernel 1,6 MB, e l'intero file system root – 2,4 MB. Pertanto, rimane molto spazio per la flash virtuale. C'è anche una directory home accessibile in scrittura – se qualcuno fa qualcosa che desidera salvare. Anche tutto questo viene memorizzato sul chip flash.
L'intero dispositivo costa meno di $3. È abbastanza economico da poter essere distribuito. Se hai ricevuto un dispositivo del genere da me, significa che probabilmente sto cercando di impressionarti.
Progettazione e assemblaggio
Ho progettato e assemblato tutto da solo. È il mio lavoro e mi piace, e gran parte delle difficoltà consisteva nel trovare componenti abbastanza economici per un hobby del genere.
La scelta del processore è stata la decisione più importante che ha influenzato i costi e la fattibilità del progetto. Dopo ricerche approfondite, ho scelto l'F1C100s, un processore relativamente poco conosciuto prodotto da Allwinner, ottimizzato per il costo (cioè dannatamente economico). Sia la RAM che la CPU sono integrate in un'unica unità. Ho acquistato i processori su Taobao. Tutti gli altri componenti sono stati acquistati su LCSC.
Ho ordinato le schede da JLC. Per $8 mi hanno realizzato 10 copie. La loro qualità è impressionante, specialmente per quel prezzo; non sono così curate come quelle di OSHPark, ma comunque sembrano buone.
La prima serie l'ho realizzata in nero opaco. Erano belle da vedere, ma molto soggette a macchie.

Con la prima serie ho avuto un paio di problemi. In primo luogo, il connettore USB non era abbastanza lungo da inserire in modo sicuro in tutte le porte USB. In secondo luogo, le tracce per la flash erano state realizzate in modo errato, ma l'ho aggirato piegando i contatti.

Dopo aver verificato che tutto funzionasse, ho ordinato una nuova serie di schede; puoi vedere una foto di una di esse all'inizio dell'articolo.
A causa delle dimensioni ridotte di tutti questi piccoli componenti, ho deciso di utilizzare la saldatura a riflusso [reflow solder] con il Ho accesso a un laser cutter, quindi ho realizzato un stencil per la saldatura utilizzando una pellicola per laminazione. Lo stencil è venuto abbastanza bene. I fori per i contatti del processore, da 0,2 mm, hanno richiesto particolare attenzione per una buona realizzazione: era fondamentale focalizzare correttamente il laser e regolarne la potenza.

Per mantenere la scheda ferma durante l'applicazione della pasta, si prestano bene altre schede.
Ho applicato la pasta saldante e disposto i componenti a mano. Mi sono assicurato che in nessuna fase del processo fosse utilizzato piombo: tutte le schede, i componenti e la pasta rispettano lo standard per non avere rimorsi quando le distribuirò alle persone.

Con questo lotto ho commesso qualche errore, ma la pasta saldante perdona e tutto si è assemblato correttamente.
Il posizionamento di ogni componente richiedeva circa 10 secondi, quindi ho cercato di ridurne il numero al minimo. Puoi leggere maggiori dettagli sulla progettazione della scheda in un altro .
Lista dei materiali e costi
Ho rispettato un budget rigoroso. E il biglietto da visita è venuto come previsto – non ho problemi a darlo! Ovviamente, non lo distribuirò a chiunque, poiché la produzione di ogni pezzo richiede tempo, e il mio tempo non è incluso nel costo del biglietto (è praticamente gratuito).
Componente
Prezzo
F1C100s
$1.42
PCB
$0.80
8MB flash
$0.17
Tutti gli altri componenti
$0.49
Totale
$2.88
Naturalmente, ci sono anche ulteriori spese che sono difficili da calcolare, come la spedizione (poiché è stata ripartita tra i componenti destinati a più progetti). Tuttavia, per una scheda compatibile con Linux, è decisamente molto economico. Inoltre, questa suddivisione offre un'ottima idea dei costi per le aziende che producono dispositivi nella fascia di prezzo più bassa: puoi essere sicuro che per le aziende sia ancora più conveniente di quanto lo sia per me!
Capacità
Cosa dire? La scheda carica un Linux estremamente ridotto in 6 secondi. A causa del fattore di forma e del costo, la scheda non ha I/O, supporto di rete o uno spazio di archiviazione significativo per eseguire programmi pesanti. Tuttavia, sono riuscito a inserire nel firmware un sacco di cose interessanti.
USB
Con USB si poteva pensare a molte cose interessanti, ma ho scelto l'opzione più semplice affinché le persone, con alta probabilità, potessero farlo funzionare se decidono di provare il mio biglietto da visita. Linux consente alla scheda di comportarsi come un "dispositivo" con supporto . Alcuni driver li ho presi da progetti precedenti che includevano questo processore, quindi ho accesso a tutta la funzionalità della piattaforma USB gadget framework. Ho deciso di emulare una chiavetta USB generata in anticipo e dare accesso alla shell tramite una porta seriale virtuale.
Shell
Dopo aver effettuato il login come utente root sulla console seriale, è possibile eseguire i seguenti programmi:
- rogue: il classico gioco di avventura su dungeon per Unix;
- 2048: un semplice gioco di 2048 in modalità console;
- fortuna: visualizzazione di citazioni altamente suggestive. Ho deciso di non includere l'intero database di citazioni per lasciare spazio ad altre funzionalità;
- : un interprete Python molto ridotto.
Emulazione di Flash Drive
Durante la compilazione, gli strumenti di build generano una piccola immagine FAT32 e la aggiungono come una delle partizioni UBI. Il sottosistema gadget Linux lo rappresenta al PC come un dispositivo di archiviazione.
Se sei curioso di vedere cosa appare nella chiavetta, la cosa più semplice da fare è consultare . Lì troverai anche alcune foto e il mio curriculum.
Risorse
Codice sorgente
Il mio albero Buildroot è stato pubblicato su GitHub — . Qui c'è il codice per generare l'immagine flash NOR, che viene installata utilizzando la modalità di download via USB del processore. Ci sono anche tutte le definizioni dei pacchetti per i giochi e altre applicazioni che ho inserito in Buildroot dopo che tutto ha funzionato. Se desideri utilizzare F1C100s nel tuo progetto, questo sarà un ottimo punto di partenza (non esitare a ).
Ho usato Linux v4.9 per F1C100s realizzato da Icenowy, con alcune modifiche. Sulla mia scheda funziona quasi come la v5.2 standard. È disponibile su GitHub — .
Credo di avere oggi il miglior port U-Boot per F1C100s al mondo, ed è parzialmente basato sul lavoro di Icenowy (inaspettatamente, far funzionare U-Boot come si deve si è rivelato un compito piuttosto complesso). Puoi trovarlo anche su GitHub — .
Documentazione per F1C100s
Ho trovato una documentazione piuttosto scarsa per F1C100s e la carico qui:
- – informazioni generali e pinout.
- – definizioni dei registri per F1C600, che in realtà è lo stesso F1C100s, ma rinominato con dichiarata compatibilità con Linux (ah!).
- Ho attivamente preso informazioni dallo schema di – la scheda di sviluppo che ho utilizzato per configurare il software.
Per gli interessati carico .

Conclusione
Ho imparato molto durante lo sviluppo di questo progetto: è il mio primo progetto in cui ho utilizzato un forno per la saldatura a rifusione. Inoltre, ho imparato a trovare risorse per componenti con scarsa documentazione.
Ho sfruttato la mia esperienza lavorativa con Linux embedded e la progettazione di schede. Il progetto ha delle imperfezioni, ma mostra bene tutte le mie abilità.
Per chi fosse interessato ai dettagli sul lavoro con Linux embedded, consiglio di leggere la mia serie di articoli al riguardo: . Lì spiego in dettaglio come creare software e hardware da zero per piccoli e economici sistemi Linux, simili a questa mia scheda di visita.
Fonte: habr.com
