23.5.2018
Každé druhé úterý v měsíci se ve Valašském Meziříčí koná akce Tkalci na Webu. Občas si na akci připravím nějakou přednášku – ta poslední se týkala jednodeskového počítače BeagleBone. Every second Tuesday of the month in Valasske Mezirici takes place Web Weavers . Sometimes I'm going to get some action at the event lecture - the last one related to the BeagleBone single-board computer.
BeagleBone Black does not have high performance when comparing this computer with others similar computers of this class. Its advantage, however, is easy scalability and extraordinary rich number of peripherals available. The BeagleBoena Black has also two PRU coprocessors so it can be used for realtime applications. BeagleBone contains 4GB of eMMC memory to store your system and data (flash drive).
I met BeagleBone first time at the beginning of 2011. I was looking for a simple computer for collecting data on photovoltaic power plants. I needed several serial ports. BeagleBone's strength is in the number of peripherals – BeagleBone offers four serial ports. At the time, the Raspberry Pi was known only from festive articles. BeagleBone was the only choice.
In the article I'll try to describe some computers from a close family and bring BeagleBone into historical context.
BeagleBoard's predecessor is BeagleBoard. A computer I never met and because of the existence of BeagleBone Black I will never meet.
BeagleBoard was released on June 28, 2008. The computer is created under Creative Commons license, so it's open hardware. Its parameters are comparable to similar computers in the category, performance of course corresponds to the state of the art ten years ago (720 MHz ARM Cortex A8, 256 MB RAM, 256 MB NAND FLASH, SD card, audio, HDMI, DSP). The price ranges from $95 to $149. I copied all the information from Wikipedia.
The BeagleBone was launched at the end of November 2011. The younger brother of BeagleBoard has 256 MB of RAM, a 720 MHz ARM Cortex A8 processor (apparently already contains 2 PRU coprocessors). Unlike BeagleBoard, it has no video output but it has output for LCD on it's expanding connectors. The board was available for $89, for this price is on sale till today. There are no associated sales extraordinary events. The board has a white color and is called BeagleBone White today.
If we talk about ARM computers, we can not miss Raspberry Pi. It was released on February 29, 2012. Wikipedia also states the exact time – 6:00 UTC. Wikipedia also mentions other events related to its launch. Interest was so huge that RS Componets and Farnell sites, where the Raspberry Pi was sold, slowed down or blocked totally.
The successor of the original BeagleBone was launched on April 23, 2013. The board in on sells till today and is probably the most used variant of computers based on BeagleBone. Compared with the original BeagleBone it is a big leap forward - it was more memory, the processor is working at higher frequencies, the board includes HDMI output and accelerated graphics. The board has a 2 GB eMMC disk. This eliminated the biggest pain of devices built on BeagleBone - the SD card. Despite its higher price of $45 and a lower performance compared to Raspberry Pi, thanks to the eMMC the BeagleBone Black created it's own category of embedded computers.
A year later the BeagleBone Black Rev C was launched. It's eMMC size was expanded to 4 GB and the Ångstrom distribution was replaces with Debian.
Protože jde o otevřený hardware, postupem doby se objevily různé varianty odvozené od BeagleBone Black. Většinou jsou varianty pinově kompatibilní s BeagleBone White a Black:
Za největší konkurenci BeagleBone bych označil hned dva produkty. Konkurencí patrnou na první pohled je jednoznačně Raspberry Pi. Jeho konkurenční faktory jsou zřejmé:
Konkurence na druhý pohled tak patrná není a na přednášce vzbudila mírné překvapení. Za velkou konkurenci považuji jednoduché jednočipové procesory (například ARM-M0 až ARM-M4). Konkurenční faktory:
Vysvětlení potřebují především první dva faktory: Myšlení HW vývojáře je odlišné od myšlení SW vývojáře. HW vývojář nechápe, proč na řízení jednoho bitu použít celý operační systém, když tutéž práci odvede PIC za dvacetikorunu. Operačnímu systému navíc nerozumí a všechny ty abstraktní vrstvy, které odstiňují programátora od samotného hardware, jej odstiňují od hardware. Hardware je přitom to, čemu HW vývojář rozumí a chápe. Při vývoji produktu je proto vhodné, aby spolupracovali jak SW, tak HW vývojář.
Spotřeba je další faktor, který stojí za povšimnutí. Například jednoduchý teploměr (oblíbený námět) s komunikací protokolem LoRa a postavený na procesoru ARM-M0+ je možné živit ze dvou tužkových článků rok. Podobné zařízení postavené na BeagleBone Black by napájecí baterii podobných kvalit vycucnulo během hodiny.
Byl bych velmi nerad, kdyby uvedení parametrů BeagleBone Black vedlo k nežádoucímu porovnávání s Raspbery Pi. Při přednášce jsem na prezentaci nechal tuto stránku prázdnou.
Než povím něco bližšího, nabídnu k posouzení pár typických problémů, které řeší uživatelé obou platforem. Je mi jasné, že jsem obětí výběrového efektu, protože informace o Raspberry Pi nevyhledávám a přednostně se ke mě dostanou pouze dotazy, které ze specializovaných fór o Raspberry Pi prosákly na běžná IT fóra. Přesto však může skladba zde uvedených otázek napovědět něco o cílové skupině zákazníků Raspberry Pi a BeagleBone Black.
Najít dotazy uživatelů Raspberry Pi nedá žádnou velikou práci. Stačí prohledat libovolné obecné IT fórum a typicky narazíte na tyto starosti:
BeagleBone není zdaleka tak rozšířená platforma, dotazy je potřeba hledat na specializovanějších serverech:
Nyní už ke skutečným parametrům:
Periférie jsou využitelné přes rozšiřovací desky (Capes). Každá deska by měla obsahovat EEPROM s popisem. Podle obsahu EEPROM dokáže systém v BeagleBone načíst správný firmware. Desky mohou být připojené až čtyři.
Množství periférií obsahuje drivery přímo v kernelu. Jako příklad lze uvést třeba připojení tlakového čidla. Čidlo stačilo pouze připojit, systém je automaticky našel a údaje zviditelnil v podobě textového souboru v linuxové adresářové struktuře.
Koprocesor PRU je pomocný procesor, který dělá z BBB raketově rychlý počítač. BeagleBone obsahuje takové procesory hned dva. PRU je zkratka pro "Programmable Realtime Unit". PRU běhá na 200 MHz, obsahuje 32 registrů o šířce 32 bitů. Některé registry mohou být mapované přímo na piny procesoru. Jednoduchým zápisem do registru se tak mohou ovládat přímo vývody procesoru. PRU lze programovat v assembleru, časování lze zajistit stylem "instrukce po instrukci", nebo v jazyce C.
PRU může být použito v situacích, které vyžadují velmi přesné časování. S procesorem PRU je velmi jednoduché dosáhnout přesně načasované odezvy v řádu zlomku mikrosekund. PRU proto může sloužit například pro přesné měření vzdáleností ultrazvukovým čidlem, měření otáček, zakaznické PWM a podobně. V PRU jsou implementované realtime protokoly EtherCAT, Profine, Ethernet/IP, Profibus, HSR/PRP (ani jeden z protokolů mi nic neříká).
Každý PRU pracuje nezávisle na hlavním procesoru a na druhém PRU. Nehrozí proto například situace, že výtah řízený počítačem BeagleBone vyjede do třináctého patra dvanáctipatrové budovy, protože BeagleBone byl zrovna zaměstnaný zápisem dat do databáze s knihou jízd. S procesorem PRU zastaví výtah vždy včas.
BeagleBone obsahuje hned tři procesory v jednom.
BeagleBone Black plně nahradí desktopový počítač...
Původně se prodával BeagleBone s SD kartou, na které byla distribuce Ångstrom. S touto distribucí jsem se nezkamarádil – systém, který přišel s počítačem BeagleBone, byl přeložený bez podpory IPv6, což pro mě byla nepřekonatelná potíž. Vyzkoušel jsem proto distribuci Gentoo. Ta chodila na BeagleBone dobře, ale její instalace a udržování je úkol pro otrlé. V praxi se pak její udržování ukázalo jako takřka nemožné.
Spolu s BeagleBone Black Rev C se objevila i distribuce Debian pro BeagleBone. Distribuce je přizpůsobená počítači BeagleBone, ale ve většině aspektů se příliš neliší od distribuce pro běžný x86 server nebo desktop. Drtivou většinu instalací dnes provozují právě na distribuci Debian.
Na BeagleBone lze provozovat i distribuci Buildroot. V mnoha ohledech je instalace Buildroot stejný, ne-li horší opruz, než instalace a provozování Gentoo. Přesto má tato distribuce svůj význam, protože umožňuje vytvořit minimální obraz, který je možné provozovat i bez potřeby zápisu na disk.
BeagleBone se prodává s nainstalovanou distribucí Debian. Distribuce vlastního software proto může probíhat přes tradiční balíčky .deb a vlastní repozitáře. Údržba software po zprovoznění spočívá v prostém apt-get update; apt-get upgrade.
V systému je však od výroby množství zbytečných balíků (desktopové prostředí), které je vhodné odinstalovat. Spolu s instalací vlastních balíků tak může být příprava každého BeagleBone docela zdlouhavá. Obsah disku eMMC se dá naštěstí velmi snadno duplikovat prostřednictvím SD karty. Obraz systému se na SD kartu dostane jednoduchým dd. Karta se pak změnou jediného řádku v konfiguraci změní na instalační médium, ze kterého stačí nabootovat nový BeagleBone a obsah se automaticky nainstaluje do eMMC paměti.
BeagleBone se programuje v nejdůležitější platformě dnešní doby: LAMP (Linux – Apache – MySql – PHP).
Nyní vážně: provozovat LAMP na BeagleBone samozřejmě možné je a držím palce všem, kteří by se o to pokusili. Ale volil bych raději nějaké lehčí prostředí, přizpůsobené použitému hardware. Především bych se vyhnul databázi MySql a použil raději Sqlite. Ačkoliv je Sqlite těžko porovnatelná svými možnostmi s MySql, pro použití v embedded zařízeních je vhodnější.
Přístup "k drátům" je zajištěný přes obyčejné textové soubory v adresáři /sys. Práce aplikačního programátora proto nemusí být příliš obtížná.
Sám vytvářím embedded aplikace především v C++ a Qt. Pokud se vám podaří rozchodit akcelerovanou grafiku (přes EGLFS, X11 akcelerovaně nefunguje), je možné použít i jazyk QML a QtQuick. Tato součást Qt dovoluje napsat dobře přenositelné aplikace rychleji, než samotné C++ a Qt widgets.
Samostatnou částí je procesor PRU. Ten je programovatelný pouze v assembleru a v jazyce C. Použití PRU vyžaduje alespoň základní ponětí o programovacích technikách používaných na tak nízké úrovni (programování jedočipů). Díky spolupráci s ARM procesorem je však instrukční sada procesoru PRU jednoduchá a pochopit fungování procesoru PRU je snazší.
Pokud připojujete k BeagleBone vlastní hardware a s jeho podporou to myslíte vážně, nevyhnete se potřebě vytvořit vlastní firmware. To byl alespoň pro mě ze začátku veliký problém. Firmware je možná nevhodný název vyplývající z toho, že soubory jsou uložené v adresáři /lib/firmware. Ve skutečnosti jde o konfigurační soubor, který popisuje použité vývody, jejich nastavení a spojení s moduly v kernelu, které se starají o obsluhu hardware.
Soubor s firmware používají vlastní syntax, zcela nepodobnou čemukoliv jinému. Navíc je nutné detailně porozumět vlastnímu hadrware i způsobu, jakým použitý ARM procesor využívá a nastavuje vývody. Bariéra pro "správné" nastavení BeagleBone může být dost vysoká, při prototypové výrobě lze ale využít univrzální nastavení a soubory s firmware se nezabývat.
Výroba rozšiřovacích desek pro BeagleBone může být v některých ohledech jednodušší, než výroba desek s jednočipovými procesory. V nejjednodušším případě stačí na desku umístit dva konektory, potřebnou periferii a případně EEPROM paměť s popisem desky. Navíc byla zatím vždy většina periferií, které jsem kdy k BeagleBone připojoval, podporovaná přímo operačním sytémem.
Sám desky obvykle nenavrhuji, jsem orientovaný především na software. Pokud už jsem někdy nějakou desku navrhnul, jednalo se vždy o velmi jednoduchou záležitost. Pro návrh používám KiCad. Hotová šablona pro BeagleBone je zde k dispozici přímo v instalačním balíku aplikace.
Z jiného pohledu je však návrh desek pro BeagleBone složitější, než návrh desek s jednočipy. Výroba desek pro BeagleBone s sebou nese některé zvyklosti, které je vhodné respektovat. Deska by měla obsahovat EEPROM s popisem použitých vývodů, je třeba pamatovat na konflikty vývodů s jinými deskami a v neposlední řadě je nutné vytvořit pro desku firmware.
Pro své první pokusy s připojením vlastního hardware k BeagleBone jsem použil velmi primitivní prostředky. Ze spárů staré základní desky pro PC jsem vysvobodil spínací tranzistor a použil jej pro řízení LED.
Dostat něco ze základní desky je obtížné, desku je nutné velmi důkladně prohřát. Ze začátku jsem zvolil příliš malý nástroj a po pár nezdařených pokusech jsem musel sáhnout po něčem větším. Přitom jsem litoval, že nemám velikou klempířskou páječku nebo aspoň plamenomet.
Výsledek zcela odpovídá použitým prostředkům. Ačkoliv jde o poctivou kovářskou práci, funguje to.
Výsledkem prvních pokusů s řízením LED je deska pro řízení osmi výkonných LED (lze spínat až 4 A při napětí do 24 V). Deska obsahuje i 14 vstupů pro tlačítka či podobná zařízení (PIR čidla), sběrnici pro teploměr a hodiny reálného času. Software je dostupný pod licencí GPL.
Desku si můžete vyzkoušet i v praxi: http://weblight-demo.hobrasoft.cz
První deska, kterou jsme pro BeagleBone navrhli. Slouží pro sběr dat na fotovoltaických elektrárnách. Obsahuje čtyři sériové porty a hodiny reálného času.
Požadavky na fotovoltaických elektrárnách se časem změnily - potřeba čtyř sériových portů je minimální, zato je občas vhodné sbírat data z různých analogových čidel (osvit, teplota), z digitálních čidel (požární hlásiče, elektroměry, zabezpečení), nebo ovládat nějaké zařízení (poslat reset neposlušnému PC). Desku 4×232 jsme upravili a dva sériové porty jsme vyměnili za množství jiných periférií:
Deska s modemem LoRa pro bezdrátový přenos informací z různých sensorů.
V době přednášky byla tato deska ve výrobě a k dispozici byl pouze vygenerovaný náhled na konečnou podobu desky. Mezitím dorazily tištěné spoje a bylo možné osadit prototyp. Oproti návrhu je skutečná deska osazená jinými konektory, takže při použití této desky nelze k BeagleBone připojit další desky.
Pokud toužíte po výkonném jednodeskovém počítači za nízkou cenu, sáhněte po něčem jiném. Jde-li vám však o stabilní linuxovou platformu vhodnou i do různých embedded zařízení, BeagleBone je v současné době jedno z nejvhodnějších řešení. Díky podpoře realtime aplikací v podobě PRU procesoru se dá nasadit BeagleBone snadno i tam, kde jinak vládnou jednočipové počítače, nebo systémy typu Arduino.