跳转到内容

BUSMASTER E2E:算法管理与自定义 DLL

CAN 功能区 数据库 旁的 E2E 按钮管理算法候选项;选择报文算法、填写常用参数和发送,仍在原发送窗口中完成。

新建配置默认提供五种 AUTOSAR 内置算法,以及两套随软件预置的 DLL 示例:

默认算法目录:五种标准 Profile 和两套计数校验示例

名称 计算规则
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、取消周期,保持业务模板全零。

  1. 在该行 动态报文 中选择 CRC8-2F + RC4b。
  2. 打开 E2E 页签,核对首帧计数 1;计数器为手工、起始 48、位宽 4、Intel;校验字段为手工、起始 56、位宽 8、Intel。
  3. 准备接收端后连接,逐次手动发送并核对实际 Rx。
  4. 结束后断开,可改选 SUM8-XOR + RC4b,使用相同默认布局再练习。

CRC8-2F + 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 的参考值。

在发送行 E2E 区修改起始位、字节序与首帧计数,即可调整这两个 DLL 示例的保护字段;计数器固定 4 位,校验固定 8 位。选择 DBC 来源时,位置随所选信号更新。

以 SUM8-XOR + RC4b 为例:停止周期并断开后,设首帧计数 3,计数器起始 12、4 位、Intel,校验起始 0、8 位、Intel;其他业务位全零。重新连接后第一帧应为:

CF 30 00 00 00 00 00 00

SUM8-XOR 非默认布局:首帧 3、计数器起始 12、校验起始 0

30 的高半字节是 Counter 3;0x30 XOR 0xFF = 0xCF。这是演示布局联动的扩展示例,实际位置仍按项目通信定义。

每项输入后按 Tab。需要移动两个字段时依次改完,再核对两处位置和字节序;提示无效时,查看恢复后的值并修正重叠或越界字段。Intel/Motorola 的位编号不同,请按通信定义填写。

点击 添加… 选择内置算法,或选择 DLL 文件入口;选中算法后填写参数,按 Tab 结束单元格编辑。

P04 候选参数:头部偏移和长度范围

点击 确定 保存算法列表,点击 取消 放弃本次修改。发送行的常用参数则在结束编辑后直接生效。

操作 结果
修改报文 A 的参数 只改变 A;目录及报文 B 不跟着变化。
修改管理器候选 影响今后选择该候选;已有行保留原副本。
移除在用候选后确定 只移除目录和下拉选项,现有报文保留原算法、参数和状态。
多条报文使用同一 DLL 每条拥有独立参数、计数器及 Context,不按 CAN ID 或 DLL 路径合并。

移除候选不会删除 DLL 文件;磁盘上移走在用库则会造成缺库,相关保护项不会自动退成裸发送。要更新已有行,明确重新选择并核对;真实配置变化会重建该项状态。

下载 两套算法的源码和独立工程。包内含源码、工程、support、许可证及 BMCLI 示例,不含预编译 DLL。

已经安装 BMAPI SDK 时,可直接进入 BMAPI SDK/example/e2e_counter_checksum,找到同一组源码和 E2E_Algorithms.sln,按下列步骤修改、编译。

  1. 整体解压到可写位置,保留 support 子目录。
  2. 在 Visual Studio Installer 准备 使用 C++ 的桌面开发、MSVC v142 x86/x64 工具集与 Windows 10 SDK。
  3. 打开 E2E_Algorithms.sln,选择 Release / Win32,生成解决方案。
  4. 在 bin/Release/ 找到 crc8_2f_rc4b.dll、sum8_xor_rc4b.dll。
  5. 回到 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 文件。

在 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 的最低位。

  1. 取消目标发送行的周期勾选,断开 CAN。在 CAN 功能区点击 E2E,选中 SUM8-XOR + RC4b。
  2. 在管理器下方参数表中找到 额外可写位,填写 00 00 01,按 Tab 结束编辑。
  3. 在同一参数表的 参数(Hex) 中填写 01 01 10 00,按 Tab。01 为参数版本,第二个 01 开启转换位,10 00 以小端整数指定 bit 16。Config 保持 layout-v1,Profile 1、Variant 0、Context 16。
  4. 点击 确定 保存算法列表。返回发送窗口,在目标行 动态报文 中重新选择 SUM8-XOR + RC4b,使新参数复制到这条报文;原来已选过的行不会自动跟着列表变化。
  5. 在该行 E2E 区填写首帧计数 1,核对计数器 48 / 4 / Intel、校验 56 / 8 / Intel,业务模板仍为全零,发送次数为 1。
  6. 点击 复位,连接 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,请前往下载中心获取当前正式版本与历史版本。