鳥なき里のマイコン屋(120) RP2040搭載、Raspberry Pi Pico到着予定

Joseph Halfmoon

少し前に Raspberry Pi Pico 入荷お知らせメールを貰った翌朝、通販サイトへ行ったらば売切れていた、と書きました。今でも品薄は続いているようです。しかし、別ルートで「正常価格」で入手できそうだったので注文してしまいました。多分、本日到着の筈。待望の現物入手ということで、ついフライングで搭載マイコン RP2040 について書いてしまいました。

今回大手通販サイトなどで「プレミアム」が乗っている価格で販売されているPicoが散見されたのですが、買うのが躊躇われました。値段づけ以上に、Picoの一番良いところじゃないかと思う、

コストパフォーマンスが良い

という点が損なわれてしまうと思ったからです。Picoの「正常価格」と似たお手頃価格のマイコンボードが無い分けではないですが、スペック比べてみるとPicoはかなり良い線いっているように思われます。

さて現物を手に入れる前に、Raspberry Pi Pico関係の資料をダウンロードし読み始めました。さすがラズパイと言うべきか、各種資料が御揃いの体裁で充実しています。まず関心があるのは、搭載されている「マイコン」RP2040です。以下のデータシートを読みながら考えたことを書き留めます。

RP2040 Datasheet   A microcontroller by Raspberry Pi

RP2040は、Raspberry Pi 1/2/3/4そしてZeroに搭載されているようなSoCマイクロプロセッサとは一線を画し、明らかに「マイコン」側のチップだと思います。それは日本式に言うマイコン(米国式に言えばmicrocontroller)的な考え方

予想可能な処理時間で制御を行う

という点にコダワリをもって設計されているように見える点から明らかです。

単位時間あたりの処理性能であるスループットという観点では、SoCマイクロプロセッサの方が遥かに高いです。Raspberry Pi 3/4あたりと比較するならばそれは明らかです。それらは、Picoよりも以下のようなハード構成のためです。

  • 動作クロックが格段に速い
  • キャッシュなどのメモリアクセス高速化機構搭載
  • コア数も多い
  • コア性能も高い

133MHz動作のRP2040に比べると、Raspberry Pi 4のBCM2711は1.5GHzと10倍以上のクロック周波数です。そして3階層の複雑で巨大なキャッシュメモリなどを搭載し、コア数は4個もあります。対するRP2040はQSPIフラッシュ対応のためのささやかな「キャッシュ」メモリとコア2個です。コアそのものも段違いです。 BCM2711のCortex-A72は、Armの中で高性能なCortex-Aシリーズでも高性能な部類に入ると思います。Picoに使われているCortex-M0+はArmの中でもローエンドなCortex-Mシリーズの最下位機種です。

しかし、Raspberry Pi 1/2/3/4 などには、ついて回る欠点があります。これこそが実世界の制御に応用するときに問題となる大きな欠点です。

処理時間がどれだけかかるのか予想できない

ということです。キャッシュ無しには、高速なクロック動作は実現できません。キャッシュはヒットすれば高速に実行できますが、稀にミスすると大きなペナルティ時間がかかります。そしてそのヒット、ミスは実行の履歴に依存し、いつミスするのかを正確に予想することはできません。例えば同じ処理を繰り返しても99回は高速に処理が終わるのに、1回はその何十倍も時間がかかる、といった現象が発生します。また、マルチコアによる、マルチスレッド、マルチプロセスな並列実行により、同時に複数の処理を行うことができますが、反面、リソース使用で競合が起こったり、制御の同期を取ったりする必要がある場合には、事前に予想できない待ち合わせの時間が発生したりもします。Linuxのような単位時間あたりの処理性能が高ければ良く、あまり実時間性にシビアでないソフトウエアであればこれらはあまり問題にならないですが、マイクロ秒単位でハードウエアのタイミングを取るような用途では大問題となります。

どうも、このPicoを設計した人達は、上記のような「既存のラズパイ」の問題点を打破した「ラズパイ」にしたかったのだと想像します。そこで「普通に」設計すれば、既存のマイコン(microcontroller)と同じようなものが出来上がったでしょう。しかしRP2040の設計チームは、他社同様の「マイコン」にしておく気はなかったように思われます。

