Usean ytimen Raspberry Pi Pico -mikrokontrollerikortin käytön aloittaminen C-ohjelmointikielellä

Kirjoittaja Jacob Beningo

Julkaisija DigiKeyn kirjoittajat Pohjois-Amerikassa

Tehokkaan ja edullisen mikrokontrollerin (Microcontroller Unit, MCU) sisältäville upotetuille järjestelmille on suuri kysyntä. Näillä laitteilla on tärkeä rooli itse tuotteiden ja testaamisen lisäksi myös nopeassa prototyyppikehityksessä ja esimerkiksi koneoppimisen (Machine Learning, ML) sovelluksissa. Mikrokontrollerien käytön aloittaminen kuitenkin vaatii yleensä MCU-teknologian ja matalan tason ohjelmointikielten syvällistä ymmärtämistä. Lisäksi kehitysalustat maksavat usein 20 – 1000 $, mikä on monille kehittäjille liikaa. Kehitysalustoja ei myöskään aina ole saatavilla, ja kun niitä sattuu olemaan, niiden käyttöönotto voi olla kehittäjille hankalaa.

Tässä artikkelissa tutustutaan Raspberry Pi Picoon (SC0915) ja sen käyttöön edullisena kehitysalustana RP2040-mikrokontrollerille, joka tarjoaa kehittäjille paljon ominaisuuksia. Artikkelissa esitellään Pico, joitain laajennuskortteja, Raspberry Pi Picon tukemat eri ohjelmankehityssarjat sekä vilkkuvan ledisovelluksen luominen C-SDK:lla.

Raspberry Pi Picon esittely

Raspberry Pi Pico lanseerattiin vuonna 2021 tarjoamaan kehitysalusta RP2040-mikrokontrollerille. Picoa voi käyttää itsenäisenä kehitysalustana, tai sen voi sisällyttää suoraan osaksi tuotetta käyttäen sen reunaliitäntöjä, jotka voi juottaa kantajakorttiin (kuva 1). Koska Pico maksaa alle 5 $ ja on erittäin monikäyttöinen, siitä on tullut hyvin suorittu ratkaisu sekä harrastajien että ammattilaiskehittäjien parissa.

Kuva: Raspberry Pi Pico on edullinen kehitysalustaKuva 1: Raspberry Pi Pico on edullinen kehitysalusta, joka sisältää kaiken tarvittavan sovellusten kehittämiseen RP2040-mikrokontrollerilla. (Kuvan lähde: Raspberry Pi)

RP2040 sisältää Arm® Cortex®-M0+ -kaksiydinprosessorin 133 MHz:n kellotaajuudella ja jopa 264 kilotavua SRAM-muistia. RP2040 ei sisällä piirillä sijaitsevaa Flash-muistia. Sen sijaan Raspberry Pi Pico tarjoaa ulkoisen 2 megatavun Flash-piirin, joka toimii yhdessä RP2040-piirin kanssa QSPI (Quad Serial Peripheral Interface) ‑rajapinnan kautta. Kortti sisältää ledin, jota käyttäjä voi ohjata, vaihelukitussilmukan (Phase Lock Loop, PLL) käyttämän kideoskillaattorin vakaan ja nopean CPU-kellon luomiseksi sekä painike, jolla prosessorin voi käynnistää normaaliin tilaan tai käynnistyslataajaan.

Laaja ekosysteemi

Raspberry Pi Picon ympärille on jo muodostunut laaja ekosysteemi, minkä ansiosta kehittäjät voivat valita sovelluskehitykseen MicroPython- tai C-ohjelmistokehityssarjan. Yksi Raspberry Pi Picon mielenkiintoinen piirre on se, että käytettävissä on useampi kuin yksi kehitysalusta. Niitä onkin kolme: alkuperäinen SC0915 standardikonfiguraatiolla, piirilevyliittimillä varustettu SC0917 sekä edullisella Wi-Fi-piirillä varustettu SC0918 verkkoon kytkettyjen sovellusten kehittämistä varten (kuva 2).

