E8aでのデータ・フラッシュ・デバッグ

R8CマイコンのデバッグをE8aで行う予定です。

R8C上のデータ・フラッシュを使用しますが、このエリアの書き込みはE8aでデバッグ出来ますか。
昔のICEは通常とは別の特殊なモードでしかフラッシュの書き込みのデバッグが出来ませんでしたので、とても効率が悪くて苦労しました。

データ・フラッシュの領域だけでも通常通りにデバッグ出来たら楽なのですが、実際のところ可能でしょうか。
  • こんにちはNAKAといいます。

    そんなにはマイコンに詳しくないので、
    >このエリアの書き込みはE8aでデバッグ出来ますか。
    の意味がわかってないかもしれませんが、データフラッシュ
    への読み書きくらいなら参考になりますでしょうか?

    以前R8C21238のブロックA、B(1K)のフラッシュをEEPROM代
    わりに使った時作った関数です。

    まず、SFRのヘッダファイルに先頭番地を宣言します。

    /*-------------------------------------------
    FLASH MEMORY BLOCK
    ---------------------------------------------*/
    /* BLOCK A first address */
    #define BLOCK_A ((unsigned char *)0x02400)
    /* BLOCK B first address */
    #define BLOCK_B ((unsigned char *)0x02800)


    ◎書き込みは、
    /***********************************************/
    //関数名:Flash_Write_BA(unsigned short len\,unsigned char* buf)
    //動作:ブロックAへのデータフラッシュWRITE
    //引数:lenデータ列長 *bufデータ列先頭アドレス
    //作成:NAKA 09.05.20
    //備考:書き込み部以外のブロック内は全てイレーズ
    //**********************************************/
    void Flash_Write_BA(unsigned short len\,unsigned char *buf)
    {
    unsigned short i; //汎用カウンター

    fmr01 = 0; //アクセス方法の注意
    fmr01 = 1; //CPU書換えモード有効
    fmr11 = 0; //アクセス方法の注意
    fmr11 = 1; //EW1モードにセット

    fwp = BLOCK_A; //ポインターセット

    *fwp = 0x20;   //ブロックイレーズコマンド書き込み
    *fwp = 0xD0;   //ブロックイレーズデータ書き込み

    for( i = 0; i < len; i++ )
    {
    *fwp = 0x40;    //書き込みコマンド
    *fwp = buf[i]; //データ書き込み
    while(fmr00 == 0);
    fwp++; //ライトポインタインクリメント
    }

    fmr01 = 0; //CPU書換えモード無効(ソフトコマンド受付不可)
    }
    毎回ブロックごとイレーズする必要はないと思いますので、
    そこは消さずにアペンドする形に改造すればいいと思います。

    ◎読み出しは
    /***********************************************/
    //関数名:Flash_Read_BA(unsigned short len\,unsigned char* buf)
    //動作:ブロックAへのデータフラッシュREAD
    //引数:lenデータ列長 *bufデータ列先頭アドレス
    //作成:NAKA 09.05.20
    //***********************************************/
    void Flash_Read_BA(unsigned short len\,unsigned char *buf)
    {
    unsigned short i; //汎用カウンター

    fmr01 = 0; //アクセス方法の注意
    fmr01 = 1; //CPU書換えモード有効(ソフトコマンド受付可)
    fmr11 = 0; //アクセス方法の注意
    fmr11 = 1; //EW1モードにセット

    fwp = BLOCK_A; //ポインターセット

    for( i = 0; i < len; i++ )
    {
    *fwp = 0xFF; //読み込みコマンド
    buf[i] = *fwp; //データ書き込み
    while(fmr00 == 0);
    fwp++; //ライトポインタインクリメント
    }
      fmr01 = 0; //CPU書換えモード無効(ソフトコマンド受付不可
    }
  • NAKAさん、返信有難う御座います。

    書き込み、読み込みのプログラム自体は難しくはないと思っています。
    恐らくNAKAさんの挙げたプログラムの様になると思います。

    問題なのはこのプログラムがデバッガー上で動くかどうかなのです。
    昔のICEはプログラム上のフラッシュの書き込み処理が動作すると、ICE自体のフラッシュ制御とぶつかる為、かなりの制約事項が発生していまして、それがデバッグし難い要因になっていました。

    NAKAさんが以前EEPROM代わりに使用した時に、ICEに対して特殊な操作をしなくてもデバッグ出来たかどうかを知りたいのです。
    普通にデバッグ出来ましたか?
  • ご利用になるR8Cマイコンにより占有する領域は異なります。

    E8aのページからユーザーズマニュアル別冊[採用マイコン]を開き、「E8aエミュレータ使用上の注意事項」をご覧ください。


    マイコンによりますが、ユーザフラッシュ領域 or PROM領域を2kバイト使用するようです。

    ベクタの占有は避けられませんが、ROM領域に関してはある程度の自由が効くので、実現可能ではないでしょうか。
  • ずいぶん前になりますが
    R8C/212BCとE8aで内蔵データフラッシュROMを
    アクセスするソフトをやってましたが、
    普通にデバッグできましたよ。
    ブレークも普通にかけられましたし。
    ただ、完了ビット待ちとかのwhile文内を
    ステップ実行とかはしてませんけど。

    普通に読み出し・書き込みでデバッグできてましたよ
    モデルによる違いもあるかもしれないけど
    プログラムROMとは別領域ですからいけるんじゃない?

    ちなみにコンパイラは無償版とHEW環境でしたが。
  • 皆さま有難う御座います。

    E8aのユーザーズマニュアル別冊を確認しました。

    データ・フラッシュ領域の読み書きならE8aの制約事項に引っ掛からないようです。
    これで安心出来ました。

    環境が整いましたらデバッグしてみます。

    有難う御座いました。
  • 織田様

    こんにちは、NAKAです。

    ぼくも、すと様・tetnoguchi様と同様にE8(E8aの一個古い
    やつ)で動作確認してました。

    とくに変わった操作はしてません。

    もっと高度なことをされようとされているのかが
    わかりませんが、たぶん大丈夫だと思います。