RISC-V programmeren: met platform IO en microcontrollerboard

Noud van Kruysbergen
0

Inhoudsopgave

Een instap in de wereld van de opensource technologie RISC-V hoeft niet meer te kosten dan een euro of tien – exclusief verzendkosten. We hebben het RISC-V-board Longan Nano eens uitgeprobeerd met PlatformIO onder Windows 10.

De instructieset-architectuur RISC-V belooft open chipontwerpen zonder achterdeuren. Maar tot nu toe zijn er nog maar weinig RISC-V-processors beschikbaar om die gloed­nieuwe technologie uit te proberen. Een van de eerste RISC-V-chips is de 32-bit GD32V-microcontroller van de Chinese fabrikant Gigadevice. Die chip wordt door de firma Sipeed uit Shenzhen op het controllerboard Longan Nano gesoldeerd. We testen of de Longan Nano is te gebruiken om te experimenteren met RISC-V programmeren.

RISC V programmeren Longan Nano PlatformIO VSCode micro controllerboard

Longan Nano mogelijkheden

Dit microcontrollerboard is voor tien euro te koop in Nederland (of nog minder) of voor vijf dollar in China. Het mooie eraan: de kleine printplaat in het duimlange Arduino-Nano­formaat wordt geleverd met een klein LC-­display dat met een foliekabel verbonden is. Daar kunnen teksten en foto’s op weergegeven worden met 160 × 80 gekleurde pixels, en met een trucje kun je sequenties van foto’s ook als video laten afspelen. De Longan Nano leest dergelijke gegevens van een microSD-kaart, waarvoor aan de onderkant van de printplaat een insteekslot beschikbaar is. Daarnaast wordt de Longan Nano geleverd met een eenvoudige kunststof behuizing en twee pinheaders, die je eventueel zelf moet vastsolderen.

Op de Longan Nano zit de GD32V-variant GD32VF103C met 20 kB SRAM en 64 kB flashgeheugen. De RV32IMAC-processorkern kan tot 108 MHz. Hij is afkomstig van het Chinese bedrijf Nuclei Systems en is gedocumenteerd onder de naam Bumblebee. Naast USB-C heeft de Longan Nano 34 aansluitingen die niet alleen gebruikt kunnen worden als GPIO-­pinnen, maar ook als analoge in- en uitgangen, timers en interfaces voor SPI, I2C, UART en CAN-bus. De GPIO-pinnen kunnen maximaal 3,6 volt aan.

Om de Nano te programmeren, adviseert Sipeed de gratis ontwikkelingomgeving PlatformIO, waarvoor ook vier Longan-Nano-probeerprojecten bestaan. Om die aan de gang te krijgen, moet je echter enkele hindernissen overwinnen en informatie verzamelen uit verschillende bronnen, waarvan sommige in het Chinees. Wie gewend is aan de Raspberry Pi, kan misschien beter eerst naar een Arduino toe. We hebben drie programma­voorbeelden uitgeprobeerd onder Windows 10.

Longan Nano aansluitingen IO pinnen interface

De aansluitpinnen van de Longan Nano kunnen worden geconfigureerd als verschillende interfaces en kunnen maximaal 3,6 volt aan.

PlatformIO en VSCode

Het bedrijf Sipeed onderhoudt een wiki over de Longan Nano en verschillende branches in het open codemanagementsysteem GitHub. Maar zonder voorafgaande kennis en ervaring is het moeilijk om alle benodigde informatie te vinden. Daarom hier een overzicht van de belangrijkste concepten.

PlatformIO (PIO) maakt het eenvoudiger om hobby­boards te programmeren, omdat de betreffende fabrikanten – of een ontwikkelaars­community – daar voor GitHub geschikte configuratie­gegevens voor opslaan. De PIO-kern is geschreven in de programmeertaal Python, die geïnstalleerd moet worden op de laptop of de pc waar je op wilt programmeren. Maar in theorie hoef je je daar niet zelf om te bekommeren (meer daarover later), want PIO is weer een uitbreiding van de gratis code-­editor Microsoft Visual Studio Code (­VSCode) en kan van daaruit ook geïnstalleerd worden. PIO transformeert VSCode in een Integrated Development Environment (IDE) voor PIO-compatibele boards. Daarmee kun je (voorbeeld)code uit GitHub importeren, compileren, debuggen en via usb op het gewenste ontwikkelbord zetten.

RISC V VScode PlatformIO extensie Visual Studio Code

PlatformIO is een extensie voor Visual Studio Code die het programmeren van veel ontwikkel­borden door middel van configuratiebestanden en projectvoorbeelden vereenvoudigt.

PIO heeft een wizard die de juiste configuratiebestanden en voorbeeldprojecten voor de Longan Nano klaarzet. Om de uiteindelijk code van PIO naar de Longan Nano te schrijven, kan de USB type C-­interface worden gebruikt. Afhankelijk van de laptop of pc heb je een USB-A-naar-C-adapterkabel nodig.

