Raspberry Pi RP2040 microcontroller biedt veel nieuwe mogelijkheden

Alieke van Sommeren
0

De RP2040 microcontroller is de eerste zelfontwikkelde chip van de Raspberry Pi Foundation en opent de weg naar vele nieuwe mogelijkheden. De microcontroller doet een aantal dingen anders dan zijn concurrenten en is daardoor geschikt voor speciale projecten. We belichten vele (nieuwe) kenmerken van de RP2040.

Met de RP2040 opent de Raspberry Pi Foundation andere, nieuwe toepassings- en werkgebieden. De RP2040 microcontroller, vervaardigd met 40-nano­metertechnologie van TSMC, is ook afzonderlijk verkrijgbaar en kost maar een paar euro.


Raspberry Pi RP2040 microcontroller


Aantrekkelijke speciale kenmerken van Raspberry Pi RP2040

Er is al een enorm aanbod beschikbaar dat alle denkbare toepassingsgebieden afdekt. Maar de RP2040 van de Raspberry Pi Foundation heeft een aantal aantrekkelijke speciale kenmerken. De nieuwe microcontroller en het ermee uitgeruste Raspberry Pi Pico developer board verschenen begin 2021.

Raspberry Pi RP2040 microcontroller opent nieuwe gebieden

Met de  RP2040 opent de Raspberry Pi Foundation andere, nieuwe toepassings- en werkgebieden. De RP2040 microcontroller, vervaardigd met 40-nano­metertechnologie van TSMC, is ook afzonderlijk verkrijgbaar en kost maar een paar euro.

Kort na de lancering van de Raspberry Pi Pico, die ongeveer 5 euro kost en doet denken aan een Arduino Nano, kwamen er tal van andere microcontroller-boards en besturings­modules met RP2040 uit, zie ook de tabel verderop.


Ontvang meer nieuws over Raspberry Pi!

Schrijf je in voor de nieuwsbrief:


Raspberry Pi RP2040 microcontroller blokschema

De RP2040 microcontroller, ontwikkeld door de Raspberry Pi Foundation, heeft als speciale eigenschap twee programmeerbare I/O (PIO-)blokken om snelle inter­faces te bieden. Hij heeft ook twee 32-bit ARM Cortex M0+-kernen en 264 kB SRAM, maar geen flashgeheugen. Hij kan gegevens rechtstreeks uitvoeren vanaf een flash-chip die via QSPI is aangesloten (Execute-in-Place, XIP). 16 kB XIP-cache wordt gebruikt om flashtoegang te bufferen.

Raspberry Pi RP2040 microcontroller


Bijzondere eigenschappen

De RP2040 heeft vier belangrijke speciale kenmerken:

  1. Twee rekenkernen in plaats van slechts één
  2. Speciale input/output-functies genaamd Programmable I/O (PIO)
  3. Opensource boot-ROM-code
  4. Geen ingebouwd flashgeheugen.

Bovendien heeft ie een combinatie van andere kenmerken die in deze prijsklasse niet gebruikelijk zijn.

ad 1 – Grote rekenkracht en Floating Points (FP)

Maar eerst iets anders: de twee 32-bit rekenkernen van de RP2040 zijn van het Cortex-M0+-type van ARM. Ze draaien op een klokfrequentie tot 133 MHz, wat sneller is dan in veel andere microcontrollers.

Dat betekent dat er een relatief grote hoeveelheid reken­kracht beschikbaar is, maar dat er geen hardware-units zijn voor de verwerking van floatingpoints (FP) en voor het delen van gehele getallen (integers).

De Raspberry Pi Foundation stopt daarom enerzijds geoptimaliseerde FP-routines in het boot-ROM en heeft anderzijds een hardware-unit voor het delen van integers in de RP2040 ingebouwd.

De twee rekenkernen kunnen parallel worden gebruikt, maar de tweede kan ook worden gebruikt voor speciale taken, zoals debugging.

De Raspi Foundation heeft ook de koppeling van de twee rekenkernen met elkaar en met de input/output-contacten (General Purpose I/O, GPIO) heel slim opgelost, waarover later meer.

ad 2 – Purpose I/O

Het tweede bijzondere kenmerk van de RP2040 zijn de twee PIO-functie-units. Zij kunnen worden gebruikt om relatief krachtige interfaces ‘in software’ te simuleren bij wijze van spreken, zelfs een VGA- of HDMI-­uitgang voor een beeldscherm.

