# Can

嵌入式 CAN / CAN-FD 调试工具，用于扫描接口、监控报文、发送测试帧、记录日志、数据库文件解码和总线统计。 当用户提到 CAN、CAN-FD、DBC...

- Repository: https://github.com/zhinkgit/embeddedskills (777 stars)
- Category: Engineering
- License: MIT
- Last updated: 2026-10-20
- Runs scripts: yes, review before use

## Install

Claude Code: `npx skills add zhinkgit/embeddedskills --skill can -g -a claude-code -y`
Codex: `npx skills add zhinkgit/embeddedskills --skill can -g -a codex -y`
Cursor: `npx skills add zhinkgit/embeddedskills --skill can -g -a cursor -y`
Gemini CLI: `npx skills add zhinkgit/embeddedskills --skill can -g -a gemini-cli -y`

## Description

嵌入式 CAN / CAN-FD 调试工具，用于扫描接口、监控报文、发送测试帧、记录日志、数据库文件解码和总线统计。 当用户提到 CAN、CAN-FD、DBC 解码、总线抓包、USB-CAN 联调、报文发送、总线统计、 PCAN、Vector、slcan、CAN 接口扫描、CAN ID 过滤、ASC 日志、BLF 文件时自动触发， 也兼容 /can 显式调用。即使用户只是说"看看 CAN 报文"、"发一帧试试"或"解码一下 DBC"， 只要上下文明确提到 CAN 总线通信的操作或问题就应触发此 skill。

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# CAN, 嵌入式 CAN / CAN-FD 调试工具

统一封装接口发现、实时监控、报文发送、日志记录、数据库文件解码和统计分析能力。

## 配置

### 环境级配置 (`skill/config.json`)

仅保留 slcan 相关的环境级配置：

```json
{
  "slcan_serial_port": "",
  "slcan_serial_baudrate": 115200
}
```

| 字段 | 说明 | 默认值 |
|------|------|--------|
| `slcan_serial_port` | slcan 场景的串口 | `""` |
| `slcan_serial_baudrate` | slcan 场景的串口速率 | `115200` |

### 工程级配置 (`.embeddedskills/config.json`)

工作区下的 `.embeddedskills/config.json` 存放工程级 CAN 配置：

```json
{
  "can": {
    "interface": "",
    "channel": "",
    "bitrate": 500000,
    "data_bitrate": 2000000,
    "log_dir": ".embeddedskills/logs/can"
  }
}
```

| 字段 | 说明 | 默认值 |
|------|------|--------|
| `interface` | CAN 后端，如 `pcan` / `vector` / `slcan` | `""` |
| `channel` | 通道名，如 `PCAN_USBBUS1` | `""` |
| `bitrate` | 仲裁域比特率 | `500000` |
| `data_bitrate` | CAN-FD 数据域比特率 | `2000000` |
| `log_dir` | 日志输出目录 | `.embeddedskills/logs/can` |

### 参数解析优先级

1. **CLI 参数** (`--interface`, `--channel`, `--bitrate` 等) - 最高优先级
2. **工程级配置** (`.embeddedskills/config.json` 中的 `can` 部分)
3. **状态文件** (`.embeddedskills/state.json` 中的历史记录)
4. **默认值** - 最低优先级

### 自动扫描行为

`scan` 的 `details.interfaces` 及摘要数量只包含检测到的 USB-CAN 设备和 SocketCAN 接口。`details.registered_backends` 单独列出已注册的软件后端，不代表驱动可用或硬件已连接，也不参与自动选择。

当未指定 `interface` 和 `channel` 时，脚本会自动扫描系统 CAN 接口，按以下步骤处理：

1. 扫描系统中所有可用 CAN 接口
2. 若只找到一个接口 → 自动使用并写入工程配置
3. 若找到多个接口 → 返回候选列表，等待用户选择
4. 若未找到接口 → 提示错误，停止执行

## 子命令

| 子命令 | 用途 | 风险 |
|--------|------|------|
| `scan` | 扫描可用 CAN 接口与 USB-CAN 设备 | 低 |
| `monitor` | 实时监控总线报文 | 低 |
| `send` | 发送标准帧 / 扩展帧 / 远程帧 / CAN-FD 帧 | 高 |
| `log` | 记录总线报文到 ASC / BLF / CSV 文件 | 低 |
| `decode` | 用 DBC 等数据库文件解码报文或日志 | 低 |
| `stats` | 统计总线负载、ID 分布和帧率 | 低 |

## 执行流程

The rest: https://github.com/zhinkgit/embeddedskills/blob/HEAD/can/SKILL.md