De usb-aansluiting voorziet de Longan Nano met­een van stroom. Hij heeft minder dan 50 mA nodig tijdens het gebruik, inclusief het display. Bij het Apparaat­beheer van Windows 10 verschijnt de Longan Nano in eerste instantie niet of alleen als ‘Onbekend apparaat’. Om de usb-interface te kunnen gebruiken, moet het gratis driverprogramma Zadig handmatig geïnstalleerd worden.

 


Ontvang gratis info over microcontrollers, programmeren en meer, schrijf je in voor de nieuwsbrief:

Ontvang elke week het laatste IT-nieuws, de handigste tips en speciale aanbiedingen.

 

Software installeren

Met de bovenstaande voorkennis is het wel duidelijk dat je eerst VSCode op je pc moet installeren. Daarna is een reboot nodig, omdat het later geïnstalleerde PlatformIO bepaalde informatie alleen kan vinden als het in het zoekpad van Windows staat – en dat werkt hier via de Windows-systeemvariabele PATH.

Maar voordat je PlatformIO als extensie installeert in VSCode, moet je Python 3.8 apart installeren – en de optie ‘Add Python to environment variables’ selecteren om Python aan de PATH-variabele toe te voegen. En dan moet je nogmaals herstarten. Zonder de PATH-verwijzing naar Python 3.8 stuitten we op het probleem dat PlatformIO versie 1.10.0 onder VSCode 1.40.2 automatisch Python versie 3.7.5 installeerde, maar niet correct draaide.

Het bleek ook dat Git op Windows apart moet worden geïnstalleerd. Anders komt PlatformIO zelf wel aan de benodigde branches in de GitHub-­repository, maar de Git-functies in VSCode zullen niet werken. Die zijn handig voor het handmatig kopiëren van willekeurige codeprojecten van GitHub. Git is makkelijk te downloaden.

Usb-drivers installeren

Voordat je begint met programmeren, kun je het beste de usb-driver van Zadig voor de Longan Nano installeren. Download daar de Zadig-software voor, maar start die nog niet. Open het Apparaatbeheer van Windows – dat is het makkelijkst te doen via de toetsencombinatie Windows+X. Sluit vervolgens de Longan Nano aan op de pc met de USB-C- of adapterkabel. De Longan Nano verschijnt niet onmiddellijk in het Apparaatbeheer, maar alleen wanneer je hem via usb in de apparaatmodus voor Direct Firmware Update (DFU) zet. Om dat te doen, moet je eerst de kleine knop BOOT0 op de Longan Nano die via usb aangesloten is ingedrukt houden, dan kort op de RESET-­knop drukken en tenslotte de BOOT0-knop loslaten. Dan verschijnt er een ‘Onbekend apparaat’ in het Apparaatbeheer. Dat had bij ons de USB-ID 28E9/0189.

Longan Nano driver installeren Zadig libwdi

Installeer met Zadig de juiste driver (het stuurprogramma libwdi).

