Pythonによるファームウェアの書き込み
TWELITE のファームウェア書き込みを行うPythonモジュール(ベータ版)
tweliter
モジュールは、現在ベータ版です。概要
tweliter
モジュールは、TWELITE のファームウェアを書き込むためのPythonモジュールです。
PyPIからインストールでき、コマンドラインツールとして使用できるほか、Pythonスクリプトから制御することもできます。
インストール方法
PyPIからインストールしてください。
pip install tweliter
Poetryなら
poetry add tweliter
Linux における追記事項
udev
ルールの設定
udev
によって権限を与える必要があるかもしれません。
/etc/udev/rules.d/99-ftdi.rules
を作成します
# TWELITE R / MONOSTICK (FT232R / 0403:6001)
SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", MODE="0666"
# TWELITE R2 / R3 (FT230X / 0403:6015)
SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6015", MODE="0666"
- udev ルールを更新します
sudo udevadm control --reload-rules
sudo udevadm trigger
また、TWELITE STAGE アプリでは ftdi_sio
モジュールのアンロードが必要ですが、Pythonで使用する際はこれをロードする必要があります。
modprobe usbserial
modprobe ftdi_sio
Windows における追記事項
libusb
ドライバの適用
No backend available
といったエラーを発する場合は、libusb-win32
ドライバを適用することで解消できるかもしれません。Zadigを導入し、TWELITE R や MONOSTICK を選択したうえで libusb-win32
(WinUSB
でない)を適用してください。
参考:Installation — PyFtdi documentation(
pyftdi
モジュールを使用しています)
使用例
コマンドラインツールとして
tweliter
に続いて、バイナリファイル(.bin
)を指定します。
tweliter dir/SomeApp_BLUE.bin
BLUE シリーズと RED シリーズを間違えないようにしてください。
コマンドラインオプション
tweliter -h
usage: tweliter [-h] [-u URL] [-g] [-v] [-s] [-m STARTMSG] [-r RETRY] file
Write TWELITE series firmware
positional arguments:
file Firmware file to write
options:
-h, --help show this help message and exit
-u URL, --url URL Optional device URL starting with ftdi://
-g, --gold Select GOLD series
-v, --verify Verify firmware after writing
-s, --safe Safe mode (GOLD series only, write slowly)
-m STARTMSG, --startmsg STARTMSG
Prefix for startup message to check
-r RETRY, --retry RETRY
Retry count in case of firmware writing failure
u
url
:FTDIデバイスを指定するためのURLを指定できます- 未指定では、接続されたFTDIデバイスが一点なら自動選択、複数なら選択を促します
g
gold
:GOLDシリーズを指定しますv
verify
:書き込み後に検証を行いますs
safe
:(GOLDシリーズのみ)転送速度を下げるセーフモードを適用しますm
startmsg
:完了後、指定したテキスト以降の起動メッセージを捕捉して表示します- デフォルトは
!INF
としています
- デフォルトは
r
retry
:書き込みに失敗したときに指定した数のリトライを行います- 未指定では、2回までリトライします
スクリプトから
Twelite
クラスのインスタンスを利用してください。
from pathlib import Path
from tweliter import Tweliter
file = Path('dir/SomeApp_BLUE.bin')
try:
with Tweliter(url="ftdi://:ft-x:/1") as liter:
# Get serial interface
ser = liter.get_serial_instance()
# Write firmware
liter.write(ser, file, verify=True)
# Show startup message
print(liter.get_startup_message_after(ser, "!INF"))
except IOError as e:
print(f"Cannot connect {e}")
except RuntimeError as e:
print(f"Failed to write {e}")