LoBo MicroPython for ESP32について

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

LoBo Forums

この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をかけないオプションを用意すべきなのかというと、本来後者であるべきようにも思います。

コメント

  1. KK より:

    分かりやすくまとめられており、いつも参考にさせていただいています。
    一点気になったので、コメントしました。
    下記なのですが、内蔵されているSRAMは512KBでアプリケーションが使用できる領域が80KBということではないでしょうか?
    >ESP32では、内蔵されているSRAMは80KB

    https://forum.micropython.org/viewtopic.php?t=3062

    間違っていたらすみません。
    よろしくお願いいたします。

  2. boochow より:

    KKさん

    あっ、そうですね。80KBなのはESP8266のほうでした。
    ESP32はデータ320KB+コード192KBです。
    ありがとうございました。修正しておきます。