お世話になります
T.Yと申します。
初めて投稿させて頂きます。
現在、RX66Nでデュアルモードの起動バンク選択機能を使用してプログラム切り替えを行いたいと考えております。
既に他に似たいようなスレッドがありますが、解決出来ませんでしたので新たに投稿させて頂きました。
動作環境は下記の通りです。
開発環境:e2studio
CPU:RX66N
コンパイラ:CCRX
デバッガ:E1(JTAG)
プログラムの切り替えを確認するために、ルネサス提供のflash_demo_rskrx72m_bank0_bootapp / _bank1_otherappを流用させて頂き、プログラムの切り替えを試しております。
(最終的には、外部からプログラムアップロードし、コードフラッシュに書き込む事を目標にしております)
複数のプログラムをダウンロードするとエラーになる件は、過去のスレッドを参考に解決しました。
手順は以下の通りです。
1.コードフラッシュメモリ上の0xffc00000~にメインアプリ1をダウンロード、0xffe00000にメインアプリ2をダウンロード
(この時、メインアプリ2自体は0xffc00000~実行するようにセクション設定を行い、デバッガーのstartup設定のオフセットを使用して0xffe00000にダウンロードしてます。)
2.プログラムを実行するとメインアプリ1が起動します。
3.実行直後、R_FLASH_Control(FLASH_CMD_BANK_TOGGLE, NULL);を実行しバンクを切り替えます。
(バンクが切り替わっていることは確認しました)
4.リセットを行います。
(起動バンクが切り替わっていることは確認出来ました。プログラムが起動されますが、同じプログラムが起動されます。)
この時、気になるのは、MDE.BANKMDをデバッガ上で確認すると111のままになっております。
コード上は、000になるようにプログラムされております。
vecttbl.cのMDEレジスタの定義は下記の通りです。
const uint32_t __MDEreg = (BSP_PRV_MDE_VALUE & BSP_PRV_BANK_MODE_VALUE);
エンディアンは設定値通りになっております。
試しに、1.でダウンロードしているアドレスを0xffe00000にしてみて試しても見たのですが、動作的には変わりませんでした。
フラッシュモジュールの設定の抜粋です。
#define BSP_CFG_CODE_FLASH_BANK_MODE (0)
#define BSP_CFG_CODE_FLASH_START_BANK (0)
#define FLASH_CFG_CODE_FLASH_ENABLE (1)
#define FLASH_CFG_CODE_FLASH_RUN_FROM_ROM (1)
バンク切り替えを行う事でバンクを切り替えられ、起動するアプリを切り替えられると思っておりますが何か勘違いしているのでしょうか?
詳しい方がおられましたら、ご教示頂ければと思います。
よろしくお願いします。
T.Yさん、こんにちは。NoMaYと申します。以下の点が何かおかしいように思います。デュアルバンク機能のデュアルモードでしたら、アプリ1もアプリ2も0xffe00000~に配置するようにセクション設定を行わなければならないのです。> 1.コードフラッシュメモリ上の0xffc00000~にメインアプリ1をダウンロード、0xffe00000にメインアプリ2をダウンロード(この時、メインアプリ2自体は0xffc00000~実行するようにセクション設定を行い、デバッガーのstartup設定のオフセットを使用して0xffe00000にダウンロードしてます。)> 試しに、1.でダウンロードしているアドレスを0xffe00000にしてみて試しても見たのですが、動作的には変わりませんでした。また、以下の点で気になったのですが(すみません、私自身はデュアルモードを試したことがないですけれども)、プロジェクト作成時のデバイス選択(あるいはデバッガでのデバイス選択)でデュアルモードを選択されていましたでしょうか?(リニアモードを選択しているとデバッガが無視している(強制的にリニアモードにしている)のかもと気になったのです。)> この時、気になるのは、MDE.BANKMDをデバッガ上で確認すると111のままになっております。> コード上は、000になるようにプログラムされております。[関連リンク]たぶん、以下のスレッドが何かしら参考になると思います。なお、ROMが2Mのマイコンでの事例ですので、デュアルモードにてROMが半分の1Mとなる場合の事例です。(かつ、最終的なターゲットはリニアモードとなるスレッドですので、ひょっとしたら裏目に出てしまうことになって、混乱させてしまうかも知れない危惧はありますけれども。)デュアルバンク機能時のオブジェクトダウンロード方法とVECTRESETの割り当てについてjapan.renesasrulz.com/cafe_rene/f/forum5/7901/vectreset[追記]既に参考にされたというスレッドはこちらでしょうかね、、、(こちらもリニアモードのスレッドですけれども。)r_flash_rx のサンプルについてjapan.renesasrulz.com/cafe_rene/f/forum5/7726/r_flash_rx
こんにちは。NoMaYです。すみません、少し脱線しますけれども、これはFITモジュールのドキュメントの画面コピーが間違っているのかな?(というか、デュアルモードのデモに関して、セクション設定の値に関する"文面"での記載が無い、ですよね、、、RX66NなどRX72M以外のマイコンを使おうとしている人が、RX72Mのデモのプロジェクトを実際に開いてみるかどうか考えてみると、開かない可能性も高いような気がしたのですけれども、、、)以下、画面コピーです。こちらはあっている(というか妥当である)と思うのですが、ひょっとして、こちらは間違っているのかな?(上のものを単にコピペしてしまったというミスなのかな?)
T.Yさん、NoMaYさん
こんにちはシェルティです。ルネサスの中の人です。
本件フラッシュFITモジュールの開発チームに診ていただいています。見解を得られたらまた書き込みます。
以上です
NoMaYさん。
こんにちは、T.Yです。
リプライありがとうございます。
無事、切り替えの確認を行う事ができました。
>また、以下の点で気になったのですが(すみません、私自身はデュアルモードを試したことがないですけれども)、プロジェクト作成時のデバイス選択(あるいはデバッガでのデバイス選択)でデュアルモードを選択されていましたでしょうか?(リニアモードを選択しているとデバッガが無視している(強制的にリニアモードにしている)のかもと気になったのです。)
NoMaYさんのご指摘通り、デバイスの選択が間違っておりました。
XXXX_DUALがデュアルモードを指しているとは思ってもおりませんでした。
デュアルモード用のデバイスを選択した所、セクションの初期値も0xffe00000になっておりました。
MDE.BANKMDレジスタの値も000になりました。
ありがとうございました。
また、何かあれば投稿させて頂きます。
今後とも、よろしくお願いします。
シェルティさん。
動作は無事確認出来しました。
NoMaYさんのコメントにもありましたが、デモ版のセクションに設定してあるアドレスが間違っているのだと思います。
開始アドレスは0xffc00000ではなく、0xffe00000で問題なく動作しました。
T.Yさん、こんにちは。NoMaYです。> デモ版のセクションに設定してあるアドレスが間違っているのだと思います。動作確認出来たということで良かったです。なお上記ですが、実はRX72Mのデモプログラムそのものは0xffe00000になっているのですが、画面コピーがそれと一致していないのです。(もう少し細かく書くと、デュアルモードのデモプログラムは複数含まれていますけれども、セクション設定の画面コピーはデモプログラムのどれとも一致しない、のです。)と、ここまで書いた後、RX64Mでのデモプログラムにリニアモードのデモプログラムがあって、うっかりRX64MのROMサイズをてっきり2Mだとばかり私が勘違いしていたことが発覚しまして、実物は4Mですので、その画面コピーかな、という気がしてきたところです。(RX64Mにも4Mバイト品があったとは、思っていなかった/ド忘れした、のでした。)
シェルティです。
無事解決に至り良かったです。_DUALの有り無しはシェルティも最近引っかかったところですね。このスレッドを読んだときにアンテナが反応しないといけないところなのですが、最近自分のアンテナの反応が悪く困っています。ともあれ解決してよかったです。NoMaYさんご指摘の件はマニュアルの誤記と分かりました。次版で修正します。