This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
早上好!
我要寻找如何在 BSL 命令中计算 CHK 和 CHL?
在 SLAU319AF 中指定:
CHECKSUM = INV [(B1 + 256 ×B2) XOR (B3 + 256 ×B4) XOR… 异或(Bn–1 + 256 ×Bn)]
金奖
CKL = INV [ B1 XOR B3 XOR… XOR Bn–1]
CKH = INV [ B2 XOR B4 XOR… XOR Bn ]。
对于订单:
TX_BSL_版本
[80][01][00][19][e8][62]
<80><05><00><3a><00><09><36> <90><9d>
供应商:[TI] CI:[09] API:[36] pi:[B5]
该计算给出:
CKL = NOT (0x80 XOR 0x00 XOR 0x00 XOR 0x36)= NOT (0XB6)= 0x49。
和
CKH = NOT (0x05 XOR 0x3A XOR 0x09 XOR 0XB5)= NOT (0x83)= 0x7C。
BSL 脚本解释器给出了这个命令 CKL = 0x90和 CKH = 0x9D。
解释是什么?
提前感谢。
尊敬的 Seth:
感谢您的答复。
对于每一个阶、只能用灰色的数据来计算 CRC。

在这个情况下(TX BSL 版本):
TX_BSL_版本
[80][01][00][19][e8][62]
<80><05><00><3a><00><09><36> <90><9d>
供应商:[TI] CI:[09] API:[36] pi:[B5]
无符号字符 StingTest[]={0x3A、0x00、0x09、0x36、0xB5};
uint16_t calculateCRC16CCITTFALSEChecksum (unsigned char * ByteBuffer、unsigned int NumChars)
{
INT I = 0;
INT j = 0;
uint16_t 校验和= 0xFFFF;
for (I = 0;I < NumChars;I++)
{
CHECKSUM ^=(ByteBuffer[i]<< 8);
对于(j = 0;j < 8;j++)
{
if (校验和及0x8000)
{
校验和<<= 1;
CHECKSUM ^= 0x1021;//表示 x^15 + x^12 + x^5 + 1多项式
}
否则
校验和<<= 1;
}
}
}
CRC = calculateCRC16CCITTFALSEChecksum (StingTest、5)= 0x9D90
对于每个阶、用于 CRC 计算的数据在 SLAU550AB 指南中呈灰色显示。
谢谢