转换 srec 校验和

transforming srec checksums

假设我有一个包含以下内容的二进制文件:

uint32_t data[] = {
  0x00000000, 0x11111111, 0x22222222, 0x33333333, 0x44444444,
  0x55555555, 0x66666666, 0x77777777, 0x88888888, 0x99999999};

IAR 链接器生成校验和 55 1D 81 96,srec_cat 可以这样复制:

srec_cat data.srec -crop 0x00 0x28 -Bit_Reverse -CRC32BE 0x28 -Bit_Reverse -XOR 0xff -crop 0x28 0x2c -o - -hex-dump

给定相同的数据,我的目标硬件中的 CRC32 加速器(IEEE-802.3 样式)生成 F8 EE 40 0B,srec_cat 可以这样复制:

srec_cat data.srec -crop 0x00 0x28 -CRC32BE 0x28 -crop 0x28 0x2c -o - -hex-dump

我无法更改 IAR 链接器生成的内容,也无法更改硬件加速器使用的算法。鉴于此,有没有办法将 IAR 样式的校验和 (55 1D 81 96) post-facto 转换为 IEEE-803.2 样式的校验和 (F8 EE 40 0B)?

我已经盯着它看了,我没有看到任何明显的东西。 (如果需要,我可以使用 srec_cat 将 IAR 样式的校验和替换为 IEEE-802.3 样式的校验和作为 post 构建步骤...)

不,无法通过转换其中一个 CRC 来获得另一个。您必须计算消息所需的 CRC。

作为参考,第一个 CRC 是 CRC-32/ISO-HDLC。第二个是CRC-32/MPEG-2.