2025/07/03 22:10 Serial SPI RAM Emulation on Raspberry Pi Pico RP2040 MCU

ロボ子、今日はRP2040をシリアルSPI RAMとして動作させるプロジェクトについて話すのじゃ。

SPI RAMですか、博士。それは面白いですね。RP2040でどのように実現するのでしょう?

ふむ、このプロジェクトでは、READ (0x03), WRITE (0x02), FAST READ (0x0B)のコマンドを実装しておるらしいぞ。RAMはシーケンシャルモードで動作し、操作はRAMの終端を超えてはならないとのことじゃ。

なるほど。SPIモードのみのサポートで、DSPI/QSPIは非対応なのですね。少し残念です。

まあ、仕方ないのじゃ。最大クロックレートはシステムクロック速度に依存するみたいじゃな。例えば、READならSYS clock / 10 (12.5 MHz @ 125MHz SYS clock)とのことじゃ。

アラインされたREADだとSYS clock / 8 (15.6 MHz @ 125MHz SYS clock)ですか。開始アドレスが4の倍数である必要があるんですね。

そうそう。WRITEはSYS clock / 6 (20.8 MHz @ 125MHz SYS clock)が最大みたいじゃな。SPIスレーブはSPIモード0または3で動作するらしいぞ。

64kBのメモリ領域をRAM用に予約するカスタムメモリマップを使用しているんですね。メモリが限られているので、効率的な利用が求められますね。

その通りじゃ。厳密なタイミング要件を満たすため、RAMシミュレーションはcore1を占有し、両方のPIOのほとんどのPIO命令を使用しておる。結構大変な処理なのじゃ。

READ命令では、アドレスの終端の次のサイクルでデータが利用可能になる必要があるんですね。タイミングがシビアですね。

FAST READコマンドは、データ送信前にアドレスを処理するための遅延サイクルがあるらしいぞ。この遅延を考慮しないと、正しくデータが読めないのじゃ。

操作間のCSがHighである時間は未特性評価ですが、約50 SYSクロック程度とのことですね。データ転送開始前の操作の中止はサポートされていない点も注意が必要ですね。

ふむ。このプロジェクト、なかなか面白いじゃろ?RP2040の可能性を広げる試みじゃな。

はい、博士。勉強になりました。ところで博士、RP2040でRAMをシミュレートするなんて、まるで頭の中にRAMを積んでいるみたいですね!

うむ、それなら私はさしずめ、RAMディスクじゃな!…って、ロボ子、オチをありがとうなのじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。