De PIO’s kunnen ook worden gebruikt voor het aansturen van ledstrips, barcodescanners, I2S-audio-chips, (micro-)SD-kaarten of als CAN-bus-interface. In sommige gevallen heb je nog een geschikte transceiver-­component nodig, maar eentje voor de CAN-bus kost slechts 1,50 euro.

ad 4 – Geen flashgeheugen

Door geen flashgeheugen in te bouwen wordt de RP2040 goedkoper en hoeft de Rasperry Pi Foundation niet meerdere chipvarianten met verschillende flashcapaciteiten te verkopen.

Het nadeel is duidelijk: in tegenstelling tot bijvoorbeeld de Arduino moet een aparte NOR-flashchip aan de boards worden toegevoegd. De kleinste 16Mbit-chips (2 MB) kosten zo’n 50 cent, de RP2040 kan tot 128 Mbit (16 MB) aan.


De Raspberry Pi Pico met de RP2040 microcontroller heeft 2 MB flashgeheugen en 26 GPIO-contacten.


USB 1.1-controller

De RP2040 heeft ook een USB 1.1-controller. Andere microcontrollers hebben er daar ook wel een van, maar die in de RP2040 kan ook als host werken.

In de device-modus kan de RP2040 gemakkelijk van software worden voorzien door in te loggen op een pc als een massa-opslagapparaat (de benodigde code bevindt zich in het boot-ROM).

De programmacode voor je project wordt dan via usb naar de flashchip gekopieerd, namelijk als een image in het formaat USB Firmware Flash (U2F).

Goede openbare documentatie

Een ander bijzonder kenmerk is de goede openbare documentatie van de RP2040 en de Raspberry Pi Pico; er is ook veel voorbeeldcode op GitHub te vinden, waar ook de boot-ROM-code te vinden is.

De Raspberry Pi Pico kan worden geprogrammeerd met MicroPython, waarvoor je de IDE Thonny of Microsoft Visual Studio Code kunt gebruiken.

Bovendien biedt de Raspberry Pi Foundation een Software Development Kit (SDK) voor C/C++ met uitgebreide documentatie, en is er de Raspberry Pi Pico Python SDK.

Geheugen SRAM en ROM

De twee rekenkernen kunnen in totaal 264 kB ingebouwd SRAM gebruiken als werkgeheugen; dit is verdeeld over zes banken (banks) die parallel werken met kleine beperkingen: vier met elk 64 kB en twee met elk 4 kB.

Ook ingebouwd en onveranderlijk geprogrammeerd tijdens de fabricage zijn 16 kB ROM voor de opstartcode.

Firmware

De RP2040 heeft toegang tot een extern aangesloten flashgeheugenchip, die normaal gezien de programmacode bevat. In het geval van microcontrollers wordt dit vaak aangeduid als firmware.

Via de seriële perifere interface (SPI) heeft de RP2040 daar toegang toe, of nauwkeuriger gezegd via Quad-SPI (QSPI). Vergeleken met SPI heeft QSPI vier datalijnen in plaats van slechts één en is daarom sneller.

Execute-in-Place (XIP)

De RP2040 kan code uit het flashgeheugen direct uitvoeren zonder deze eerst naar het SRAM te hoeven kopiëren.  Voor deze (veel voorkomende) functie, Execute-in-Place (XIP) genaamd, is 16 kB SRAM-cache ingebouwd.

Als XIP is uitgeschakeld, kan die cache worden gebruikt als extra werkgeheugen. Nog eens 4 kB SRAM kan worden vrijgemaakt door het usb-functieblok uit te schakelen.

Interfaces

Microcontrollers voor besturing hebben veel ingebouwde interfaces, en de RP2040 is daarop geen uitzondering.

De 30 contacten (voor 1,8 of 3,3 volt, maar niet 5 volt-tolerant) dienen als general purpose I/O (GPIO), en vele kunnen worden ingezet voor speciale functies. Ze omvatten elk twee functieblokken voor seriële communicatie (UART), SPI en I2C.

Analoog-digitaal-omzetter (ADC)

Een analoog-digitaal-omzetter (ADC) kan worden aangesloten op maximaal vier GPIO-pinnen en meet de ingebouwde temperatuursensor (TS) als vijfde kanaal.

Het ADC-functieblok bevat ook een FIFO-register om waarden naar het SRAM te schrijven via Direct ­Memory Access (DMA).

