关于 USB LIN Converter
USB LIN Converter 是面向汽车开发者和 AI Agent 的开源 LIN 2.1 USB 适配器及 MCP 服务,支持主站、从站和监听模式,并提供 LIN 流量捕获与解码工具。
主要功能
- 01支持 LIN 2.1 主站、从站和监听模式
- 02可选 9600 和 19200 波特率
- 03LIN 与 USB 主机光隔离
- 04通过 LDF 编码和解码信号
- 05自动检测总线速率和校验类型
适用场景
- 01检查 LIN 流量及各 ID 的周期
- 02操作按钮时记录数据变化
- 03识别总线速率和校验类型
- 04使用 LDF 文件解码或编码信号
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) 是一款小巧的开源 USB 适配器(STM32F042C6,约 31 × 18 mm),可让 PC 充当 LIN 总线主节点、从节点或被动监控器。它会枚举为 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 侧之间光隔离
- 软件控制的终端电阻
- 外部 4.5 - 28 V 电源为 LIN 收发器供电
- 设备尺寸 31 × 18 mm(不含 USB 接口)
- 用于固件更新的 USB DFU 引导加载程序
- 无需专有驱动——支持 Linux / macOS / Windows
- 提供 MCP 服务,让 AI Agent 能够嗅探和逆向分析 LIN 总线(见下文)
购买渠道
| 渠道 | 地区 | 链接 |
|---|---|---|
| Tindie | 全球 | https://www.tindie.com/products/lll7/usb-lin-converter/ |
| Lectronz | 欧盟 | https://lectronz.com/stores/ucandevices |
| Elty | 波兰 / 欧盟 | https://elty.pl/ |
| Kamami | 波兰 / 欧盟 | https://kamami.pl/ |
快速开始
- 将设备插入 USB 端口。它会枚举为虚拟 COM 端口(Windows 上为
COM3,Linux 上为/dev/ttyACM0,macOS 上为/dev/cu.usbmodem*)。 - 在 Windows 上,安装 ST Virtual COM Port driver。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_lib/ 中提供了更高级的 Python 库(包名为 ucanlintools)。
AI Agent(MCP 服务)
python_lib/ucanlintools/mcp_server.py 是一个 MCP 服务,可让 AI Agent 监听并逆向分析 LIN 总线:捕获流量及各 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 命令参考
所有命令均以 CR(0x0D)作为 ASCII 终止符。错误返回 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 位十六进制数(例如,t0428B1 = 10417 波特)。添加帧前发送。回复 Z。 |
T0iipptt0ldd... / R0iipptt0l | 指定周期 pp 和响应等待时间 tt(毫秒,十六进制)的帧,例如 T00A643001A5 |
完整命令参考和示例:https://ucandevices.github.io/ulc.html
仓库结构
| 目录 | 内容 |
|---|---|
embedded/ | STM32F042C6 固件源代码(STM32CubeMX 项目 LUCEmbedded.ioc,以及位于 embedded/TrueSTUDIO/ 下的 Atollic TrueSTUDIO 项目)。USB 层使用 STM32CubeMX 生成。 |
pcb/ | LIN_USB_CONVERTER 板的开放硬件 KiCad 项目、Gerber 文件和一键式 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 层由 STM32CubeMX 根据 embedded/LUCEmbedded.ioc 生成。
Bootloader
STM32F042 内置 ROM USB DFU bootloader。设备运行时,可通过虚拟 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 编码的主设备帧、从设备响应、双方在运行时均会变化,且在两种速率下都进行测试 |
**设置:**在同一 LIN 总线上连接两个转换器(连接 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 的测试方式
- 两个 uLC 转换器(硬件版本
V0001)均刷入LUC_0303.bin,并连接到同一条已供电的 LIN 总线上。 - 交换角色后完整运行测试套件两次:两个方向均 47/47 项通过(共运行 94 项测试)。
- 测试期间测量总线吞吐量(4 秒窗口,16 帧调度):19200 波特率下每帧调度 12-14 次,9600 波特率下 10-11 次;没有丢失或损坏的帧,也没有意外的串口输出。
- 3.3 版本修复的每个缺陷都有回归测试:格式错误的行锁定表格、从设备模式在 9600 波特率下首次响应后停滞、从设备模式完全不响应、主设备未报告从设备响应、9600 波特率下 6-8 字节响应超时,以及经典校验和设置被忽略。校验和测试也在之前的固件上运行过,并如预期般失败。
常见问题
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 侧进行光隔离,以保护主机免受汽车瞬态电压影响。LIN 侧需要外部 4.5 - 28 V 电源,因为 USB 仅为 MCU 供电。
支持哪些 LIN 波特率和 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 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。