MicroPythonのESP32 portの派生版であるloboris portについてメモしておきます。
(2018/10/22追記:現在は、派生版ではなくメインラインのMicroPythonもpsRAMをサポートしているようです。バイナリはこちらで公開されています。)
これはloboris (Boris Lovosevic)さんがメンテナンスしているもので、最大の特徴はESP32のpsRAM(pseudo SRAM: DRAMとコントローラをパッケージにしてSRAMとして使えるようにしたもの)をヒープ領域として使えるようにしていることです。
ESP32では、内蔵されているSRAMは80512KBほどですが、それとは別に4MBの外部SRAMを搭載することができます。
4MBのSRAMはとても(ESP32本体より)高価なので、それより1桁安価なpsRAMが実際には使用されているわけです。
また、インタフェースはアドレス/データバスではなく、QSPIのようです。
Support for external RAM — ESP-IDF Programming Guide
SPI経由なのでアクセス速度は劣りますが、4MBのメモリ空間が使えれば利用用途が大きく広がります。
この機能がMicroPythonのForumに紹介されて大変注目を浴び、書き込みが多すぎるためにスピンアウトして別のフォーラムを立ち上げるに至ったようです。
MicroPython on ESP32 with SPIRAM support – MicroPython Forum
New forum dedicated to Loboris MicroPython port – MicroPython Forum
このloboris portは以下のリポジトリで公開されています。
ただし、git cloneすると1.2GBほどになります。
これはESP32のSDKのtarファイル(Win、Linux、Mac版)を含んでいる(計200MB程度)こと、それに加えてgitの過去履歴を格納したpackファイルが1GBほどあるためです。
loboris/MicroPython_ESP32_psRAM_LoBo: MicroPython for ESP32 with psRAM support
この派生版について知ったのはこちらやりとりです。
bare metal Raspberry Piへ移植したMicroPythonで、rshellからコマンド実行のためにraw-replが呼び出されると、毎回メモリ初期化が走るので辛い・・・という話を書いたところ、loboris portではsoft rebootをかけない仕様になっている、と教えていただきました。
おそらくpsRAMが大容量かつアクセスが遅いので、メモリを初期化しない仕様にしたのかと思います。
とはいえ、これはMicroPythonの実装側で対処すべきなのか、rshell側でsoft-rebootをかけないオプションを用意すべきなのかというと、本来後者であるべきようにも思います。
コメント
分かりやすくまとめられており、いつも参考にさせていただいています。
一点気になったので、コメントしました。
下記なのですが、内蔵されているSRAMは512KBでアプリケーションが使用できる領域が80KBということではないでしょうか?
>ESP32では、内蔵されているSRAMは80KB
https://forum.micropython.org/viewtopic.php?t=3062
間違っていたらすみません。
よろしくお願いいたします。
KKさん
あっ、そうですね。80KBなのはESP8266のほうでした。
ESP32はデータ320KB+コード192KBです。
ありがとうございました。修正しておきます。