Ismerkedés a Raspberry Pi Pico többmagos mikrovezérlő-fejlesztőkártyával a C nyelv használatával

By Jacob Beningo

Contributed By DigiKey's North American Editors

A beágyazott rendszerekben szükség van nagy teljesítményű, olcsó mikrovezérlő egységekre (MCU, microcontroller unit). Ezek az eszközök nemcsak a termékekben játszanak fontos szerepet, hanem a tesztek, a gyors prototípuskészítés és az olyan képességek támogatásában is, mint a gépi tanulás (ML, machine learning). A mikrovezérlőkkel való ismerkedéshez azonban általában a mikrovezérlő-technika és az alacsony szintű programozási nyelvek alapos ismerete szükséges. Ráadásul a fejlesztőkártyák ára gyakran 20 és 1000 dollár – 7500 és 35 000 Ft (+ áfa) – között van, ami sok fejlesztő számára túl drága lehet. Emellett nem is mindig áll rendelkezésre a szükséges fejlesztőkártya, és még ha van is, a tervezők gyakran küzdenek azzal, hogy a kártyát üzembe helyezzék és megfelelő módon használják.

Ez a cikk a Raspberry Pi Pico (SC0915) kártyát mutatja be. Ez az RP2040 mikrovezérlőhöz használható olcsó fejlesztőkártya, amely rengeteg lehetőséget kínál a fejlesztők számára. A cikk ismerteti a Pico fejlesztőkártyát és néhány vele használható bővítőkártyát, megvizsgálja a Raspberry Pi Pico által támogatott különböző szoftverfejlesztő készleteket, és bemutatja, hogyan lehet egy LED-villogtató alkalmazást létrehozni a C szoftverfejlesztő készlet (SDK) segítségével.

A Raspberry Pi Pico bemutatása

A Raspberry Pi Pico először 2021-ben jelent meg az RP2040 mikrovezérlőhöz használható fejlesztőplatformként. A Pico használható önálló fejlesztőkártyaként, illetve a hordozókártyákra forrasztható élcsatlakozóknak köszönhetően tervezhető közvetlenül valamilyen termék részének is (1. ábra). A Pico 5 dollár alatti ára (Magyarországon jelenleg legolcsóbban 2000 Ft körüli áron szerezhető be) és többcélú felhasználhatósága miatt népszerű megoldássá vált mind a hobbisták, mind a főállású fejlesztők körében.

A Raspberry Pi Pico egy olcsó fejlesztőkártya1. ábra: A Raspberry Pi Pico egy olcsó fejlesztőkártya, amely mindent tartalmaz, amire az RP2040 mikrovezérlővel való készülékfejlesztéshez szükség lehet (kép: Raspberry Pi)

Az RP2040 egy 133 MHz-es órajelű és akár 264 kB SRAM-ot tartalmazó kétmagos ARM® Cortex®-M0+ processzorra épül. Az RP2040 nem tartalmaz a lapkán belüli flashmemóriát. Ehelyett a Raspberry Pi Pico kártya tartalmaz egy külső 2 MB-os flashmemóriát, amely egy négy adatcsatornás soros perifériaillesztőn (QSPI, quad serial peripheral interface) keresztül csatlakozik az RP2040-hez. A kártyán található még egy felhasználói LED, egy kristályoszcillátor, amelyet a fáziszárt hurok (PLL, phase-locked loop) használ a stabil és gyors CPU-órajel előállításához, valamint egy nyomógomb, amellyel beállítható, hogy a processzor normál módon vagy programbetöltővel (bootloader) induljon-e el.

Kiterjedt ökoszisztéma

A Raspberry Pi Pico kártyához már most is kiterjedt ökoszisztéma tartozik, ami lehetővé teszi a fejlesztők számára, hogy választhassanak a MicroPython és a C szoftverfejlesztő készlet (SDK, software development kit) közül, ha alkalmazásokat szeretnének írni a kártyához. A Raspberry Pi Pico egyik érdekessége, hogy a fejlesztőkártya nem csak egy változatban kapható. Ehelyett háromféle van belőle: az eredeti alapfelszereltségű SC0915, az élcsatlakozó helyett lábakkal ellátott SC0917 és az SC0918, amely egy olcsó wifilapkát tartalmaz más eszközök csatlakoztatása végett (2. ábra).

