Behringer DEQ2496 音频设备可以通过 MIDI 向其发送命令,但是它们需要有效的 CRC 代码才能让设备接受它们。
到目前为止,我一直无法弄清楚 CRC 代码是如何计算的。该手册建议它是 CRC8,但是我无法配置 CRC8 算法来生成匹配值。
以下是一些示例数据,包括有效的 CRC 代码:
DEQ2496 SysEx 手册说明了上述每个文件的布局:
blockdata : 7/8 编码: blockno_h, blockno_l, crc, data[256]。
crc:blockno_h、blockno_l、data[256]的crc8校验和
blockno:传输的 256 字节数据块号(闪存偏移的第 21..15、14..8 位);块 0-0x1f:引导加载程序;块 0x20..0x5ef:应用程序;块 0x5f0-0x5ff:启动画面;块 0x600-0x67f:预设;块 0x680-0x69f:临时缓冲区;块 0x6a0-0x7ff:硬件配置;块号 0xff00 在屏幕上显示文本消息数据 [0..52]
数据:数据块
我已经处理了 7/8 编码,所以现在我有一个 3+256 字节的块,包括:
- 偏移量 0:16 位大端整数,块号
- 偏移量 2:8 位整数,CRC(这是我试图计算的值)
- 偏移量 3+:实际数据
我尝试了几种 CRC 算法(有和没有查找表),编写代码来运行所有可能的 8 位多项式,初始和最终 XOR 值,但我找不到任何参数超过一个块。
尽管手册建议 CRC 字节本身不包含在 CRC 计算中,但我也尝试将其留在原处并将其设置为各种值,例如0x00,0xFF但这也没有产生任何结果。
有没有比我拥有更多 CRC 知识的人能够弄清楚“crc8 校验和”在这里的含义?