「TWELITE STAGE を試す」
https://qiita.com/nanbuwks/items/bb07970d5339177aa7a0
では Ubuntu18.04での設定をしましたが、Ubuntu20.04で追試です。
環境
- Ubuntu 20.04
- MWSTAGE2020_10(2020/10月9日) および MWSTAGE2020_12(2020/12月3日)
インストール
https://mono-wireless.com/jp/products/stage/index.html
から
MWSTAGE-2020-10_linux-2.zip ( 2020/12月3日版の場合、MWSTAGE-2020-12_linux.zip )
をダウンロードして展開すると 「 MWSTAGE 」というフォルダができた。
TWELITE STAGE APP の作業はパス
インストール作業は
「TWELITE Stage」
https://stage.twelite.info/
に基づき、「Linux - TWELITE STAGE」
https://stage.twelite.info/install/linux
の情報から以下のように導き出すことができる。
$ cd ./MWSTAGE/TWELITE_Stage/INSTALL/ubuntu/
$ sudo ./set_udev_sudo.sh
$ ./make_launch_icon.sh
このようにすると、 /etc/udev/rules.d/51-ftdi.rules に以下が追加される。
ACTION=="add", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", MODE="0666", RUN+="/bin/sh -c 'rmmod ftdi_sio && rmmod usbserial'"
ACTION=="add", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6015", MODE="0666", RUN+="/bin/sh -c 'rmmod ftdi_sio && rmmod usbserial'"
しかしながら前回と同様、この設定は他の usbserial モジュールを使用するアプリと干渉を起こすことになる。
http://www.linux-usb.org/usb.ids
を参照すると、以下のように 0403:6001 および 0403:6015 は FTDI 社の ID となっている。
0403 Future Technology Devices International, Ltd
0000 H4SMK 7 Port Hub / Bricked Counterfeit FT232 Serial (UART) IC
0232 Serial Converter
1060 JTAG adapter
1234 IronLogic RFID Adapter [Z-2 USB]
1235 Iron Logic Z-397 RS-485/422 converter
6001 FT232 Serial (UART) IC
6002 Lumel PD12
6007 Serial Converter
6008 Serial Converter
6009 Serial Converter
6010 FT2232C/D/H Dual UART/FIFO IC
6011 FT4232H Quad HS USB-UART/FIFO IC
6014 FT232H Single HS USB-UART/FIFO IC
6015 Bridge(I2C/SPI/UART/FIFO)
...
なので TWELITE STAGE APP を使わなくとも FTDI チップ搭載の該当 ID が被るアダプタをつなげるだけで ftdi_sio および usbserial が rmmod されてしまう。組み込みでは USB シリアルアダプタは息をするように使用する。TWELITE を使いながらシリアルモニターでデータを取得などは普通に行っているためにそういったことができなくなるのは問題だ。
上記のことから、この TWELITE STAGE APP は使用せず、別ツールを使うことで解決することにした。なので TWELITE STAGE APPの作業はパスとする。
MWSDK_ROOT の設定
によると
ビルドに TWELITE STAGEを用いず、makeコマンドを用いてビルドする場合はこちらを参照の上、MWSDK_ROOT環境変数を設定してください。
とあるので
$ echo MWSDK_ROOT=~/Downloads/MWSTAGE/MWSDK >> ~/.bash_profile
$ source ~/.bash_profile
とした。
~/Downloads/MWSTAGE/MWSDK
は自分の環境によって適宜変更する必要がある。
MWSDK
今回のものを解凍すると以下のようなディレクトリ構成になる。
(MWSTAGE2020-10_linux-2) 前回の MWSTAGE-2020-05_linux.zip と変更なし。
MWSTAGE
├── BIN
├── MWSDK
│ ├── Act_samples
│ ├── ChipLib
│ ├── LICENSE
│ ├── MkFiles
│ ├── TWENET
│ ├── Tools
│ └── Wks_TweApps
└── TWELITE_Stage
├── INSTALL
└── LICENSE
( MWSTAGE2020-12_linux ) Tools と Act_extras に変更が入る
MWSTAGE
├── BIN
├── MWSDK
│ ├── Act_extras
│ ├── Act_samples
│ ├── ChipLib
│ ├── LICENSE
│ ├── MkFiles
│ ├── TWENET
│ └── Wks_TweApps
├── TWELITE_Stage
│ ├── INSTALL
│ └── LICENSE
├── Tools
│ ├── ba-elf-ba2-r36379
│ └── tweprog_py
└── log
サンプルプログラムのビルド
WSTAGE/MWSDK/Wks_TweApps/App_Twelite
を vscode でビルドしてみる。
WSTAGE/MWSDK/MyProjects/App_Twelite
にコピーして、vscode から 「File」-「Open Folder...[Ctrl+K Ctrl+O]」 でWSTAGE/MWSDK/MyProjects/App_Twelite を指定する。
[Terminal] - [Run Task...] - [Build for TWELITE BLUE]
とすると、ビルドできた。
書き込み
書き込みは昔ながらの tweterm.py を使ってみる。
tweterm は
MWSTAGE/MWSDK/Tools/tweprog_py/tweterm.py (MWSTAGE2020-10_linux-2)
MWSTAGE/Tools/tweprog_py/tweterm.py (MWSTAGE2020-12_linux)
にあるので、適当にパスを通しておくかパス指定で実行することになる。
必要なパッケージを以下のように導入
$ sudo apt-get install libusb-dev
$ sudo apt-get install python3-pip
$ sudo pip3 install pyserial
また、pyftdi も必要ですが執筆時点で普通にインストールすると pyftdi は 0.52.0 が入り、それではうまくいきませんでした。
(ダメだった操作)
$ sudo pip3 install pyftdi
pyfydi は 0.30.3だとうまくいきました。(OKだった操作)
$ sudo pip3 install pyftdi==0.30.3
として、以下のようにして実行します。
$ sudo tweterm.py
Tools/tweprog_py/tweterm.py:86: SyntaxWarning: "is not" with a literal. Did you mean "!="?
if twefirm is not '':
Available interfaces:
ftdi://ftdi:230x:R24UDE73/1 (TWE-Lite-R)
Please specify the USB device
と出ました。
となりました。この、
SyntaxWarning: "is not" with a literal. Did you mean "!="?
if twefirm is not '':
は Python 3.8 で表示されるようになった警告です。今回はこのまま無視して進めます。
出てきたデバイス名を使って書き込みをしてみます。
$ sudo tweterm.py -p ftdi://ftdi:230x:R24UDE73/1 -b 115200 --no-term -F MyProjects/App_Twelite/App_Twelite/build/App_Twelite_BLUE_L1304_V1-9-1.bin
Tools/tweprog_py/tweterm.py:86: SyntaxWarning: "is not" with a literal. Did you mean "!="?
if twefirm is not '':
*** TWE Wrting firmware ... MyProjects/App_Twelite/App_Twelite/build/App_Twelite_BLUE_L1304_V1-9-1.bin
MODEL: TWEModel.TWELite
SER: 10eb745
FILEINFO: 04 03 0008
0%..10%..20%..30%..40%..50%..60%..70%..80%..90%..done - 10.49 kb/s
Bye.
おまけ うまくいかなかった記録
以下 0.52.0 を使ってうまくいかずトラブルシューティングした記録です。
TWELITE R2 + TWELITE DIP を PC につなげて
「TWELITE STAGE を試す」
https://qiita.com/nanbuwks/items/dc553119236e2a219297
のように、
$ sudo Tools/tweprog_py/tweterm.py
とします。(この指定は MWSTAGE/MWSDK から呼び出しています)
Tools/tweprog_py/tweterm.py:86: SyntaxWarning: "is not" with a literal. Did you mean "!="?
if twefirm is not '':
Available interfaces:
ftdi://ftdi:ft-x:R24UDE73/1 (TWE-Lite-R)
Please specify the USB device
となりました。この、
SyntaxWarning: "is not" with a literal. Did you mean "!="?
if twefirm is not '':
は Python 3.8 で表示されるようになった警告です。今回はこのまま無視して進めます。
出てきたデバイス名を使って書き込みをしてみます。
$ sudo Tools/tweprog_py/tweterm.py -p ftdi://ftdi:ft-x:R24UDE73/1 -b 115200 --no-term -F MyProjects/App_Twelite/App_Twelite/build/App_Twelite_BLUE_L1304_V1-9-1.bin
Tools/tweprog_py/tweterm.py:86: SyntaxWarning: "is not" with a literal. Did you mean "!="?
if twefirm is not '':
Error: 'int' object has no attribute 'name'
Bye.
あらら。調べてみたら pyftdi のバージョン不整合によるものでした。
pyftdi のバージョン
$ pip list
Package Version
---------- -------
...
pyftdi 0.52.0
...
とあります。
https://github.com/eblot/pyftdi
には、
Warning
Starting with version v0.40.0, several API changes are being introduced. While PyFtdi tries to maintain backward compatibility with previous versions, some of these changes may require existing clients to update calls to PyFtdi.Do not upgrade to v0.40.0 or above without testing your client against the new PyFtdi releases. PyFtdi versions up to v0.39.9 keep a stable API with v0.22+ series.
See the Major Changes section on the online documentation for details about potential API breaks.
とあります。
pipでインストール可能なバージョンをリストアップしてみました。
$ pip3 install pyftdi==
ERROR: Could not find a version that satisfies the requirement pyftdi== (from versions: 0.42.0.macosx-10.14-x86_64, 0.4.5, 0.5.1, 0.5.2, 0.6.3, 0.13.2, 0.13.4, 0.22.1, 0.25.0, 0.25.2, 0.26.3, 0.26.4, 0.27.0, 0.28.0, 0.28.2, 0.28.3, 0.28.8, 0.28.9, 0.28.10, 0.29.0, 0.29.1, 0.29.2, 0.29.3, 0.29.4, 0.29.6, 0.30.0, 0.30.1, 0.30.2, 0.30.3, 0.40.5, 0.40.6, 0.42.2, 0.43.0, 0.44.0, 0.44.1, 0.44.2, 0.47.2, 0.48.2, 0.48.3, 0.50.0, 0.50.1, 0.50.2, 0.51.0, 0.51.2, 0.52.0)
ERROR: No matching distribution found for pyftdi==
このうちの、0.30.3 をインストールすることにしました。
$ sudo pip3 uninstall pyftdi
$ sudo pip3 install pyftdi==0.30.3
として書こうとすると
$ sudo ./tweterm.py -p ftdi://ftdi:ft-x:R24UDE73/1 -b 115200 --no-term -F MyProjects/App_Twelite/App_Twelite/build/App_Twelite_BLUE_L1304_V1-9-1.bin
[sudo] nanbuwks のパスワード:
./tweterm.py:86: SyntaxWarning: "is not" with a literal. Did you mean "!="?
if twefirm is not '':
Error: Unable to open USB port ftdi://ftdi:ft-x:R24UDE73/1: Product ft-x is not referenced
となりました。なお、ここからデバッグしながらだったのでカレントディレクトリは
MWSTAGE/MWSDK/Tools/tweprog_py/tweterm.py
で操作しています。
$ sudo ./tweterm.py
とすると
./tweterm.py:86: SyntaxWarning: "is not" with a literal. Did you mean "!="?
if twefirm is not '':
Available interfaces:
ftdi://ftdi:230x:R24UDE73/1 (TWE-Lite-R)
Please specify the USB device
と出ました。
ライブラリによってデバイスネームの表記が変わるのですね。
ということで、デバイスネームを変えて
$ sudo ./tweterm.py -p ftdi://ftdi:230x:R24UDE73/1 -b 115200 --no-term -F ../../MyProjects/App_Twelite/App_Twelite/build/App_Twelite_BLUE_L1304_V1-9-1.bin
./tweterm.py:86: SyntaxWarning: "is not" with a literal. Did you mean "!="?
if twefirm is not '':
*** TWE Wrting firmware ... ../../MyProjects/App_Twelite/App_Twelite/build/App_Twelite_BLUE_L1304_V1-9-1.bin
MODEL: TWEModel.TWELite
SER: 10eb745
FILEINFO: 04 03 0008
0%..10%..20%..30%..40%..50%..60%..70%..80%..90%..done - 10.49 kb/s
Bye.
書けました。ふー。