Kom godt i gang med Raspberry Pi Pico multi-kerne microcontroller kort ved hjælp af C
Bidraget af DigiKeys nordamerikanske redaktører
2023-06-07
Der er et iboende behov i indlejrede systemer for at have en kraftig, billig mikrocontrollerenhed (MCU). Disse enheder spiller en vigtig rolle, ikke kun i produktet, men også i understøttelsen af tests, hurtig prototyping og funktioner som maskinlæring (ML). Men at komme i gang med MCU'er kræver generelt en dybtgående forståelse af MCU-teknologi og programmeringssprog på lavt niveau. Dertil kommer, at udviklingskort ofte koster mellem 20 og 1.000 dollars, hvilket kan være for dyrt for mange udviklere. Det er heller ikke altid, at et udviklingskort er tilgængeligt, og selv når det er tilfældet, kæmper designere ofte med at få et kort op at køre.
Denne artikel introducerer Raspberry Pi Pico (SC0915) som et billigt udviklingskort til RP2040 MCU, der giver udviklere en bred vifte af muligheder. Artiklen udforsker Pico og nogle udvidelseskort, undersøger de forskellige softwareudviklingskit, som Raspberry Pi Pico understøtter, og demonstrerer, hvordan man skaber en blinky LED-applikation ved hjælp af C SDK.
Introduktion til Raspberry Pi Pico
Raspberry Pi Pico blev først introduceret i 2021 som udviklingsplatform for RP2040-mikrocontrolleren. Pico kan bruges som et selvstændigt udviklingskort, eller det kan designes direkte ind i et produkt på grund af kantforbindelser, der kan loddes til et bærekort (figur 1). Med en pris på under 5 dollars og mange anvendelsesmuligheder er Pico blevet en populær løsning for både producenter og professionelle udviklere.
Figur 1: Raspberry Pi Pico er et billigt udviklingskort, der indeholder alt, hvad der er nødvendigt for at udvikle applikationer på RP2040-mikrocontrolleren. (Billedkilde: Raspberry Pi)
RP2040 har en dual-core Arm® Cortex®-M0+-processor med en clockfrekvens på 133 megahertz (MHz) og indeholder op til 264 kilobyte (Kbytes) SRAM. RP2040 har ikke flash on-chip. I stedet har Raspberry Pi Pico en ekstern 2 megabyte (Mbyte) flash-chip, som interfacer med RP2040 via en quad serial peripheral interface (QSPI). Kortet har også en bruger-LED, en krystaloscillator, som PLL (Phase Lock Loop) bruger til at skabe en stabil højhastigheds-CPU-clock, og en trykknap til at konfigurere, om processoren skal boote normalt eller i en bootloader.
Et omfattende økosystem
Raspberry Pi Pico har allerede et omfattende økosystem, der giver udviklere mulighed for at vælge mellem at bruge MicroPython eller C-softwareudviklingssæt til at skrive applikationer til kortet. En interessant bemærkning om Raspberry Pi Pico er, at der ikke kun findes et enkelt udviklingskort. I stedet er der tre: Den originale SC0915 med en standardkonfiguration, SC0917, som inkluderer header-stik, og SC0918, som inkluderer en billig Wi-Fi-chip til tilsluttede applikationer (figur 2).
Figur 2: Raspberry Pi Pico fås i tre konfigurationer. (Billedkilde: Beningo Embedded Group, LLC)
For hver af disse versioner forbliver det generelle fodaftryk på kortet det samme. Kortets kanttilslutninger består af 40-bens kanttilslutninger til periferiudstyr og tilslutningsmuligheder som vist i figur 3. Disse omfatter strøm, jord, en universel asynkron modtager og sender (UART), input og output til generelle formål (GPIO), pulsbredde-modulation (PWM), en analog-til-digital-konverter (ADC), en seriel perifer sammenkobling (SPI), et interintegreret kredsløb (I2C)-interface og debugging.
Figur 3: Raspberry Pi Picos kantforbundne benlayout giver en bred vifte af perifere adgangsmuligheder. (Billedkilde: Raspberry Pi)
Muligheder for breakout-kort
Når Raspberry Pi skal bruges til hurtig prototyping, er der behov for at få nem adgang til kortets kantstik. En mulighed for at få adgang til dem er at udfylde overskrifterne og bruge et breadboard. Men denne løsning kan ofte resultere i et rod af ledninger, der kan føre til fejl. Så i stedet er der flere muligheder for breakout-kort, der udvider edge-stikkene til mere lettilgængelige grænseflader.
For eksempel bryder MM2040EV Pico-modulkortet fra Bridgetek de fleste af kantforbindelserne til pin- og socket-forbindelser. Derudover er der skjoldet 103100142 til Pico fra Seeed Studio, der giver hvert perifert interface som et stik. Hvert stik er ben-kompatibelt med udvidelseskort, så man kan tilføje funktioner som inerti-sensorer, motordrivere og afstandsmålere.
Til C eller til MicroPython?
Embeddede systemer er traditionelt blevet skrevet i C, fordi det balancerer kontrol på lavt niveau med systemapplikationer på højere niveau. Problemet med C i dag er, at det er et forældet, halvtreds år gammelt programmeringssprog, som der sjældent undervises i på universiteterne. Det er også for nemt at komme til at injicere fejl og forårsage skade. På trods af disse potentielle problemer er C det foretrukne sprog til størstedelen af udviklingen af indlejrede systemer.
Et alternativ til at bruge C, som findes i Raspberry Pi Pico-økosystemet, er MicroPython. MicroPython er en CPython-port designet til at køre på MCU-baserede systemer. Selvom det utvivlsomt er en tungere processorbruger end C, er det et moderne sprog, som mange udviklere er fortrolige med og trygge ved. MicroPython kan abstrahere fra MCU'ens og hardwarens detaljer på lavt niveau. Hardwareadgang sker via programmeringsgrænseflader (API'er) på højt niveau, som er nemme at lære, som er en vigtig faktor ved stramme projektdeadlines.
Når udviklere skal vælge, hvilket softwareudviklingskit (SDK) de vil bruge - C eller MicroPython, skal de fokusere på specifikke behov. Sammenlignet med MicroPython vil brugen af C give adgang til MCU'ens registre på lavt niveau, have et mindre hukommelsesfodaftryk og være mere effektiv.
Opsætning af C SDK
Når du bruger C SDK til at skabe en blinky LED-applikation, er der flere muligheder. Den første er at gennemgå SDK-dokumentationen og følge instruktionerne. Den anden er at bruge en forudindstillet Docker-container til automatisk at installere alle de værktøjer, der er nødvendige for at komme i gang. En tredje mulighed er at installere værktøjskæderne og Raspberry Pi Pico-eksempelkoden manuelt, herunder:
- Git
- Python 3
- Cmake
- gcc-arm-none-eabi \
- libnewlib-arm-none-eabi
Du kan hente Raspberry Pi Pico-eksempelkoden ved at klone Raspberry Pis git repo med følgende kommando:
git clone https://github.com/raspberrypi/pico-sdk /home/sdk/pico-sdk && \
cd /home/sdk/pico-sdk && \
git submodule update --init &&
Når disse biblioteker og kildekoden er installeret, er det næste skridt at udforske og kompilere en blinky LED-applikation.
Skrivning af den første blinke-applikation
C SDK leveres med et blinkende eksempel, som udviklere kan bruge til at bygge deres første applikation. Nedenstående kodeliste bruger Picos indbyggede LED og direktivet PICO_DEFAULT_LED_PIN til at opsætte et I/O-ben og få den til at blinke med en forsinkelse på 250 millisekunder (ms).
Kopi
/**
* 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
}
Liste over koder: Raspberry Pi Pico bruger direktivet PICO_DEFAULT_LED_PIN til at opsætte et I/O-ben og få den til at blinke med en forsinkelse på 250 ms. (Kilde til kode: Raspberry Pi)
I henhold til listen tildeles LED_PIN standardbenet; derefter foretages der kald til C gpio API'erne. gpio_init bruges til at initialisere stiften, mens gpio_set_dir bruges til at indstille LED_PIN til et output. Derefter oprettes en uendelig løkke, der skifter LED'ens tilstand hver 250 ms.
Det er relativt ligetil at kompilere programmet. Først skal en udvikler oprette en build-mappe i sin Raspberry Pi Pico-mappe ved hjælp af følgende kommandoer:
mkdir build
cd build
Dernæst skal cmake gøres klar til build ved at udføre følgende kommando:
cmake
Nu kan en udvikler skifte til blinky-mappen og køre make:
cd blink
lave
Outputtet fra byggeprocessen vil være en blinky.uf2-fil. Det kompilerede program kan indlæses på Raspberry Pi Pico ved at holde BOOTSEL-pin'en nede og tænde for kortet. RP2 vises derefter som en masselagringsenhed. Udvikleren skal trække filen blinky.uf2 til drevet, hvorefter boot-loaderen installerer programmet. Når det er gjort, bør lysdioden begynde at blinke.
Konklusion
Raspberry Pi Pico er en attraktiv løsning for embedded-udviklere, der ønsker fleksibilitet i deres udviklingscyklus. Der er flere muligheder, herunder enkeltstående løsninger eller kort med trådløs forbindelse. Derudover understøtter økosystemet C og C++ samt MicroPython. Udviklere kan vælge det sprog, der passer bedst til deres applikation, og derefter bruge det tilsvarende SDK til at fremskynde softwareudviklingen.
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.




