Spresense uploader Setting on Platform.io
![](https://objectstorage.ap-tokyo-1.oraclecloud.com/n/nramgbr2svc9/b/poppo-ya/o/wp-content/uploads/2024/01/hato8847_wireframe_hologram_inner_space_-quality_0.5_-styli_02f98d98-402f-43a7-8ead-e73c4d97e32e_1.png)
久しぶりに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