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