Start de Zadig-software, selecteer dat usb-apparaat (waarschijnlijk ‘Unknown device #1’) en klik op ‘Install driver’ – het zal dan een tijdje duren totdat het stuurprogramma geïnstalleerd is. Indien gewenst kun je de Longan Nano ook een usb-apparaatnaam geven met Zadig (via de knop Edit).

Als je na het installeren van het stuurprogramma opnieuw op de resetknop op de Longan drukt, schakelt die over naar de normale modus en verdwijnt hij uit het Apparaatbeheer. Als je weer naar de USB-DFU-modus overschakelt, zou hij opnieuw moeten verschijnen.

Longan Nano driver installeren Zadig libwdi

Met de juiste driver verschijnt de Longan Nano wel in Apparaatbeheer van Windows 10.

RISC V programmeren

Dan kun je beginnen met het voorbereiden van het codevoorbeeld. Als de combinatie VSCode / Platform­IO / Python eenmaal draait, werkt het vrij goed, maar het spreekt allemaal niet voor zich.

De Longan Nano wordt geleverd met een firmware die de led met verschillende kleuren laat knipperen. Die originele firmware kan echter nergens gedownload worden. Als eerste eigen project hebben we gekozen voor het gebruikelijke eenvoudige knipper-project, waardoor de led van de Nano alleen rood knippert.

Na het starten van VSCode start PlatformIO na de standaard installatie automatisch, maar wel na een korte wachttijd. Als het venster ‘PIO Home’ niet verschijnt, klik dan op het kleine Home-pictogrammetje in de linkerbenedenhoek van het VSCode-­venster. Rechts daarvan verschijnen later twee andere belangrijke pictogrammen: een vinkje, dat het compilatieproces start, en een pijl die naar rechts wijst, waarmee je de gecompileerde code als een firmware-image via usb in het geheugen van de Longan Nano kunt schrijven.

Maar daarvoor moet je eerst een project maken in VSCode en wat code bewerken. In het venster ‘PIO Home’ staat de knop “+ New Project” in de rechterbovenhoek onder ‘Quick Access’. Met een klik daarop start de Project Wizard. Daar geef je eerst een naam aan het nieuwe project, bijvoorbeeld Longan-Nano-01. Selecteer vervolgens ‘Sipeed Longan Nano’ onder ‘Board’, die bevindt zich in de categorie ‘Giga­Device GD32V’. Laat de standaardinstelling ‘Giga­Device GD32V SDK’ onder Framework zoals die is. Na klikken op Finish, zal PlatformIO een directory aanmaken in de Documenten-map van de ingelogde gebruiker voor PlatformIO, oftewel in C:\Gebruikersnaam\Documenten\PlatformIO\Projects.

Het is een beetje verwarrend dat het voorbeeldproject niet in de zojuist aangemaakte map terechtkomt, maar ernaast in dezelfde bovenliggende map – maar dat is alleen visueel storend. Selecteer ‘longan-nano-blink’ als eerste voorbeeldproject door dit te importeren bij ‘Project Examples’. PlatformIO kopieert de code van GitHub dan naar een nieuwe lo­kale directory. Het zal dan verschijnen in de linker­ ­VSCode-kolom Explorer in de huidige ‘Workspace’.

Als je de broncode van het voorbeeld – geschreven in C – wilt bekijken, klik dan op het bestand ‘main.c’ onder ‘src’ in de Explorer-kolom. Om het voorbeeld via usb naar de Longan Nano te schrijven, is een extra regel code in het bestand ‘platformio.ini’ nodig. Onderaan de sectie [env:sipeed-longan-nano] moet je ‘upload_protocol = dfu’ toevoegen.

Longan Nano PlatformIO DFU code uploaden programmeren

Bij de eenvoudige codevoorbeelden voor de Longan Nano hoef je alleen maar een regel toe te voegen voor het ‘upload_protocol’ in het platformio.ini-bestand via PIO.

Compileer het project dan door op het vinkje in de statusregel onder te klikken. Er wordt dan auto­matisch een terminalvenster geopend onder de codeweergave, waarin de voortgang en eventuele foutmeldingen worden getoond. Aan het einde verschijnt ‘Terminal will be reused by tasks, …’ – de firmware-­image is dan klaar.

Sluit de Longan Nano vervolgens aan (indien nog niet aangesloten) en activeer de usb-communicatiemodus. Met een klik op het eerder genoemde pijlsymbool start het flash-proces, dat enkele seconden duurt – in het terminalvenster verschijnt een voortgangsbalk, gevolgd door een foutmelding over een ontbrekende digitale handtekening, die je kunt negeren. Ook kan het zijn dat je upload-error 74 krijgt, dan is het flashen toch gelukt maar komt er geen statusmelding terug. Ook dat kun je negeren.

Na het succesvolle flashen schakelt de Longan Nano automatisch over naar de normale modus, voert een reset uit en vervolgens de nieuwe code. Het voorbeeldproject laat nu alleen nog maar de onboard-led boven de A1-pin knipperen. Het project ‘arduino-blink’, ook beschikbaar als voorbeeld, verschilt van het eerste project doordat het in C++ is geschreven en een Arduino-bibliotheek voor de GD32V-chip bevat.

Doorlezen is gratis, maar eerst even dit:

Dit artikel is met grote zorg samengesteld door de redactie van c’t magazine – het meest toonaangevende computertijdschrift van Nederland en België. Met zeer uitgebreide tests en praktische workshops biedt c’t de diepgang die je nergens online vindt.

Bekijk de abonnementen   Lees eerst verder

Display aansturen

Een project waarbij het display van de Longan Nano eerst het logo van het bedrijf Sipeed toont en vervolgens de cartoon Bad Apple is veel complexer dan de knipperende voorbeelden. Dat is interessant omdat het een aantal complexere I/O-functies laat zien die je kunt gebruiken voor je eigen projecten. Daarbij worden de microSD-reader en het LC-display gebruikt – dat laatste via SPI. De LCD-bibliotheek bevat ook lettertypes voor het tonen van letters op het minidisplay. Om de microSD-kaart te kunnen lezen, maakt een FAT16-stuurprogramma deel uit van het codevoorbeeld.

De instructies voor het voorbeeld van de videocode zijn geschreven in het Chinees, maar kunnen op een redelijk begrijpelijke manier worden vertaald met Google Translate. In de code zelf staan helaas ook veel Chinese opmerkingen – toch is het voorbeeld nuttig. Je leert bijvoorbeeld dat de GD32V de 160 × 80 pixels grote afbeeldingen in twee stroken van elk 160 × 40 pixels opdeelt, die hij via SPI na ­elkaar naar het display stuurt.

De GD32V-chip kan bitmapbestanden en ook video’s echter niet rechtstreeks lezen, maar alleen een speciaal binair formaat. Voorbeelden daarvan zijn ook op GitHub te vinden. Het genoemde bedrijfslogo staat in het bestand logo.bin en de video in bmp.bin.

Het voorbeeldprogramma toont eerst de afbeelding logo.bin gedurende 1,5 seconde en dan de 2190 afbeeldingen in het bestand bmp.bin als een video. Om dat uit te proberen, heb je een microSD-geheugenkaart, een kaartlezer en de bovengenoemde Git-­installatie op je systeem nodig. Kopieer het voorbeeld bij de link op deze pagina eerst met het commando ‘git clone’ naar de momenteel geselecteerde directory. Gebruik daarvoor de toetsencombinatie Ctrl+Shift+P in VSCode om een commandline-prompt te starten waar je ‘git clone’ intypt. VSCode zal dan de url opvragen en de bestanden vervolgens kopiëren.

In de subdirectory ‘put_into_tf_card’ staan dan de bestanden, die je in de hoofddirectory van de microSD-kaart zet. Stop die in de kaartlezer aan de onderkant van de Longan. De broncode hoeft niet aangepast te worden, maar het bestand platformio.ini wel. Ook daar ontbreekt de regel ‘upload_protocol = dfu’.

Herhaal vervolgens de stappen compileren (vinkje), Longan in USB-DFU-modus zetten (druk op de knoppen in de juiste volgorde) en de firmware via usb schrijven (pijlsymbool). Na een korte pauze toont het display het logo en vervolgens de film.

Eigen video’s

Het uitgewerkte voorbeeldprogramma vertoont met een minimale verandering ook je eigen foto’s en ­‘video’s’ op het display van de Longan Nano. Daarvoor hoef je ze alleen in het juiste bestandsformaat en met de namen logo.bin en bmp.bin op te slaan op de microSD-kaart. Sipeed levert een Python-script dat bitmapbestanden omzet in het juiste formaat.

Afbeeldingen moeten eerst worden bijgesneden of geschaald tot 160 × 80 pixels met een beeld­bewerkingsprogramma zoals IrfanView en worden opgeslagen als BMP-bestanden met 24-bit kleurdiepte. Je kunt je eigen video omzetten naar een serie BMP-screenshots van 160 × 80 pixels. Dat kan bijvoorbeeld met PotPlayer. Daarna moet je alle BMP-­bestanden converteren naar 24-bit kleurdiepte met behulp van batch-postprocessing met bijvoorbeeld IrfanView. Als laatste zet het Python-­script bmp2hex de bitmaps in bestanden met de extensie .bin.

We hebben dat geprobeerd met ons c’t logo en een 16 seconden durende video van 344 frames (24 frames per seconde). Daar was slechts één wijziging voor nodig in de broncode van main.c, namelijk bij de frameteller (343 in plaats van 2189).

Experimenteren maar

De Sipeed Longan Nano maakt praktische experimenten mogelijk met een goedkope RISC-V-chip. Voor­delen ten opzichte van een Arduino Nano zullen er echter maar bij een paar projecten zijn. Bovendien is de Longan Nano nog gecompliceerder te programmeren dan een Arduino. Dat is ook te wijten aan de onvolledige documentatie die verspreid is over verschillende websites – deels in het Chinees. websites. De programmeervoorbeelden lijken snel bij elkaar geklust, maar het eerste contact met RISC-V kost niet veel en bewijst dat de opensource technologie werkt.

(Christof Windeck en Noud van Kruysbergen, c’t magazine)

Uitgebreide achtergrondinfo en meer workshops lees je op je gemak in c't 05/2024

Meer over

Hardware

Deel dit artikel

Noud van Kruysbergen
Noud van KruysbergenNoud heeft de 'American Dream' doorlopen van jongste bediende tot hoofdredacteur van c't, waar hij zo veel mogelijk de diepgang, betrouwbaarheid en diversiteit wil bewaken.

Lees ook

Chat GPT 4 gebruiken: dit is het verschil tussen GPT-3 & GPT-4

De lancering van GPT-4 heeft de intelligentie van ChatGPT naar een hoger niveau gebracht maar hoe kun je effectief de nieuwe Chat GPT gebruiken en wat...

Raspberry Pi als NAS-systeem gebruiken? Dit moet je weten!

Wist je dat je een Raspberry Pi als Network Attached Storage (NAS) kunt gebruiken? Zo voldoet de Raspberry Pi 4 aan de belangrijkste eisen om dit te k...

0 Praat mee
avatar
  Abonneer  
Laat het mij weten wanneer er