HEWで作成したソフトのE1エミュレータでのライト(ダウンロード)の違い

お世話になっております。

良く分からない現象が出ており、ご教授願います。

 

HEWで作成したファームを書き込んで動作確認しています。

1)E1エミュレータのデバッグモード(デバッガ)で動作させて確認

2)E1エミュレータのデバッグモードで接続し、ダウンロードで書き込み、

 書込み後E1エミュレータは外して動作確認

 つまり、デバッグモードでライトだけおこない、実際の動作確認はE1を使用せずに普通におこなう

3)E1エミュレータのフラッシュライタモードで接続し、ダウンロードで書き込み、

 書込み後E1エミュレータを外して動作確認

 

上記の3種類のやり方で確認しています。

1)に関してはデバッグモードで動作させているので違うのは分かるのですが、

2)と3)でも違いはあるのだろうと思うのですが、何が違うのでしょうか?←ここが一番わからないところです

現在、1)と2)では正常に動作するのですが、3)ではおかしな動きになってしまう困っています。

 

おかしな動き

・LCDの表示がずれたりする(ずっとずれている状態)→(少し違うかもしれませんが)123456と表示すると321654のような感じになる

 ※コンパイラの設定を変えると、表示文字がおかしくなることもある。

・UARTが正常に出来なくなる(PCと通信すると応答がなくなる)

 ※コンパイラの設定を変えると通信はするが、データがずれて送られてくることがある。

 

試したこと

・PLLを使用しているので、PLLのロックが正常にされていないのかと思い、時間を延ばしたりもしてみましたが変化ありませんでした。

  ※これが原因だとすると確認した方法の2)でも出そうな気もします・・・・。

・コンパイラの設定を変えて試してみましたが上記の「おかしな動き」に書いたように、おかしくなる状態が変わるだけでした。

 

以上です。

どこまで書けばよいのか分かりませんでしたので、発生している現象などを記載いたしました。

何か、検討するのに追加で記載する情報等ありましたら載せますので言ってください。

 