Serial Wire Debug (SWD)-interface

Voor debugging is de door ARM gespecificeerde Serial Wire Debug (SWD)-interface ingebouwd. De twee processorkernen zijn intern verbonden met de GPIO-pinnen via een zogenaamd single-cycle I/O (SIO-) blok, zodat ze zeer veelzijdig zijn.

Single-cycle I/O (SIO-) blok

Het SIO-blok helpt ook de rekenkernen met elkaar te communiceren en threads die op beide kernen draaien te ­synchroniseren via FIFO-registers en spinlock-hardware.

Dat laatste zorgt voor exclusieve toegang tot bronnen. Het SIO-blok bevat ook de eerder vermelde delings-unit en twee interpolatoren per kern, hoofdzakelijk voor audio­toepassingen.

Timerfuncties

Voor besturingsfuncties zijn, naast de passende I/O-interfaces, ook timerfuncties nodig. De RP2040 heeft een 64-bit en interrupt-geschikte hoofdtimer die loopt in microseconde cycli.

Instelbare alarmen houden echter alleen de onderste 32 bit in de gaten, en daarom is er voor perioden van meer dan een paar minu­ten een realtime clock (RTC), die ook interrupts kan triggeren.

Voor Pulse Width Modulation (PWM) zijn er nog acht 16-bit timers. Daarnaast zijn er vier timers in de DMA-eenheid en de SysTick-timers van elk 24 bit in de rekenkernen. Als dat nog niet genoeg is, kunnen de PIO-blokken ook worden geprogrammeerd als 32-bit timers.

Unieke PIO-‘processors’

Die twee PIO-blokken zijn tot nu toe uniek in de microcontrollerwereld. Je kunt ze zien als speciale I/O-processors die onafhankelijk van de Cortex M0+-kernen werken.

Zoals in het begin is uitgelegd, zijn de PIO’s in de eerste plaats bedoeld om snelle of latency-kritieke digitale interfaces te implementeren.

In principe kan dit ook worden gedaan met code voor de normale micro­controller-cores (BitBanging). Maar dit leidt tot een hoge belasting van de kernen en bereikt zijn grenzen wanneer hogere frequenties vereist zijn.

Vier programmeerbare status­machines

Daarom heeft elk PIO-blok vier programmeerbare status­machines. Er zijn dus acht ‘I/O processors’ in totaal.

Om een digitale interface te emuleren, is het normaal gezien nodig op één of meer contacten (GPIO-pinnen). specifieke bitpatronen met nauwkeurige tijdreferenties (frequentie, jitter) uit te voeren of te lezen.

Elke PIO-statusmachine heeft daarom twee 32-bit schuifregisters voor in- en uitvoer (In/Out Shift), waarvan de inhoud in beide richtingen met een willekeurig aantal plaatsen kan worden verschoven.

Bovendien zijn er twee 32-bit hulpregisters X en Y (Scratch X/Y), die gegevens kunnen uitwisselen met de schuifregisters of als tellers kunnen dienen.

Een instructieteller (Program Counter, PC) geeft aan welke instructies uit het instructiegeheugen worden uitgevoerd.

De klok van de statusmachine kan worden ingesteld via een klokdeler om protocollen te ‘spreken’ die niet passen in het klokpatroon van het microcontrollersysteem.

Elk PIO-blok heeft een instructiegeheugen voor 32 instructies en met vier poorten die worden gedeeld door alle vier de statusmachines van dat blok.

De gegevensuitwisseling via twee FIFO-buffers

De gegevensuitwisseling tussen het microcontroller­systeem en de afzonderlijke statusmachine vindt plaats via twee FIFO-buffers met ruimte voor vier 32-bit waarden.

Gewoonlijk wordt één van deze FIFO’s gebruikt voor de zend- en één voor de ontvangstrichting, maar de buffers kunnen ook onderling worden verbonden om een buffer te creëren met ruimte voor acht waarden, hetzij voor zenden, hetzij voor ontvangen.

De in- en uitgangen van een statusmachine in de richting van de buitenwereld kunnen worden toegewezen aan GPIO-pinnen.

Je specificeert een GPIO-pin, die de statusmachine interpreteert als pin 0. Als je meerdere pinnen wilt gebruiken, telt hij ze op vanaf pin 0. Als de PIO verder telt dan de laatste GPIO-pin, keert hij terug naar de eerste via een overflow.