A Raspberry Pi Pico háromféle változatát bemutató kép2. ábra: A Raspberry Pi Pico háromféle változatban kapható (kép: Beningo Embedded Group, LLC)

A kártya alapterülete mindhárom változat esetében ugyanakkora. A kártya 40 érintkezős élcsatlakozóval van ellátva a perifériák és egyéb lehetőségek csatlakoztatására, lásd: 3. ábra. Ezen lehetőségek közé tartozik az áramellátás és a test, valamint univerzális aszinkron vevők és adók (UART, universal asynchronous receiver and transmitter), általános célú be- és kimenetek (GPIO, general purpose input and output), impulzusszélesség-moduláció (PWM, pulse width modulation), analóg-digitális átalakító (ADC, analog-to-digital converter), soros perifériás illesztőfelület (SPI, serial peripheral interface), integrált áramkörök közötti illesztőfelület (I2C) és hibakereső csatlakozó is elérhetőek rajta.

A Raspberry Pi Pico élcsatlakozóinak elosztását szemléltető ábra (nagyításhoz kattintson az ábrára)3. ábra: A Raspberry Pi Pico élcsatlakozói sokféle periféria csatlakoztatását teszik lehetővé (kép: Raspberry Pi)

Külső csatlakozókártyák választéka

Ha a Raspberry Pi Pico kártyát prototípusok gyors elkészítésére használjuk, szükség van arra, hogy könnyen hozzáférjünk a kártya élcsatlakozóihoz. Az egyik lehetőség a csatlakozók bekötése és egy fejlesztő alapkártya használata. Ez a megoldás azonban gyakran kusza vezetékhalmazt eredményezhet, ami hibákhoz vezethet. Emiatt számos lehetőség van külső csatlakozókártyák használatára, amelyek az élcsatlakozókat könnyebben hozzáférhető csatlakozókká alakítják.

Például a Bridgetek MM2040EV Pico modulkártyája a legtöbb élcsatlakozót külső csatlakozótüskékké és -aljzatokká alakítja. Ezen kívül ott van még a Seeed Studio Raspberry Pi Pico fejlesztőkártyához készült 103100142 csatlakozókártyája, amely normál csatlakozóvá alakítva teszi elérhetővé valamennyi élcsatlakozót. Mindegyik csatlakozó érintkezőkiosztás-kompatibilis a bővítőkártyákkal, hogy olyan funkciókkal lehessen bővíteni a kártyát, mint a tehetetlenségi érzékelők, a villanymotor-vezérlők vagy a távolságmérők.

C vagy MicroPython?

A beágyazott rendszereket régebben hagyományosan C nyelven írták, mert az egyensúlyt teremt az alacsony szintű vezérlés és a magasabb szintű nyelven írt rendszeralkalmazások között. A C-vel azonban ma már az a probléma, hogy egy elavult, ötvenéves programozási nyelv, amelyet ritkán tanítanak az egyetemeken. Emellett túl könnyű véletlenül hibákat bevinni, amivel kárt lehet okozni. Ezen lehetséges problémák ellenére a beágyazott rendszerek fejlesztésének többségében a C a választott nyelv.

A Raspberry Pi Pico ökoszisztéma a MicroPython nyelvet kínálja a C nyelv használatának alternatívájaként. A MicroPython egy mikrovezérlő-alapú rendszereken való futtatásra tervezett CPython port. Bár kétségtelenül több processzorhasználattal jár, mint a C, mégis egy modern nyelv, amelyet sok fejlesztő ismer és tart kényelmesnek. A MicroPython képes a mikrovezérlő és a hardver alacsony szintű részleteinek lényegét megragadni (hardverabsztrakciót végezni). A hardverhez való hozzáférés könnyen elsajátítható magas szintű alkalmazásprogramozási felületeken (API, application programming interface) keresztül történik – ez fontos jellemző a szoros projektleadási határidők mellett.

Amikor kiválasztják, hogy melyik szoftverfejlesztő készletet – C vagy MicroPython – használják, a fejlesztőknek a konkrét igényekre kell összpontosítaniuk. A MicroPythonhoz képest a C nyelv használata alacsonyabb szintű hozzáférést biztosít a mikrovezérlő regisztereihez, kisebb memóriaterületet foglal és hatékonyabb.

A C szoftverfejlesztő készlet beállítása

