主题中讨论的其他部件:controlSUITE, MOTORWARE
大家好,
我想在C2000 MCU上实施CRC-16计算,用于与其他器件通信,因此我想使用一种现有标准,这种标准在其他地方易于实施。
我已成功实施controlSUITE示例中的CRC计算。 为了确认结果是否正确,我尝试使用一些广泛可用的在线CRC计算器。 但没有一个计算出与我的MCU相同的输出!
以 http://crccalc.com/ 为例-大多数其他生成器显示相同的结果。 查看这些设置,我会看到 0xE97B (或可用选项中的任何其它选项)的输出。 但VCU模块提供了0x9331 -请参见下面的详细信息以验证此实验。
我的CRC对象已初始化为:
CRC.seedValue = INIT_CRC16; crc.nMsgBytes = nbytes; crc.parity = crc_parity_偶 数; crc.crcResult = 0; crc.pMsgBuffer =(uint16_t *)&testInput[0]; crc.pCrcTable = NULL; CRC.init =(void (*)(void *)) crc_init16Bit; CRC.run =(void (*)(void *)) crc_run16BitPoly1;
输入矢量如下所示:
静态连接uint16_t testInput[NWORDS]={
0x4001,0x8002,0xC003,0x0004,0x4005, 0x8006,0xC007,0x0008,
0x4009,0x800A,0xC00B,0x000C,0x400D, 0x800E,0xC00F,0x0010,
0x4011,0x8012,0xC013,0x0014,0x4015, 0x8016,0xC017,0x0018,
0x4019,0x801A,0xC01B,0x001C,0x401D, 0x801E,0xC01F,0x0020,
0x4021,0x8022,0xC023,0x0024,0x4025, 0x8026,0xC027,0x0028,
0x4029,0x802A,0xC02B,0x002C,0x402D, 0x802E,0xC02F,0x0030,
0x4031,0x8032,0xC033,0x0034,0x4035, 0x8036,0xC037,0x0038,
0x4039,0x803A,0xC03B,0x003C,0x403D, 0x803E,0xC03F,0x0040,
};
或者采用在线计算器可接受的形式(仅为十六进制值流):
4001.8002万C003000440058006C00700084009800AC00B000C400D800EC00F001040118012C013001440158016C01700184019801AC01B001C401D801EC01F002040218022C023002440258026C02700284029802AC02B004080100030030C03340300303230030C3032403003230323032300C334033300323003240300C3032300C33303230323032303230323032300C3340300C334033323032303230323032300C33323033</s>30.0044万 5.8006万007000840098000.104万11.8012万130.0144万15.8016万017001840198010.204万21.8022万230.0244万25.8026万0270028402980240.801万3.003万3.3403万0.3032万3.003万30.324万30.0323万3.230323亿334033300323003240300303.23万33.3032万30.323万32.3032万30.323万3.23万334030033.4033万32.3032万30.323万3.230323亿3332.3033万
具体问题包括:
1) VCU使用哪些参数,是否有任何现有算法? 我找不到关于所用XOR值或输出位反转的任何信息(“Poly1Reflected”文档仅说明输入位)。
2)我应该更改哪些设置(以及如何更改)以获得与在线计算器相同的结果?