Community Translation - CRC-32 Parameters Used in Cypress S26KL-S/S26KS-S HyperFlash™ Family - KBA223179

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
HiOm_1802421
Level 5
Level 5
Distributor - Marubun (Japan)
50 replies posted 50 questions asked 25 replies posted

Hi,

I want to translate the following KBA into Japanese, please confirm to my work.

CRC-32 Parameters Used in Cypress S26KL-S/S26KS-S HyperFlash™ Family - KBA223179

Omoi

0 Likes
2 Replies
JennaJo
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

Hi, Omoi-san

Confirm to work this KBA.

Thanks,

Jenna

Jenna Jo
0 Likes
HiOm_1802421
Level 5
Level 5
Distributor - Marubun (Japan)
50 replies posted 50 questions asked 25 replies posted

Hi,

I tried to translate this KBA223179 into Japanese.

CRC-32 Parameters Used in Cypress S26KL-S/S26KS-S HyperFlash™ Family - KBA223179

==========

タイトル:サイプレスS26KL-S/S26KS-S HyperFlash™ファミリで使用されるCRC-32パラメータ

バージョン:**

質問:

ソフトウェアベースのCRC-32計算機で、HyperFlashのハードウェアCRC-32計算機と同じ結果を得るには、どの多項式、初期値、および出力XOR値を使用する必要がありますか?

回答:

HyperFlashファミリーのデバイスに組み込まれたハードウェアCRC-32計算機は、次のパラメーターを使用します。

パラメータ

多項式

0x1EDC6F41

初期値

0x00000000

出力XOR値

0x00000000

入力反転

No

出力反転

No

多項式 0x1EDC6F41 は、一般的に次のように表されます。

X 32 + X 28 + X 27 + X 26 + X 25 + X 23 + X 22 + X 20 + X 19 + X 18 + X 14 + X 13 + X 11 + X 10 + X 9 + X 8 + X 6 + 1

CRC-32パラメータに加えて、次の図で示すようにHyperFlashのCRC-32計算機で使用されるデータの順序にも注意する必要があります。

Untitled.png

たとえば、下位ワードと上位ワードがそれぞれ0xF42Dと0x8CCFであり、ソフトウェア ベースのCRC-32計算機が8ビットのバイト ストリームを取る場合、入力データ バイトは 0xF4 - 0x2D - 0x8C - 0xCF の順序である必要があります。

次のCソースコードと表に、簡単なソフトウェアCRC-32計算機の例と、参考のためのいくつかの計算結果を示します。

uint32 Calculate_CRC32(const uint8 *byte_data, uint32 byte_count)

{

       uint32 pos, i;

       uint32 crc = 0; /* Initial Value */

       for (pos = 0; pos < byte_count; pos++)

       {

              crc ^= (uint32)(byte_data[pos] << 24);

              for (i = 0; i < 8; i++)

              {

                     if ((crc & 0x80000000) != 0)

                           crc = (uint32)((crc << 1) ^ 0x1EDC6F41); /* Polynomial */

                     else

                           crc <<= 1;

              }

       }

       return crc;

}

void Test_CRC32(void)

{

       uint16 sample_data[4] = {0xF42D, 0x8CCF, 0xF646, 0x3129};

       uint32 crc;

       /* Swap byte order for Little Endian systems */

       uint32 i;

       for (i = 0; i < 4; i++)

       {

              sample_data = ((sample_data >> 😎 & 0xFF) | ((sample_data & 0xFF) << 8);

       }

       crc = Calculate_CRC32((uint8 *)sample_data, 8);

       printf("CRC-32: %08X\n", crc);

}

サンプル データ

CRC-32値

0xF42D, 0x8CCF, 0xF646, 0x3129

0x22531137

0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF

0xB29FF223

0x0123, 0x4567, 0x89AB, 0xCDEF

0xBAA822E2

==========

BR,

Omoi

0 Likes