mcpField
U
USB LIN Converter

USB LIN Converter

本地服务
ucandevices.github.io开发工具925 天前更新

关于 USB LIN Converter

USB LIN Converter 是面向汽车开发者和 AI Agent 的开源 LIN 2.1 USB 适配器及 MCP 服务,支持主站、从站和监听模式,并提供 LIN 流量捕获与解码工具。

主要功能

  1. 01支持 LIN 2.1 主站、从站和监听模式
  2. 02可选 9600 和 19200 波特率
  3. 03LIN 与 USB 主机光隔离
  4. 04通过 LDF 编码和解码信号
  5. 05自动检测总线速率和校验类型

适用场景

  1. 01检查 LIN 流量及各 ID 的周期
  2. 02操作按钮时记录数据变化
  3. 03识别总线速率和校验类型
  4. 04使用 LDF 文件解码或编码信号

MCP 相关

MCP 服务提供设备信息、总线监听与检测、LDF 加载以及帧解码和编码工具。发送帧以及运行主站或从站模式需要启用 `--allow-transmit`。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"lukasz-juranek-lin-usb-converter": {
"command": "uvx",
"args": [
"ucan-lin-mcp"
]
}
}
}
启动命令uvx ucan-lin-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypiucan-lin-mcp0.1.1

工具

9

收录的工具列表 · 更新于 5 天前

此工具无需参数。

详细介绍

USB LIN Converter (uLC)

Buy on Tindie Buy on Lectronz Product page

开源 USB ↔ LIN 总线适配器。支持 LIN 2.1 主节点、从节点或监控模式。兼容 SLCAN 的虚拟 COM 端口——无需专有驱动,即可在 Windows、Linux 和 macOS 上使用。

USB LIN Converter (uLC) - 适配器照片

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/

快速开始

  1. 将设备插入 USB 端口。它会枚举为虚拟 COM 端口(Windows 上为 COM3,Linux 上为 /dev/ttyACM0,macOS 上为 /dev/cu.usbmodem*)。
  2. 在 Windows 上,安装 ST Virtual COM Port driver。Linux 和 macOS 无需驱动。
  3. 以任意波特率打开端口(USB CDC 会忽略波特率)。行尾必须为 CR(0x0D)。
  4. 通过外部电源引脚为 LIN 侧提供 4.5 - 28 V 电源。
  5. 发送 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.py1-2 个适配器库:版本查询、模式切换、监视回环、主设备 → 从设备
test_firmware_protocol.py1-2 个适配器通过原始串口测试固件:拒绝格式错误的命令、16 行表格限制、双向测试所有 1-8 字节帧长度并精确检查数据、实时数据更新、诊断帧 0x3C/0x3D、未应答的报头、扩展 T/R 行时序、自定义波特率、监视模式接收和发送。针对 19200 和 9600 波特率进行参数化测试。
test_lib_simulation.py2 个适配器脚本化的 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 引导加载程序,可用于现场更新。


相关项目

链接

许可证

请参阅 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。