Ha a C szoftverfejlesztő készletet (SDK) használjuk egy LED-villogtató alkalmazás létrehozásához, több lehetőségünk is van. Az első a szoftverfejlesztő készlet dokumentációjának áttekintése és az utasítások követése. A második lehetőség egy előre beállított Docker-tároló használata az induláshoz szükséges összes eszköz automatikus telepítéséhez. A harmadik lehetőség az eszközláncok és a Raspberry Pi Pico-mintakód kézi telepítése, beleértve a következőket:

  • git
  • Python 3
  • cmake
  • gcc-arm-none-eabi \
  • libnewlib-arm-none-eabi

A Raspberry Pi Pico-mintakódot a Raspberry Pi git raktárát klónozva lehet lekérni a következő parancsok segítségével:

git clone https://github.com/raspberrypi/pico-sdk /home/sdk/pico-sdk && \

     cd /home/sdk/pico-sdk && \

    git submodule update --init &&

Miután ezeket a könyvtárakat és a forráskódot telepítettük, a következő lépés a LED-villogtató alkalmazás megismerése és lefordítása.

Az első LED-villogtató alkalmazás megírása

A C szoftverfejlesztő készlet tartalmaz egy LED-villogtató mintaalkalmazást, amelyet a fejlesztők felhasználhatnak az első alkalmazásuk elkészítéséhez. Az alábbi kódlista a Picónak a kártyán elhelyezett LED-jére irányul, és a PICO_DEFAULT_LED_PIN utasítással állít be egy be- és kimeneti (I/O) lábat, hogy azon át villogtassa a LED-et 250 ezredmásodperces (ms) késleltetésekkel.

Másolja a vágólapra
	/**
	 * 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
	}

Kódlista: A Raspberry Pi Pico a PICO_DEFAULT_LED_PIN utasítást használja egy egy be- és kimeneti láb beállításához, és azon a lábon át villogtatja a LED-et 250 ms késleltetésekkel (kódforrás: Raspberry Pi)

A lista szerint a LED_PIN láb az alapértelmezett lábhoz van hozzárendelve. Ezután a C GPIO API-kat hívjuk meg. A gpio_init parancs a láb inicializálására, míg a gpio_set_dir parancs a LED_PIN kimenetre állítására szolgál. Ezzel egy végtelen ciklus jön létre, amely 250 ms-enként váltogatja a LED állapotát.

Az alkalmazás gépi kódra fordítása viszonylag egyszerű. A fejlesztőnek először létre kell hoznia egy „build” nevű mappát a Raspberry Pi Pico mappájában a következő parancsok segítségével:

mkdir build

cd build

Ezután a cmake parancsot elő kell készíteni a build mappához a következő parancs végrehajtásával:

cmake

Most a fejlesztő átválthat a „blink” (villogtatás) mappára, és futtathatja a make parancsot:

cd blink

make

Az alkalmazás-létrehozási folyamat kimenete egy blinky.uf2 nevű fájl lesz. A lefordított program a BOOTSEL láb alacsony logikai szinten tartásával és a kártya bekapcsolásával tölthető be a Raspberry Pi Pico kártyára. Az RP2 ekkor háttértárolóként jelenik meg. A fejlesztőnek a blinky.uf2 fájlt a meghajtóra kell húznia, ekkor a parancsbetöltő telepíti az alkalmazást. Ennek befejeztével a LED-nek el kell kezdenie villogni

Összegzés

A Raspberry Pi Pico vonzó megoldás a beágyazott programokat készítő, a fejlesztési ciklusukban rugalmasságot kereső fejlesztők számára. Több lehetőség közül lehet választani, beleértve az önálló megoldásokat és a vezeték nélküli kapcsolatra alkalmas kártyákat. Ezen kívül az ökoszisztéma támogatja a C és a C++, valamint a MicroPython nyelvet. A fejlesztők választhatnak, hogy melyik nyelv felel meg leginkább az általuk készített alkalmazásnak, majd a megfelelő szoftverfejlesztő készlet segítségével felgyorsíthatják a szoftverfejlesztést.

DigiKey logo

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.

About this author

Image of Jacob Beningo

Jacob Beningo

Jacob Beningo is an embedded software consultant. He has published more than 200 articles on embedded software development techniques, is a sought-after speaker and technical trainer, and holds three degrees, including a Masters of Engineering from the University of Michigan.

About this publisher

DigiKey's North American Editors