私は、マイクロコントローラのファームウェアを更新するためにブートローダーと通信するプログラムを作成しています。 CRC calculation
以外はすべて準備ができています。CRC16-CCITT結果が正しくありませんか?
hereのCRC計算機能を使用して、多項式x16 + x12 + x5 + 1
(0b10001000000100001)のCRC16を計算しました。
しかし、入力0x3304000
の結果は間違っています。私はこれを確認しましたwebsite。また、私はC
で複製しているpythonスクリプトでダブルチェックしました。 PythonスクリプトはCRC
を正しく計算します。
uint16_t crc16(uint8_t *data_p, unsigned length)
{
unsigned char i;
unsigned int data;
unsigned int crc = 0xffff;
if (length == 0)
return (~crc);
do
{
for (i=0, data=(unsigned int)0xff & *data_p++;
i < 8;
i++, data >>= 1)
{
if ((crc & 0x0001)^(data & 0x0001))
crc = (crc >> 1)^POLY;
else crc >>= 1;
}
} while (--length);
crc = ~crc;
data = crc;
crc = (crc << 8) | (data >> 8 & 0xff);
return (crc);
}
私はエンディアンを責めます。 –
私は 'uint8_t'配列を渡しています。私は、エンディアンは問題ではないはずです。 – abhiarora
ウェブサイトがCRC16-CCITTを使用していることをどのように知っていますか? –