Raspberry Pi Pico 2を試してみました【Picoとのスペック比較など】

Raspberry Pi/電子工作
スポンサーリンク

こんにちは、あろっちです。

Raspberry Pi Pico 2が登場しました。
Raspberry Pi Pico 2についてまとめてみたいと思います。

スポンサーリンク

スペック比較表

項目Raspberry Pi PicoRaspberry Pi Pico 2備考
SoCRP2040

デュアルコア
Cortex-M0+
133MHz
RP2350

デュアルコア
Cortex-M33
or
RISC-V Hazard3
150MHz
RP2350はARMセット、RISC-Vセットどちらかのバイナリ(命令セット)を選択可

RP2350はFPU搭載
ARMセットにおいてFPUを使用できる
SRAM264kB520kB
フラッシュメモリ2MB4MBいずれもオンボードQuad-SPI(QSPI)接続
動作電圧1.8〜5.5V1.8〜5.5V
USBmicro-USBmicro-USBいずれもUSB 1.1コントローラーおよびPHY(ホストおよびデバイスに対応)
GPIO26
(うち3つはADCに使用可能)

2×SPI、2×I2C、2×UART、3×12bit 500ksps ADC、16×制御可能PWMチャネル
26
(うち3つはADCに使用可能)

2×SPI、2×I2C、2×UART、3×12bit 500ksps ADC、24×制御可能PWMチャネル
ピン配置に互換あり
タイマー1×64bitカウンター
(4×アラームに分割可)
2×4つのアラーム付きタイマー、1×AONタイマー
プログラマブルIO(PIO)2×PIOブロック、
8×カスタム周辺機器サポート用のPIOステートマシン
3×PIOブロック、
12×カスタム周辺機器サポート用のPIOステートマシン
デバッグピンSWD(3ピン)SWD(3ピン)Raspberry Pi Pico 2はデバッガーのファームウェアがまだ未サポート
温度センサーありあり
MCUスリープモード100uA<10uA
外形寸法21mm×51mm21mm×51mm外形に互換あり
対応言語Raspberry Pi Pico C/C++ SDK

MicroPython
CircuitPython

Arduino

Arduino公式ボード
&
Raspberry Pi Pico/RP2040ボード(Arduino-Pico)
Raspberry Pi Pico C/C++ SDK

MicroPython
(記事執筆時点では開発版のみ)
CircuitPython
(記事執筆時点ではアルファ版)

Arduino

Raspberry Pi Pico/RP2040ボード(Arduino-Pico) 4.0.1から正式対応
(現状ARMセットのみサポート)
セキュリティなしCortex-M用のArm TrustZoneを中心に、署名付きブート、キーストレージ用の 8 KBのアンチヒューズOTP、SHA-256アクセラレーター、ハードウェアTRNG(乱数生成器)、高速グリッチ検出器を組み込んだ、包括的なセキュリティアーキテクチャを提供
USBマスストレージ(書き込みモード)時の名称RPI-RP2RP2350
その他・ソフトウェア互換性
RP2040で動作していたプログラムは基本的に動作可
(ソース互換)

RP2040とRP2350でバイナリ(UF2ファイル)の互換がない

Raspberry Pi Pico 2のUSBマスストレージモード(画面例)

「RP2350」と認識されます。

MacのFinder画面

USBマスストレージモードについては次の記事をご参照ください。

ピン配列

Raspberry Pi Pico 2

Raspberry Pi Pico

画像ギャラリー

ピンヘッダー実装後

Raspberry Pi PicoとRaspberry Pi Pico 2

Raspberry Pi Pico 2向けPythonのファームウェア

MicroPython

MicroPython - Python for microcontrollers
MicroPython is a lean and efficient implementation of the Python 3 programming language that includes a small subset of ...

CircuitPython

CircuitPython - Pico 2 Download
Raspberry Pi Pico 2 is Raspberry Pi Foundation’s update to their popular RP2040-based Pico board, now built on RP2350: t...

PythonのファームウェアはUSBマスストレージモードからインストールできます。次の記事をご参照ください。

Arduino IDEの設定

  • Arduino IDEにボードを追加
    ※実施済みの場合、この手順は不要です。

事前にRaspberry Pi Pico/RP2040ボード(Arduino-Pico)を追加します。
追加方法は、以下の記事をご覧ください。

  • Raspberry Pi Pico/RP2040ボード(Arduino-Pico)のインストール

