こんにちは、あろっちです。
Raspberry Pi Pico 2が登場しました。
Raspberry Pi Pico 2についてまとめてみたいと思います。
スペック比較表
項目 | Raspberry Pi Pico | Raspberry Pi Pico 2 | 備考 |
---|---|---|---|
SoC | RP2040 デュアルコア Cortex-M0+ 133MHz | RP2350 デュアルコア Cortex-M33 or RISC-V Hazard3 150MHz | RP2350はARMセット、RISC-Vセットどちらかのバイナリ(命令セット)を選択可 RP2350はFPU搭載 ARMセットにおいてFPUを使用できる |
SRAM | 264kB | 520kB | |
フラッシュメモリ | 2MB | 4MB | いずれもオンボードQuad-SPI(QSPI)接続 |
動作電圧 | 1.8〜5.5V | 1.8〜5.5V | |
USB | micro-USB | micro-USB | いずれもUSB 1.1コントローラーおよびPHY(ホストおよびデバイスに対応) |
GPIO | 26 (うち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×51mm | 21mm×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-RP2 | RP2350 | |
その他 | ・ソフトウェア互換性 RP2040で動作していたプログラムは基本的に動作可 (ソース互換) RP2040とRP2350でバイナリ(UF2ファイル)の互換がない |
Raspberry Pi Pico 2のUSBマスストレージモード(画面例)
「RP2350」と認識されます。
USBマスストレージモードについては次の記事をご参照ください。
ピン配列
Raspberry Pi Pico 2
Raspberry Pi Pico
画像ギャラリー
表
裏
ピンヘッダー実装後
Raspberry Pi PicoとRaspberry Pi Pico 2
Raspberry Pi Pico 2向けPythonのファームウェア
MicroPython
CircuitPython
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で実行した結果です。
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で調節するという以下の内容を自作のユニバーサル基板で動かしてみました。
実際にボリュームを動かすとLEDの光量が変化するのを確認できました。
この自作ボードの記事はこちら
最後に
当ブログではRaspberry Pi Pico用のArduinoプログラムを何本か作ってきているので、それがPico 2で動くか(互換性があるか)検証してみたいですね。
Pico向けのテスト用プリント基板なんかも作っているのでこれなどで試せたらと思っています。
参考URL:
https://www.raspberrypi.com/documentation/microcontrollers/pico-series.html
関連記事
当ブログのマイコン記事です。ぜひご覧ください。
コメント