Ismerkedés a Raspberry Pi Pico többmagos mikrovezérlő-fejlesztőkártyával a C nyelv használatával
Contributed By DigiKey's North American Editors
2023-06-07
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.
1. á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).
2. á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.
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.
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.