[ツール] > [ボード] > [ボードマネージャ]をクリックし、検索ボックスに「rp2040」と入力し、[Raspberry Pi Pico/RP2040]ボード(バージョン4.0.1以降)をインストールします。

  • ボードの選択 (Raspberry Pi Pico 2の場合)

[ツール] > [ボード] > [Raspberry Pi RP2040(Ver)※] > [Raspberry Pi Pico 2]を選択します。

※(Ver)の表示はArduino IDE 1系のみ

  • シリアルポートの選択 (Raspberry Pi Pico 2の場合)

[ツール] > [シリアルポート]からRaspberry Pi Pico 2が接続されているシリアルポートを選択します。

Chromebookなどシリアルポートから書き込みできない環境の場合、手動でスケッチを書き込みできます。

動かしてみました

TRNG(ハードウェア乱数生成器)を試してみました(Arduino使用)

Raspberry Pi Pico 2はセキュリティ機能の一部としてTRNG(ハードウェア乱数生成器)が実装されています。
どの程度のパフォーマンスなのか試してみました。

void setup() {
  Serial.begin(115200);
  while (!Serial) yield();

  Serial.println();
#if HAS_RP2350_TRNG
  Serial.println("HAS_RP2350_TRNG");
#else
  Serial.println("PRNG");
#endif

  Serial.println("Use pico_rand function");
  uint32_t randNumber;
  for (int i = 0; i < 10; i++) {
    auto now = micros();
    randNumber = rp2040.hwrand32();
    auto last = micros();
    Serial.printf("%d: %u %u\n", i + 1, randNumber, last - now);
  }

  Serial.println();
  Serial.println("Use random function");
  for (int i = 0; i < 10; i++) {
    auto now = micros();
    randNumber = (uint32_t)random();
    auto last = micros();
    Serial.printf("%d: %u %u\n", i + 1, randNumber, last - now);
  }
}

void loop() {
}

実行結果

左がRaspberry Pi Pico 2、右がRaspberry Pi Picoで実行した結果です。

Raspberry Pi Pico 2の結果
Raspberry Pi Picoの結果

Use pico_rand functionの方はマクロ「HAS_RP2350_TRNG」が定義してあるとTRNGを使って乱数取得するプログラムとなっています。

Raspberry Pi Picoの結果を見るとPRNG(擬似乱数生成器)で乱数が取得されているのがわかります。

乱数生成速度に関して初回取得時(1:)は乱数生成に時間を要するため、Raspberry Pi Pico 2で66μs、Raspberry Pi Picoの方はPRNGのためか914μsとなっています。
2回目(2:)以降の結果を見るとRaspberry Pi Pico 2のTRNGでは5μs内で安定して乱数が取得できるのがわかりました。
Raspberry Pi Picoの方は乱数取得に10μs前後かかっています。

Use random functionの結果はArduinoのrandom関数で取得した乱数値です。

Raspberry Pi Pico 2とRaspberry Pi Picoで同じ値を取得していることから、こちらはRP2040/RP2350に依存するような乱数生成器を使っておらず、あくまでrandomSeed関数と組み合わせて使うArduino固有の関数ということがわかりました。

Adafruit NeoPixelライブラリを試してみました(Arduino使用)

スケッチ例のstrandtestを試したところ動きました。

Grove Shield for Pi PicoとGroveのRGB LEDテープを使用しています。

ピンは以下のように16に変更しています。

// Which pin on the Arduino is connected to the NeoPixels?
// On a Trinket or Gemma we suggest changing this to 1:
#define LED_PIN 16

CircuitPython動作例

ボリュームの電圧を読み取り、LEDの光量をPWMで調節するという以下の内容を自作のユニバーサル基板で動かしてみました。

Getting Started with Raspberry Pi Pico and CircuitPython
The Raspberry Pi foundation changed single-board computing when they released the Raspberry Pi computer, now they're rea...

実際にボリュームを動かすとLEDの光量が変化するのを確認できました。

この自作ボードの記事はこちら

最後に

当ブログではRaspberry Pi Pico用のArduinoプログラムを何本か作ってきているので、それがPico 2で動くか(互換性があるか)検証してみたいですね。

Pico向けのテスト用プリント基板なんかも作っているのでこれなどで試せたらと思っています。

参考URL:
https://www.raspberrypi.com/documentation/microcontrollers/pico-series.html

関連記事

当ブログのマイコン記事です。ぜひご覧ください。

コメント

タイトルとURLをコピーしました