はじめに
ModdableSDKでM5StickCの開発を行うためにmcconfigしたら、最後の書込みのところで以下のようなエラーになりました。
...
Stub running...
Changing baud rate to 921600
Changed.
Configuring flash size...
A fatal error occurred: Timed out waiting for packet header esptool.py failed with exit code 2
NMAKE : fatal error U1077: 'python' : リターン コード '0x2'
Stop.
いつものようにググってると、シリアル転送の速度が問題になっているみたいなので、転送速度を変更することにします。
変更方法
エラーの出ているコマンドプロンプトで、環境変数UPLOAD_SPEEDとDEBUGGER_SPEEDに、1500000を設定します。
(なぜ1500000かは後述)
set UPLOAD_SPEED=1500000
set DEBUGGER_SPEED=1500000
環境変数を設定した後で、mcconfigコマンドを実行してリビルドします。
自動生成されるファイル内の定数に影響するので、-t
オプションを指定しないか、-t build
オプションを指定してmcconfigコマンドを実行します。
説明
プラットフォームがesp32の場合、mcconfigコマンドにより自動生成されたmakefileが、ESP-IDFのidf.pyを呼び出して書込みを行っています。
この際に、環境変数UPLOAD_SPEEDが設定されていると、その値が転送速度として利用されます。環境変数UPLOAD_SPEEDが未設定の場合はデフォルトの値が利用されます。
書込みコマンドのオプションとして指定しているので、ツールチェーンが提供する他の指定方法より優先されます。
一方、環境変数DEBUGGER_SPEEDは、esp/esp32系のツールチェーンの書込みとは無関係で、マイコンとxsbugがシリアル接続する時の転送速度です。
(プラットフォームがesp8266の場合、mcconfigコマンドにより自動生成されたmakefileが、Xtensa architecture toolchainのesptool.pyを呼び出して書込みを行ってます)
注意
環境変数DEBUGGER_SPEEDの値をマイコンとxsbugの接続時に参照しますが、生成される実行ファイル内で利用する定数にもなるので、環境変数DEBUGGER_SPEEDは、プロジェクトのビルド時にも必要です。
おまけ
なぜ、転送速度を1500000にしたのか?
Arduino IDEで転送を行う際のUpload speedが、1500000だったため。
始めは、921600が速すぎるのかと思って低速で書込みをして、ふとArduino IDEのボード設定を確認したら、もっと速かったというオチ。
始めは書込みは成功したけど、xsbugが接続できなくて失敗したかと思っていたが、ModdableSDKのissuesを探してたら環境変数DEBUGGER_SPEEDについてコメントがあり、万事上手く行ったのです。
https://github.com/Moddable-OpenSource/moddable/issues/177
シリアル接続を受け持つチップや制限がデバイス毎に異なり、espやesp32などプラットフォームが同じでも転送速度の調整は必要で、場合によってはデフォルトよりも速い書込みが行えるという結果です。
Arduino IDE環境より、ModdableSDKでビルド&書込みする方が速い。言語が異なるけどっ