Per statusmachine kunnen vier GPIO-toewijzingen worden gedefinieerd: Input, Output, Set en Sideset. Set kent een vaste waarde toe aan de GPIO-pin (high of low, oftewel 1 of 0).

Sideset stelt een waarde in als een secundaire functie naast de hoofdfunctie. GPIO-toewijzingen mogen overlappen, zowel tussen individuele toewijzingen als tussen meerdere statusmachines.

Als er meerdere binnen één klok de waarde van dezelfde uitvoerpinnen veranderen, worden de waarden van de hoogst genummerde statusmachine overgenomen.


RP2040: Programmable I/O (PIO)

Elk PIO-blok van de Raspberry Pi RP2040 bevat vier programmeerbare statusmachines met elk twee 32-bit schuifregisters: één voor invoer en één voor uitvoer. PIO’s kunnen ook worden gebruikt om snelle interfaces zoals HDMI te emuleren. die een hoge kloksnelheid en lage jitter vereisen.


Programmeren van de PIO

Voor het programmeren van de PIO’s wordt een speciale Assembler-taal gebruikt, die via bibliotheken in de C- of MicroPython-code kan worden ingebed.

Voor MicroPython heet de bibliotheek rp2. Die maakt het mogelijk om PIO Assembler-programma’s te assem­bleren vanuit Python functie-calls.

Voor C/C++ is er het programma pioasm in de RP2040-SDK, dat bijvoorbeeld C-headerbestanden met PIO Assembler-­code uitvoert. Die headerbestanden zijn geïntegreerd in een C-programma.

RP2040 boards

De Raspberry Pi Pico is bij wijze van spreken het officiële RP2040-developerboard, maar kan ook in grote hoeveelheden worden besteld voor andere systemen. Een twee keer zo dure versie wordt geleverd met reeds gesoldeerde pinheaders, de goedkopere alleen met soldeerogen. Je kunt de RP2040 als (SMD) enkele chip nog goedkoper krijgen.

Duurder, maar veel kleiner dan de Pico of beter uitgerust, zijn RP2040-boards van bijvoorbeeld Adafruit, Arduino, Seed Studio en Sparkfun. Sommige hebben Qwiic- of StemmaQ- connectors voor het soldeerloos aansluiten van sensors via I2C.


Boards en apparaten met Raspberry Pi RP2040 microcontroller

Fabrikant/aanbiederProductEigenschappen
Raspberry Pi FoundationPico2 MB flashgeheugen, led, Micro-USB, € 4 – met pinheaders € 8
AdafruitFeather RP20408 MB flashgeheugen, RGB-led, Qwiic, LiPo-acculader, USB-C, € 11
AdafruitQT Py RP20408 MB flashgeheugen, erg klein, RGB-led, Qwiic, USB-C, € 11
ArduinoNano RP2040 Connect16 MB flashgeheugen, wifi & BLE via ESP32 (µBlox Nina W102), microfoon, gyrosensor, Micro-USB, € 25
CytronMaker Pi RP20402 MB flashgeheugen, 15 (RGB-)led, motoraansturing, buzzer, LiPo-accu­lader, Grove, Micro-USB, € 13
MeloperoShake RP204016 MB flashgeheugen, RGB-led, Qwiic, LiPo-acculader, USB-C, € 25
PimoroniTiny 20408 MB flashgeheugen, erg klein, RGB-led, USB-C, € 10
PimoroniPico Lipo4/16 MB flashgeheugen, Qwiic, LiPo-acculader, USB-C, € 10/€ 14
PimoroniPicoSystemop accu werkende ‘gameconsole’ met RP2040 en scherm, prijs en leverbaarheid onbekend
SeeedstudioSeeed XIAO RP20402 MB flashgeheugen, erg klein, led, USB-C, € 8
SferalabsIono RPHAT-module, 16 MB flashgeheugen, 4 230-V-relais, € 190
SparkfunPro Micro16 MB flashgeheugen, RGB-led, Qwiic, USB-C, € 11
SparkfunThings Plus16 MB flashgeheugen, RGB-led, MicroSD-lezer, LiPo-acculader, USB-C, € 11
Breakout-boards
CytronMaker Pi Pico BaseMicroSD-lezer, knoppen, jack, Grove, pinheaders, € 11
PimoroniPico Explorerbreadboard, scherm, motoraansturing en meer, € 25

