Raspberry Pi Pico 2レビュー「前モデルから1.5倍高速化」
Raspberry Pi財団は、新型マイコンボード「Raspberry Pi Pico 2」(以下、Pico2)を2024年8月に発表しました。すでに国内のECサイトでも販売開始し、手元に届いたばかりの方や、これから使い道を考えるという方もいるのではないでしょうか。
Pico 2の特徴や前モデルとの性能比較、Maker向けのポイントについて、「これ1冊でできる!ラズベリー・パイPicoではじめる電子工作 超入門」などのラズパイ関連の著書がある米田聡さんが紹介します(編集部)。
Raspberry Pi Pico 2を使ってみよう
2024年8月に、Raspberry Pi財団からマイクロコントローラー(以下、マイコン)製品の第2弾となる「RP2350」と、それを搭載したマイコンボード製品Pico 2が発表されました。8月下旬に出荷が始まり国内販売もスタートしていますので、すでに入手している人も多いでしょう。
RP2350搭載のPico 2は、Raspberry Pi 財団が2021年6月に発売した「RP2040」と、それを搭載する「Raspberry Pi Pico」(以下、Pico 1)に続くマイコン製品です。CPUコアがCortex-M0+からCortex-M33へと変更されて高性能化しているほか、PWMやPIOといった内蔵ペリフェラルの強化や、オンチップメモリ容量の拡大、Cortex-M版TrustZoneによるセキュリティ機能向上など多岐にわたる高性能化が図られています。
また、RP2350を搭載するPico 2ではオンボードフラッシュメモリ容量がPico 1の2MBから4MBへと拡張されました。容量が増えたオンチップメモリと合わせて、Pico 1よりも複雑なプログラムや、より高度な組込向けOSの利用が可能になります。
本稿では新たに発売されたPico 2で何が変わったのかや、Pico 2を使ったプログラミング、工作に取り掛かるための情報をざっくりとまとめていきます。
Pico 1とPico2の違い
マイコンボードとしてのPico 1とPico 2は、差し替えが可能なほどのピン互換性を維持しています。したがって、Pico 1とPico 2の外部仕様には大差ありませんが、Pico 2に搭載されている新開発のオリジナルマイコンRP2530は、Pico 1のRP2040に比べ多機能化や高性能化が図られました。主な違いを表1にまとめておきます。
なお、RP2530は入出力をさらに拡張したQFP-60版が発売される予定ですが、Pico 2に搭載されているのはRP2040と同じピン数のQFP-40版です。表1はQFP-40版に基づいています。
表1: RP2350とRP2040の主な違い
RP2350 | RP2040 | |
---|---|---|
CPUコア | Cortex-M33×2 or Hazard3 RISC-V Processor×2 動作クロック150MHz | Cortex-M0+×2 動作クロック125MHz(最大133MHz) |
浮動小数点演算 | 倍精度アクセラレータ内蔵 | ハードウェア単精度(倍精度はソフトウェア) |
オンチップSRAM | 520KB | 264KB |
外部フラッシュメモリ | QSPIバス接続最大16MB(オンチップキャッシュ16KB搭載) | QSPIバス接続最大16MB |
GPIO | 最大30本 | 最大30本 |
ADC | 4チャンネル(FIFO 8) | 4チャンネル(FIFO 4) |
PWM | 12スライス×2チャンネル(最大24本) | 8スライス×2チャンネル(最大16本) |
UART | 2基 | 2基 |
I2C | 2基 | 2基 |
SPI | 2基 | 2基 |
Programmable IO | 12基 | 8基 |
セキュリティ機能 | Arm TrustZone | - |
RP2350で大きく変わり、また少々わかりにくいのがCPUコアです。表1に示すように、RP2350では、CPUとしてArmの組込向けCPUコアCortex-M33か、Hazard3と命名されたオリジナルのRISC-Vプロセッサーのいずれかを起動時に選択できる仕様となっています。具体的にはboot stage 2で起動するCPUを選択します。
Cortex-M33とHazard3を同時に使用することも不可能ではないそうですが、その場合Cortex-M33×1基+Hazard3×1基の組み合わせになります。これは内部ファブリック(CPUやペリフェラルを接続している内部バス)の制限で、つまり内部バスに最大2基のCPUコアしか接続できないという内部の制約によるものと考えられます。Cortex-M33×1基+Hazard3×1基という組み合わせはマニアックで面白いのですが、実際的に意味があるかは微妙なところかもしれません。
Cortex-M33
Cortex-M33は、Armが組込向けに定義している命令セットアーキテクチャ(ISA)「ARMv8-M」をサポートするCPUコアです。RP2040に搭載されているCortex-M0+はARMv7-Mですが、それに強力なセキュリティ機能を追加したのがARMv8-Mです。
Cortex-M0+に代表される従来の組込向けのCPUコアは、ごくシンプルなものです。家電製品などに組み込まれスタンドアロンで利用されるという性質上、悪用のターゲットになりにくかったからです。結果的にCortex-M0+のような従来型の組込CPUでは、たとえば内部プログラムを読み出してリバースエンジニアリングを行ったり、プログラムを改ざんしたり、メモリの内容に手を加えたりといったことが比較的、困難なく行えます。
しかし、現在では家電製品を含め多くの機器がインターネットに接続するようになりました。このようなIoT時代には、組込向けのCPUコアにも高度なセキュリティ機能が求められます。そこでARMv8-Mでは、セキュアモードとノンセキュアモードという2つの動作モードが導入され、ノンセキュアモードからはアクセスできないメモリブロックを設定できるといった安全性向上の機能が加えられました。
RP2350ではさらに、署名のないコードの実行をブロックする署名付きブートや、1度しか書き込めない安全な8KBのオンチップPROM、ハードウェア乱数発生器、SHA-256アクセラレータといったArm TrustZoneベースの機能が搭載されています。
こうしたセキュリティ機能はRP2350を、自社プロダクトに利用したいコーポレートユーザーにとって意義のあるものですが、ホビイストにとってはあまりありがたみがある機能ではないかもしれません。
セキュリティ機能だけでなく、Cortex-M33はCortex-M0+から大幅に高速化されていることも大きな特徴です。参考値になりますが、Cortex-M0+のCPU性能指標としてArmは、約0.9 DMIPS/MHz※という値を公表しています。一方のCortex-M33の公表参考値は約1.5 DMIPS/MHzですから、同一動作クロックにおける性能は約1.67倍となります。さらにPico 1の動作クロック125MHzに対して、Pico 2では150MHzへとクロックが1.2倍に引き上げられているので、トータル約2倍のCPU性能が期待できます。
また、Cortex-M33ではSIMDおよびMAC命令を含むDSP拡張がサポートされ、音声などのデジタル信号処理が可能です。さらに表1に示したように、RP2350では倍精度浮動小数演算アクセラレータも搭載されました。
このような演算の高性能化により、Pico 2ではより複雑なプログラムの実行が可能になります。たとえば、Pico 1では処理速度に限界があったMicroPythonが、より高速に利用できます。また、オンチップメモリの倍増も相まって高度な組込向けOSの利用も可能になるでしょう。
※ 動作クロック1MHzあたりのDrystone Benchmark性能を示す指標値で、1MHzあたりに実行できる整数演算命令の数(単位は106)に相当します。
Hazard3 RISC-V Processor
Raspberry Pi財団によると、Hazard3はRaspberry Piの開発者が、余暇を利用して実装したオリジナルの組込向けRISC-Vコアだそうです※。RISC-Vの32bit基本命令セットである「RV32I」を実装した3段パイプラインのシンプルなCPUコアで、シリコン面積を犠牲にせずにRP2350に内蔵することができたとしています。
先述のように、RP2350では起動時にCortex-M33かHazard3のいずれか一方を選択します。Hazard3を実際に使ってみると意外に性能は悪くなく、整数命令に限ればCortex-M33よりやや遅い程度というところのようです。とはいえ、Cortex-M33よりも高速ではないですし、機能も豊富ではないので、あえてHazard3を選択しなければならないケースはあまりなさそうに思えます。
Raspberry Pi財団は、早い段階でRISC-V Foundation(現在のRISC-V International)に参加しており、このHazard3でRISC-Vのインフラを整備していこうという考えがあるのかもしれません。RISC-Vの開発を試してみたいという人には向いているでしょう。
強化されたペリフェラル
高速化されたCPUコアとともに、内蔵ペリフェラルの一部が強化されています。表 1に示した通り、PWMとProgrammable IO(PIO)は利用できる数が増えました。
PWMはスライスと呼ばれるカウンタとコンペアレジスタからなる機構で実現されています。1つのスライスあたり2本の出力チャンネルを持っており、RP2040では8スライス最大16チャンネルのPWMが扱えます。一方、RP2350ではスライス数が12基になり最大24チャンネルのPWMが扱えるようになっています。
PIOは、ユニットあたり4基のPIOを持ち、RP2040は2つのPIOユニットで合計8基という構成でした。RP2350ではユニットが1つ追加され、PIO数が12基になっています。PIOはRaspberry Pi 財団お気に入りの機能のようですから、使える数が増えることで従来以上に活用されそうです。
また、地味なところではアナログ/デジタルコンバーター(ADC)のFIFOバッファの深さが4から8へと倍増しています。ADCのチャンネル数は同じですが、FIFOが深い分だけ割り込み頻度が減りますから、高速ADCの取り込みが確実なものになるでしょう。
※ HLDソースなど成果物がGitHubに公開されています。
パワーマネージメント
RP2040は省電力なマイコンですが、高度な電源管理機能は備えていませんでした。RP2350は高度な電源管理機能によりRP2040よりも消費電力が抑えられています。
RP2350では詳細な電力状態(パワーステート)をコントロールし、全体の消費電力を抑える機能を備えています。CPUコアやSRAMバンク、外部フラッシュメモリなど区画ごとのパワーステートを制御でき、使っていないブロックの電源をオフにしたり、ローパワー状態に遷移させたりすることでマイコンの消費電力を抑えます。
パワーマネージメントAPIも整備されており、制御が少々面倒そうですが、ソフトウェア側で制御すればさらに消費電力を抑えることができるでしょう。特にバッテリーで動作する機器にPico 2を組み込むときに有効と考えられます。
Pico 1とPico 2はピン互換
以上のようにCPUの高性能化やペリフェラルの高機能化が図られているRP2350ですが、それを搭載するマイコンボード製品Pico 2は、既存のPico 1と互換性を維持しています。Raspberry Pi公式に掲載されているピンアサインを見ればわかるように、Pico 1と同一です。したがって、用途によってはプログラムコードを書き換える必要があるかもしれませんが、Pico 1からPico 2に差し替えることは可能です。
オンボードの機能としては、外部フラッシュメモリがPico 1の2MBから、Pico 2では4MBへと容量が倍増しました。さらに、表1に示しているように、RP2350は外部フラッシュメモリを接続するQSPIに対して16KBのオンチップキャッシュを備えます。この2-WayセットアソシアティブのSRAMキャッシュは、1サイクルでのアクセスが可能とされます。
Pico 1に比べてフラッシュメモリが高速かつ容量も増えていますから、たとえばプログラムに加えて日本語フォントを格納しておくといった用途で、これまで以上に活用できるでしょう。
なお、Wi-Fi/Bluetoothモジュールを備えたRaspberry Pi Pico W相当のRP2350搭載製品は現時点で未発売ですが、2024️年中に発売が計画されているようです。
Pico 2の開発環境
Pico 2はこれまでのPico 1と同じく、UF2を使ったフラッシュメモリの書き込みをサポートします。ボード上のBOOTSELボタンを押しながらUSBでホストPCに接続し、USBストレージに対してUF2ファイルをドラッグアンドドロップすることでフラッシュメモリのプログラムが可能です。
Pico 2の発表に前後して、純正のSDKとMicroPythonがリリースされました。Pico 1でも主流のこの2つの開発環境に関しては、ほぼPico 1と同じように利用できる状態になっています。
MicroPython
Pico 2向けのMicroPythonインタープリタが、MicroPython公式サイトにアップロードされています。本稿を執筆している時点でアップロードされている8月9日版はプレビューリリースですが、ひととおり動作することは確認しています(図1)。ただ、プレビュー版なのでバグなどが残されているかもしれません。
MicroPythonインタープリタの利用法は、Pico 1と同じなのでPico 1を使っていた人なら迷わず利用できるでしょう。
公式サイトを見るとわかる通り、Pico 2向けのMicroPythonインタープリタは、Cortex-M33で動作する標準版と、Hazard3 RISC-V Processorで動作するRISC-V版がアップロードされています。機能的な違いはほとんどなく、どちらのCPUコアで動作するかの違いだけと考えていいでしょう。
ただし、パフォーマンスは標準版とRISC-V版で若干異なります。図2は、フィボナッチ数を簡単な再帰で求めるコードを標準版で実行した例です。30番目のフィボナッチ数を求めるのに23.632秒かかっています。
同じコードを、RISC-V版のMicroPythonインタープリタで実行したのが図3で、24.968秒かかりました。
この実験では、おおむねRISC-Vのほうが5%ほど低速のようだという推定になります。Cortex-M33は、組込向けCPUコアとしては高性能なほうですから、Hazard3 RISC-V Processorも良好な性能を持っているようです。
Pico C SDKなど
純正のPico C SDKは、Pico 2の発売に合わせてRP2350に対応するSDK version 2.0.0がリリースされました。RP2040で利用できたライブラリのほぼすべてがRP2350で利用できるほか、RP2350で追加された機能やハードウェアに対応するライブラリがSDK version 2.0.0で提供されています。
また、Visual Studio Code(VSCode)のRaspberry Pi Pico拡張では、プロジェクトジェネレータでPico 2をターゲットとしたプロジェクトを作成し、ビルドやデバッグができるようになっています(図4)。
その他、Pico 1では利用者が多いArduino Frameworkは、まだRP2350版がリリースされていないようです。しかし、いずれArduino Frameworkも移植されると期待していいでしょう。
どのくらい高速になっているのか?
ここまで述べてきたように、Pico 2はPico 1に比べて高性能化しています。どのくらい速くなったのかを、ごく簡単に調べてみました。
演算性能は?
演算性能に関しては、先のフィボナッチ数を再帰で求める時間をPico 1と比較してみます。Pico 1の実行結果は図5の通りです。
画面の通り、Pico 1では38.364秒かかりました。Pico 2のCortex-M33で23.632秒ですから、参考値の2倍とまではいかないもの1.5倍程度は高速という結果です。フィボナッチ数は再帰で求めていますので、関数呼び出しのオーバーヘッドが処理時間のほとんどを占めています。したがって、1.5倍程度という結果は納得できるところでしょう。
GPIO割り込みの応答速度
GP15に50Hzの矩形(くけい)波を入力し、GPIO割り込みを使ってGP15がHighに遷移したときにGP16を変化させる次のMicroPythonコードを実行してみました。
# 割り込み応答の速度を調べるテストコード from machine import Pin p16 = Pin(16, Pin.OUT) p16.value(0) def gpio_irq_handler(pin): p16.toggle() p15 = Pin(15, Pin.IN) p15.irq(gpio_irq_handler, trigger=Pin.IRQ_RISING) while True: pass
gpio_irq_handler()でGP16を変化させ、GP15の入力に対してGP16の変化にどの程度時間がかかるのかを、オシロスコープを使って測定します。
図6はPico 1で測定した結果です。上の黄色の線がGP15の入力で、下の青い線がGP16です。GPIO割り込み応答に23.6μ秒かかっています。
同じコードをPico 2のCortex-M33版MicroPythonインタープリタで実行した結果が図7です。
画面の通り、Pico 2では17.2μ秒でした。GPIOはシステムクロックと同期して動いているので、システムクロック以下の速度では応答できません。Pico 2のシステムクロックは、Pico 1の1.2倍ということを考慮すると、GPIO割り込み応答におけるMicroPython内部処理の速度差による割り込み応答の速度差は、せいぜい2~3μ秒程度であろうと推測できます。
MicroPythonインタープリタを使う限り、割り込み応答に関してはPico 2にしたからといって驚くほど高速になるものではないということが、この結果からわかります。より高速な応答が必要なアプリケーションでは、Pico 2でもMicroPythonではなくネイティブコードを使うことになるでしょう。
Pico 2で遊ぼう
国内販売がスタートしたPico 2の国内価格は、Pico 1に対して200~300円ほど高い程度です。おおむね1000円強で入手できるので、Pico 1と同様に現時点でもっとも入手しやすいマイコンボードになっています。紹介してきたように、CPUが高速化されペリフェラルが豊富になっている一方で、低消費電力にもなっていますので、今後はPico 1よりもPico 2を活用する事例が増えるでしょう。
なお、Pico 1やRP2040の販売が打ち切られるわけではありません。RP2040は少なくとも2026年までの供給が約束されており、その先についても需要に応じて供給期間を延長する計画です。ですから、Pico 1やRP2040を利用しているユーザーも、すぐに供給がなくなると心配する必要はないでしょう。ただ、新規にスタートするプロジェクトならば、Pico 2/RP2530の利用を検討したほうがよさそうです。
すでに触れているように、Wi-Fi/Bluetoothを搭載するRaspberry Pi Pico 2 Wの発売が予定されているほか、より高度な組込向けOSの移植も計画されているようなので将来の展開も期待しましょう。