Other Parts Discussed in Thread: SYSCONFIG, MSPM0L1117
器件型号: MSPM0L1117
主题中讨论的其他器件: SysConfig、
尊敬的 E2E 团队:
我尝试从 MSPM0L1117 SysConfig 复制以下 CRCP 设置:

如下所示、当将 DL_CRCP_calculateBlock16 与数据 0x0002 并且大小为 0x02 时、最终结果为 0x6070:

我需要在主机 MCU 上复制这些结果、但到目前为止、我尚未找到正确的功能和设置来实现这一目标
#include <stdint.h>
#include <stdio.h>
/**
* Calculates the CRC-16/AUG-CCITT checksum for a given data buffer.
*
* Parameters:
* data: Pointer to the input data array.
* len: Length of the input data in bytes.
*
* Returns:
* The calculated 16-bit CRC checksum.
*/
uint16_t crc16_aug_ccitt(const uint8_t *data, size_t len) {
// Parameters for CRC-16/AUG-CCITT:
// Polynomial: 0x1021
// Initial value (seed): 0x0F1D
// Input data not reflected, output CRC not reflected, no final XOR.
uint16_t crc = 0x0F1D;
uint16_t polynomial = 0x1021;
for (size_t i = 0; i < len; ++i) {
crc ^= (uint16_t)(data[i] << 8); // XOR current byte with the high byte of CRC
for (int j = 0; j < 8; ++j) {
if (crc & 0x8000) {
crc = (crc << 1) ^ polynomial;
} else {
crc <<= 1;
}
}
}
return crc; // No final XOR operation
}
int main() {
//...
uint8_t input_data[] = {0x00, 0x02};
size_t data_len = sizeof(input_data);
uint16_t result = crc16_aug_ccitt(input_data, data_len);
//...
}
我已经为 INPUT_DATA 和 CRC 尝试了不同的字节顺序、但到目前为止、我无法复制 0x6070 的结果。 您能否帮助确定我的算法有哪些不正确或缺失?
谢谢、
Ryan