まずはメモリを見てみます。RP2040はROM、RAMを搭載しているとう点で正統的なマイコンチップであるのです。しかし、ROMに書きこまれているのはブートローダや、フラッシュへの書き込み制御、そしてソフトウエア浮動小数の処理(Cortex-M0+はハードウエアの浮動小数点演算器を持たない)などでユーザのアプリケーションはありません。ユーザアプリケーションは外部(別チップ)のフラッシュメモリに書きこまれて実行されます。この外部フラッシュはSPIインタフェースを束ねたものであるQSPIで接続されています。SPIインタフェースはシングルエンドのシリアルインタフェースの中では結構高速な部類ではありますが、伝統的なマイコンが内部にもつランダムアクセス可能なフラッシュのように高速かつ必要な場所だけ読むというような操作には向きません。そこで、一種のキャッシュのような機構を外付けフラッシュとCPUコアの間に置いて、さも直接QSPIフラッシュ上のプログラムを実行しているように見せるハードウエアが搭載されています。記憶容量的には16KBに過ぎません。しかしこれでシリアルであることをほぼ隠蔽できているようです。これによりRP2040はオンチップでフラッシュメモリを搭載しなくても良くなり、コスパが大幅に向上できたといえます。外付けのシリアルフラッシュチップのビット単価は、マイコン内蔵のフラッシュよりもずっと安いからです。なお、この方式はRP2040だけでなく、近年のマイコンで増えている方式です。

また、RAMにも工夫が見られます。RAMは合計264KBとちょっと半端な容量なのですが、6バンクに分割されています。メインの256KB分は、64KBバンクが4つで、他に4KBの小さなバンク2つがあるという構成です。CPUとの間はクロスバスイッチで接続されています。これにより色々なアクセス方法がとれるのですが、例えばメインの256KBは2個のCPUコアで共有し、小さな4KBのバンクそれぞれはコア毎に占有させるといった使い方ができるようになっています。小さなバンクにコア毎に頻繁にアクセスされるデータを置けば、他のコアを邪魔することなく処理が進められます。一方、大きなメモリにはあまり頻繁にアクセスしないが、共有すべき大量のデータなどを置けば良さそうです。

ペリフェラル、IO関係にも独自性がみられます。その一部は2個のCPUコアとも深く関わっています。まず、一般的なところでは、どのマイコンにも搭載されているUART、I2C、SPIといったインタフェースは各2チャンネル搭載されています。これは特別多いというわけではありません。ただ、このチップに特徴的なのは、ほとんどの端子にそれらインタフェースのどちらかのチャネルの信号を出せるようになっていることです。ピン配置は非常にフレキシブルだと言えます。通常のマイコンではせいぜい2択程度の選択肢であることが多いです。

これに対して、タイマ関係は非常に少ないです。汎用タイマと呼べるものは1本4チャネルに過ぎず、別にウオッチドッグタイマと実時間タイマ(RTC)の各1本があるだけです。通常のマイコンでは少ないものでも汎用タイマの3本くらい、多いものだと10本くらいあるものもあります。RP2040はタイマの用途をあくまでμ秒単位の時刻をキープするための仕組みとして限定しているようです。その代わり通常のマイコンだとタイマのお供的なチャネルで実現されるPWMについては独立のハードウエアとして16チャネルあります。さらにそれだけでなくPIOと呼ぶ「プログラマブルな」IOブロックを持っています。私はこれを見たとき、遥かな昔、メイン・フレームの時代のチャネル・プロセッサを思い出しました。マイクロプロセッサ用にそれが実現されたのは8086の時代に1度だけあったことを記憶しています。インテルの型番で言えば8089です。IO制御専用の命令を実行するIO専用のCPUといったらいいでしょうか。このRP2040はそんなIOステートマシンを4個も持っています。つまりソフトウエアのフローを実行するメインのArmコア以外に、IOの操作だけを専門に担当するCPUが別に4個あるようなものです。通常のマイコンがタイマに担わせている高速なIO操作をこれらに任せることができるので、タイマの数は少なくて良い、という判断なのでしょう。

また、メインのCPUのソフトウエアで直接クリティカルなタイミングのIO操作を行うためのSIO(Single-cycle IO)という仕組みも持っています。このSIOブロックには、2つのコア間の通信や調停を行うためのハードウエア機構も組み込まれています。なかなか穿りがいありそうなブロックです。

そうこう書いている間に宅急便屋さん到着。ラズパイPico到着であります。ピンヘッダ半田付けしないとね。

鳥なき里のマイコン屋(119) M5Stack、FreeRTOS機能使って周波数カウンタ へ戻る

鳥なき里のマイコン屋(121) nRF52833搭載、BBC micro:bit V2到着 へ進む