RL78/G13のCRCチェック機構

RL78で相変わらずごそごそと調べています。
コード生成の「安全機能」についてなのですが
このうち、フラッシュメモリCRC演算を使いたいと
おもいます。
使用するを選択しても特になにかできるような
コードがはかれているようすはありません。

ハードウエアマニュアルによれば、私のつかう
R5F100LEAFBだと64KBバイトなので
0-FFFBH
を指定してコード生成。
CA78K0R(ビルドツール)のオブジェクトコンバートオプションで
CRC演算を行う
CRC結果出力アドレス FFFC
CRC演算範囲 0h-0FFFBh
CRC演算方法 高速CRC
としたのですが、特になにかが生成されている
様子もありません。
HEXの生成アドレスFFF0からもFFでうめられているように見えます。

そこで問題なのですが、そもそもこのハードウエアCRC
演算は有効なのでしょうか?
CubeSuite+のユーザマニュアルをみよ、との指摘も
ありますが、実際に見つけられたのは
R_CGC_Set_CRCOn(void);
が定義されており、CRC検査開始ビット指定が
あるのみです。
ハードウエアマニュアルの支持通りにするなら
R_CGC_Set_CRCOn(void);
をコールして HALT命令を実行すればCRCチェックが
かかるようにみえますが、具体的には
どうすればいいのでしょう?
なにか資料がありませんでしょうか

Parents

  • 以下のような感じです。
    HALTしてRETしてくると、PGCRCLはちゃんと返ってくるようです。
    ハードウエアマニュアルどおりのうごきだとおもいます。

    ==========================================
    unsigned char ChkHardwareCRC(void)
    {
    // HALT\, RET
    char CRC_check_ram[] = {
    0x61\, 0xED\, 0xD7\,
    0\,0\,0\,0\,0\,0\,0\,0\,0\,0
    };
    unsigned int CRCvalue = 0;
    unsigned int CRCvalue2 = 0;
    unsigned char ret = 1;

    //X_ROM_CRC_SUM : 0xFFFC サムの保存アドレス
    __far int* const ptr = X_ROM_CRC_SUM;

    // RAM アドレス内にHALT配置
    void __far (*funcHALT)(void) = &CRC_check_ram[0];

    CRC0EN = 1; // CRC演算動作許可

    funcHALT(); // HALT実行

    CRC0EN = 0; // CRC動作停止

    CRCvalue = PGCRCL ;
    CRCvalue2 = *ptr;


    if ( CRCvalue != CRCvalue2 ) ret = 0;
    else ret = 1;

    return ret;
    }

    ==========================================

    問題は、
    0xFFFCにサムアドレスがきちんと生成されていない
    ということだとおもいます。
    やりかたはあっているでしょうか?
    CA78K0R(ビルドツール)をクリックして、
    オブジェクト コンバート オプションのタブをひらく。
    CRC演算の項目を
    CRC演算を行う
    CRC結果出力アドレス FFFC
    CRC演算範囲 0h-0FFFBh
    CRC演算方法 高速CRC
    に設定。

    もしかして、これだけではダメなんでしょうか?
    あと一歩まできているとおもうんですが。
    ヒントをいただければ、とおもうんですが。
    よろしくお願いします。

Reply

  • 以下のような感じです。
    HALTしてRETしてくると、PGCRCLはちゃんと返ってくるようです。
    ハードウエアマニュアルどおりのうごきだとおもいます。

    ==========================================
    unsigned char ChkHardwareCRC(void)
    {
    // HALT\, RET
    char CRC_check_ram[] = {
    0x61\, 0xED\, 0xD7\,
    0\,0\,0\,0\,0\,0\,0\,0\,0\,0
    };
    unsigned int CRCvalue = 0;
    unsigned int CRCvalue2 = 0;
    unsigned char ret = 1;

    //X_ROM_CRC_SUM : 0xFFFC サムの保存アドレス
    __far int* const ptr = X_ROM_CRC_SUM;

    // RAM アドレス内にHALT配置
    void __far (*funcHALT)(void) = &CRC_check_ram[0];

    CRC0EN = 1; // CRC演算動作許可

    funcHALT(); // HALT実行

    CRC0EN = 0; // CRC動作停止

    CRCvalue = PGCRCL ;
    CRCvalue2 = *ptr;


    if ( CRCvalue != CRCvalue2 ) ret = 0;
    else ret = 1;

    return ret;
    }

    ==========================================

    問題は、
    0xFFFCにサムアドレスがきちんと生成されていない
    ということだとおもいます。
    やりかたはあっているでしょうか?
    CA78K0R(ビルドツール)をクリックして、
    オブジェクト コンバート オプションのタブをひらく。
    CRC演算の項目を
    CRC演算を行う
    CRC結果出力アドレス FFFC
    CRC演算範囲 0h-0FFFBh
    CRC演算方法 高速CRC
    に設定。

    もしかして、これだけではダメなんでしょうか?
    あと一歩まできているとおもうんですが。
    ヒントをいただければ、とおもうんですが。
    よろしくお願いします。

Children
No Data