V850ES/SJ3 セルフプログラミング

参考となるサンプルプログラムやドキュメントの
場所を教えていただけないでしょうか。

http://documentation.renesas.com/doc/products/mpumcu/doc/v850/r01uh0248jj0500_v850essj3.pdf

に説明は書いてありますが、サンプルが見当たりません。

開発環境にはCubeSuite+を使っています。
  • よっしー9999さん

    こんにちはTOYKEYと申します。

    ライブラリとドキュメントと簡単なサンプルコードが
    こちらから落とせますよ。

    http://japan.renesas.com/products/tools/flash_programming/flash_libraries/self_prg_lib/downloads.jsp#
  • よっしー9999さん

    ramoth です。

    TOYKEY さんが紹介しているライブラリで、
    CPU がV850ES/SJ3 なので V850 TYPE04 となります。

    ファイルのリリース日が2009/07 となっており
    リリース時点ではNECエレクトロニクス製品でした。
    また、CubeSute/CubeSuie+ 対応ではなく、
    PM+を同梱したCA850 がコンパイラとなっています。
    そのため、インストールファイルを実行すると
    デフォルトのインストールフォルダが
    CubeSuite+ とは別のフォルダの
    C:\Program Files\NEC Electronics Tools
    となっています。(これはインストール時に変更できます。)

    インストールされるファイルは、CA850 のライブラリファイル
    とヘッダファイル、およびドキュメント・ファイル
    (ユーザーズ・マニュアル/使用上の留意点)
    となっています。

    PM+版の旧CA850 と CubeSuite+版同梱のCA850 では
    ライブラリファイルの仕様に差異は無いのでそのまま使用する
    ことは可能ですが、CubeSuite+ のビルド・ツールの設定で
    ライブラリファイルとヘッダファイルのパス情報を設定する
    必要があります。

    なお、インストール時に特にCA850のための情報を
    設定しているわけではないので、極端な方法として
    インストールされたライブラリ・ヘッダファイル・ドキュメントファイルをCubeSuite+のプロジェクトのあるフォルダ
    など都合のいい場所にコピーして、
    インストーラでインストールされた内容アンインストール
    してしまっても、ライブラリ自体は問題なく使用できます。

    なお、インストーラでインストールされたファイルを削除・
    または移動してしまうと、インストールされている場所に
    ファイルがないことでアンインストールができなくなる
    可能性があるので注意してください。



  • ramothさん、TOYKEYさん

    ご回答ありがとうございます。

    インストール&ビルドまではできましたが、
    フラッシュメモリにwriteできていません。
    ドキュメントにあったフローに従ってコード(添付ファイル)を書いてみたのですが。

    FlashWordWrite()の戻り値が8になるのですが、
    SelfLib.hを見てもエラーコード8は見当たらず
    原因が分かっていません。

    何かアドバイスいただけないでしょうか。

    ANMYsben2Da0Cxo8-0_A0312.jpg

  • よっしー9999さん

    「フラッシュ・メモリ・セルフ・プログラミング・ライブラリ Type01 Ver.5.00」
    のUMを見ると、期待以外の戻り値の場合は
    スタックオーバーフローとか動作周波数ミス等の根本的な設定ミスがあることを示唆しています。

    また、0x08というキーワードで探すと
    「FLASH MEMORY SELF-PROGRAMMING LIBRARY
    V850 Microcontrollers Type 01a Ver. 2.00」には
    「FE_WWV1 0x8 Write error」という内容も引っかかります。

    まぁ、Type04とType01で違うので何ともいえませんけど。

    AJudheqOsBHrnfVA_A0314.gif

    SPCoU1eTytHcqBaC_A0313.gif

  • よっしー9999さん

    ramoth です

    戻り値が8になる原因は良くわかりません。
    なので、原因とは関係ないかもしれませんが、
    デバッグ環境について少しお教えください。

    まず開発環境はCubeSuite+ ということですが、
    デバッグ用のハードツールは、
    フルICE(IECUBE) の QB-V850ESSX2
    オンチップデバッガ(OCD)の
    QB-V850MINI
    QB-V850MINIL
    QB-MINI2(MINICUBE2)
    E1
    のどれをお使いですか。
    もし、IECUBEの場合は、セルフプログラミングのデバッグ
    を行う場合はデバッガに対して設定が必要となります。

    次にターゲットボードですが、
    今回のシステム用に作成されたものか、
    市販されている評価ボード等のいずれでしょうか。

    今回のV850ES/SJ3を含むV850 TYPE04 の
    マイコンでセルフ・プログラムを行う場合、
    マイコンのFLMD0端子を外部回路で制御する必要が
    あります。
    作成されたプログラムでは、
    FLMD0_PORT = FLMD_HIGH;
    FLMD0_PORT = FLMD_LOW;
    となっている部分です。
    このFLMD0_PORT として使用している出力
    端子をターゲットボード上でFLMD0端子と接続し、
    FLMD0端子のレベルを、リセット時とセルフ・プログラム
    を行っていない期間はLowレベル、セルフ・プログラム中
    はFLMDO_PORTの出力によってHighレベルとする必要が
    あります。
    この件については 
    V850ES/SJ3 UM ハードウェア編
    R01UH0248JJ0500_V850ESSJ3
    P.1100 30.5.5 端子処理

    V850 FSL Type04 UM(ライブラリV1.20用)
    U17819JJ7V0UM00
    P.29 4.3 FLMD端子
    が参考になります。

    市販のターゲットボードの場合でセルフ・プログラム
    に対応している場合は、FLMD0制御用の回路があらかじめ接続
    されているか、ジャンパ設定などで実現できる回路となって
    いるはずです。








  • >Kirinさん
    情報ありがとうございます。ルネサスにも問い合わせてみます。

    >ramothさん
    情報ありがとうございます。
    デバッガは「QB-MINI2(MINICUBE2)」です。
    ターゲットボードは今回のシステム用にカスタマイズしたものです。
  • flmd0端子の制御が間違っているのでは?
    と思いました。

    ただ、flmd0のポートがP51ということまでは分かったの
    ですが、マニュアルを読んでも制御方法が分かりません
    でした。

    すみませんが教えていただけないでしょうか。

    >デバッガは「QB-MINI2(MINICUBE2)」です。
    QB-V850MINILの間違いでした。

    (修正)
    P51の制御方法はマニュアルを読んでわかりました。ただ、FlashWordWrite()の戻り値
    は8のままです。。

    wI3o97thzVbo6Wa1_A0315.gif

  • よっしー9999さん

    ●P51からHIGHを出す方法です。

    P5.1=1;
    PM5.1=0;
    PMC5.1=0;//既にPMC5.1=0なら不要

    ●FLMD0をLOWにする場合は、P51をHIZにすることで実現できます。(LOW出してもいいですけどHIZの方がエミュレータと信号の衝突がなくていいです)

    PM5.1=1;
    PMC5.1=0;//既にPMC5.1=0なら不要


    > ただ、flmd0のポートがP51ということまでは分かったの
    > ですが、マニュアルを読んでも制御方法が分かりません
    > でした。

    ramothさんが指摘されていましたけども
    よっしー9999さんのボードでFLMD0とP51が接続されているということでよろしいですよね。
  • >Kirinさん

    ご回答ありがとうございます。

    flmd0は以下のコードで制御できました。

    ------
    #define _P51 (((volatile struct bitf *)0xfffff40A)->bit01)
    #define FLMD0_PORT _P51
    #define FLMD_HIGH 1
    #define FLMD_LOW 0

    FLMD0_PORT = FLMD_HIGH;
    ------

    RAMに展開しているプログラムの破壊、
    戻り値の破壊の可能性があったので、試しに全ての
    ローカル変数をグローバル変数に変えてみたところ、
    FlashWordWrite()の実行が成功(戻り値が0)し、
    メモリにwriteできました。

    お手数かけました。