Kuva: Raspberry Pi Picoa on saatavana kolmena eri konfiguraationaKuva 2: Raspberry Pi Picoa on saatavana kolmena eri konfiguraationa. (Kuvan lähde: Beningo Embedded Group, LLC)

Kaikki nämä versiot ovat samankokoisia. Kortin reunaliittimet tarjoavat 40 nastan reunaliitännät oheislaitteita varten sekä kuvassa 3 esitellyt liitäntävaihtoehdot. Näihin sisältyvät virta, maadoitus, UART (Universal Asynchronous Receiver and Transmitter), GPIO (General Purpose Input and Output), pulssileveysmodulaatio (Pulse Width Modulation, PWM), analogi-digitaalimuunnin (Analog-to-Digital Converter, ADC), SPI (Serial Peripheral Interconnect), I2C (Inter-Integrated Circuit) -väylä ja virheenkorjausliitäntä.

Kuvassa Raspberry Pi Picon reunaliitäntänastat (suurenna klikkaamalla)Kuva 3: Raspberry Pi Picon reunaliitäntänastat tarjoavat laajat liitäntävaihtoehdot oheislaitteita varten. (Kuvan lähde: Raspberry Pi)

Kytkentäkorttivaihtoehtoja

Kun Raspberry Pi -korttia käytetään nopeaan prototyyppikehitykseen, on tärkeää pystyä käyttämään reunaliitäntöjä helposti. Yksi vaihtoehto on kytkeä piirilevyliittimet koekytkentälevyyn. Tämä ratkaisu voi kuitenkin usein johtaa johtosekamelskaan ja virheisiin. Vaihtoehdon tähän tarjoavat erilaiset kytkentäkortit, jotka helpottavat reunaliitäntöjen käyttöä.

Esimerkiksi Bridgetekin MM2040EV Pico ‑moduulikortti antaa pääsyn suurimpaan osaan reunaliitännöistä nastan tai naarasliittimen kautta. Lisäksi Picolle on saatavilla Seeed Studion valmistama 103100142-kortti, joka tarjoaa liittimen kullekin oheislaiterajapinnalle. Kunkin liittimen nastat ovat yhteensopivat laajennuskorttien kanssa toiminnallisuuden lisäämiseksi esimerkiksi inertia-antureilla, moottoriohjaimilla ja etäisyysmittareilla.

C vai MicroPython?

Upotettujen järjestelmien ohjelmistot on kirjoitettu perinteisesti C-kielellä, koska se tarjoaa tasapanoisen yhdistelmän matalan tason ohjausta ja korkeamman tason järjestelmäsovellusominaisuuksia. C-kielen ongelma nykypäivänä on, että se on yli 50 vuotta vanha ohjelmointikieli, jota opetetaan korkeakouluissa melko vähän. Sillä voi myös helposti luoda bugeja ja aiheuttaa vahinkoja. Näistä ongelmista huolimatta C on yleisin valinta upotettujen järjestelmien kehitykseen.

Raspberry Pi Pico ‑ekosysteemi tarjoaa C-kielelle vaihtoehdoksi MicroPython-kielen. MicroPython on mikrokontrolleripohjaisille järjestelmille portattu CPython. Se kuormittaa prosessoria selkeästi enemmän kuin C, mutta se on moderni ja kehittäjille tuttu laajalti käytetty kieli. MicroPython tarjoaa abstraktioita mikrokontrollerin ja laitteiston matalan tason toiminnoille. Laitteistoa käytetään helposti opittavilla korkean tason sovellusrajapinnoilla (Application Programming Interface, API), mikä on tärkeä ominaisuus kiireisissä projekteissa.

C- tai MicroPython-SDK:n välisessä valinnassa tulee keskittyä projektin tarpeisiin. MicroPythoniin verrattuna C tarjoaa matalamman tason pääsyn mikrokontrollerin rekistereihin, käyttää vähemmän muistia ja on tehokkaampi.

