BrisbaneSilicon ELM11
Poznavaoci Lua jezika, dakle programeri skripti za gejming industiju možda će biti ponunkani idejom da se oprobaju u embedovanom programiranju u jeziku sa kojim se svakodnevno druže. Najzad je stvoren komunikacioni most između gejming industrije i embedovanih uređaja. EmbLua, prilagođena verzija Lua jezika za mikrokontrolere ovde sija u svim bojama digitalnih signala - svet analognih signala je na nekom sasvim drugom mestu.
Pros
- Softcore RISC-V mikrokontroler kreiran na FPGA čipu se može modifikovati
- U SuperVerilog-u ili VHDL-u se može kreirati dodatno kolo između postojećeg softcore jezgra i 16 pinskog IO-Bus-a
- Iako mali tim, uradili su ELM11 IDE u Qt6 za sve bitnije OS-ove
- BrisbaneSilicon se dobrano potrudio oko dokumentacije svog projekta
- Cena ispod $15 je više nego korektna
Cons
- Nema podrške za drugo jezgro softcore RISC-V procesora
- Ni traga od IoT-a
- Nema analognih IO linija na ovom razvojnom sistemu
BrisbaneSilicon ELM11 pločica koja je pred nama je neobična, jer je stvorena sa idejom da se direktno programira u Lua jeziku. Lua je skriptni programski jezik nastao 1993. godine u Brazilu. Kako se u Brazilu govori portugalskim, mada lokalizovanom verzijom, njegovo ime dolazi od naziva za mesec, budući da je u razvoju ime njegovog jezik prethodnika bilo Sunce. Konstruisan je da bude kompaktan, nezahtevan u pogledu memorijskog prostora i optimalno brz interpreter, koji je i na tadašnjim računarima trebao da bude hitar.
Lua programski jezik je specifičan po tome što se tekst datoteke programa ne interpretiraju direktno, već se prvo kompajliraju u bajtkod koji se nakon toga izvršava na Lua virtuelnoj mašini pokrenutoj na lokalnom hardveru. Biblioteke i prevodilac koji čine samu virtuelnu mašinu, zauzimaju svega par stotina kilobajta, pa se mogu smestiti i u memoriju mikrokontrolera. Sve što mu je potrebno da bi se pokrenuo na specifičnom hardveru je funkcionalni C kompajler za ciljni hardver – što je danas standard pri konstrukciji procesora.
Ove osobine ga čine idealnim za savremene embedovane sisteme koji sa modernog stanovišta PC kompjuterskih performansi spadaju u nisku klasu. U ovoj niši u stvari govorimo o ruterima, IoT uređajima, televizorima i drugim konzjumerskim mehatroničkim napravama. Međutim, i u drugom ekstremu hardverskih performansi – gejming industriji – Lua je našao primenu, recimo za definicije nivoa, ponašanja karaktera ili funkcionalnosti korisničkog interfejsa. Tada se on koristi kao skripting jezik unutar daleko većeg koda u nekom drugom jeziku ili kao veznik između rutina pisanih u različitim jezicima. Specifično, može se koristiti unutar C jezika, gde se importuje kao biblioteka. Ovo je veoma praktično za realizaciju, budući da je i sam u potpunosti pisan u ANSI C-u. Često se za ovaj način korišćenja Lua koda u vidu skripta unutar drugog programskog jezika na netu može naći izraz – embedovano programiranje. Međutim, u ovom slučaju se misli na softversko ubacivanje (embedovanje), što nije primena koja je u našem fokusu.
U našem slučaju Lua se koristiti kao samostalan jezik za programiranje rada embedovanih uređaja. U njegovoj preko trideset godina dugoj istoriji napisane su i mnoge biblioteke koje mu povećavaju upotrebljivost. Jedno posebno prilagođenje ovog jezika za embedovane sisteme je EmbLua. Glavni repozitorijum je na GitHub-u, a odlično uputstvo se može pogledati na BrisbaneSilicon strani sa EmbLua dokumentacijom.

Hardver
Australijski tim BrisbaneSilicon vodi Craig Haywood kome se i zahvaljujemo za uzorak ELM11 Feather ploče čime nam je omogućio da uživo isprobamo ovaj neobičan EmbLua razvojni sistem. U osnovi je GOWIN Semiconductor LittleBee® GW1NR-9 FPGA. Ovaj FPGA se nalazi u Sipeed Tang Nano seriji razvojnih pločica poznatoj kao entry level FPGA sa izuzetno atraktivnom cenom. Često su one stoga prvi izbor za početnike u FPGA svetu. Model Tang Nano 9K ima 8640 LUT4 jedinica, što je dovoljno da se na njemu izvede (softcore) kompletan PicoRV RISC-V mikrokontroler sa dva jezgra. Ovo je izuzetno značajno jer otvara ceo spektar dostupnih aplikacija. Sa druge strane, ako pretražite BrisbaneSilicon prezentaciju, uočićete da ovi već imaju BRS-100-GW1NR9 FPGA razvojni sistem, u neku ruku nalik na pomenuti Tang Nano 9K koji je u zajednici takođe prepoznat kao cenovno ekonomično rešenje, ali u neku ruku redundantno sa poznatijim Sipeed proizvodom. Rekli bi da su na bazi tog sistema i razvili novi EML11 kao uže specificiran proizvod za targetirano tržište.
Primetite na slici ispod, direktno serijski povezanu na GW1NR-LV9 FPGA čip Puya Semiconductor P25Q32SH 1 MB Flash memoriju u kojoj ćete smestiti jedan ili više Lua programa.