op de Qwiic-aansluiting (I2C, Sparkfun) past ook de Stemma-QT (Adafruit), voor Grove (Seeed/Cytron) zijn er adapters


De RP2040 heeft niet veel energie nodig, al zijn er zuinigere microcontrollers. Dat maakt de RP2040 geschikt voor projecten die op batterijen werken. Sommige RP2040-printplaten bevatten de oplaadelektronica voor een lithium-(polymeer-)batterij. Op stand-by heeft de RP2040 slechts een paar milli­watt nodig; bij volle belasting blijft hij onder de 0,5 watt.

Hij kan toe met een enkele gelijkspanning omdat een ingebouwde convertor zijn digitale kern voedt. De 3,3 volt is alleen verplicht voor de usb-controller en aanbevolen voor de ADC – 1,8 volt is ook voldoende voor de GPIO’s. Als je geen usb nodig hebt, kun je het zonder 3,3 volt stellen om het verbruik te vermin­deren.

Verwachtingen voor de toekomst

De RP2040 kan niet alleen worden geprogrammeerd met MicroPython en C/C++, maar ook met Circuit­Python of de Arduino IDE. PlatformIO kent de chip ook, evenals de Visual Studio code-extensie PicoGo. Verschillende projecten passen hun Real Time Operating Systems (RTOS) aan voor de RP2040, waaronder Amazon FreeRTOS, NuttX en RT-Thread OS.

Eben Upton, hoofd van de Raspnerry Pi Foundation, verwacht dat de RP2040 in grote aantallen per keer zijn weg naar kopers zal vinden. Van bedrijven wordt verwacht dat zij het in hun eigen producten verwerken. Dit zou moeten worden geholpen door het feit dat de RP2040 ten minste tot 2028 beschikbaar zal zijn; hij zal echter waarschijnlijk worden aangeboden zolang TSMC 40-nanometerchips produceert.

Vermoedelijk zal de RP2040 ook geen een­malig proefballonnetje blijven, maar zal de Raspberry Pi Foundation (die een tijdje geleden zo’n 45 miljoen euro aan vers kapitaal wist op te halen) de micro­controller-familie in de toekomst waarschijnlijk uitbreiden.

In dat verband is het interessant dat de Raspberry Pi Foundation heeft gekozen voor ARM-cores en niet voor bijvoorbeeld, 32-bit RISC-V-cores. De Foundation is echter gevestigd in Cambridge, praktisch naast het hoofdkwartier van ARM.

De vraag of toekomstige system-on-chips voor de ‘grote’ Raspberry Pi’s ook in eigen beheer zullen worden ontwikkeld, wuifde Raspberry Pi Foundation-baas Upton weg: de ontwikkeling van dergelijke SoC’s is te complex om alleen te doen.

Daarom zal men ook in de toekomst met partners blijven samenwerken. Maar je kunt speculeren of het PIO-blok ook in toekomstige Raspberry Pi’s zal worden gebruikt.

Conclusie Raspberry Pi RP2040 microcontroller

Met de RP2040 biedt de Raspberry Pi Foundation een microcontroller van een paar euro die flexibel kan worden gebruikt dankzij de overvloedige bronnen.

De PIO-blokken zijn uniek in de zin dat ze het moge­lijk maken vele interfaces ‘in software’ te implementeren. De RP2040 is bijzonder geschikt voor makkelijk programmeren met MicroPython, maar staat tegelijkertijd open voor C/C++ en real-time-besturingssystemen.

Rond de RP2040 groeit al een ecosysteem van software en hardware, waarmee productideeën en projecten efficiënt en snel kunnen worden uitgevoerd.


Maik Merten, Christof Windeck en  Alieke van Sommeren; c’t 3/2022, p76


 

Lees meer over Raspberry Pi in c't magazine mei/2022

Meer over

Zelfbouw

Deel dit artikel

Lees ook

Wifi bewaken – monitor je wifinetwerk met een Raspberry Pi en Nzyme

Iedereen kan computers en andere apparaten in je wifi aanvallen, vaak zonder dat je iets doorhebt. Met deze workshop kun je je wifi bewaken.

Spotify streamen naar versterker – zo doe je het met Raspberry Pi

Om Spotify te kunnen streamen naar een niet-smarte AV-receiver of analoge versterker heb je met de Raspberry Pi Zero alles wat je nodig hebt.

0 Praat mee
avatar
  Abonneer  
Laat het mij weten wanneer er