UCAN-Mini 技术手册 V2.6
LM 协议、Linux SocketCAN 驱动、Python 自动化脚本与 UCAN-Analyzer
目录与阅读路径
本手册面向需要把 UCAN-Mini 接入工程系统的用户。UCAN-Mini 运行 LM 协议;LM 协议既可以通过 Linux 内核驱动呈现为 SocketCAN 接口,也可以通过 Python 脚本直接访问 USB TLV 协议。
基础收发流程
按任务阅读
1. 产品定位
UCAN-Mini 是一款 USB 转双通道 CAN/CAN FD 接口设备。设备运行 LM 协议,面向以下工程需求:
2. 核心特性
3. 接入路径选择
4. USB 枚举与端点
4.1 LM 模式
5. LM TLV 协议概览
所有 LM 消息均以 8 字节 TLV Header 开头,后跟可变长度载荷,总长度 4 字节对齐。
text Copy offset size field description
0x00 2 type 消息类型
0x02 2 size 整条消息总长度,含头部,4B 对齐
0x04 1 channel CAN 通道号,0xFF 表示设备级/广播
0x05 1 flags 消息级标志
0x06 2 reserved 保留,置 0
0x08 ... payload 可变长度载荷Wire 格式为 little-endian:<HHBBH。
5.2 常用消息类型
5.3 能力位重点
6. Linux 内核驱动
UCAN-Mini 的 LM 模式提供 out-of-tree Linux SocketCAN 驱动,发布包目录为:
text Copy kernel_driver驱动文件:
6.1 环境准备
Debian / Ubuntu 示例:
sh Copy sudo apt update
sudo apt install -y build-essential linux-headers-$(uname -r) can-utils如果系统没有 ip 或 CAN 工具,补充安装:
sh Copy sudo apt install -y iproute2 can-utils6.2 手动编译安装
sh Copy cd kernel_driver
make
sudo make install
sudo depmod -a
sudo modprobe ucan_lm确认模块加载:
sh Copy lsmod | grep ucan_lm
modinfo ucan_lm插入 UCAN-Mini 后查看内核日志:
sh Copy dmesg | tail -80
ip link 正常情况下,每个 CAN 通道会注册为一个 SocketCAN 网络接口,例如 can0、can1。
6.3 DKMS 安装
DKMS 适合随内核升级自动重建模块:
sh Copy sudo mkdir -p /usr/src/ucan-lm-0.1.0
sudo cp -a kernel_driver/. /usr/src/ucan-lm-0.1.0/
sudo dkms add -m ucan-lm -v 0.1.0
sudo dkms build -m ucan-lm -v 0.1.0
sudo dkms install -m ucan-lm -v 0.1.0
sudo modprobe ucan_lm查看 DKMS 状态:
sh Copy dkms status ucan-lm卸载:
sh Copy sudo dkms remove -m ucan-lm -v 0.1.0 --all
sudo modprobe -r ucan_lm6.4 模块参数
临时加载示例:
sh Copy sudo modprobe ucan_lm tx_window=8 rx_hwts=1 time_sync_interval_ms=500需要把参数持久化时,可创建 /etc/modprobe.d/ucan_lm.conf:
text Copy options ucan_lm tx_window=8 rx_hwts=1 time_sync_interval_ms=500注意:rx_hwts=1 时,驱动会绑定 MGMT 接口用于时间同步。此时用户态 Python 管理工具可能无法同时打开 MGMT 接口。Linux 内核驱动不提供固件更新功能。
6.5 SocketCAN 使用
Classic CAN:
sh Copy sudo ip link set can0 down 2>/dev/null || true
sudo ip link set can0 up type can bitrate 500000
candump can0
cansend can0 123#11223344CAN FD:
sh Copy sudo ip link set can0 down 2>/dev/null || true
sudo ip link set can0 up type can bitrate 1000000 dbitrate 5000000 fd on
candump can0
cansend can0 123##100112233445566778899AABBCCDDEEFF双通道:
sh Copy sudo ip link set can0 up type can bitrate 1000000 dbitrate 5000000 fd on
sudo ip link set can1 up type can bitrate 1000000 dbitrate 5000000 fd on
candump can0 can16.6 时间戳与 TX 窗口
tx_window 限制每个通道同时等待 TX echo 的发送槽数量。控制类业务建议保持较小窗口,减少旧命令排队;吞吐类测试可适当增大。
rx_hwts=1 时,驱动使用 MGMT 命令端点做设备/主机时间同步,并将设备 RX 时间戳换算到 Linux skb 硬件时间戳路径。若现场只需要普通 SocketCAN 收发,可用 rx_hwts=0 简化接口占用。
7. Python LM 协议脚本
Python 脚本发布包目录为:
text Copy private_proto
7.1 安装依赖
sh Copy cd private_proto
python -m pip install pyusbLinux 需要 libusb:
sh Copy sudo apt install -y libusb-1.0-0-devWindows 下需要给 LM 接口安装 WinUSB / libusb 驱动,例如使用 Zadig。若同一台电脑上还有内核驱动或其他工具占用设备,先关闭占用进程。
7.2 基础命令
sh Copy python ucan_mini_cli.py list
python ucan_mini_cli.py info
python ucan_mini_cli.py status --ch 0
python ucan_mini_cli.py identifyinfo 走 EP0 vendor request,可用于确认设备在线、通道数量、固件版本和能力信息。
7.3 通道配置
设置 Classic CAN 仲裁段位时序:
sh Copy python ucan_mini_cli.py set-bittiming --ch 0 --brp 10 --tseg1 13 --tseg2 2 --sjw 1
python ucan_mini_cli.py start --ch 0CAN FD + BRS:
sh Copy python ucan_mini_cli.py set-bittiming --ch 0 --brp 10 --tseg1 13 --tseg2 2 --sjw 1
python ucan_mini_cli.py set-data-bittiming --ch 0 --brp 2 --tseg1 13 --tseg2 2 --sjw 1
python ucan_mini_cli.py start --ch 0 --mode fd fd_brs tx_echo终端电阻:
sh Copy python ucan_mini_cli.py set-termination --ch 0 --enable 1
python ucan_mini_cli.py set-termination --ch 1 --enable 1停止通道:
sh Copy python ucan_mini_cli.py stop --ch 07.4 立即发送与接收
发送标准帧:
sh Copy python ucan_mini_cli.py send --ch 0 --id 0x123 --data "01 02 03 04" 发送扩展帧:
sh Copy python ucan_mini_cli.py send --ch 0 --id 0x12345678 --ext 1 --data "AA BB" 发送 CAN FD + BRS:
sh Copy python ucan_mini_cli.py send --ch 0 --id 0x100 --fd 1 --brs 1 --data "01 02 03 04 05 06 07 08 09 0A" 批量发送:
sh Copy python ucan_mini_cli.py send --ch 0 --id 0x200 --data "FF" --count 100 --interval-ms 10接收:
sh Copy python ucan_mini_cli.py receive --ch 0
python ucan_mini_cli.py receive --ch 0 --count 10 --rx-timeout-ms 10007.5 过滤、选项与状态
过滤器:
sh Copy python ucan_mini_cli.py set-filter --ch 0 --type range --index 0 --id1 0x100 --id2 0x1FF
python ucan_mini_cli.py set-filter --ch 0 --type exact --index 0 --id1 0x123
python ucan_mini_cli.py set-filter --ch 0 --type mask --index 0 --id1 0x7F0 --id2 0x100
python ucan_mini_cli.py clear-filter --ch 0运行时选项:
sh Copy python ucan_mini_cli.py set-option --ch 0 --options tx_echo error_report bus_load
python ucan_mini_cli.py clear-option --ch 0 --options bus_load
python ucan_mini_cli.py set-auto-recover --ch 0 --enable 1
python ucan_mini_cli.py set-iso-mode --ch 0 --iso 1状态查询:
sh Copy python ucan_mini_cli.py status --ch 0返回信息中重点关注 state_name、started、termination、tx_count、rx_count、tx_err_count、rx_err_count、overrun_count 和 busload。
7.6 Python API
CanClient 适合需要设备级管理命令的脚本:
python Copy from ucan_mini_proto import CanClient, MODE_FD, MODE_FD_BRS, MODE_TX_ECHO
cli = CanClient()
info = cli.get_device_info()
print (info)
cli.set_bittiming(channel=0 , brp=10 , tseg1=13 , tseg2=2 , sjw=1 )
cli.set_data_bittiming(channel=0 , brp=2 , tseg1=13 , tseg2=2 , sjw=1 )
cli.start(channel=0 , mode_flags=MODE_FD | MODE_FD_BRS | MODE_TX_ECHO)
cli.send(channel=0 , can_id=0x123 , data=b"\x01\x02\x03" , is_fd=True , brs=True )
frame = cli.receive(channel=0 , timeout_ms=1000 )
print (frame)
cli.stop(channel=0 )
cli.close()ChannelClient 适合两个独立进程分别占用一个 CAN DATA interface。它只暴露通道级命令;设备信息、设备复位、用户 Flash、设备 ID、timestamp sync 等设备级操作仍通过 CanClient 完成。Python CLI/API 不提供固件更新功能。
python Copy from ucan_mini_proto import ChannelClient, MODE_FD, MODE_FD_BRS
can0 = ChannelClient(0 )
can0.set_bittiming(brp=10 , tseg1=13 , tseg2=2 , sjw=1 )
can0.start(mode_flags=MODE_FD | MODE_FD_BRS)
can0.send(can_id=0x123 , data=b"\x01\x02" )
can0.close()
8. UCAN-Analyzer 多平台上位机
UCAN-Analyzer 是 UCAN-Mini 的配套桌面分析工具,面向 CAN / CAN FD 设备配置、收发测试、帧监控、过滤、数据追踪、曲线分析和固件更新,适合交互式调试、现场诊断和总线可视化分析。
8.1 支持平台与发布形态
按主机系统选择对应发布包,启动后连接 UCAN-Mini 即可进行通道配置、收发测试、总线分析和固件维护。
8.2 功能模块
8.3 典型调试流程
text Copy 1. 启动 UCAN-Analyzer
2. 连接 UCAN-Mini
3. 选择 CAN0/CAN1,设置仲裁位率、数据位率、CAN FD、BRS 和终端电阻
4. 启动通道
5. 在接收/追踪窗口观察实时帧
6. 在发送窗口构造单帧、批量帧或周期发送条目
7. 使用过滤、触发、DBC、信号曲线或数据分析定位问题
8. 需要维护时使用 UCAN-Analyzer 的固件更新功能8.4 机器人本体调试建议
UCAN-Analyzer 适合机器人本体内部 CAN/CAN FD 网络的交互式调试:
9. 预约发送
预约发送用于减少主机调度抖动对发送时刻的影响。主机先同步设备时间,再把待发送帧和目标时间下发到设备;设备按本地 PTPC 时间触发发送。
9.1 能力与限制
9.2 CLI 单次预约
CLI 在未提供 --start-time-us 时会自动执行 timestamp-sync,并使用当前设备时间加 --delay-us。
sh Copy python ucan_mini_cli.py set-schedule \
--ch 0 \
--slot 0 \
--enable 1 \
--delay-us 10000 \
--can-id 0x100 \
--data "01 02 03" 这表示约 10 ms 后发送一次 ID 0x100。
9.3 CLI CAN FD + BRS 预约
sh Copy python ucan_mini_cli.py set-schedule \
--ch 0 \
--slot 1 \
--enable 1 \
--delay-us 20000 \
--can-id 0x123 \
--fd 1 \
--brs 1 \
--data "00 01 02 03 04 05 06 07 08 09 0A 0B" 清除预约:
sh Copy python ucan_mini_cli.py clear-schedule --ch 09.4 API 预约发送
python Copy import time
from ucan_mini_proto import CanClient, TX_FLAG_FD, TX_FLAG_BRS, len_to_dlc
cli = CanClient()
dev_us, _ = cli.timestamp_sync(int (time.time() * 1_000_000 ))
data = bytes .fromhex("01 02 03 04" )
cli.set_schedule(
channel=0 ,
slot_index=0 ,
enable=True ,
start_time_us=dev_us + 10_000 ,
can_id=0x100 ,
dlc=len_to_dlc(len (data)),
tx_flags=0 ,
data=data,
)9.5 排查建议
10. 通道配置建议
10.1 Classic CAN
10.2 CAN FD
11. 按键、LED 与固件更新
11.1 按键功能
11.2 LED 指示
11.3 固件更新
固件更新仅在 UCAN-Analyzer 闭源上位机中提供。Linux 内核驱动和 Python CLI/API 不提供固件更新功能。
12. 调试与诊断
12.1 USB 或驱动异常
12.2 CAN 无法通信
优先检查:
CANH/CANL/GND 和屏蔽连接。
总线两端是否各有 120R。
两端仲裁段位率、数据段位率、BRS 和 CAN FD 使能是否一致。
通道是否已启动,是否处于 Warning、Error Passive 或 Bus-Off。
是否把 CAN0/CAN1、端点或 SocketCAN 接口用反。
12.3 预约发送异常
优先检查:
设备能力是否包含 SCHEDULE_TX。
通道是否已经启动。
start_time_us 是否基于设备时间,不是主机系统时间。
下发时间是否太晚,至少预留 200 us,工程测试建议预留数 ms。
是否误用了已移除的周期预约参数。
13. 技术规格
14. 修订历史
Copyright (c) 2026 LanMotion .