Kako je ovde ideja da se FPGA iskoristi kao EmbLua mikrokontroler, nećemo se baviti tehničkim karakteristikama samog čipa, niti spuštati na FPGA nivo. Ipak, ne možemo sistem posmatrati kao da je na njemu fabrički proizveden mikrokontroler, jer je u ovom slučaju moguće menjati jedan deo hardverske konfiguracije – u pitanju su pre svega IO linije, ali i neke funkcije procesora poput radnog takta (gde imamo izbor između 51, 60, 66, 70 i eksperimentalih 75 MHz), tajmeri, hardverski watchdog i softverski interapti. To se čini uz pomoć Hardware overlay funkcionalnosti, koja se definiše u skladu sa potrebama projekta koji izvodimo i čijom aplikacijom na FPGA modifikujemo sam hardver. Ipak, koliko god možemo modifikovati funkcije hardvera, IO linije na BrisbaneSilicon ELM11 mogu biti samo digitalne.

Trideset i šest pinova, odnosno taj broj montažnih rupa odmah vam govori da ova ploča, iako dimenzija 22.86 x 64.65 mm, što odgovara Adafruit Feather-u nije zapravo to. Adafruit Feather ih ima šesnaest u jednom i još dvanaest u drugom redu, dakle ukupno dvadeset i osam, kao i karakterističan konektor za eksternu bateriju, koga ovde nema. Možemo reći da je fizički moguće utisnuti Adafruit Feather Wings pločice, ali da raspored signala moramo da definišemo kroz adekvatan Hardware overlay – ako je to uopšte i moguće bez analognih signala.

Signali od 1 do 16, koji se nalaze sa leve strane ploče mogu imati različite funkcionalnosti i njih definišemo unapred u skladu sa našim potrebama. Desna strana ima dodatnih šesnaest pinova i te linije su označene kao IO BUS. One su sve po inicijalnoj definiciji izlazne linije sa softcore mikrokontrolera. Kada je u Hardware overlay-u omogućen Hardware Bus, može se dodati Custom Hardware RTL Module (kroz VHDL ili SuperVerilog kod upload-ovan kroz Hardware overlay) koji sada može da komunicira i sa mikrokontrolerskim jezgrom, ali i sa šesnaest linija IO BUS-a na pločici, ondnosno signalima sa eksternih uređaja povezanim na njih.

Primetite da na samom kraju niza pinova sa svake strane postoji i po jedna GND linija, a da je posle svake od njih i po jedan naponski pin. Sa jedne strane +5 VDC, a sa druge +3.3 VDC. Na poleđini ELM11 pločice je sve jasno obeleženo, a ona sama nema ni jednu komponentu na ovoj strani koja bi potencijalno otežavala montažu.

Tu su i dva dugmeta uz USB-C port. Port služi tradicionalno za flešovanje, ali i za napajanje. Levo dugme je reset dugme, dok je desno sistemsko i služi u nekim slučajevima da se prebaci u mod za update firmvera, ali i kao korisnički programabilno dugme.

Zanimljivo je prisustvo Bouffalo Lab BL702SA0 koji ovde realizuje USB, JTAG i UART interfejse. Ipak, BL702 je i 2.4GHz Bluetooth LE i Zigbee transiver, a mi nismo našli nikakvih tehničkih detalja oko ove upotrebe. Bilo bi interesantno da BrisbaneSilicon posveti pažnju podršci za ovaj IoT aplikativni segment – ako je moguće.
Kada govorimo o naponskim nivoima na ploči, obratite pažnju i na T7003C DC/DC step down čip čija je uloga da obezbedi stabilne napone od 5 i 3.3 VDC. U specifikaciji stoji da pločica ima ugrađeno i 500 mA kolo za punjenje LiPoli baterije sa pripadajućim LED-om. Nije jasno gde bi se tačno ta baterija povezivala na ploču, kao ni gde je to kolo. LED bi mogao biti isti koji se pali kada je pločica pod naponom.

