CAN / CAN FD 帧长度与传输时间计算器
CAN / CAN FD 帧长度与传输时间计算工具
根据波特率与帧格式计算报文比特数(含位填充)及传输时间,便于预估总线负载。
报文与波特率配置
帧格式
ID值: 291 (有效)
最大数据长度: 8 字节
数据长度: 8 / 8 字节
CAN FD 精确计算待实现
波特率
功能说明
本工具根据 波特率 与 CAN 帧格式 计算报文在总线上的比特数与传输时间,支持精确计算(基于实际数据)和估算模式,并生成 Linux CAN 命令,便于预估总线负载和快速测试。
核心特性
- 精确计算:CAN 2.0 支持基于实际数据和位填充规则的精确计算,自动计算 CRC
- 估算模式:CAN FD 和快速估算场景使用最坏情况位填充公式
- Linux 命令生成:一键生成
cangen、cansend命令和candump输出示例 - 波形示意:按比特数比例绘制帧结构,CAN FD 支持仲裁/数据段速率切换显示
输入参数
帧格式配置
| 参数 | 说明 |
|---|---|
| 协议 | CAN 2.0 或 CAN FD |
| 帧类型 | 标准帧 (11-bit ID) 或 扩展帧 (29-bit ID) |
| BRS(位速率切换) | CAN FD 专属,开启后数据段使用加速波特率 |
| 报文 ID | 十六进制格式,标准帧范围 0x000-0x7FF,扩展帧 0x00000000-0x1FFFFFFF |
| DLC | 数据长度码,CAN 2.0 为 0–8;CAN FD 支持 0–8、12、16、20、24、32、48、64 |
| 报文数据 | 十六进制格式,空格分隔,如 01 02 03 04 |
波特率配置
| 参数 | 说明 |
|---|---|
| 仲裁段位速率 | 仲裁相位波特率 (bps),提供 125k/250k/500k/1M 快捷按钮 |
| 数据段位速率 | 数据相位波特率 (bps),仅 CAN FD + BRS 开启时有效,提供 1M/2M/4M/5M/8M 快捷按钮 |
计算模式
| 模式 | 说明 |
|---|---|
| 精确计算 | CAN 2.0 专属,基于实际数据 + 位填充规则计算,自动生成 CRC |
| 估算模式 | 基于最坏情况位填充公式(约 20% 额外开销),适用于 CAN FD 或快速估算 |
输出结果
计算结果
| 输出项 | 说明 |
|---|---|
| 帧总比特数 | 含位填充与帧间隔 (IFS) 的比特数 |
| 传输时间 | μs 与 ms 单位,用于与周期相除估算负载率 |
| 波形示意 | 按比特数比例绘制 SOF、ID、控制段、数据、CRC、ACK、EOF 等区段 |
精确计算详情(CAN 2.0)
精确模式下显示:
- 原始比特数:未填充前的比特数(含帧结束固定字段)
- 填充后比特数:应用位填充后的比特数
- 填充位数:位填充插入的比特数
- CRC 值:自动计算的 CRC-15 校验值
Linux 命令生成
| 命令类型 | 说明 |
|---|---|
| cangen | 周期发送命令,支持设置发送周期 (ms) |
| cansend | 单次发送命令 |
| candump | 输出示例,展示接收报文格式 |
总线负载估算
若该报文以周期 T(例如 1 ms)发送,则总线负载率约为:
text
负载率 ≈ (传输时间 / T) × 100%工具会在结果中给出示例计算,并在 Linux 命令区域显示指定周期下的负载率。
CAN 帧结构
CAN 2.0 标准帧
text
SOF + ID(11) + RTR + IDE + r0 + DLC(4) + Data(0-64) + CRC(15) + DEL + ACK + DEL + EOF(7) + IFS(3)CAN 2.0 扩展帧
text
SOF + ID(29) + SRR + IDE + r1 + r0 + DLC(4) + Data(0-64) + CRC(15) + DEL + ACK + DEL + EOF(7) + IFS(3)CAN FD 帧(BRS 开启)
CAN FD 在同一帧内使用两种波特率:
- 仲裁段:SOF、ID、控制段(不含 Data/CRC)使用仲裁波特率
- 数据段:Data、CRC 字段使用数据波特率(加速传输)
位填充规则
CAN 总线使用位填充(Bit Stuffing)防止长时间相同电平:
- 规则:连续 5 个相同电平后插入一个填充位(相反电平)
- 适用范围:SOF 到 CRC 字段(含)
- 不适用:CRC Delimiter、ACK、ACK Delimiter、EOF、IFS(固定格式)
最坏情况估算:约 20% 额外比特数(总比特数 × 5/4)
Linux CAN 命令说明
cangen 参数
| 参数 | 说明 |
|---|---|
-I | CAN ID(十六进制) |
-e | 扩展帧标志 |
-D | 数据字段(十六进制) |
-L | DLC 值 |
-g | 发送间隔/周期(毫秒) |
-f | CAN FD 帧 |
-b | 启用位速率切换 (BRS) |
cansend 格式
bash
# CAN 2.0 标准帧
cansend can0 123#0102030405060708
# CAN 2.0 扩展帧
cansend can0 18DAF110#0102030405060708
# CAN FD (BRS 开启)
cansend can0 123##10102030405060708
# CAN FD (BRS 关闭)
cansend can0 123##40102030405060708常见问题
精确计算需要什么条件?
- 必须输入报文数据
- 数据长度必须与 DLC 匹配
- 仅支持 CAN 2.0(CAN FD 精确计算待实现)
数据长度不匹配 DLC 会怎样?
- 精确模式下会提示警告并回退到估算模式
- 数据输入框支持自动截断超出 DLC 限制的部分
如何选择计算模式?
- 需要精确值:输入完整数据,使用精确计算
- 快速估算:只关心 DLC,使用估算模式
- CAN FD:目前仅支持估算模式