RP2350 - úvod: Rozdiel medzi revíziami
dBez shrnutí editace |
|||
| (22 medziľahlých úprav od rovnakého používateľa nie je zobrazených.) | |||
| Riadok 1: | Riadok 1: | ||
[[Electronics|Späť do zoznamu]]|[[ RP2350_-_setup | HW príprava RP2350-zero]] | |||
=== Opis === | |||
RP2350-Zero je malá vývojová doska od firmy Waveshare, postavená na čipe RP2350 (rovnaký čip ako v novšom Raspberry Pi Pico 2). Ide o kompaktnú alternatívu k bežnému Pico formátu – je výrazne menšia, a preto sa hodí presne tam, kde je málo miesta, ako je to aj v našej stavebnici. | |||
Hlavné vlastnosti: | |||
* Čip RP2350 s dvoma jadrami, ktoré je možné prepnúť medzi Arm Cortex-M33 a RISC-V (Hazard3) – pre bežné použitie postačí predvolený Arm režim | |||
* Takt do cca 150 MHz | |||
* 520 kB SRAM priamo na čipe + externá 4 MB flash pamäť na uloženie programu (a prípadne aj vlastných súborov) | |||
* USB-C konektor (napájanie aj nahrávanie firmvéru) | |||
* Tlačidlo BOOT (na prepnutie do režimu nahrávania firmvéru) a tlačidlo RESET | |||
* Jedna onboard RGB LED (WS2812/NeoPixel), ovládateľná jediným pinom | |||
* Podpora PIO (Programmable I/O) – špeciálna periféria RP2350, ktorá vie v hardvéri "napodobniť" takmer akýkoľvek komunikačný protokol | |||
<div style="display: flex; flex-wrap: wrap; gap: 8px;"> | |||
[[File:RP2040-Zero-Pinout.jpg|600px]] | |||
<br> | |||
[[File:RP2040-Zero-Board.jpg|350px]] | |||
[[File:RP2350_Box.jpg|350px]] | |||
</div> | |||
V našej stavebnici je RP2350-Zero "mozog" robota – riadi servá, číta senzory a komunikuje cez USB s počítačom. | |||
Pre účely variability našej stavebnice sme k RP2350-Zero vybrali aj expanznú podložku s vyvedenými VCC a GND pinmi. Má aj svoj vlastný držiak, ktorý sa pomocou M2 skrutiek priskrutkuje k expanznej podložke. | |||
'''Poznámka:''' presné číslovanie pinov a niektoré detaily (napr. veľkosť flash pamäte na konkrétnej revízii dosky) si over v [https://www.waveshare.com/wiki/RP2350-Zero#Arduino_IDE_Series oficiálnej dokumentácii Waveshare] – ide o pomerne nový produkt a údaje sa medzi revíziami môžu líšiť. | |||
=== GPIO piny === | |||
GPIO (General Purpose Input/Output) sú piny, cez ktoré doska komunikuje s okolitým svetom – môžu fungovať ako digitálny vstup (čítanie stavu, napr. tlačidlo), digitálny výstup (zapínanie/vypínanie, napr. LED) alebo majú aj špeciálne funkcie. | |||
Nasledujú typy funkcií, ktoré piny na RP2350 zvládajú (nie každý pin vie všetko naraz – funkciu si vždy nastavuje program). Podrobné vysvetlenie a testovací kód pre jednotlivé protokoly nájdeš na ich podstránkach – klikni na názov funkcie v tabuľke: | |||
{| class="wikitable" | |||
! Funkcia !! Na čo slúži !! Príklad z našej stavebnice | |||
|- | |||
| [[RP2350-Zero/GPIO|Digitálny vstup/výstup]] || Zapnutie/vypnutie, čítanie stavu tlačidla alebo spínača || Joystick tlačidlo | |||
|- | |||
| [[RP2350-Zero/PWM|PWM]] (Pulse Width Modulation) || Riadenie servomotorov, stmievanie LED || Servo, LED modul | |||
|- | |||
| [[RP2350-Zero/ADC|ADC]] (analógový vstup) || Čítanie analógovej hodnoty (napätia) || Joystick, mikrofón | |||
|- | |||
| [[RP2350-Zero/I2C|I2C]] || Komunikácia so senzormi/displejmi cez 2 vodiče (SDA, SCL) || Gyroskop BNO055, laser VL53L0X | |||
|- | |||
| [[RP2350-Zero/UART|UART]] || Sériová komunikácia (napr. debug výpisy medzi dvoma doskami alebo LCD displejom) || Zatiaľ nevyužité | |||
|- | |||
| [[RP2350-Zero/SPI|SPI]] || Rýchlejšia komunikácia, napr. SD karta || Zatiaľ nevyužité | |||
|} | |||
=== Zapisovanie do pamäte === | |||
Doska má 520 kB SRAM, do ktorej sa zapisuje kód, ktorý sa po zapnutí spustí. Ďalej má 4 MB flash pamäte, do ktorej môžeme zapisovať dáta, a to dvoma spôsobmi – podrobný návod a ukážkový kód pre každý z nich nájdeš na jeho podstránke: | |||
{| class="wikitable" | |||
! Spôsob !! Na čo sa hodí | |||
|- | |||
| [[RP2350-Zero/EEPROM|EEPROM]] || Jednoduché, pre malé množstvo dát (do 4 kB, jeden súbor) | |||
|- | |||
| [[RP2350-Zero/LittleFS|LittleFS]] || Skutočný súborový systém, pre viac dát so štruktúrou (viac ako 4 kB, dlhodobé snímanie) | |||
|} | |||
[[Electronics|Späť do zoznamu]]|[[ RP2350_-_setup | HW príprava RP2350-zero]] | |||
=== Opis === | === Opis === | ||
| Riadok 6: | Riadok 70: | ||
* Čip RP2350 s dvoma jadrami, ktoré je možné prepnúť medzi Arm Cortex-M33 a RISC-V (Hazard3) – pre bežné použitie postačí predvolený Arm režim | * Čip RP2350 s dvoma jadrami, ktoré je možné prepnúť medzi Arm Cortex-M33 a RISC-V (Hazard3) – pre bežné použitie postačí predvolený Arm režim | ||
* Takt do cca 150 MHz | * Takt do cca 150 MHz | ||
* 520 | * 520 kB SRAM priamo na čipe + externá 4 MB flash pamäť na uloženie programu (a prípadne aj vlastných súborov) | ||
* USB-C konektor (napájanie aj nahrávanie firmvéru) | * USB-C konektor (napájanie aj nahrávanie firmvéru) | ||
* Tlačidlo BOOT (na prepnutie do režimu nahrávania firmvéru) a tlačidlo RESET | * Tlačidlo BOOT (na prepnutie do režimu nahrávania firmvéru) a tlačidlo RESET | ||
| Riadok 13: | Riadok 77: | ||
<div style="display: flex; flex-wrap: wrap; gap: 8px;"> | <div style="display: flex; flex-wrap: wrap; gap: 8px;"> | ||
[[File:RP2040-Zero-Pinout.jpg| | [[File:RP2040-Zero-Pinout.jpg|600px]] | ||
<br> | |||
[[File:RP2040-Zero-Board.jpg|350px]] | [[File:RP2040-Zero-Board.jpg|350px]] | ||
[[File: | [[File:RP2350_Box.jpg|350px]] | ||
</div> | </div> | ||
V našej stavebnici je RP2350-Zero "mozog" robota – riadi servá, číta senzory a komunikuje cez USB s počítačom. | V našej stavebnici je RP2350-Zero "mozog" robota – riadi servá, číta senzory a komunikuje cez USB s počítačom. | ||
Pre účely variability našej stavebnice sme k RP2350-Zero vybrali aj expanznú podložku s vyvedenými | Pre účely variability našej stavebnice sme k RP2350-Zero vybrali aj expanznú podložku s vyvedenými VCC a GND pinmi. Má aj svoj vlastný držiak, ktorý sa pomocou M2 skrutiek priskrutkuje k expanznej podložke. | ||
'''Poznámka:''' presné číslovanie pinov a niektoré detaily (napr. veľkosť flash pamäte na konkrétnej revízii dosky) si over v [https://www.waveshare.com/wiki/RP2350-Zero#Arduino_IDE_Series oficiálnej dokumentácii Waveshare] – ide o pomerne nový produkt a údaje sa medzi revíziami môžu líšiť. | '''Poznámka:''' presné číslovanie pinov a niektoré detaily (napr. veľkosť flash pamäte na konkrétnej revízii dosky) si over v [https://www.waveshare.com/wiki/RP2350-Zero#Arduino_IDE_Series oficiálnej dokumentácii Waveshare] – ide o pomerne nový produkt a údaje sa medzi revíziami môžu líšiť. | ||
| Riadok 28: | Riadok 93: | ||
GPIO (General Purpose Input/Output) sú piny, cez ktoré doska komunikuje s okolitým svetom – môžu fungovať ako digitálny vstup (čítanie stavu, napr. tlačidlo), digitálny výstup (zapínanie/vypínanie, napr. LED) alebo majú aj špeciálne funkcie. | GPIO (General Purpose Input/Output) sú piny, cez ktoré doska komunikuje s okolitým svetom – môžu fungovať ako digitálny vstup (čítanie stavu, napr. tlačidlo), digitálny výstup (zapínanie/vypínanie, napr. LED) alebo majú aj špeciálne funkcie. | ||
Nasledujú typy funkcií, ktoré piny na RP2350 zvládajú (nie každý pin vie všetko naraz – funkciu si vždy nastavuje program). Podrobné vysvetlenie a testovací kód pre jednotlivé protokoly nájdeš na ich podstránkach – klikni na názov funkcie v tabuľke: | |||
{| class="wikitable" | {| class="wikitable" | ||
! Funkcia !! Na čo slúži !! Príklad z našej stavebnice | ! Funkcia !! Na čo slúži !! Príklad z našej stavebnice | ||
|- | |- | ||
| Digitálny vstup/výstup || Zapnutie/vypnutie, čítanie stavu tlačidla alebo spínača || Joystick | | [[RP2350-Zero/GPIO|Digitálny vstup/výstup]] || Zapnutie/vypnutie, čítanie stavu tlačidla alebo spínača || Joystick tlačidlo | ||
|- | |- | ||
| PWM (Pulse Width Modulation) || Riadenie servomotorov, stmievanie LED || | | [[RP2350-Zero/PWM|PWM]] (Pulse Width Modulation) || Riadenie servomotorov, stmievanie LED || Servo, LED modul | ||
|- | |- | ||
| ADC (analógový vstup) || Čítanie analógovej hodnoty (napätia) || Joystick | | [[RP2350-Zero/ADC|ADC]] (analógový vstup) || Čítanie analógovej hodnoty (napätia) || Joystick, mikrofón | ||
|- | |- | ||
| I2C || Komunikácia so senzormi/displejmi cez 2 vodiče (SDA, SCL) || | | [[RP2350-Zero/I2C|I2C]] || Komunikácia so senzormi/displejmi cez 2 vodiče (SDA, SCL) || Gyroskop BNO055, laser VL53L0X | ||
|- | |- | ||
| | | [[RP2350-Zero/UART|UART]] || Sériová komunikácia (napr. debug výpisy medzi dvoma doskami alebo LCD displejom) || Zatiaľ nevyužité | ||
|- | |- | ||
| | | [[RP2350-Zero/SPI|SPI]] || Rýchlejšia komunikácia, napr. SD karta || Zatiaľ nevyužité | ||
|} | |} | ||
=== Zapisovanie do pamäte === | |||
Doska má 520 kB SRAM, do ktorej sa zapisuje kód, ktorý sa po zapnutí spustí. Ďalej má 4 MB flash pamäte, do ktorej môžeme zapisovať dáta, a to dvoma spôsobmi – podrobný návod a ukážkový kód pre každý z nich nájdeš na jeho podstránke: | |||
{| class="wikitable" | |||
! Spôsob !! Na čo sa hodí | |||
|- | |||
| [[RP2350-Zero/EEPROM|EEPROM]] || Jednoduché, pre malé množstvo dát (do 4 kB, jeden súbor) | |||
|- | |||
| [[RP2350-Zero/LittleFS|LittleFS]] || Skutočný súborový systém, pre viac dát so štruktúrou (viac ako 4 kB, dlhodobé snímanie) | |||
|} | |||
=== | === Dve jadrá a dve architektúry (Arm / RISC-V) === | ||
RP2350 má vo vnútri celkovo štyri jadrá – dvojicu '''Arm Cortex-M33''' a dvojicu '''RISC-V (Hazard3)''' – naraz je ale možné použiť len jednu z týchto dvoch dvojíc, nie všetky štyri súčasne. | |||
'''Voľba architektúry (Arm alebo RISC-V)''' | |||
''' | Ktorá dvojica jadier sa použije, sa nastavuje v Arduino IDE cez '''Tools → CPU Architecture → Arm''' alebo '''RISC-V'''. Nejde o prepínanie za behu programu – ide o nastavenie pre celý sketch, takže po zmene treba program nahrať odznova. | ||
[[File: CPU-arm-risc-v.png | 500px]] | |||
Pre bežné použitie (a takmer všetky knižnice v našej stavebnici) postačí predvolený Arm režim. RISC-V je skôr na experimentovanie – niektoré knižnice pod ním zatiaľ nemusia fungovať (napr. FreeRTOS). | |||
''' | '''Použitie oboch jadier naraz (multicore)''' | ||
Bez ohľadu na zvolenú architektúru vie RP2350 spúšťať kód na oboch jadrách naraz. Popri známych funkciách <code>setup()</code>/<code>loop()</code> (tie bežia na jadre 0) stačí do sketchu pridať funkcie <code>setup1()</code>/<code>loop1()</code> – tie automaticky pobežia paralelne na jadre 1: | |||
<syntaxhighlight lang="cpp"> | <syntaxhighlight lang="cpp"> | ||
// Jadro 0 - hlavna logika (napr. citanie senzorov) | |||
void setup() { | void setup() { | ||
Serial.begin(115200); | |||
} | } | ||
void loop() { | void loop() { | ||
Serial.println("Jadro 0 bezi..."); | |||
delay(1000); | |||
} | |||
// Jadro 1 - bezi paralelne s jadrom 0 (napr. blikanie LED) | |||
void setup1() { | |||
pinMode(LED_BUILTIN, OUTPUT); | |||
} | |||
void loop1() { | |||
digitalWrite(LED_BUILTIN, HIGH); | |||
delay(200); | |||
digitalWrite(LED_BUILTIN, LOW); | |||
delay(200); | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<code> | Pár vecí, na ktoré si treba dať pozor: | ||
* Obe jadrá si delia len 8 kB zásobníka (stack) – pri multicore sa rozdelí na 4 kB + 4 kB (namiesto plných 8 kB pre jedno jadro), takže vo <code>setup1()</code>/<code>loop1()</code> netreba používať príliš veľké lokálne premenné či polia. | |||
* Nie je bezpečné volať tú istú perifériu (napr. <code>Serial.print()</code>) súčasne z oboch jadier bez synchronizácie – môže to spôsobiť nepredvídateľné správanie. | |||
* Ak treba jadro 1 reštartovať alebo pozastaviť, dajú sa použiť funkcie <code>rp2040.restartCore1()</code> a <code>rp2040.resumeOtherCore()</code> (názov "rp2040" v knižnici ostáva zachovaný aj na RP2350 kvôli spätnej kompatibilite). | |||
'''Komunikácia medzi jadrami''' | |||
Keďže jadro 0 a jadro 1 bežia úplne nezávisle (každé má svoj vlastný <code>setup</code>/<code>loop</code>), potrebujú spôsob, ako si navzájom bezpečne posielať dáta – napríklad keď jadro 0 prečíta senzor a jadro 1 na základe toho niečo riadi. RP2350 má na to priamo v hardvéri dva malé kruhové zásobníky (FIFO) medzi jadrami – jeden v smere 0→1, druhý 1→0, každý s kapacitou 8 čísel (32-bitových). Arduino-pico ich sprístupňuje cez objekt <code>rp2040.fifo</code>: | |||
* <code>rp2040.fifo.push(hodnota)</code> – pošle 32-bitové číslo druhému jadru (počká, ak je FIFO plné) | |||
* <code>rp2040.fifo.pop()</code> – prečíta ďalšie prijaté číslo (počká, ak ešte nič neprišlo) | |||
* <code>rp2040.fifo.available()</code> – koľko hodnôt čaká na prečítanie | |||
[[File: CPU-FIFO.png | 500px]] | |||
Napríklad, ak má jadro 0 (číta senzor) posielať nameranú hodnotu jadru 1 (ktoré ju napríklad len vypisuje alebo podľa nej niečo riadi): | |||
<syntaxhighlight lang="cpp"> | <syntaxhighlight lang="cpp"> | ||
// Jadro 0 - odosiela data jadru 1 | |||
void setup() { | void setup() { | ||
Serial.begin(115200); | Serial.begin(115200); | ||
| Riadok 110: | Riadok 187: | ||
void loop() { | void loop() { | ||
int | int hodnota = analogRead(A0); // napr. nacitanie zo senzora | ||
rp2040.fifo.push(hodnota); // posli hodnotu jadru 1 | |||
delay(200); | |||
} | |||
// Jadro 1 - prijima data od jadra 0 | |||
void setup1() { | |||
} | |||
void loop1() { | |||
if (rp2040.fifo.available() > 0) { | |||
int prijataHodnota = rp2040.fifo.pop(); | |||
Serial.print("Jadro 1 prijalo: "); | |||
Serial.println(prijataHodnota); | |||
} | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
FIFO vie naraz preniesť len jedno 32-bitové číslo, takže sa hodí najmä na jednoduché hodnoty alebo príkazy (napr. "toto je nová nameraná vzdialenosť"). Pre zdieľanie zložitejších dát (viac hodnôt naraz) sa zvyčajne cez FIFO pošle len signál "dáta sú pripravené" a samotné dáta sa čítajú zo spoločnej globálnej premennej (označenej <code>volatile</code>), do ktorej ich medzitým zapísalo druhé jadro. | |||
__notoc__ | |||
Aktuálna revízia z 20:17, 8. september 2026
Späť do zoznamu| HW príprava RP2350-zero
Opis
RP2350-Zero je malá vývojová doska od firmy Waveshare, postavená na čipe RP2350 (rovnaký čip ako v novšom Raspberry Pi Pico 2). Ide o kompaktnú alternatívu k bežnému Pico formátu – je výrazne menšia, a preto sa hodí presne tam, kde je málo miesta, ako je to aj v našej stavebnici.
Hlavné vlastnosti:
- Čip RP2350 s dvoma jadrami, ktoré je možné prepnúť medzi Arm Cortex-M33 a RISC-V (Hazard3) – pre bežné použitie postačí predvolený Arm režim
- Takt do cca 150 MHz
- 520 kB SRAM priamo na čipe + externá 4 MB flash pamäť na uloženie programu (a prípadne aj vlastných súborov)
- USB-C konektor (napájanie aj nahrávanie firmvéru)
- Tlačidlo BOOT (na prepnutie do režimu nahrávania firmvéru) a tlačidlo RESET
- Jedna onboard RGB LED (WS2812/NeoPixel), ovládateľná jediným pinom
- Podpora PIO (Programmable I/O) – špeciálna periféria RP2350, ktorá vie v hardvéri "napodobniť" takmer akýkoľvek komunikačný protokol
V našej stavebnici je RP2350-Zero "mozog" robota – riadi servá, číta senzory a komunikuje cez USB s počítačom.
Pre účely variability našej stavebnice sme k RP2350-Zero vybrali aj expanznú podložku s vyvedenými VCC a GND pinmi. Má aj svoj vlastný držiak, ktorý sa pomocou M2 skrutiek priskrutkuje k expanznej podložke.
Poznámka: presné číslovanie pinov a niektoré detaily (napr. veľkosť flash pamäte na konkrétnej revízii dosky) si over v oficiálnej dokumentácii Waveshare – ide o pomerne nový produkt a údaje sa medzi revíziami môžu líšiť.
GPIO piny
GPIO (General Purpose Input/Output) sú piny, cez ktoré doska komunikuje s okolitým svetom – môžu fungovať ako digitálny vstup (čítanie stavu, napr. tlačidlo), digitálny výstup (zapínanie/vypínanie, napr. LED) alebo majú aj špeciálne funkcie.
Nasledujú typy funkcií, ktoré piny na RP2350 zvládajú (nie každý pin vie všetko naraz – funkciu si vždy nastavuje program). Podrobné vysvetlenie a testovací kód pre jednotlivé protokoly nájdeš na ich podstránkach – klikni na názov funkcie v tabuľke:
| Funkcia | Na čo slúži | Príklad z našej stavebnice |
|---|---|---|
| Digitálny vstup/výstup | Zapnutie/vypnutie, čítanie stavu tlačidla alebo spínača | Joystick tlačidlo |
| PWM (Pulse Width Modulation) | Riadenie servomotorov, stmievanie LED | Servo, LED modul |
| ADC (analógový vstup) | Čítanie analógovej hodnoty (napätia) | Joystick, mikrofón |
| I2C | Komunikácia so senzormi/displejmi cez 2 vodiče (SDA, SCL) | Gyroskop BNO055, laser VL53L0X |
| UART | Sériová komunikácia (napr. debug výpisy medzi dvoma doskami alebo LCD displejom) | Zatiaľ nevyužité |
| SPI | Rýchlejšia komunikácia, napr. SD karta | Zatiaľ nevyužité |
Zapisovanie do pamäte
Doska má 520 kB SRAM, do ktorej sa zapisuje kód, ktorý sa po zapnutí spustí. Ďalej má 4 MB flash pamäte, do ktorej môžeme zapisovať dáta, a to dvoma spôsobmi – podrobný návod a ukážkový kód pre každý z nich nájdeš na jeho podstránke:
| Spôsob | Na čo sa hodí |
|---|---|
| EEPROM | Jednoduché, pre malé množstvo dát (do 4 kB, jeden súbor) |
| LittleFS | Skutočný súborový systém, pre viac dát so štruktúrou (viac ako 4 kB, dlhodobé snímanie) |
Späť do zoznamu| HW príprava RP2350-zero
Opis
RP2350-Zero je malá vývojová doska od firmy Waveshare, postavená na čipe RP2350 (rovnaký čip ako v novšom Raspberry Pi Pico 2). Ide o kompaktnú alternatívu k bežnému Pico formátu – je výrazne menšia, a preto sa hodí presne tam, kde je málo miesta, ako je to aj v našej stavebnici.
Hlavné vlastnosti:
- Čip RP2350 s dvoma jadrami, ktoré je možné prepnúť medzi Arm Cortex-M33 a RISC-V (Hazard3) – pre bežné použitie postačí predvolený Arm režim
- Takt do cca 150 MHz
- 520 kB SRAM priamo na čipe + externá 4 MB flash pamäť na uloženie programu (a prípadne aj vlastných súborov)
- USB-C konektor (napájanie aj nahrávanie firmvéru)
- Tlačidlo BOOT (na prepnutie do režimu nahrávania firmvéru) a tlačidlo RESET
- Jedna onboard RGB LED (WS2812/NeoPixel), ovládateľná jediným pinom
- Podpora PIO (Programmable I/O) – špeciálna periféria RP2350, ktorá vie v hardvéri "napodobniť" takmer akýkoľvek komunikačný protokol
V našej stavebnici je RP2350-Zero "mozog" robota – riadi servá, číta senzory a komunikuje cez USB s počítačom.
Pre účely variability našej stavebnice sme k RP2350-Zero vybrali aj expanznú podložku s vyvedenými VCC a GND pinmi. Má aj svoj vlastný držiak, ktorý sa pomocou M2 skrutiek priskrutkuje k expanznej podložke.
Poznámka: presné číslovanie pinov a niektoré detaily (napr. veľkosť flash pamäte na konkrétnej revízii dosky) si over v oficiálnej dokumentácii Waveshare – ide o pomerne nový produkt a údaje sa medzi revíziami môžu líšiť.
GPIO piny
GPIO (General Purpose Input/Output) sú piny, cez ktoré doska komunikuje s okolitým svetom – môžu fungovať ako digitálny vstup (čítanie stavu, napr. tlačidlo), digitálny výstup (zapínanie/vypínanie, napr. LED) alebo majú aj špeciálne funkcie.
Nasledujú typy funkcií, ktoré piny na RP2350 zvládajú (nie každý pin vie všetko naraz – funkciu si vždy nastavuje program). Podrobné vysvetlenie a testovací kód pre jednotlivé protokoly nájdeš na ich podstránkach – klikni na názov funkcie v tabuľke:
| Funkcia | Na čo slúži | Príklad z našej stavebnice |
|---|---|---|
| Digitálny vstup/výstup | Zapnutie/vypnutie, čítanie stavu tlačidla alebo spínača | Joystick tlačidlo |
| PWM (Pulse Width Modulation) | Riadenie servomotorov, stmievanie LED | Servo, LED modul |
| ADC (analógový vstup) | Čítanie analógovej hodnoty (napätia) | Joystick, mikrofón |
| I2C | Komunikácia so senzormi/displejmi cez 2 vodiče (SDA, SCL) | Gyroskop BNO055, laser VL53L0X |
| UART | Sériová komunikácia (napr. debug výpisy medzi dvoma doskami alebo LCD displejom) | Zatiaľ nevyužité |
| SPI | Rýchlejšia komunikácia, napr. SD karta | Zatiaľ nevyužité |
Zapisovanie do pamäte
Doska má 520 kB SRAM, do ktorej sa zapisuje kód, ktorý sa po zapnutí spustí. Ďalej má 4 MB flash pamäte, do ktorej môžeme zapisovať dáta, a to dvoma spôsobmi – podrobný návod a ukážkový kód pre každý z nich nájdeš na jeho podstránke:
| Spôsob | Na čo sa hodí |
|---|---|
| EEPROM | Jednoduché, pre malé množstvo dát (do 4 kB, jeden súbor) |
| LittleFS | Skutočný súborový systém, pre viac dát so štruktúrou (viac ako 4 kB, dlhodobé snímanie) |
Dve jadrá a dve architektúry (Arm / RISC-V)
RP2350 má vo vnútri celkovo štyri jadrá – dvojicu Arm Cortex-M33 a dvojicu RISC-V (Hazard3) – naraz je ale možné použiť len jednu z týchto dvoch dvojíc, nie všetky štyri súčasne.
Voľba architektúry (Arm alebo RISC-V)
Ktorá dvojica jadier sa použije, sa nastavuje v Arduino IDE cez Tools → CPU Architecture → Arm alebo RISC-V. Nejde o prepínanie za behu programu – ide o nastavenie pre celý sketch, takže po zmene treba program nahrať odznova.
Pre bežné použitie (a takmer všetky knižnice v našej stavebnici) postačí predvolený Arm režim. RISC-V je skôr na experimentovanie – niektoré knižnice pod ním zatiaľ nemusia fungovať (napr. FreeRTOS).
Použitie oboch jadier naraz (multicore)
Bez ohľadu na zvolenú architektúru vie RP2350 spúšťať kód na oboch jadrách naraz. Popri známych funkciách setup()/loop() (tie bežia na jadre 0) stačí do sketchu pridať funkcie setup1()/loop1() – tie automaticky pobežia paralelne na jadre 1:
// Jadro 0 - hlavna logika (napr. citanie senzorov)
void setup() {
Serial.begin(115200);
}
void loop() {
Serial.println("Jadro 0 bezi...");
delay(1000);
}
// Jadro 1 - bezi paralelne s jadrom 0 (napr. blikanie LED)
void setup1() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop1() {
digitalWrite(LED_BUILTIN, HIGH);
delay(200);
digitalWrite(LED_BUILTIN, LOW);
delay(200);
}
Pár vecí, na ktoré si treba dať pozor:
- Obe jadrá si delia len 8 kB zásobníka (stack) – pri multicore sa rozdelí na 4 kB + 4 kB (namiesto plných 8 kB pre jedno jadro), takže vo
setup1()/loop1()netreba používať príliš veľké lokálne premenné či polia. - Nie je bezpečné volať tú istú perifériu (napr.
Serial.print()) súčasne z oboch jadier bez synchronizácie – môže to spôsobiť nepredvídateľné správanie. - Ak treba jadro 1 reštartovať alebo pozastaviť, dajú sa použiť funkcie
rp2040.restartCore1()arp2040.resumeOtherCore()(názov "rp2040" v knižnici ostáva zachovaný aj na RP2350 kvôli spätnej kompatibilite).
Komunikácia medzi jadrami
Keďže jadro 0 a jadro 1 bežia úplne nezávisle (každé má svoj vlastný setup/loop), potrebujú spôsob, ako si navzájom bezpečne posielať dáta – napríklad keď jadro 0 prečíta senzor a jadro 1 na základe toho niečo riadi. RP2350 má na to priamo v hardvéri dva malé kruhové zásobníky (FIFO) medzi jadrami – jeden v smere 0→1, druhý 1→0, každý s kapacitou 8 čísel (32-bitových). Arduino-pico ich sprístupňuje cez objekt rp2040.fifo:
rp2040.fifo.push(hodnota)– pošle 32-bitové číslo druhému jadru (počká, ak je FIFO plné)rp2040.fifo.pop()– prečíta ďalšie prijaté číslo (počká, ak ešte nič neprišlo)rp2040.fifo.available()– koľko hodnôt čaká na prečítanie
Napríklad, ak má jadro 0 (číta senzor) posielať nameranú hodnotu jadru 1 (ktoré ju napríklad len vypisuje alebo podľa nej niečo riadi):
// Jadro 0 - odosiela data jadru 1
void setup() {
Serial.begin(115200);
}
void loop() {
int hodnota = analogRead(A0); // napr. nacitanie zo senzora
rp2040.fifo.push(hodnota); // posli hodnotu jadru 1
delay(200);
}
// Jadro 1 - prijima data od jadra 0
void setup1() {
}
void loop1() {
if (rp2040.fifo.available() > 0) {
int prijataHodnota = rp2040.fifo.pop();
Serial.print("Jadro 1 prijalo: ");
Serial.println(prijataHodnota);
}
}
FIFO vie naraz preniesť len jedno 32-bitové číslo, takže sa hodí najmä na jednoduché hodnoty alebo príkazy (napr. "toto je nová nameraná vzdialenosť"). Pre zdieľanie zložitejších dát (viac hodnôt naraz) sa zvyčajne cez FIFO pošle len signál "dáta sú pripravené" a samotné dáta sa čítajú zo spoločnej globálnej premennej (označenej volatile), do ktorej ich medzitým zapísalo druhé jadro.