Komma igång med Raspberry Pi Pico Multicore Microcontroller Board med hjälp av C
Bidraget med av DigiKeys nordamerikanska redaktörer
2023-06-07
Det finns ett naturligt behov av en kraftfull och billig microcontroller (MCU) i . Enheterna spelar en viktig roll inte bara för produkten utan även för tester, snabb framtagning av prototyper och funktioner som t.ex. maskininlärning (ML). För att komma igång med microcontrollers krävs dock i allmänhet en djup förståelse för microcontrollerns teknik och lågnivåspråk. Dessutom kostar utvecklingskort ofta mellan 20 och 1 000 USD, vilket kan vara för dyrt för många utvecklare. Det är inte heller alltid som ett utvecklingskort finns tillgängligt, och även när det gör det, kämpar konstruktörerna ofta med att få kortet att fungera.
Artikeln introducerar Raspberry Pi Pico (SC0915) som ett billigt utvecklingskort för microcontrollern RP2040 som förser utvecklare med ett brett utbud av funktioner. Artikeln utforskar Pico:n och några expansionskort, undersöker de olika utvecklingssatsernas programvara som Raspberry Pi Pico stödjer samt visar hur man skapar en tillämpning med en blinkande lysdiod med hjälp av C SDK.
Introduktion till Raspberry Pi Pico
Raspberry Pi Pico introducerades 2021 som utvecklingsplattform för microcontrollern RP2040. Pico kan användas som ett fristående utvecklingskort, eller så kan det konstrueras till en produkt tack vare kantanslutningar som kan lödas till ett grundkort (figur 1). Pico kostar mindre än 5 USD och har många användningsområden, vilket har gjort den till en populär lösning för både tillverkare och professionella utvecklare.
Figur 1: Raspberry Pi Pico är ett billigt utvecklingskort som innehåller allt som behövs för att utveckla tillämpningar med microcontrollern RP2040. (Bildkälla: Raspberry Pi)
RP2040 har en dubbelkärnig Arm® Cortex®-M0+ processor som klockas till 133 MHz och innehåller upp till 264 kB SRAM. RP2040 har inte något flash-minne i kretsen. Raspberry Pi Pico har istället en extern flash-krets på 2 MB som kopplas till RP2040 via ett QSPI-gränssnitt (Quad Serial Peripheral Interface). På kortet finns också en lysdiod för användaren, en kristalloscillator som används av PLL (Phase Lock Loop) för att skapa en stabil processorklocka med hög hastighet samt en tryckknapp för att konfigurera om processorn ska starta normalt eller med en bootloader.
Ett omfattande ekosystem
Raspberry Pi Pico har redan ett omfattande ekosystem som gör det möjligt för utvecklare att välja mellan utvecklingspaket med MicroPython eller C för att skriva tillämpningar för kortet. Värt att notera är att det inte bara finns ett enda utvecklingskort för Raspberry Pi Pico , det finns tre; den ursprungliga SC0915 med en standardkonfiguration, SC0917 som innehåller kontaktlister och SC0918 som innehåller en billig WiFi-krets för uppkopplade tillämpningar (figur 2).
Bild 2: Raspberry Pi Pico finns i tre olika versioner. (Bildkälla: Beningo Embedded Group, LLC)
Storleken på kortet är densamma för respektive version. Kortets kantanslutningar består av en stiftlist med 40 stift för anslutning till kringutrustning samt anslutningsalternativ som visas i figur 3. Anslutningarna inkluderar strömförsörjning, jord, en universell asynkron mottagare och sändare (UART), generella in- och utgångar (GPIO), pulsbreddsmodulering (PWM), en analog-till-digitalomvandlare (ADC), ett seriellt gränssnitt för kringutrustning (SPI), ett I2C-gränssnitt och felsökning.
Figur 3: Kantanslutningarnas stiftlayout på Raspberry Pi Pico möjliggör ett brett utbud av kringutrustning. (Bildkälla: Raspberry Pi)
Alternativ för breakout-kort
När Raspberry Pi ska användas för snabb framtagning av prototyper finns det ett behov av enkel åtkomst till kortets kantkontakter. Ett alternativ för att komma åt dem är att nyttja alla kontakter och använda ett kopplingsdäck. Lösningen kan dock ofta resultera i ett virrvarr av kablar som kan medföra fel. Istället finns det flera alternativ på breakout-kort som utökar kantanslutningarna till mer lättillgängliga gränssnitt.
Till exempel bryter modulkortet MM2040EV Pico från Bridgetek ut de flesta av kantanslutningarna till stift- och sockelanslutningar. Dessutom finns tilläggskortet 103100142 för Pico från Seeed Studio som tillhandahåller en kontakt för respektive kringutrustningsgränssnitt. Respektive kontakt är stiftkompatibel med expansionskort för att lägga till funktioner som t.ex. tröghetsgivare, motordrivenheter och avståndsmätare.
Till C eller till MicroPython?
Inbäddade system har traditionellt skrivits i C eftersom det balanserar kontroll på låg nivå med systemtillämpningar på högre nivå. Problemet med C idag är att det är ett föråldrat, femtio år gammalt programmeringsspråk som sällan lärs ut på universiteten. Det är också alltför lätt att av misstag skapa fel och orsaka skador. Trots dessa potentiella problem är C det språk som väljs av majoriteten vid utveckling av inbyggda system.
Ett alternativ till C är att använda MicroPython som tillhandahålls av ekosystemet Raspberry Pi Pico. MicroPython är en variant av CPython- som är framtagen för att köras på system baserade på microcontrollers. Även om det utan tvekan är mer processorkrävande än C är det ett modernt språk som många utvecklare känner till och är bekväma med. MicroPython kan bortse från detaljer på låg nivå i microcontrollers och hårdvara. Hårdvaruåtkomst sker via API:er (Application Programming Interface) på avancerad nivå som är lätta att lära sig - en viktig egenskap när projekten har korta deadlines.
När utvecklare ska välja vilket SDK (Software Development Kit) de ska använda - C eller MicroPython - måste de fokusera på specifika behov. Jämfört med MicroPython ger C tillgång till microcontrollerns lågnivåregister, har ett mindre minnesutrymme och är mer effektivt.
Konfigurera SDK för C
När du använder SDK för C för att skapa en tillämpning med blinkande lysdioder finns det flera alternativ. Det första är att läsa dokumentationen för SDK:et och följa anvisningarna. Det andra är att använda ett förprogrammerat paket från Docker för att automatiskt installera alla verktyg som behövs för att komma igång. Ett tredje alternativ är att installera verktygskedjorna och exempelkoden för Raspberry Pi Pico manuellt, inklusive:
- Git
- Python 3
- Cmake
- gcc-arm-none-eabi \
- libnewlib-arm-none-eabi
Du kan hämta exempelkoden för Raspberry Pi Pico genom att göra en kopia på git-repo för Raspberry Pi med följande kommando:
git clone https://github.com/raspberrypi/pico-sdk /home/sdk/pico-sdk && \
cd /home/sdk/pico-sdk && \
git submodul uppdatering --init &&
När biblioteken och källkoden har installerats är nästa steg att utforska och kompilera en tillämpning med blinkande lysdiod.
Skriva en första blinkande tillämpning
SDK för C levereras med ett blinkande exempel som utvecklare kan använda för att bygga sin första tillämpning. Kodlistan nedan använder Picos inbyggda lysdiod och direktivet PICO_DEFAULT_LED_PIN för att ställa in ett I/O-stift att blinka med en fördröjning på 250 ms.
Kopiera
/**
* Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include "pico/stdlib.h"
int main() {
#ifndef PICO_DEFAULT_LED_PIN
#warning blink example requires a board with a regular LED
#else
const uint LED_PIN = PICO_DEFAULT_LED_PIN;
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
while (true) {
gpio_put(LED_PIN, 1);
sleep_ms(250);
gpio_put(LED_PIN, 0);
sleep_ms(250);
}
#endif
}
Listning av kod: Raspberry Pi Pico använder direktivet PICO_DEFAULT_LED_PIN för att ställa in ett I/O-stift att blinka med en fördröjning på 250 ms. (Kodkälla: Raspberry Pi)
Enligt listan tilldelas LED_PIN till standardstiftet. Anrop sker sedan tillAPI:er i C gpio. gpio_init används för att initiera stiftet, medan gpio_set_dir används för att konfigurera LED_PIN för en viss utgång. Därefter skapas en oändlig loop som växlar tillståndet för lysdioden var 250:e ms.
Att kompilera tillämpningen är relativt enkelt. Först måste en utvecklare skapa en build-katalog i mappen för Raspberry Pi Pico med hjälp av följande kommandon:
mkdir build
cd build
Därefter måste cmake förberedas för bygget genom att följande kommando körs:
cmake
Nu kan en utvecklare byta till katalogen blink och köra make:
cd blink
make
Resultatet från byggprocessen kommer att vara en fil med namnet blinky.uf2. Det kompilerade programmet kan laddas på Raspberry Pi Pico genom att sänka stiftet BOOTSEL och slå på strömmen till kortet. RP2 kommer då att visas som en masslagringsenhet. Utvecklaren måste dra filen blinky.uf2 till enheten, varefter bootloadern installerar tillämpningen. När detta är klart bör lysdioden börja blinka.
Sammanfattning
Raspberry Pi Pico är en attraktiv lösning för utvecklare av inbäddade system som vill ha flexibilitet i sin utvecklingscykel. Flera alternativ finns tillgängliga, inklusive fristående lösningar eller kort med trådlös anslutning. Dessutom stöder ekosystemet C och C++ samt MicroPython. Utvecklare kan välja vilket språk som passar bäst för deras tillämpning och sedan använda motsvarande SDK för att påskynda utvecklingen av mjukvara.
Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of DigiKey or official policies of DigiKey.