ご教授のほどよろしくお願い致します。

  • こんにちは

    デバッグモードとフラッシュライタモードでの違いは以下FAQに書かれているようなことがあります。
    ja-support.renesas.com/.../17796149

    マイコン単体で正しい動作にならない点はマイコン別のE1エミュレータ別冊の注意事項などを再確認してみては。
    www.renesas.com/.../r20ut0399jj1300_e1e20e2e2lite_rx.pdf
  • じま様

    ありがとうございます
    E1エミュレータ別冊、再確認してみたいと思います
  • yueさん、こんにちは。NoMaYと申します。#大昔に「はんだづけをするとプログラムが止まる」で一度リプライしたことがありますが。

    かふぇルネで私が関わった類似案件では、ソース上でのセクション切り替えのミス、もしくはリンカのオプション設定のミス、によってROM化が不完全になっていた事に加えて、デバッガが何のワーニングも出さずにRAMに直接データをダウンロードするようになっていて、そのせいでROM化が不完全になっていたことに気付かず、このような現象として見えていた、というものが多かったような気がします。

    たぶん、マップファイルを確認するだけでも怪しい点が見つかる可能性が高いですが、以下のようなデバッグ方法を提案すると、解決に向けて進んでいくことが多かったような気がします。

    ● 既にフラッシュメモリに書き込み済みのプログラムをそのまま使ってデバッグしてみる。(つまり、デバッガの設定で、コードのダウンロードはせずに、デバッグ情報のみダウンロードする、という設定にしてデバッグしてみる。)

    ● ただし、この時、デバッグ前に一旦マイコンの(というかマイコンの載っている機器の)電源をON→OFF→ONしてRAMの内容が不定になるようにしておきます。

    ちなみに、今回、以下の(2)で電源をON→OFF→ONすると、正常動作から異常動作へと状況が変化したりしないでしょうか?(変化したら、ROM化が不完全になっている可能性が高いと思われます。変化しなければ、このリプライはちょっと的外れだったかも知れません。)

    > 2)E1エミュレータのデバッグモードで接続し、ダウンロードで書き込み、
    >  書込み後E1エミュレータは外して動作確認
    >  つまり、デバッグモードでライトだけおこない、実際の動作確認はE1を使用せずに普通におこなう

    > 3)E1エミュレータのフラッシュライタモードで接続し、ダウンロードで書き込み、
    >  書込み後E1エミュレータを外して動作確認

    > 1)に関してはデバッグモードで動作させているので違うのは分かるのですが、
    > 2)と3)でも違いはあるのだろうと思うのですが、何が違うのでしょうか?←ここが一番わからないところです
    > 現在、)と2)では正常に動作するのですが、3)ではおかしな動きになってしまう困っています。

    あと、電源をON→OFF→ONしても正常動作のままであれば、(2)で書かれたフラッシュメモリの内容と(3)でダウンロードしているMOTファイルの内容を、フラッシュライタモードのベリファイ機能で比較してみたら、どういう結果になるでしょうか?(もしもその機能が存在しなかったら御免なさい。)

  • NoMaY 様

    回答ありがとうございます。
    まず、3)の状態でダウンロードで書き込み、その後デバッグモードでdebag情報のみ書込みをおこない
    確認しました。(電源ON→OFF→ONもしました)
    その結果、正常に動作しました。

    また、、(2)で書かれたフラッシュメモリの内容と(3)でダウンロードしているMOTファイルの内容を、フラッシュライタモードのベリファイ機能で比較してみたら
    という件ですが、比較する機能がHEWにあるのか現在分からないのですが、
    2)と3)でダウンロードして書き込んでいるmotファイルは共に同じファイルを指定しています。
    そのため、違いがあるとは思わないのですが…
  • 先ほど記載した結果から推測し、確認し、
    おかしい時は「debagu情報のみダウンロード」をすると正常な状態になることが分かりました。

    そこで、今までは特に「debagu情報のみダウンロード」を使用することが無かったので
    理解不足で申し訳ありませんが、現在調べています。

    調べているのですが現状見つかっておりませんので、
    「debagu情報のみダウンロード」とは、この「debagu情報のみ」とは何を指しているのか、
    噛み砕いてご教授願えませんでしょうか?
    もしくはどこかに記載してある場所を教えていただけませんでしょうか?

    この情報をダウンロードすれば正常になるということは、その情報が何なのか分かれば、
    解決の糸口になるかと思いますので何卒よろしくお願い致します
  • yueさん、こんにちは。NoMaYです。

    > 2)と3)でダウンロードして書き込んでいるmotファイルは共に同じファイルを指定しています。
    > そのため、違いがあるとは思わないのですが…

    HEWでは通常はABSファイルをダウンロードする設定では無かったでしょうか?(HEWは触っていた頻度がちょっと少なかったので、私の記憶違いでしたら御免なさい。)

    ただ、ここでのポイントは、(2)と(3)で同じフラッシュメモリイメージになっていることを念を入れて確認することですので、フラッシュメモリイメージが同一だったなら、私が前のリプライに書いたことは可能性から外して良さそう、だと思います。

    そして、(2)と(3)でフラッシュメモリイメージが同一で、かつ、(2)で電源をON→OFF→ONして正常動作のままなら、私自身も果たして(2)と(3)の違いは何だろうか?と思います。

    [訂正] (2)では動作確認時はE1を外していますので、以下の可能性は無いですね。すみません。
    そうなると、じまさんのリプライに書かれていたFAQの以下に似た何かなのだろうかと思うのですが、CC-RXの標準のスタートアップルーチン等を使っていれば以下に上げられている個々の項目では無いとは思います。では何だろう、、、 

    3.ユーザプログラムでスタックポインタ、汎用レジスタ、内蔵RAMの初期化を行っているか。

    一般的にE1エミュレータ使用時と、実チップ単体での違いとしては、初期値に関する問題があります。

        スタックポインタの初期値
        汎用レジスタの初期値
        内蔵RAMの初期値

    上記について初期化を行わないプログラムでも、E1エミュレータ使用時は、E1エミュレータにて一部領域を初期化をしているため、動作してしまう可能性があります。

     

    5.ユーザプログラムでオプション設定メモリのエンディアン選択レジスタS(MDES)でエンディアンの設定をしているか。

    エミュレータ使用時はプロパティの起動時設定に従ってエミュレータのプログラムが本レジスタに書き込みを行うため、ユーザプログラム中に本レジスタ設定がない場合も動作してしまいます。

     

  • yueさん、こんにちは。NoMaYです。

    「debagu情報のみダウンロード」は、一般的には、ソースデバッグに必要な以下のような情報のみダウンロードすることです。

    ・ソースの行番号とプログラムのアドレスの対応表
    ・関数の一覧(名前、アドレス、サイズ、型、等)
    ・変数の一覧(名前、アドレス、サイズ、型、引数情報、等)

  • NoMaY 様


    承知いたしました。
    では確認してみます。
    ありがとうございました。

    >HEWでは通常はABSファイルをダウンロードする設定では無かったでしょうか?

    確かにABSファイルでした。
    焦っているのか勘違いしておりました。
    申し訳ありません。
  • 確認を重ねておりますが、まだ解決に至っておりません。

    また、さらに細かく確認したところ、フラッシュライトモードで書き込むと異常動作となる。
    その後、下記のような動作をすると、正常になるということが分かりましたので記載しておきます。

    正常にする方法
    ※その1
     ・フラッシュライトモードで書き込みをおこなった後
      debag情報のみで書き込みをおこなう。

    ※その2
     ・フラッシュライトモードで書き込みをおこなった後
      HEWでE1エミュレータの接続解除をし、再度、フラッシュライトモードでもデバッグモードでも良いので
      接続 → 接続解除 とする。

    このどちらの方法でも正常になるようです。
    ルネサス社の方に直接問い合わせも行っていますが、現状解決に至っておりません。
    同じような現象になったことがある方は、ご教授願います

    よろしくお願い致します。
  • 度々失礼します

    現在再確認中ですが、自己解決できました。
    お騒がせして申し訳ありませんでした。

    一部、試験用にサンプルコードを使用していた箇所があるのですが
    その中で下記のように「Big Endian」の場合は「0」としなければいけない箇所を
    1箇所、見逃していた箇所があり、「1」となっていた箇所がありました。
    それが影響してしまっていたようです。
    1箇所でもこのような反するものが混ざっているだけで、
    今回のようなおかしなことになってしまうのですね
    勉強になりました。

    回答して頂見ました皆様、確認していただきました皆様、
    お騒がせ致しました。
    誠にありがとうございました。

    /* Endian mode for User Application.
    0 = Big Endian
    Else = Little Endian (Default)
    */
    #define BSP_CFG_USER_APP_ENDIAN (0)

    /* Endian mode for User Boot.
    0 = Big Endian
    Else = Little Endian (Default)
    */
    #define BSP_CFG_USER_BOOT_ENDIAN (0)