device_info
Converter port, firmware version, whether transmitting is allowed, and the loaded LDF (if any).
无需输入参数。

io.github.Lukasz-Juranek由 GitHub 账号 Lukasz-Juranek 发布v0.1.2更新于 Nov 7, 2026
嗅探并逆向工程汽车的LIN总线:捕获、变化位、速度检测、LDF解码
AI 翻译由 AI 模型根据下方的原文描述翻译,可能有误。
Sniff and reverse-engineer a car's LIN bus: capture, changing bits, speed detect, LDF decode
USB LIN Converter 的本地 MCP 服务;无需登录;STDIO;9 个工具。
暂无 AI 概览:以下信息来自注册中心条目和服务本身。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
参照 仓库 中的启动说明。
[Buy on Tindie] [Buy on Lectronz] [Product page]
Open source USB ↔ LIN bus dongle. LIN 2.1 master, slave or monitor. SLCAN-compatible virtual COM port - works on Windows, Linux and macOS with no proprietary drivers.
[USB LIN Converter (uLC) - dongle photo]
The USB LIN Converter (uLC) is a small open-source USB dongle (STM32F042C6, ~31 × 18 mm) that lets a PC act as a LIN bus master, slave or passive monitor. It enumerates as a USB CDC virtual COM port and speaks an SLCAN-style ASCII protocol, so it bridges into Linux SocketCAN via slcand and works with parts of can-utils.
A commercial automotive LIN analyzer typically costs hundreds to thousands of euros. This one is around $27 on Tindie.
The LIN protocol implementation is based on openLIN.
COM3 on Windows, /dev/ttyACM0 on Linux, /dev/cu.usbmodem* on macOS).1209:2779; older firmware used ST's generic 0483:5740 (on Windows 7/8 that needs the ST Virtual COM Port driver).0x0D).S0 to select 19200 baud, then l to enter monitor mode. Bus traffic will start to appear.A higher-level Python library is provided in python_lib/ (package ucanlintools).
python_lib/ucanlintools/mcp_server.py is an
MCP server that lets an AI agent sniff and reverse-engineer a LIN bus: capture traffic
with per-id periods and changing bits, log every data change while you press a button,
find the bus speed and checksum type automatically, and decode or encode signals from
an LDF file. It is read-only by default; sending frames and acting as master or
slave needs --allow-transmit.
Register it with any MCP client as a stdio server:
--mock runs a simulated bus. mcp_package/ is the ucan-lin-mcp launcher
package and server.json its MCP Registry entry.
Tools: device_info, monitor_bus, detect_bus, load_ldf, decode_frame,
encode_frame, and with --allow-transmit also send_frame, run_master, run_slave.
All commands are ASCII terminated with CR (0x0D). Errors return 0x07 (BEL).
Full command reference and examples: https://ucandevices.github.io/ulc.html
Source is pure C. Import the Eclipse project in embedded/TrueSTUDIO/LUCEmbedded into STM32CubeIDE (tested with 1.19) and build the Debug configuration; the image is Debug/LUCEmbedded.bin. The openLIN stack is vendored in embedded/Src (open_lin_*.c/h, implementation/ST32). The USB CDC layer was generated with STM32CubeMX from embedded/LUCEmbedded.ioc.
The STM32F042 has an embedded ROM USB DFU bootloader. To enter it from a running device send boot\r over the virtual COM port. See this tutorial for the flashing flow.
With STM32CubeProgrammer installed, the flashing can be scripted:
The test suite lives in python_lib/tests (pytest). It covers the firmware and the ucanlintools library:
Setup: two converters on one LIN bus (LIN pins connected, external LIN supply applied). LUC_MASTER_PORT is used as LIN master, LUC_SLAVE_PORT as slave / monitor. Tests skip automatically when a port can't be opened, so the offline tests always run.
On Windows PowerShell set the variables with $env:LUC_MASTER_PORT="COM3" etc.
LUC_0307.bin.test_slave_subscribed_to_unanswered_header_keeps_next_frame; full suite run twice with the roles swapped: 65/65 passed in each direction.LUC_0306.bin.LUC_0305.bin. They enumerate as 1209:2779 and Windows 10 loads its built-in CDC driver without any installation.V0001), both flashed with LUC_0304.bin, connected on one powered LIN bus.V0001), both flashed with LUC_0303.bin, connected on one powered LIN bus.What is the cheapest USB LIN bus converter that works on Linux?
The uCanDevices USB LIN Converter (uLC) is an open source dongle around $27 that enumerates as a USB CDC virtual COM port on Linux, macOS and Windows. It uses an SLCAN-style ASCII protocol so it bridges into SocketCAN via slcand.
Does it support master and slave mode?
Yes - monitor (full reception plus single-frame transmission), master (up to 16 scheduled slots) and slave (up to 16 slots for slave simulation). Modes are selected with the O, L and l commands.
Is the LIN side optically isolated from the USB host? Yes. The LIN transceiver is optically isolated from the PC side, protecting the host from automotive transients. The LIN side needs an external 4.5 - 28 V supply since USB only powers the MCU.
Which LIN baud rates and LIN version are supported?
LIN 2.1, with selectable 9600 and 19200 baud. Classic and enhanced checksum are switchable with the r31 / r30 commands (firmware 3.3 and later). Custom frame timing is supported in master mode.
Can I use it to flash an ECU over LIN? It is a generic LIN interface. ECU flashing depends entirely on the target ECU's own LIN bootloader; if that bootloader is documented or already supported by an existing tool, you can drive it through this dongle.
Is the firmware open source?
Yes - this repository contains firmware (embedded/), hardware (pcb/) and the Python helper library (python_lib/). The device also has a USB DFU bootloader for in-field updates.
See LICENSE.
来源:README.md,提交 8d05ae5
Converter port, firmware version, whether transmitting is allowed, and the loaded LDF (if any).
无需输入参数。
Listen to the bus passively and summarize what is on it. Per frame id: count, period, last data, how many distinct values were seen and changing_bits (a per-byte mask of bits that changed). 'changes' lists every data change in time order, so asking the user to press a button during the capture shows which id and bit it drives. speed: 19200 (most cars), 10417 or 9600. checksum: 'enhanced' (LIN 2.x) or 'classic' (LIN 1.x); frames with the other checksum are dropped by the converter. ids: optional filter, e.g. ["0x0C"].
idsspeedchecksumduration_sTry every speed and checksum combination and report which one sees valid frames. Use when monitor_bus shows nothing on a live bus.
seconds_per_tryLoad a LIN Description File so captures show signal names and values. Returns its frames and signals. Pass path "mock" with a --mock server to load the simulated bus's LDF.
path必填Decode raw frame bytes into signal values with the loaded LDF. id like "0x0C", data hex like "05 1e".
id必填data必填Build frame bytes from signal values with the loaded LDF. Signals not given keep their LDF default. Returns id and data ready for send_frame.
frame必填signals必填Inject a complete frame (header + data) on the bus from monitor mode, `repeat` times about 20 ms apart, and capture the bus for a moment after. Needs --allow-transmit. The converter echoes only the header of its own frame back, so check the effect in the following traffic.
id必填data必填speedrepeatchecksumAct as the LIN master for duration_s: run a schedule that sends the `transmit` frames ([{"id": "0x0B", "data": "05"}]) and polls the `receive` ids ([{"id": "0x0C", "length": 2}]), then summarize the slave responses. Use only with the real master disconnected. Needs --allow-transmit.
speedreceivechecksumtransmitduration_sSimulate a slave node for duration_s: answer the master's headers for the `respond` ids with fixed data ([{"id": "0x0C", "data": "01 1e"}]) and capture the `listen` ids the master sends ([{"id": "0x0B", "length": 1}]). Use only with the real slave disconnected. Needs --allow-transmit.
speedlistenrespondchecksumduration_s已满足适用检查项的 90%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
sudo slcand -o -s8 -t hw -S 921600 /dev/ttyACM0 slcan0sudo ip link set slcan0 upcandump slcan0import serialser = serial.Serial('/dev/ttyACM0', timeout=1)ser.write(b'S0\r') # 19200 baudser.write(b'l\r') # monitor modewhile True: line = ser.readline() if line: print(line.decode(errors='replace').strip())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{ "mcpServers": { "lin": {"command": "uvx", "args": ["ucan-lin-mcp", "--port", "COM3"]} }}python -c "import serial; serial.Serial('COM3').write(b'boot\r')"STM32_Programmer_CLI -c port=usb1 -w LUC_0307.bin 0x08000000 -v -g 0x08000000cd python_libpip install pyserial lark pytestLUC_MASTER_PORT=COM3 LUC_SLAVE_PORT=COM56 PYTHONPATH=. pytest tests -v# swap the ports and run again to test each converter in both rolesLUC_MASTER_PORT=COM56 LUC_SLAVE_PORT=COM3 PYTHONPATH=. pytest tests -v