C-SDK:n konfigurointi

C-SDK tarjoaa useita vaihtoehtoja vilkkuvan ledisovelluksen luomiseksi. Ensimmäinen vaihtoehto on tutustua SDK:n dokumentaation ja noudattaa sen ohjeita. Toinen vaihtoehto on aloittaa valmiilla Docker-säilöllä, joka asentaa kaikki tarvittavat työkalut automaattisesti. Kolmas vaihtoehto on asentaa työkaluketjut ja Raspberry Pi Pico -esimerkkikoodi manuaalisesti, mukaan lukien:

  • Git
  • Python 3
  • Cmake
  • gcc-arm-none-eabi \
  • libnewlib-arm-none-eabi

Raspberry Pi Pico -esimerkkikoodin voi noutaa kloonaamalla Raspberry Pin git-repositorion seuraavalla komennolla:

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

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

    git submodule update --init &&

Kun nämä kirjastot ja lähdekoodi on asennettu, seuraavaksi tutustutaan vilkkuvaan ledisovellukseen ja sen kääntämiseen.

Ensimmäisen vilkkuvan ledisovelluksen kirjoittaminen

C-SDK:n mukana toimitetaan esimerkkisovellus, josta kehittäjät voivat kääntää ensimmäisen vilkkuvan ledisovelluksensa. Alla oleva koodi käyttää Picon integroitua ledivaloa ja PICO_DEFAULT_LED_PIN-määritystä I/O-nastan alustamiseen ja ledin vilkuttamiseen 250 millisekunnin viiveellä.

Kopioi
	/**
	 * 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
	}

Koodi: Raspberry Pi Pico käyttää PICO_DEFAULT_LED_PIN-määritystä I/O-nastan alustamiseen ja ledin vilkuttamiseen 250 millisekunnin viiveellä. (Koodin lähde: Raspberry Pi)

Esimerkkikoodissa LED_PIN määritetään oletusnastaksi ja kutsut tehdään käyttämällä C-kirjaston GPIO-API-rajapintaa. Sitten käytetään gpio_init-funktiota nastan alustamiseksi ja LED_PIN asetetaan lähdöksi gpio_set_dir-funktiolla. Tämän jälkeen luodaan loputon silmukka, joka vaihtaa ledin tilaa 250 millisekunnin välein.

Sovelluksen kääntäminen on melko suoraviivaista. Ensin Raspberry Pi Pico -kansioon luodaan build-hakemisto seuraavilla komennoilla:

mkdir build

cd build

Sitten cmake pitää valmistella kääntämistä varten seuraavalla komennolla:

cmake

Seuraavaksi siirrytään blink-hakemistoon ja suoritetaan make:

cd blink

make

Käännösprosessi tuottaa tiedoston blinky.uf2. Käännetyn ohjelman voi ladata Raspberry Pi Picoon pitämällä BOOTSEL-nastaa painettuna laitteen käynnistämisen aikana. RP2 näkyy tällöin massamuistilaitteena. Sitten blinky.uf2-tiedosto tulee siirtää asemalle, minkä jälkeen käynnistyslataaja asentaa sovelluksen. Kun tämä on valmis, ledin pitäisi alkaa vilkkua.

Yhteenveto

Raspberry Pi Pico on houkutteleva ratkaisu upotettujen sovellusten kehittäjille, jotka haluavat parantaa kehityssyklinsä joustavuutta. Saatavilla on useita vaihtoehtoja, kuten itsenäisiä ratkaisuja sekä langatonta yhteyttä tukevia kortteja. Ekosysteemi tukee lisäksi ohjelmointikieliä C, C++ ja MicroPython. Kehittäjät voivat valita sovellukseensa sopivimman kielen ja hyödyntää vastaavaa SDK-pakettia kehityksen nopeuttamiseksi.

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.

Tietoja kirjoittajasta

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.

Tietoja tästä julkaisijasta

DigiKeyn kirjoittajat Pohjois-Amerikassa