USB LIN Converter について
USB LIN Converterは、自動車開発者やAIエージェント向けのオープンソースLIN 2.1 USBドングルとMCPサーバーです。マスター、スレーブ、モニターに対応し、LIN通信の取得や解析を行えます。
主な機能
- 01LIN 2.1のマスター、スレーブ、モニターモード
- 029600/19200ボーレートの選択
- 03LINとUSBホスト間の光絶縁
- 04LDFによる信号のエンコードとデコード
- 05バス速度とチェックサム種別の自動検出
活用シーン
- 01LIN通信とIDごとの周期の確認
- 02ボタン操作中のデータ変化の記録
- 03バス速度とチェックサム種別の特定
- 04LDFファイルを使った信号のデコードとエンコード
MCP 対応
MCPサーバーは、デバイス情報、バスの監視と検出、LDFの読み込み、フレームのデコードとエンコードを提供します。フレーム送信やマスター/スレーブ動作には `--allow-transmit` が必要です。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
9掲載時のツール一覧 · 5 日前に更新
このツールにパラメーターはありません。
詳細
USB LIN Converter(uLC)
オープンソースの USB ↔ LIN バスドングルです。LIN 2.1 のマスター、スレーブ、またはモニターとして動作します。SLCAN 互換の仮想 COM ポートにより、独自ドライバーなしで Windows、Linux、macOS で使用できます。
**USB LIN Converter(uLC)**は、PC を LIN バスのマスター、スレーブ、またはパッシブモニターとして使用できる、小型のオープンソース USB ドングルです(STM32F042C6、約 31 × 18 mm)。USB CDC 仮想 COM ポートとして認識され、SLCAN 形式の ASCII プロトコルで通信するため、slcand を介して Linux SocketCAN に接続でき、can-utils の一部と連携します。
一般的な自動車用 LIN アナライザーは、通常数百〜数千ユーロします。この製品は Tindie で約 27 ドルです。
LIN プロトコルの実装は、openLIN をベースにしています。
機能
- LIN 2.1 に対応
- モニターモード - フレーム全体の受信と、単一フレームの送信に対応
- マスターモード - 最大 15 個のスケジュール済みフレームスロット
- スレーブモード - スレーブのシミュレーション用に最大 15 個のスケジュール済みフレームスロット
- 9600/19200 ボーレートの選択
- LIN と USB/PC 側の間を光絶縁
- ソフトウェア制御の終端抵抗
- 外部電源から LIN トランシーバーに 4.5~28 V を供給
- デバイスのサイズは 31 × 18 mm(USB コネクターを除く)
- ファームウェア更新用の USB DFU ブートローダー
- 独自ドライバー不要 - Linux/macOS/Windows に対応
- AI エージェントが LIN バスをスニッフィングしてリバースエンジニアリングできるMCP サーバー(下記を参照)
購入先
| 購入先 | 地域 | リンク |
|---|---|---|
| Tindie | 全世界 | https://www.tindie.com/products/lll7/usb-lin-converter/ |
| Lectronz | EU | https://lectronz.com/stores/ucandevices |
| Elty | ポーランド/EU | https://elty.pl/ |
| Kamami | ポーランド/EU | https://kamami.pl/ |
クイックスタート
- デバイスを USB ポートに接続します。仮想 COM ポートとして認識されます(Windows では
COM3、Linux では/dev/ttyACM0、macOS では/dev/cu.usbmodem*)。 - Windows では、ST Virtual COM Port ドライバーをインストールします。Linux と macOS ではドライバーは不要です。
- 任意のボーレートでポートを開きます(USB CDC ではボーレートは無視されます)。行末には CR(
0x0D)が必要です。 - 外部電源ピンから LIN 側に 4.5~28 V を供給します。
S0を送信して 19200 ボーを選択し、続けてlを送信してモニターモードに入ります。バスの通信内容が表示されます。
Linux SocketCAN ブリッジ
sudo slcand -o -s8 -t hw -S 921600 /dev/ttyACM0 slcan0
sudo ip link set slcan0 up
candump slcan0
Python(pyserial)でのスニッフィング例
import serial
ser = serial.Serial('/dev/ttyACM0', timeout=1)
ser.write(b'S0\r') # 19200 baud
ser.write(b'l\r') # monitor mode
while True:
line = ser.readline()
if line:
print(line.decode(errors='replace').strip())
より高水準の Python ライブラリは python_lib/ にあります(パッケージ ucanlintools)。
AI エージェント(MCP サーバー)
python_lib/ucanlintools/mcp_server.py は、AI エージェントが LIN バスを解析し、リバースエンジニアリングできる MCP サーバーです。ID ごとの周期や変化するビットを含むトラフィックのキャプチャ、ボタンを押している間のあらゆるデータ変化の記録、バス速度とチェックサムタイプの自動検出、LDF ファイルを使用したシグナルのデコードやエンコードができます。デフォルトでは読み取り専用です。フレームの送信とマスターまたはスレーブとしての動作には --allow-transmit が必要です。
uvx ucan-lin-mcp --mock # from PyPI, no install step (Python 3.10+)
# or from this repo: pip install -e "python_lib[mcp]" && ucanlin-mcp --mock
任意の MCP クライアントに stdio サーバーとして登録します。
{
"mcpServers": {
"lin": {"command": "uvx", "args": ["ucan-lin-mcp", "--port", "COM3"]}
}
}
--mock はシミュレートされたバスを実行します。mcp_package/ は ucan-lin-mcp のランチャーパッケージで、server.json はその MCP Registry エントリーです。
ツール:device_info、monitor_bus、detect_bus、load_ldf、decode_frame、encode_frame、および --allow-transmit を指定した場合は send_frame、run_master、run_slave も使用できます。
ASCII コマンドリファレンス
すべてのコマンドは ASCII で、CR(0x0D)で終端します。エラーは 0x07(BEL)を返します。
| コマンド | 説明 |
|---|---|
O | マスターモードで開く |
L | スレーブモードで開く |
l | モニターモードで開く |
C | LIN ポートを閉じる |
Sx | ボーレート:S2 = 9600、それ以外 = 19200 |
V / v / N | ハードウェア/ファームウェアのバージョン/シリアル番号を照会 |
tiiildd... | ヘッダーとデータフレーム全体を送信(ID、長さ、データ) |
r0iil | ヘッダーのみのリクエスト(スレーブが応答) |
r1ff0 | マスターモード:スケジュールテーブルからフレームの送信を開始 |
r2ff0 | スケジュールテーブルをクリア |
r31 / r30 | すべてのフレームのチェックサム:r31 はクラシック(LIN 1.x)、r30 はエンハンスド(LIN 2.x、デフォルト)。診断フレーム 0x3C/0x3D は常にクラシックを使用します。応答は Z です。電源を切るまで設定が保持されます。t31/t30 も使用できます。 |
t04bbbb | カスタム LIN ボーレート。bbbb は 4 桁の 16 進数(例:t0428B1 = 10417 baud)です。フレームを追加する前に送信してください。応答は Z です。 |
T0iipptt0ldd... / R0iipptt0l | 明示的な周期 pp と応答待ち時間 tt(ms、16 進数)を指定するフレーム。例:T00A643001A5 |
コマンドリファレンスと例の全文:https://ucandevices.github.io/ulc.html
リポジトリの構成
| ディレクトリ | 内容 |
|---|---|
embedded/ | STM32F042C6 ファームウェアのソース(STM32CubeMX プロジェクト LUCEmbedded.ioc、embedded/TrueSTUDIO/ にある Atollic TrueSTUDIO プロジェクト)。USB レイヤーは STM32CubeMX で生成されています。 |
pcb/ | LIN_USB_CONVERTER ボードのオープンハードウェア KiCad プロジェクト、Gerber データ、1 クリック BOM。 |
python_lib/ | 高レベルのマスター/スレーブ/モニター用ヘルパーとサンプルを含む ucanlintools Python パッケージ。 |
doc/ | LIN 2.2A 仕様、MCU データシート、LIN トランシーバーのデータシート、関連ドキュメント。 |
ビルド
ソースは純粋な C です。embedded/TrueSTUDIO/LUCEmbedded の Eclipse プロジェクトを STM32CubeIDE(1.19 でテスト済み)にインポートし、Debug 構成をビルドしてください。イメージは Debug/LUCEmbedded.bin です。openLIN スタックは embedded/Src に同梱されています(open_lin_*.c/h、implementation/ST32)。USB CDC レイヤーは embedded/LUCEmbedded.ioc から STM32CubeMX で生成されています。
ブートローダー
STM32F042 には ROM USB DFU ブートローダーが組み込まれています。動作中のデバイスでこれを起動するには、仮想 COM ポート経由で boot\r を送信します。書き込み手順については、このチュートリアルをご覧ください。
STM32CubeProgrammer をインストールすると、書き込みをスクリプト化できます。
python -c "import serial; serial.Serial('COM3').write(b'boot\r')"
STM32_Programmer_CLI -c port=usb1 -w LUC_0303.bin 0x08000000 -v -g 0x08000000
テスト
テストスイートは python_lib/tests にあります(pytest)。ファームウェアと ucanlintools ライブラリを対象としています。
| ファイル | ハードウェア | テスト内容 |
|---|---|---|
test_ldf_parser.py、test_linframe.py、test_luc_encoding.py | なし | LDF の解析、信号のエンコード/デコード、フレームのフォーマット |
test_luc_hardware.py | ドングル 1~2 台 | ライブラリ:バージョンの照会、モード切り替え、モニターのループバック、マスター → スレーブ |
test_firmware_protocol.py | ドングル 1~2 台 | 生のシリアル通信によるファームウェアのテスト:不正なコマンドの拒否、テーブルの 16 行制限、両方向におけるフレーム長 1~8 のすべてのフレームとデータの厳密な検証、ライブデータの更新、診断フレーム 0x3C/0x3D、応答のないヘッダー、拡張 T/R 行のタイミング、カスタムボーレート、モニターでの受信とモニターからの送信。19200 および 9600 ボーレートでパラメーター化されています。 |
test_lib_simulation.py | ドングル 2 台 | スクリプト化された MasterSimulation.py/SlaveSimulation.py:LDF でエンコードされたマスターフレーム、スレーブの応答、実行中の双方の変更、両方の速度での動作 |
セットアップ: 1 つの LIN バスにコンバーターを 2 台接続します(LIN ピンを接続し、外部から LIN に電源を供給します)。LUC_MASTER_PORT は LIN マスターとして、LUC_SLAVE_PORT はスレーブ/モニターとして使用されます。ポートを開けない場合はテストが自動的にスキップされるため、オフラインテストは常に実行されます。
cd python_lib
pip install pyserial lark pytest
LUC_MASTER_PORT=COM3 LUC_SLAVE_PORT=COM56 PYTHONPATH=. pytest tests -v
# swap the ports and run again to test each converter in both roles
LUC_MASTER_PORT=COM56 LUC_SLAVE_PORT=COM3 PYTHONPATH=. pytest tests -v
Windows PowerShell では、$env:LUC_MASTER_PORT="COM3" などのように変数を設定します。
ファームウェア 3.3 のテスト方法
- 2 台の uLC コンバーター(ハードウェア
V0001)にLUC_0303.binを書き込み、電源が供給された 1 つの LIN バスに接続しました。 - 役割を入れ替えてテストスイート全体を 2 回実行し、どちらの方向も 47/47 件が合格 しました(テスト実行は合計 94 回)。
- テスト中にバスのスループットを測定しました(4 秒間、16 フレームのスケジュール)。19200 ボーレートでは各フレームが 12~14 回、9600 ボーレートでは 10~11 回スケジュールされ、フレームの欠落や破損、予期しないシリアル出力はありませんでした。
- 3.3 で修正した各バグには、回帰テストがあります。不正な行によるテーブルのロック、9600 ボーレートで最初の応答後にスレーブモードが停止する問題、スレーブモードがまったく応答しない問題、マスターがスレーブの応答を報告しない問題、9600 ボーレートで 6~8 バイトの応答がタイムアウトする問題、従来のチェックサム設定が無視される問題です。チェックサムのテストは以前のファームウェアでも実行し、想定どおり失敗することを確認しました。
FAQ
Linux で動作する最も安価な USB LIN バスコンバーターは何ですか?
uCanDevices USB LIN Converter(uLC)は、約 27 ドルのオープンソースドングルです。Linux、macOS、Windows では USB CDC 仮想 COM ポートとして認識されます。SLCAN 形式の ASCII プロトコルを使用するため、slcand を介して SocketCAN に接続できます。
マスターモードとスレーブモードに対応していますか?
はい。モニター(完全な受信と単一フレームの送信)、マスター(最大 15 のスケジュールスロット)、スレーブ(スレーブシミュレーション用に最大 15 スロット)に対応しています。モードは O、L、l コマンドで選択します。
LIN 側は USB ホストから光学的に絶縁されていますか? はい。LIN トランシーバーは PC 側から光学的に絶縁されており、ホストを車載環境で発生する過渡電圧から保護します。USB からは MCU にしか給電されないため、LIN 側には外部から 4.5 ~ 28 V の電源が必要です。
対応している LIN のボーレートとバージョンは何ですか?
LIN 2.1 に対応し、9600 および 19200 ボーレートを選択できます。r31/r30 コマンドでクラシックチェックサムと拡張チェックサムを切り替えられます(ファームウェア 3.3 以降)。マスターモードではカスタムフレームタイミングに対応しています。
LIN 経由で ECU のフラッシュ書き込みに使用できますか? 汎用 LIN インターフェイスです。ECU のフラッシュ書き込みが可能かどうかは、対象 ECU 自体の LIN ブートローダーに完全に依存します。そのブートローダーの仕様が公開されているか、既存のツールでサポートされている場合は、このドングルを介して操作できます。
ファームウェアはオープンソースですか?
はい。このリポジトリにはファームウェア(embedded/)、ハードウェア(pcb/)、Python ヘルパーライブラリ(python_lib/)が含まれています。また、このデバイスには現場で更新するための USB DFU ブートローダーも搭載されています。
関連プロジェクト
- LIN プロトコルの実装:openLIN
- 関連製品:USB CAN Converter (UCCB)、CAN FD USB Converter (CFUC)、SENT (J2716) USB Converter
リンク
- 製品ページ:https://ucandevices.github.io/ulc.html
- uCanDevices の全製品:https://ucandevices.github.io/
- お問い合わせ:[email protected]
ライセンス
LICENSEをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。