Community Translation - CRC Implementation in CY15x104QSx F-RAM™ – KBA220252

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

cross mob
keni_4440091
Level 7
Level 7
500 replies posted 100 solutions authored 50 solutions authored

Hi

I want to translate KBA220252, please confirm to my work.

Regards,

Nino

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

Hi, Nino-san

Confirm to work this KBA.

Thanks,

Jenna

Jenna Jo
0 Likes

CY15x104QSx F-RAM™へのCRC実装 – KBA220252

バージョン 2

ChaitanyaV_61 2019/06/25 22:26 に作成。ChaitanyaV_61 2019/06/25 22:31 に変更。

Version: **

質問:

CY15x104QSx F-RAMにどうやってCRCを実装しますか?

回答:

サイプレスCY15x104QSx FRAM2タイプのCRC動作をサポートします:

  1. データCRC: ユーザー定義されたメモリーブロック上でのCRC計算
  2. バスCRC: リアルタイムでSPIバス処理上でのCRC計算

データCRC: ユーザー定義されたメモリーブロック上でのCRC計算

CY15x104QSx F-RAMデバイスはチップ内のユーザー定義されたメモリーブロック上のCRCを計算することができます。メモリーブロックの開始アドレスと終了アドレスを特定でき、CRC計算は“CRC計算(CRCC5Bh)”命令を使用して実行される必要があります。計算されたCRC値はCRCレジスタ(CRCR)に保存されます。いずれの読み出しレジスタ(RDAR65H)コマンドも、CRCRから計算されたCRC値を読み出すために使用する事ができます。CRCアルゴリズムは、CRC[31:0]に割り当てられる{data[7:0],
data[15:8], data[23:16], data[31:24]}
の順でデータを受信する32-ビットの多項式(CRC-32C)を使用します。32-ビット多項式(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を計算している間、考慮に入れる必要があります。

  • 最終アドレス(EA)は、開始アドレス(SA)よりも高い少なくとも1つの32-ビットアラインドワード(2つの最下位アドレスビットA[1:0][00]に設定する必要があります)にする必要があります。EA < SA + 4の場合、CRC計算は中断され、デバイスはスタンバイモードに戻ります。EA < SA + 4の場合、CRCレジスタは不確定データを保持します。
  • CRCレジスタ(CRCR)ビットは、CRC計算が開始される毎にすべて1に初期化されます。POR、リセットまたはDPDモードの終了もまたCRCレジスタ値をすべて1にリセットします。

CRC計算が実行中の間、ステータスレジスタ(SR[0])のWIPWork In Progress)ビットは‘1’に設定されます。CRC計算動作が完了すると、WIPビットは‘0’に設定されます。このビットはCRC動作の完了状態を確認するために使用できます。

CY15x104QSxデバイスはCRC中断動作をサポートします。CRC中断(EPCS75h)命令は、メモリーにアクセスするためのメモリー読み出しコマンドを許可する実行中のCRC動作を中断するために使用する事ができます。CRC ResumeEPCR7Ah)コマンドは、EPCSコマンドで中断したCRC動作を再開します。

バスCRC バスリアルタイムでSPIバス処理上でのCRC計算

CY15x104QSxデバイスは、CRC-32C多項式を使用してコマンドエントリ、アドレスエントリ、モードビット、データ-入力、およびデータ-出力を含む全てのSPI処理毎にCRCを計算します。バスCRCは、データバスがドントケアになり、かつ動作中にCY15x104QSxまたはホストのどちらかによるドライブされないダミーバイトでは計算されません。CRC-32C多項式(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値は、バスCRCBCRC)レジスタに格納され、読み出しバスCRCレジスタ(RBCRC64h)コマンドを使用して読み出されます。BCRCレジスタは、RBCRC処理が完了するとすぐに0xFFFFFFFFにクリアされます。モードレジスタ(MR[7])のBCRC_DISビットはCY15x104QSxのバスCRC機能を有効化または無効化にします。BCRC_DISビットが‘1’に設定されると、バスCRCは無効になります; BCRC_DISビットが‘0’に設定されると、バスCRCは有効になります。バスCRCが無効になった場合、BCRCレジスタを読み出すと、不定値が戻されます。バスCRCが有効になった場合、RBCRCコマンドは、継続する前に初期状態に戻るためにCRC計算をリセットするために発行するがあります。

チップセレクトがLOWにアサートされ、バスCRCが有効でCY15x104QSxがアクティブな場合、CRC計算のためにSPIバス上の全ての処理(入力および/または出力)を取り込みます。アクセス中に有効になっているSPIモード シングルSPI、デュアルSPISPI)、またはクアッドSPIQSPI) により、各々のクロックサイクルのサンプルされた1/2/4データビットは、CRCチェックサムを計算し、かつBCRCレジスタに結果を格納するCRC生成器にクロックされます。SPI動作が、CS#信号をデアサートすることにより途中で中断された場合、それまで転送されたデータは、CRC計算のためにCRC生成器にクロックされます。

バスCRC値は下記の条件で0xFFFFFFFFhにリセットされます。

  1. Power on reset (POR)
  2. Hardware reset
  3. Software reset
  4. RBCRC command
  5. Exit from Deep power down mode
  6. Exit from Hibernate mode

CY15x104QSxの両者これらのCRC機能は、アプリケーションで高いレベルのデータ整合性を保証します。

 

846 閲覧 カテゴリ: Other

タグ: wireless, serial, spi, reliability, crc, proc, wireless usb, cy15x104qsx, cycling redundancy check, data integrity, integrity, polynomial, bus crc, user defined memory

0 Likes