Spresense uploader Setting on Platform.io

最終更新日

久しぶりにSpresenseのプログラムをやってみようとしたら、コンパイルはできるものの、uploadでエラーが発生した。

if isinstance(callback, collections.Callable):
AttributeError: module 'collections' has no attribute 'Callable'

錆びた。。。

原因を調べると、Platform.io のpython ($HOME/.platformio/penv/bin/python) のversion が、3.11.7にversion up されたせいらしい。
python 3.9まで落とさないと、Removed されたcollections.Callable は、戻らない。

実際にエラーが発生しているのは、以下のソース。

  • $HOME/.platformio/packages/tool-spresense/flash_writer/scripts/xmodem.py

ソースを修正するのも面倒。
flash_writerは、python script じゃなくて、バイナリもあるはず、と確認すると、ちゃんとある。

  • $HOME/.platformio/packages/tool-spresense/flash_writer/macosx/flash_writer

Winなら、以下の場所。

  • $HOME/.platformio/packages/tool-spresense/flash_writer/windows/flash_writer.exe

ということで、platformio.ini で flash_writer の native binary code を利用するように、upload comamnd を指定して対応する。

[env:spresense]
platform = sonyspresense
board = spresense
framework = arduino
monitor_speed = 115200
upload_speed = 115200
upload_port = /dev/cu.SLAB_USBtoUART
upload_command =
    ${platformio.packages_dir}/tool-spresense/flash_writer/macosx/flash_writer -s -c $UPLOAD_PORT -b $UPLOAD_SPEED -d -n -s $SOURCE

また、macosx配下の flash_writer は実行権がついてないので、chmod しておく。

chmod + x $HOME/.platformio/packages/tool-spresense/flash_writer/macosx/flash_writer

シェアする