BUSMASTER E2E:算法管理与自定义 DLL
CAN 功能区 数据库 旁的 E2E 按钮管理算法候选项;选择报文算法、填写常用参数和发送,仍在原发送窗口中完成。
1. 默认七项算法
Section titled “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 示例发送
Section titled “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. 修改布局,核对真实输出
Section titled “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. 候选目录与报文副本
Section titled “4. 候选目录与报文副本”点击 添加… 选择内置算法,或选择 DLL 文件入口;选中算法后填写参数,按 Tab 结束单元格编辑。

点击 确定 保存算法列表,点击 取消 放弃本次修改。发送行的常用参数则在结束编辑后直接生效。
| 操作 | 结果 |
|---|---|
| 修改报文 A 的参数 | 只改变 A;目录及报文 B 不跟着变化。 |
| 修改管理器候选 | 影响今后选择该候选;已有行保留原副本。 |
| 移除在用候选后确定 | 只移除目录和下拉选项,现有报文保留原算法、参数和状态。 |
| 多条报文使用同一 DLL | 每条拥有独立参数、计数器及 Context,不按 CAN ID 或 DLL 路径合并。 |
移除候选不会删除 DLL 文件;磁盘上移走在用库则会造成缺库,相关保护项不会自动退成裸发送。要更新已有行,明确重新选择并核对;真实配置变化会重建该项状态。
5. 编译自己的 DLL
Section titled “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 参数
Section titled “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 的最低位每帧翻转
Section titled “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 及实际版本帮助为准。
上一篇:DBC 与保护信号联动 · 系列概览 · 下一篇:周期发送、复位与保存工程
如需安装或升级 BUSMASTER,请前往下载中心获取当前正式版本与历史版本。