点击截图可直接查看内嵌原图,支持适应窗口、原始尺寸和下载;宽表格与功能区截图可横向滚动。
BUSMASTER E2E 发送保护使用教程
适用本文核对版本 BUSMASTER 3.2.2.51(Build 571),截图使用中文界面。其他版本请先确认 CAN 功能区存在 E2E 入口,发送列表存在 动态报文 列。
E2E(End-to-End,端到端)保护在业务数据中加入计数器、CRC 等保护信息,供接收方按约定检查数据。BUSMASTER 可以在原 CAN 发送窗口中逐帧计算这些字段,保留原有的手动发送、周期和发送次数操作。
本教程先用 AUTOSAR P01 / BOTH 发出四条可核对的报文,再介绍其他内置算法和工程配置。无需编写节点仿真程序,也无需为内置算法安装外部示例 DLL。
学习顺序
| 篇目 | 完成后你能做什么 |
|---|---|
| 01|发送第一条 E2E 报文 | 找到入口,配置 P01,并在接收端核对四帧计数器与完整载荷。 |
| 02|选择算法与填写参数 | 区分五种内置 profile,正确填写 DataID、首帧计数、DataID 列表和头部位置。 |
| 03|DBC 与保护信号联动 | 从 DBC 选择计数器、校验信号,核对派生位置及业务数据。 |
| 04|算法管理与自定义 DLL | 使用随软件预置的 DLL 示例、编译配套源码、配置布局及转换位,并管理独立报文副本。 |
| 05|周期发送、复位与保存工程 | 设置有限周期,判断状态何时继续或重建,并保存、迁移 CFX。 |
| 06|接收核对、日志与排障 | 区分发送和接收证据,找到诊断日志并整理问题资料。 |
配套资料
- 教学 DBC:E2E_P01.dbc:定义示例报文及三个信号,用于第 03 篇;第 01 篇不依赖 DBC。
- P01 四帧参考载荷:对应本教程固定参数和全零业务数据。
- 两套 DLL 源码与独立工程:可编译、修改的 CRC8-2F / SUM8-XOR + RC4b 示例,含接口依赖及许可证。
- 示例使用说明:说明报文、字段与参考值之间的关系。
请从 BUSMUST 下载中心 获取适用版本。首次配置分析仪可先阅读 基础收发教程。
使用范围
当前功能提供 CAN / CAN FD 发送侧 Protect,支持 P01、P02、P04、P05、P06。它不会仅凭收到一条 CAN 报文就自动完成 AUTOSAR 接收 Check 或接收状态机判定。接入真实 ECU 时,算法、参数、字段位置及长度必须与对端约定一致。
本教程示例用于理解操作;实际项目的 CAN ID、DataID、周期、通道及终端配置由项目通信定义决定。
最近核对:2026 年 11 月 11 日。
01|发送第一条 E2E 报文
本篇使用 AUTOSAR P01 / BOTH。先保持业务数据不变,观察软件写入的计数器和 CRC;完成后应能在接收端核对四条完整载荷。
1. 准备软件与 CAN 连接
| 需要准备 | 本例设置与核对方法 |
|---|---|
| BUSMASTER | 本文核对版本为 3.2.2.51(Build 571),中文界面。 |
| 发送接口 | 在 CAN → 驱动选择、通道配置 中选择实际接线的 CAN 通道。逻辑通道 1 对应哪个物理口,以这里的映射为准。 |
| 接收端 | 另一条已接线的 CAN 接口,或按相同 E2E 参数接收的设备,用于核对实际 Rx。 |
| 总线 | 本例为普通 CAN、500 kbit/s;两端 CAN_H、CAN_L 和参考地按接口要求连接,终端按实际总线拓扑配置。 |
先保持 CAN 断开,完成下面的发送配置。首次练习不需要 DBC,也不需要外部 DLL。
本文实机示例使用 X1 PRO 的 CH1 发送、另一台 X1 的 CH1 接收,两端采用正常模式、500 kbit/s,各启用一个 120 Ω 终端。逻辑发送通道为 1;CAN FD 数据速率预设为 2 Mbit/s,但本篇普通 CAN 数据帧不使用该速率。你的设备型号可以不同,接线、映射和终端须按实际网络核对。
2. 找到两个不同用途的入口
图 1: CAN 保持断开,左侧按钮显示“连接”;尚未配置驱动或通道时该按钮为灰色。在 CAN 功能区打开 发送窗口。数据库右侧的 E2E 按钮用于管理算法候选项;给报文选择算法、填写参数和发送,都在原发送窗口中完成。
3. 新建一条普通 CAN 报文
在 配置发送报文 - CAN → 发送帧列表 中,双击 [双击添加报文],按普通报文方式填写:
| 项目 | 本例值 |
|---|---|
| 帧 ID | 0x2A0,11 位标准 ID |
| 通道 | 实际配置的发送通道;本例为逻辑通道 1 |
| 数据长度 | 8 字节 |
| 报文类型 | Std,普通 CAN 数据帧 |
| RTR | 不勾选 |
| 发送次数 | 1 |
| 重复周期前的复选框 | 不勾选,先练习手动单次发送 |
| 数据字节 | 00 00 00 00 00 00 00 00 |
若已加载第 03 篇的教学 DBC,这条报文可显示为 E2E_P01_Message;未加载时可以显示原始 ID。两者使用同一个 0x2A0。
4. 在“动态报文”中选择算法
编辑这条报文的 动态报文 单元格,在下拉菜单下方选择 AUTOSAR P01 / BOTH。
图 2: 横线用于分组。每条报文一次选择一种处理方式;选择 E2E 后,不会同时执行原来的 ID/数据花样。
选中该发送行,在下方打开 E2E 页签。默认宽度下,信号详情 与 E2E 共用页签区域;窗口足够宽时会并排显示,功能和参数相同。
图 3: P01 示例。DataID 为 0x0123,首帧计数为 0,模式为 BOTH;计数器位于起始位 8、宽 4 位,校验字段位于起始位 0、宽 8 位,两者均为 Intel。
填写并逐项核对:
| E2E 参数 | 本例值 |
|---|---|
| DataID | 0x0123,十六进制 |
| 首帧计数 | 0 |
| DataID 模式 | BOTH |
| 计数器来源 | 手工;起始 8、位 4、字节序 Intel |
| 校验字段来源 | 手工;起始 0、位 8、字节序 Intel |
输入后按 Tab、下拉选项确认后,软件会检查并保存参数,不需要再点击应用按钮。提示无效时先查看恢复后的值,按提示修正 DataID 范围、字段位置或报文长度,再按 Tab。两个字段都要移动时,逐项填写,全部完成后再切行或发送。
5. 连续手动发送四次
- 回到 CAN 功能区,点击 连接,同时让接收端进入接收状态。
- 返回发送窗口,选中
0x2A0,确认重复周期未启用。 - 点击一次 发送报文,在接收端找到对应 ID、通道、帧类型和 8 字节载荷。
- 保持连接和配置不变,再点击三次 发送报文。
在本例参数和全零业务数据下,接收端应依次得到:
| 次序 | 完整载荷(HEX) | 计数器 |
|---|---|---|
| 1 | CC 00 00 00 00 00 00 00 |
0 |
| 2 | 91 01 00 00 00 00 00 00 |
1 |
| 3 | 76 02 00 00 00 00 00 00 |
2 |
| 4 | 2B 03 00 00 00 00 00 00 |
3 |
字节 0 是 CRC,字节 1 的低 4 位是计数器。CRC 会随计数器变化;不要只检查某一字节“在变”,应核对完整载荷及顺序。
数据字节视图保留的是业务模板。 本例这里仍显示全零;逐帧变化的 CRC 和计数器请在接收端查看。
本例参考值只适用于上述模式、DataID、位置、首帧计数和业务数据。改了任一相关参数后,应使用对应项目的参考值核对。
6. 结束本次练习
停止接收,断开本次 CAN 连接。需要继续练习时,注意 重新连接会按配置重建初始状态;如需理解继续发送和复位的区别,见第 05 篇。
02|选择算法与填写参数
按对端通信定义选择算法。本篇沿用第 01 篇的 P01 报文练习模式切换,再分别配置其他内置算法。
1. 五种内置算法怎么选?
下表为当前软件的单帧 CAN / CAN FD 支持范围:
| 算法 | 载荷字节范围 | 计数器范围 | 未另设首帧计数时的首帧值 | 主要参数 |
|---|---|---|---|---|
| P01 | 2~30,固定长度 | 0~14 | 0 | DataID、BOTH/ALT/LOW/NIBBLE 模式、CRC 与计数器位置;NIBBLE 还需相应字段位置 |
| P02 | 2~64,固定长度 | 0~15 | 1 | 16 项 DataID 列表,固定保护字段布局 |
| P04 | 12~64 | 0~65535 | 0 | 32 位 DataID、头部偏移、允许长度范围 |
| P05 | 3~64,固定长度 | 0~255 | 0 | 16 位 DataID、头部偏移 |
| P06 | 5~64 | 0~255 | 0 | 16 位 DataID、头部偏移、允许长度范围 |
选择内置算法时,软件会调整必要的长度、帧类型及 RTR。例如默认 P04 可把 8 字节 Std 调整为 12 字节 FD,保留原有字节并补零;已有较长数据不会自动截短,BRS 按网络设置。使用自定义 DLL 时,按 DLL 提供方的说明配置报文长度和字段。
普通 CAN 最多 8 字节;CAN FD 可用长度为 0~8、12、16、20、24、32、48、64 字节,再与算法允许范围取交集。例如 P04 必须使用 CAN FD,P01 的上限为 30 字节,因此不能使用 32 字节载荷。
2. P01:切换 DataID 模式
CAN ID 位于发送列表,用于标识总线报文。DataID 位于 E2E 参数区,用于参与对应 profile 的保护计算。两者分别配置,软件不会把 CAN ID 自动当作 DataID。
沿用第 01 篇:CAN ID 为 0x2A0,DataID 为 0x0123。填写 DataID 时使用十六进制;CRC 的变化不意味着 DataID 本身一定以一个独立字段出现在总线上。
切换前取消该行周期勾选并断开 CAN,选择 0x2A0 的 E2E 页签。保持 8 字节、全零业务模板、首帧计数 0、计数器 8 / 4 / Intel、校验字段 0 / 8 / Intel。
BOTH → LOW
LOW 只接受一个字节的 DataID,不能直接沿用第 01 篇的 0x0123。
- 先将 DataID 改为
0x23,按 Tab 结束输入。 - 在 DataID模式 中选择 LOW,确认选择。
- 核对 DataID 显示
0x0023(或0x23)、模式为 LOW,两个保护字段位置保持不变。 - 点击 复位,连接 CAN,手动发送。按 LOW 的参数核对载荷,不再使用第 01 篇 BOTH 的 CRC 参考值。
若误先选择 LOW 而提示配置无效,检查模式是否已恢复;先改 DataID 为 0x23,结束输入后重新选择 LOW。
LOW → ALT 或 BOTH
- 先选择 ALT 或 BOTH,确认选择。
- 再将 DataID 改回
0x0123,按 Tab 结束输入。 - 点击 复位后发送。ALT 按计数器交替使用 DataID 字节;BOTH 使用两个字节。
只有恢复为第 01 篇全部参数,并从首帧计数 0 开始,才重新使用该篇的四帧参考载荷。
切换到 NIBBLE
- 先选择 NIBBLE,确认选择;参数区会出现 半字节位。
- 将 DataID 填为
0x0123,按 Tab 结束输入。NIBBLE 的 DataID 范围为0x000~0xFFF。 - 将 半字节位 填为
12,按 Tab 结束输入;计数器仍为8 / 4 / Intel,校验仍为0 / 8 / Intel。 - 核对三个字段没有重叠,再点击 复位、连接并发送。
这里的 12 是 bit 位置:字节 1 的高半字节保存 DataID 高字节中的低 4 位,本例为 1;低半字节保存 Counter。首帧 Counter=0 时,接收载荷的字节 1 应为 10,下一帧应为 11。字节 0 为当前模式计算出的 CRC。
3. P02:填写 16 项 DataID 列表
在发送行的 动态报文 中选择 AUTOSAR P02,下方 E2E 区会切换成 DataID 列表。
图中的 0x2A1 是单独建立的 P02 示例行,0x2A0 仍保留 P01;参数区只显示当前选中行。
图 4: 从左到右、从上到下,依次是列表索引 0~15。每一格填写一个十六进制字节;图中 01 到 10 是教学值,10 表示十六进制 0x10。
P02 按计数器值选择列表项。默认首帧计数器为 1,因此首帧用索引 1 对应的字节,而不是把左上角索引 0 当作首帧项。若项目要求首帧为 0,请明确设置首帧计数 0,并按该设置重新核对参考载荷。
16 项都必须来自项目定义;不要只填当前计数器会用到的那一格。修改完成后结束编辑,检查是否有非法值提示。
4. P04、P05、P06:可直接填写的发送示例
每种算法单独建立一行,逻辑通道沿用第 01 篇的 1。先断开 CAN,取消所有教学行的周期勾选,业务模板全部填零。每行发送次数为 1,RTR 不勾选;P04 使用支持 CAN FD 的对端,本例不启用 BRS。
| 填写项 | P04 示例 | P05 示例 | P06 示例 |
|---|---|---|---|
| 帧 ID | 0x2A2 |
0x2A3 |
0x2A4 |
| 报文类型 | Std-FD,BRS 关闭 |
Std |
Std |
| 数据长度 | 16 |
8 |
8 |
| 动态报文 | AUTOSAR P04 | AUTOSAR P05 | AUTOSAR P06 |
| DataID(Hex) | 0x12345678 |
0x0123 |
0x0123 |
| 首帧计数 | 0 |
0 |
0 |
| 头部位 | 8 |
8 |
8 |
| 最小字节/最大字节 | 16 / 16 |
无此项,按本行 8 字节发送 | 8 / 8 |
| 计数器/校验来源 | 均为手工 | 均为手工 | 均为手工 |
按下面顺序填写:
- 在发送列表设置帧 ID、类型、长度和次数,选择对应 动态报文。
- 打开该行 E2E 页签,填写 DataID、首帧计数。P04、P06 的 长度(字节) 有左右两个输入框:先在左框填最小字节数,再在右框填最大字节数,每次按 Tab 结束输入。
- 最后填写 头部位
8,按 Tab;检查派生位置与下表一致。派生字段为灰色时无需另行修改。 - 点击该行 复位,准备接收端后连接,手动点击 发送报文 两次,核对 ID、类型、长度及 Counter 的
0 → 1。 - 练习下一行前先断开 CAN,其他行周期保持关闭。
| 派生字段 | P04 | P05 | P06 |
|---|---|---|---|
| 计数器:起始 / 位 / 字节序 | 31 / 16 / Motorola |
24 / 8 / Intel |
40 / 8 / Intel |
| 校验:起始 / 位 / 字节序 | 79 / 32 / Motorola |
8 / 16 / Intel |
15 / 16 / Motorola |
头部位 8 表示整个头部后移 1 字节。 在以上全零模板中,字节 0 保持 00;P04 的 16 位 Counter 占字节 3~4,P05 的 Counter 在字节 3,P06 的 Counter 在字节 5。
按上表完成配置、点击 复位后,前两帧应为以下完整载荷。P04 为 16 字节 Std-FD,BRS 关闭;P05、P06 为 8 字节 Std。
| 算法 | Counter | 完整载荷(HEX,按字节 0 起排列) |
|---|---|---|
| P04 | 0 | 00 00 10 00 00 12 34 56 78 B7 4B 5C 35 00 00 00 |
| P04 | 1 | 00 00 10 00 01 12 34 56 78 47 C5 A6 40 00 00 00 |
| P05 | 0 | 00 AA 72 00 00 00 00 00 |
| P05 | 1 | 00 CB CA 01 00 00 00 00 |
| P06 | 0 | 00 1B 4C 00 08 00 00 00 |
| P06 | 1 | 00 B1 1D 00 08 01 00 00 |
这些参考载荷对应本节固定参数与全零业务模板;修改 DataID、首帧计数、头部位置或业务值后,应使用修改后的参数核对。
5. 头部偏移、起始位和长度单位
| 字段 | 单位与含义 | 核对重点 |
|---|---|---|
| 首帧计数 | 对应 profile 的计数器整数 | 在该 profile 允许范围内;P01 不使用计数值 15。 |
| 头部位 | bit,整个 E2E 头部相对载荷起点的偏移 | P04/P05/P06 按字节对齐;8 表示后移 1 字节,不是 8 字节。 |
| 起始 | bit,保护字段起始位置 | 与 Intel/Motorola 的 DBC 位编号一起解释。 |
| 位 | bit,字段宽度 | 与计数器/CRC 类型一致,不能与业务字段重叠。 |
| 长度(字节)左框/右框 | byte,分别为最小/最大载荷长度;管理器中显示为最小字节数/最大字节数 | 实际发送长度须在范围内,并满足算法和帧类型约束。 |
标准 profile 对字段组合有约束,某些派生字段显示为只读。不要为了消除提示而随意改字节序或扩大范围;先确认所选算法和通信定义是否一致。
使用 DBC 选择来源时,软件会按合法的信号位置更新相关布局,操作见下一篇。
6. 修改后怎样判断已经生效?
结束文本编辑或确认下拉选择后,检查三件事:没有未解决的输入提示;相关位置与字节序符合预期;接收端完整载荷与新参数匹配。
若要同时移动计数器和校验字段,先修改第一个位置并按 Tab,再修改另一个位置并按 Tab;两项填完后核对来源、位宽和字节序,再切行或发送。出现无效提示时,先查看输入框恢复的值,按提示修正超范围、重叠或越界字段,再结束输入。无需点击应用。
改变参数后,该发送项会按新设置重新开始计数;确认同一个值或取消选择则保持当前计数。若只想从首帧计数重新发送,点击该项的 复位。
03|DBC 与保护信号联动
本篇沿用 0x2A0、8 字节、P01 / BOTH、DataID 0x0123 的报文。DBC 用于描述信号,E2E 参数区负责选择保护字段及相应算法参数。
若刚完成第 02 篇的模式练习,先断开 CAN、取消该行周期,在 E2E → DataID模式 中恢复 BOTH;DataID 保持 0x0123、首帧计数 0、计数器 8 / 4 / Intel、校验 0 / 8 / Intel,再进行下面的 DBC 练习。
1. 加载教学 DBC
下载 E2E_P01.dbc,通过 CAN 功能区的 数据库 入口,按 CAN FD 与 DBC 工作流 将文件加入当前 CAN 工程。
返回发送窗口,选中 0x2A0。名称可显示为 E2E_P01_Message,信号详情应出现:
| 信号 | 布局 | 本例用途 |
|---|---|---|
| Checksum | 起始位 0、8 位、Intel | P01 的 CRC 字节 |
| AliveCounter | 起始位 8、4 位、Intel | P01 计数器 |
| CommandValue | 起始位 16、16 位、Intel | 普通业务值,教学初始值为 0 |
未出现这些信号时,先确认 DBC 已加入当前 CAN 工程、报文 ID 为标准帧 0x2A0、数据长度为 8。仅在磁盘上放置文件不会自动完成数据库加载。
2. 在 E2E 中明确选择两个来源
- 选中这条发送行,打开下方 E2E 页签。
- 在 计数器 → 来源 下拉中选择 AliveCounter,确认选择。
- 在 校验字段 → 来源 下拉中选择 Checksum,确认选择。
- 检查计数器显示为起始 8、位 4、Intel;校验显示为起始 0、位 8、Intel。
图 5: 窗口足够宽时,信号详情与 E2E 并排。选择信号后,位置、位宽和字节序由所选信号派生;灰色字段表示该处不能直接修改。
下拉按当前算法提供可用来源。此例 P01 校验字段可选 8 位 Checksum,16 位 CommandValue 不会列为校验来源;无 DBC 时选择手工。若交换两个保护字段,依次选择两项来源,全部选完后再核对位置和发送;提示无效时,检查位宽、重叠及是否超出报文长度。
3. 业务值与保护输出怎样配合?
确认同一项已生效配置时,计数继续。要从首帧计数重新发送,请点击 复位;周期运行时先停止周期。
当 CommandValue=0、其余业务字节为零且首帧计数为 0 时,复位后可使用第 01 篇的四帧参考值核对。若修改业务值,软件先取得业务报文,再计算 E2E;CRC 因业务数据变化而改变是正常现象。
数据字节和信号详情用于编辑、显示业务模板。要确认实际保护字段,应查看真正发出的报文或接收端载荷,不能要求模板中的 CRC 和计数器跟着每次发送刷新。
4. 没有 DBC、或 DBC 发生变化怎么办?
- 没有 DBC: 两个来源保留 手工,按通信定义填写允许编辑的位置。内置算法仍可使用。
- 信号不符合标准布局: 按当前算法检查长度、位宽、字节序及头部位置。
- 更新了同名信号: 已应用的来源和位置不会只因名称相同就静默重猜。确认新定义后,在对应来源下拉中明确重新选择,再核对派生字段。
- 返回手工: 在来源中选择 手工,按当前算法允许的字段编辑并结束输入。
Intel 与 Motorola 的起始位表示方式不同。核对实际占用的位,不要只比较两个起始位数字是否相等。
04|算法管理与自定义 DLL
CAN 功能区 数据库 旁的 E2E 按钮管理算法候选项;选择报文算法、填写常用参数和发送,仍在原发送窗口中完成。
1. 默认七项算法
新建配置默认提供五种 AUTOSAR 内置算法,以及两套随软件预置的 DLL 示例:
| 名称 | 计算规则 |
|---|---|
| AUTOSAR P01 / BOTH、P02、P04、P05、P06 | 对应第 02 篇标准发送保护;P01 可调整 DataID 模式。 |
| CRC8-2F + RC4b | CRC-8:多项式 0x2F、寄存器初始值 FF、最终 XOR FF、不反射;配合 4 位滚动计数器。 |
| SUM8-XOR + RC4b | 覆盖字节累加取低 8 位,再 XOR FF;配合 4 位滚动计数器。 |
RC4b 是 4-bit Rolling Counter,4 位滚动计数器,15 后回到 0。
两套 DLL 已随上位机提供,直接使用时不需要自己编译。旧工程保持保存的目录,曾移除的候选或显式空目录不会在重开时自动补回;需要恢复时明确添加,或在独立新建工程中练习。
2. 使用随软件预置的 DLL 示例发送
本节复用第 02 篇的 0x2A1、Std、8 字节教学行,把 P02 改为 DLL 算法;需要保留 P02 时另建练习行。先断开 CAN、取消周期,保持业务模板全零。
- 在该行 动态报文 中选择 CRC8-2F + RC4b。
- 打开 E2E 页签,核对首帧计数
1;计数器为手工、起始48、位宽4、Intel;校验字段为手工、起始56、位宽8、Intel。 - 准备接收端后连接,逐次手动发送并核对实际 Rx。
- 结束后断开,可改选 SUM8-XOR + RC4b,使用相同默认布局再练习。
图 8: 当前行已从 P02 改为 DLL,不能继续用 P02 参考载荷。两示例不使用 DataID,因此该字段不显示。
默认布局中,字节 6 低 4 位为 Counter,字节 7 为校验。算法先写 Counter,再计算除校验字节外的全部载荷字节;不自动加入 CAN ID 或 DataID。
| 算法与次序 | 完整载荷(HEX) |
|---|---|
| CRC8-2F 首帧,Counter=1 | 00 00 00 00 00 00 01 45 |
| CRC8-2F 第二帧,Counter=2 | 00 00 00 00 00 00 02 34 |
| SUM8-XOR 首帧,Counter=1 | 00 00 00 00 00 00 01 FE |
| SUM8-XOR 第二帧,Counter=2 | 00 00 00 00 00 00 02 FD |
内部复位为 0、发送前递增,所以默认首帧为 1,与第 01 篇 P01 的首帧 0 不同。明确指定首帧计数时按填写值开始,包括 0;复位恢复该初始序列。CRC8 的结果须用 CRC 算法核对,不能使用 SUM8 的参考值。
3. 修改布局,核对真实输出
在发送行 E2E 区修改起始位、字节序与首帧计数,即可调整这两个 DLL 示例的保护字段;计数器固定 4 位,校验固定 8 位。选择 DBC 来源时,位置随所选信号更新。
以 SUM8-XOR + RC4b 为例:停止周期并断开后,设首帧计数 3,计数器起始 12、4 位、Intel,校验起始 0、8 位、Intel;其他业务位全零。重新连接后第一帧应为:
CF 30 00 00 00 00 00 00
30 的高半字节是 Counter 3;0x30 XOR 0xFF = 0xCF。这是演示布局联动的扩展示例,实际位置仍按项目通信定义。
每项输入后按 Tab。需要移动两个字段时依次改完,再核对两处位置和字节序;提示无效时,查看恢复后的值并修正重叠或越界字段。Intel/Motorola 的位编号不同,请按通信定义填写。
4. 候选目录与报文副本
点击 添加… 选择内置算法,或选择 DLL 文件入口;选中算法后填写参数,按 Tab 结束单元格编辑。
点击 确定 保存算法列表,点击 取消 放弃本次修改。发送行的常用参数则在结束编辑后直接生效。
| 操作 | 结果 |
|---|---|
| 修改报文 A 的参数 | 只改变 A;目录及报文 B 不跟着变化。 |
| 修改管理器候选 | 影响今后选择该候选;已有行保留原副本。 |
| 移除在用候选后确定 | 只移除目录和下拉选项,现有报文保留原算法、参数和状态。 |
| 多条报文使用同一 DLL | 每条拥有独立参数、计数器及 Context,不按 CAN ID 或 DLL 路径合并。 |
移除候选不会删除 DLL 文件;磁盘上移走在用库则会造成缺库,相关保护项不会自动退成裸发送。要更新已有行,明确重新选择并核对;真实配置变化会重建该项状态。
5. 编译自己的 DLL
下载 两套算法的源码和独立工程。包内含源码、工程、support、许可证及 BMCLI 示例,不含预编译 DLL。
已经安装 BMAPI SDK 时,可直接进入 BMAPI SDK/example/e2e_counter_checksum,找到同一组源码和 E2E_Algorithms.sln,按下列步骤修改、编译。
- 整体解压到可写位置,保留
support子目录。 - 在 Visual Studio Installer 准备 使用 C++ 的桌面开发、MSVC v142 x86/x64 工具集与 Windows 10 SDK。
- 打开
E2E_Algorithms.sln,选择 Release / Win32,生成解决方案。 - 在
bin/Release/找到crc8_2f_rc4b.dll、sum8_xor_rc4b.dll。 - 回到 CAN 功能区 E2E → 添加… → DLL 文件入口,选择新文件,核对元数据和参数后确定。到发送行选择导入的候选,填写布局并核对发送结果。
无需加入 BUSMASTER 主解决方案;示例独立编译并使用静态 C 运行库。Win32 BUSMASTER 必须使用匹配的 32 位插件;其他工具的 DLL 不能仅凭扩展名兼容。
| 修改目标 | 文件或入口 |
|---|---|
| 两个项目入口 | crc8_2f_rc4b.c、sum8_xor_rc4b.c |
| 校验公式及共享保护流程 | counter_checksum_impl.h 中 calculate_checksum |
| Context、调用和字段配置说明 | support/bm_e2e_plugin_api.h、包内 README |
| 接口导出 | 保留 BM_E2E_GetPluginApi;新算法或不兼容配置使用新的 provider 身份。 |
许可见包内 COPYING 文件。
6. 在算法管理中填写 DLL 参数
在 CAN 功能区点击 E2E,选中 DLL 示例后,在下方参数表填写这些设置;起始位和首帧计数仍在发送行的 E2E 页签中调整。
| 设置 | 含义与本例 |
|---|---|
| Profile / Variant | DLL 内的分支,不是 CAN ID;两示例为 1 / 0。 |
| Context 字节数 | 每报文独立运行状态,两示例为 16;不是报文长度。 |
| Config | 两示例使用 layout-v1,传递实际起始位、位宽和字节序。 |
| 参数(Hex) | CRC8 为 01 2F FF FF:版本 01、多项式、初始寄存器、最终 XOR。SUM8 默认为 01 00 00 00:版本、转换位开关、LSB0 位位置低/高字节。 |
| 额外可写位 | 默认无需填写;开启 SUM8 转换位时须声明该位,并与 Counter、校验字段分离。 |
以上参数格式只用于这两个 DLL 示例;其他 DLL 的参数、报文长度和字段按提供方说明填写。
SUM8 转换位:让字节 2 的最低位每帧翻转
下面使用 8 字节、全零业务模板、默认计数器 48 / 4 / Intel 和校验 56 / 8 / Intel,转换位选择 bit 16,即字节 2 的最低位。
- 取消目标发送行的周期勾选,断开 CAN。在 CAN 功能区点击 E2E,选中 SUM8-XOR + RC4b。
- 在管理器下方参数表中找到 额外可写位,填写
00 00 01,按 Tab 结束编辑。 - 在同一参数表的 参数(Hex) 中填写
01 01 10 00,按 Tab。01为参数版本,第二个01开启转换位,10 00以小端整数指定 bit 16。Config 保持layout-v1,Profile1、Variant0、Context16。 - 点击 确定 保存算法列表。返回发送窗口,在目标行 动态报文 中重新选择 SUM8-XOR + RC4b,使新参数复制到这条报文;原来已选过的行不会自动跟着列表变化。
- 在该行 E2E 区填写首帧计数
1,核对计数器48 / 4 / Intel、校验56 / 8 / Intel,业务模板仍为全零,发送次数为1。 - 点击 复位,连接 CAN,手动发送两次,在接收端查看下表。
额外可写位是十六进制字节掩码,不是 bit 编号列表。 从左到右分别对应载荷字节 0、1、2……;每个字节用 1 标记允许 DLL 修改的位。因此 00 00 01 只额外允许修改字节 2 的最低位,未填写的后续掩码字节按 0 处理。计数器和校验位由 layout-v1 自动包含,这里只填写额外的转换位。
| 发送次序 | 完整载荷(HEX) | 查看位置 |
|---|---|---|
| 1 | 00 00 01 00 00 00 01 FD |
字节 2 的 bit0 为 1,字节 6 低半字节 Counter=1 |
| 2 | 00 00 00 00 00 00 02 FD |
字节 2 的 bit0 变为 0,Counter=2 |
继续发送时该位按 1、0、1、0 翻转。这两帧的字节 7 恰好都为 FD,因为参与累加的总和相同。结束后断开 CAN;需要关闭转换位时,在管理器将参数恢复为 01 00 00 00、清空额外可写位,确定后到目标行重新选择该示例。
配套 counter-checksum.bmgw 供支持外部 E2E 的 32 位 Windows BMCLI 使用相同编译输出,相对库路径指向 bin/Release/。它使用网络 e2e-demo、ID 0x2A7 和 0x2A8,与本篇界面练习行分别说明。需要 accepted-v1/contract_version 支持,BMCLI 1.6.5 build 151 不适用;绑定和命令以包内 README 及实际版本帮助为准。
05|周期发送、复位与保存工程
E2E 继续使用原发送行的通道、帧 ID、类型、数据长度、周期和次数,不需要打开另一套发送窗口。
1. 先区分手动发送和周期任务
第 01 篇通过四次手动点击产生四帧。需要自动发送四帧时,改用有限周期:
- 先停止当前任务,并保持 CAN 断开,避免配置过程中发送。
- 选中第 01 篇的
0x2A0行,核对 P01 / BOTH、DataID0x0123、首帧计数0,8 字节业务模板全零,计数器8 / 4 / Intel、校验0 / 8 / Intel。 - 将 发送次数 设置为
4,重复周期(ms) 设置为200。 - 勾选该行重复周期前的复选框;其他教学行保持不勾选。
- 准备好接收端,再点击 CAN 连接。已启用的周期行会按原发送任务逻辑开始运行。
- 在接收端核对恰好四帧、计数器顺序及完整载荷,等待有限任务完成。
周期运行时不要再手动点击 发送报文 来“启动周期”。手动点击是额外一次发送,会改变你看到的总帧数及计数器序列。
本教程在上述 X1 实机链路使用 P01、首帧计数 0、全零业务数据核对:接收端持续观察 8 秒,收到第 01 篇的四帧,后续没有第 5 帧。
要暂停某条周期行,取消它的重复周期复选框;要结束本次总线会话,使用 CAN 断开连接。正式网络上的周期和次数以项目定义为准。
2. 哪些操作会继续计数,哪些会重建状态?
| 操作 | 对该发送项状态的影响 |
|---|---|
| 同一连接中手动再发送;周期停止后继续 | 沿用已接受的保护状态,继续计数。 |
| 点击该项 E2E 区的 复位 | 按该项配置首帧计数重建保护状态。 |
| 合法参数真正变化 | 按新配置重建该项状态。 |
| 同值确认、打开后取消 | 保持当前计数。 |
| 新建/加载工程、断开后重新连接 | 重建相应运行状态;不会从 CFX 恢复刚才已经跑到的实时计数。 |
| 从管理器移除候选项 | 不改变已配置报文的参数和运行状态。 |
复位只作用于当前发送项。需要“下一帧从首帧计数开始”时,先停止周期,选择正确报文,再复位并发送,避免操作过程中还有其他帧继续发出。
发送失败或结果不明确时,先停止周期,查看对应时间的诊断日志和接收记录,再按提示恢复。
3. 保存 CFX 工程
完成参数编辑后,使用 BUSMASTER 的 保存/另存为 将工程保存为 .cfx。
CFX 保存候选目录、各发送项已应用的算法与参数、信号来源及相关配置;不保存实时 Context 或正在变化的运行计数器。
为了确认下次能够恢复:
- 停止本次任务,断开 CAN,保存到一个明确的工程文件。
- 关闭工程后重新打开,先保持离线。
- 逐行核对 ID、通道、帧类型、长度、动态报文、DataID、首帧计数和来源。
- 检查周期复选框与发送次数,避免重连时启动不需要的任务。
- 确认依赖文件齐全后,再连接并执行所需发送。
4. 换电脑或换目录时要带什么?
一起保留 CFX 使用的 DBC 和外部算法 DLL;仅有 CFX 不会自动附带这些文件。按工程实际引用核对绝对/相对路径,另存为后也要重新打开检查。
在新电脑上通过通道配置重新核对逻辑通道与实际设备口的映射。
加载旧工程后,逐行检查 动态报文 选项;提示缺少 DLL 时,按第 04 篇恢复相应文件,再连接发送。
06|接收核对、日志与排障
遇到问题时,先分清报文没有发送、已经发送但对端没收到,还是对端收到后不接受 E2E 参数。这三种现象需要不同证据。
1. 发送结果应该在哪里确认?
| 观察位置 | 能确认什么 |
|---|---|
| 发送列表、数据字节和信号详情 | 编辑发送定义与业务模板。 |
| 报文窗口的 Tx 记录 | 本机发送方向的观察。 |
| 独立接线接口或设备的 Rx | 对端实际看到的 ID、类型、长度、数据和顺序。 |
| E2E 诊断日志 | 算法、配置、保护、提交结果及状态摘要,帮助定位第一处失败。 |
| ECU 的 E2E Check 结果 | 查看 ECU 按项目通信定义是否接受该帧。 |
报文窗口若使用覆盖模式,同 ID 的新报文可能更新同一行。核对四帧顺序时使用适合的追加显示或 CAN 日志,不要把屏幕行数直接当作累计收帧数。
2. 找到客户现场诊断日志
E2E 诊断使用独立 UTF-8 文件,位置在 实际运行的 BUSMASTER.exe 所在目录:
<BUSMASTER 安装目录>\e2e_diagnostic_log.txt
达到文件大小上限时,上一份会保留为:
e2e_diagnostic_log.txt.previous
复现后尽快保留当前文件和存在的 previous 文件。正常退出程序后再复制,可以同时取得结束摘要。若文件没有生成或不能更新,确认查找的是实际运行目录,并检查该目录的可写性和磁盘空间;不能仅凭没有日志就判断没有发生发送。
诊断日志记录算法管理、配置、初始化/保护、提交结果、复位及结束摘要。它与功能区 日志记录 保存的 CAN 报文日志用途不同:前者解释操作和保护状态,后者保存实际报文,排查现场问题时两者可以配合使用。
3. 哪些字段值得先看?
| 字段或内容 | 如何使用 |
|---|---|
| process_id、session_id、operation_id | 区分本次进程、会话和连续操作,不把多个会话的记录拼成一次发送。 |
| item、channel、message_id | 对照当前出问题的发送行、逻辑通道和 CAN ID。 |
| stage、result、code | 查看先在哪个阶段失败,例如库解析、保护或提交。 |
| accepted/rejected/outcome_unknown | 区分接受、拒绝与结果不明确,不能把“保护计算成功”当成“对端已收到”。 |
| first_counter、last_counter、next_counter | 对照复位、继续发送、重连及接收端观察到的序列。 |
| logger_queue_drops | 大于 0 时说明日志可能不完整,应连同原文件提供,而非据此推算精确发帧数。 |
摘要用于说明状态,不保证每条物理报文都对应一行诊断日志。需要逐帧核对时,以实际接收和 CAN 记录为准。
4. 按现象排查
| 现象 | 先检查 | 后续处理 |
|---|---|---|
| 找不到 E2E 或“动态报文” | 软件版本、当前是否为 CAN 发送窗口 | 使用包含该功能的适用版本;E2E 管理按钮在数据库旁。 |
| 选了算法却看不到参数 | 是否选中正确发送行;当前页签是否为 E2E | 默认宽度下切换页签;加宽后可以与信号详情并排。 |
| E2E 参数和“复位”变灰 | CAN 已连接,且该行勾选了周期 | 取消该行周期勾选,或断开 CAN 后再编辑、复位。 |
| 数据字节里 CRC/计数器没有变化 | 当前看的是业务模板还是实际报文 | 在真正的 Tx/Rx 或 CAN 日志中核对保护输出。 |
| 软件提示长度、位置或输入非法 | 当前生效值、profile、实际帧长、头部偏移、位宽、重叠 | 完成后的非法编辑会恢复原合法配置;检查回退结果。仍不能满足项目要求时修正完整参数,不通过不处理绕过保护。 |
| 按 Esc 后发送按钮不可用 | CAN 是否已断开 | 主窗口中 Esc 是 CAN 断开快捷键;重新核对连接状态。它不是所有位置通用的编辑取消键。 |
| DataID 相同但 CRC 不同 | 模式、Counter、业务数据、长度和字段布局 | 使用完整参数和完整载荷对照;DataID 不是唯一输入。 |
| P02 第一帧计数为 1 | 是否保留该 profile 的默认首帧计数 | 默认首帧为 1;项目要求为 0 时明确设置并重新核对参考值。 |
| 修改算法管理后原报文未变化 | 是否期待候选项自动回写 | 每行是独立副本;在目标行明确重新选择并核对参数。 |
| 删除候选后报文仍能使用 | 是否只移除了候选,没有移走 DLL 文件 | 这是软关联行为;若需关闭该行保护,在该行选择其他处理方式。 |
| 找不到 DLL 或加载失败 | 库路径、文件及其依赖 | 按第 04 篇的 DLL 要求检查后重新加载,查看日志中的失败阶段。 |
| 已连接但没有 Rx | 物理口映射、波特率、接线、终端、过滤器和对端状态 | 先完成普通 CAN 收发,再核对 E2E。 |
| 周期帧数比预期多 | 是否同时启用了多行周期,或额外点了手动发送 | 停止本次任务,按逐行计划与接收日志核对。 |
| 重开工程后计数从头开始 | 是否把配置保存当作运行状态保存 | CFX 不保存运行 Context/计数;按首帧计数重建属于预期行为。 |
5. 联系技术支持时提供哪些资料?
请把同一次问题的材料放在一起:
- 软件完整版本/Build、分析仪型号和相关通道设置。
- 出问题的 CFX,使用的 DBC;如为外部算法,附相应 DLL 版本及必要参数说明。
- 一条具体报文的 ID、帧类型、长度、算法、DataID/列表、首帧计数和字段位置。
- 简短复现步骤、发生时间、预期结果与实际结果。
- 当前
e2e_diagnostic_log.txt、存在的.previous,以及对应时间段的 CAN 记录或完整收帧载荷。 - 能定位发送行、参数和就地提示的截图。
完成本系列后,应能独立确认:选对了算法;参数与对端一致;实际接收载荷按预期变化;工程与依赖文件可恢复;发生问题时能够找到对应诊断日志。
E2E 教学示例
用于《BUSMASTER E2E 发送保护使用教程》,核对版本 3.2.2.51(Build 571)。
文件
E2E_P01.dbc:标准 ID 0x2A0,名称 E2E_P01_Message,8 字节。Checksum 位于 0|8 Intel,AliveCounter 位于 8|4 Intel,CommandValue 位于 16|16 Intel。p01-reference.csv:P01 / BOTH、DataID 0x0123、首帧 Counter 0、业务模板全零时的前四帧完整载荷。
使用
先按第 01 篇配置原 CAN 发送行。需要练习信号来源时,通过数据库入口加载 DBC,再在 E2E 区明确选择 AliveCounter 和 Checksum。
DBC 只描述信号,不会替你设定 DataID、选择算法、连接硬件或启动发送。DataID 在报文 E2E 参数区设置。
保持 CRC 字段从 bit0 开始、Counter 从 bit8 开始,未使用位和业务字段均为零,才能使用这里的完整参考载荷。改变业务值、首帧计数、布局或 DataID 后需重新计算对应参考值。
E2E_Algorithms_Source.zip 提供两套算法源码、独立工程、support、许可证和 BMCLI .bmgw 示例,不含生成 DLL。打开 E2E_Algorithms.sln,以 v142、Release / Win32 生成后,DLL 位于 bin/Release。上位机已随包提供两套算法,直接使用无需先编译。
已安装 SDK 时,例程位于 BMAPI SDK/example/e2e_counter_checksum。五种 AUTOSAR Profile 为内置算法,CRC8-2F + RC4b 与 SUM8-XOR + RC4b 为随软件预置的 DLL 示例。
本包不包含驱动或自动启动发送脚本;.bmgw 需按说明显式绑定测试网络后启动。