RISC-V programmeren: met platform IO en microcontrollerboard
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.
Lees verder na de advertentie
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 gloednieuwe 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.
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-Nanoformaat 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 programmavoorbeelden uitgeprobeerd onder Windows 10.

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 hobbyboards te programmeren, omdat de betreffende fabrikanten – of een ontwikkelaarscommunity – daar voor GitHub geschikte configuratiegegevens 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.

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 meteen van stroom. Hij heeft minder dan 50 mA nodig tijdens het gebruik, inclusief het display. Bij het Apparaatbeheer 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:
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.

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.

RISC V programmeren
Dan kun je beginnen met het voorbereiden van het codevoorbeeld. Als de combinatie VSCode / PlatformIO / 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 ‘GigaDevice GD32V’. Laat de standaardinstelling ‘GigaDevice 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:GebruikersnaamDocumentenPlatformIOProjects.
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 lokale 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.

Compileer het project dan door op het vinkje in de statusregel onder te klikken. Er wordt dan automatisch 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.
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 beeldbewerkingsprogramma 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. Voordelen 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)
- Test van zakelijke laptops met moderne NPU’s voor Copilot+
- AI-integratie via Model Context Protocol
- Analyse van enshittification en innovaties voor hogere harde-schijfcapaciteit
Tip!
Dit is het moment om jouw droomdevice aan te schaffen.


Praat mee