Softver
BrisbaneSilicon je, što se tiče softverske podrške, a uzmimo u obzir da je ovo projekat dvojice australijskih harveraša: Craig Haywood-a i William Schofield-a učinio magiju. Napravili su sopstveni ELM11 IDE koji se može startovati na Linux, Mac OS i Windows računarima. Sva uputstva sve vreme pokrivaju sve tri platforme – takođe. ELM11 IDE dodaje grafički interfejs, pa time očiglednost i lakoću u radu, i integriše tekstualni editor. Tako se eliminiše rad u terminalu, odnosno kroz komandnu liniju. Ne treba očekivati moć MS Visual Studio Code-a, već lako i hardverski nezahtevno okruženje koje doprinosi intuitivnosti i programiranje zaista čini ugodnim. Budući da dolazi od kreatora samog razvojnog sistema, razumevanje i korisnički pristup svim specifičnostima ovog, moglo bi se reći hibridnog, hardvera su inkorporirani u njega.
Pre nego nastavimo, treba razjasniti da se ELM11 može programirati u REPL ili Command modu. REPL (Read-Eval-Print Loop) mod omogućava direktno upravljanje jezgrom izdavanjem komandi u Lua jeziku. U ovom trenutku moguće je prići samo jednom jezgru i samo u Lua jeziku, mada je najavljeno da će moći da se koristi i C, kao i više jezgara – svako sa svojim REPL-om. REPL mod podseća na nekadašnja BASIC okruženja na ranim kućnim računarima poput C64. Komande se unose u serijskom terminalu. U gornjem meniju nalaze se i Upload, Run i Stop dugmad koja služe da se Lua program iz editora IDE-a prebaci u Flash na ELM11, startuje ga ili zaustavi. Pre toga je potrebno povezati ELM11 serijskom vezom preko USB-C kabla sa računarom i uspostaviti komunikaciju.

Drugi mod je Command koji omogućava kontrolu nad hardverom, njegovu rekonfiguraciju, startovanje već prebačenih programa u lokalni Flash na razvojnom sistemu, kao i praćenje svih parametara vašeg BrisbaneSilicon ELM11.

Funkcije, poput aktiviranja drugog jezgra i međusobne komunikacije između njih nisu podržane ni u IDE ni preko standardnog terminala. Flešovanje firmvera se mora raditi iz komande linije terminala, IDE vam tu neće pomoći. Za nijansu je jednostavnije to učiniti na Windows-u, jer se pokreće Python skript koji poziva pySerial biblioteku, koja zbog bezbednosnih ograničenja u Pythonu na Linux-u komplikuje proces zbog potrebe da se pokrene virtuelno okruženje (venv).
Zaključak
EML11 je divna ideja. Poprilično ozbiljna realizacija razvojnog sistema koja prirodno razume Lua programski jezik – zapravo njegovu EmbLua modifikaciju za embedovane sisteme. Cena od oko $15 je veoma korektna, posebno ako se uzme u obzir da su i BrisbaneSilicon BRS-100-GW1NR9 i Sipeed Tango Nano 9K sa istim FPGA-om oko $20 kada se kupuju pojedinačno.

Ako zagledate pločicu videćete jednu urednu i pedantnu realizaciju. BrisbaneSilicon ELM11 dolazi sa pin-hederima koji nisu ulemljeni, pa ih vi po svojoj želji možete montirati sa gornje ili donje strane, odnosno možete ih i zameniti sa ženskim hederima, ako planirate upotrebu neke Feather Wings pločice koja to zahteva.
Izuzetno domišljato je kreiranje „write only“ IO BUS-a i mogućnost „umetanja“ Custom RTL kola po sopstvenoj zamisli definisanjem u SuperVerilog-u ili VHDL-u i njegov upload kroz Hardware overlay. Kako u osnovi nije pravi mikrokontroler, već njegov softcore na GOWIN Semiconductor LittleBee® GW1NR-9 FPGA čipu, moguća su naknadna prilagođenja funkcionalnosti.
Šteta što nije još realizovana upotreba drugog jezgra. Može biti ograničavajuće i što su sve IO linije digitalne. Nismo pronašli način da se pločica baterijski napaja, iako postoji indicija u dokumentaciji da je to moguće, čak i da je realizovano kolo za kontrolu 500 mA punjenja LiPoli baterije. Bilo bi divno da se poradi i na upotrebi Zigbee i Bluetooth LE funkcija, kad je već hardver tu.
Softverska podrška je veoma dobra, pisana u Qt6 i radi na svim glavnim operativnim sistemima. Deluje da je najjednostaviji rad u Windows OS-u, bar iz našeg iskustva.
Posle svega, imati razvojni sistem sa softcore FPGA mikrokontrolerom, koga možete dodatno modifikovati i najzad programirati direktno u EmbLua jeziku je očaravajuće. Projekat je započeo kao Crowd Supply i podržan je u okviru Elecrow Project Aviary-a. Tu se nalaze još neki veoma inspirativni mejkerski uređaji koji dolaze direktno iz zajednice i iza njih stoje veoma mali timovi – uglavnom visoko stručnih entuzijasta i iz kojih se jasno vidi koliko kreativne ljubavi je uloženo u svaki od tih tehnoloških snova.

