フラッシュ書き換えについて

使用CPU:R5F104JG(RL78/G14)

フラッシュセルフプログラミングライブラリType01を使っております。

目的の内容は以下のことです。

  • 実行中プログラムで、別プロブラムのmotファイル内容をシリアルで受け取る。
  • ライブラリを使用して、motファイル内容を書き込む。
  • 別プログラムを実行する。

 このとき、実行中プログラムはベクタ領域0x0000~と、プログラム領域0x3000~を使用しています。

 別プログラムはセクション設定でプログラム領域を0x4000~に変更しました。

 ここから質問になります。

  • ベクタ領域は「セクション設定」で変更する項目がありませんでしたが、変更する方法はあるのでしょうか?
  • 変更する方法がなければ、別プログラムのベクタ領域(0x0000~)を、ブートクラスタ1のベクタ領域(0x1000~)へ書き込んで良いのでしょうか?
  • ブートクラスタ1のベクタ領域(0x1000~)とプログラム領域(0x4000~)の書き換え後、アドレスジャンプで、0x1000へ飛べば、別プログラムは実行されるのでしょうか?(次回からは、最初の実行中プログラムから立ち上げたいので)

誠に申し訳ありませんが、宜しくお願い致します。

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

    質問された内容を何度も読み返しているうちに、私が勘違いしたかも知れない気がしてきました。RL78マイコンで、ブートクラスタとか、各ブートクラスタのベクタ領域とか、ブートスワップとか、そういった言葉が出てくれば、『RL78/G13フラッシュ・セルフ・プログラミング実行編 』の内容をやろうとしているのだと予測してしまうのですが、実はそんな話ではなくて、RXマイコンでやっていた(RXマイコンでは何の苦も無くやれていた)ある手段を同じようにRL78マイコンでやろうとして、でもRL78マイコンでは出来無くて、苦肉の策でブートスワップ機能に辿り付いた経緯なのかな?という気もしてきました。

    (1) RXマイコンでは割り込みベクタテーブル(RXv1,v2,v3)と例外ベクタテーブル(RXv2,v3)の先頭アドレスをCPUのシステムレジスタであるINTBレジスタやEXTBレジスタで自由なアドレスに移せる。

    (2) そこで、起動時は、起動時に実行されるアプリA内のベクタテーブルを指すようにINTBやEXTBを設定して、アプリAを実行していた。

    (3) その後、アプリAがアプリB(もちろんアプリAが使っていないフラッシュメモリ領域に配置)をフラッシュメモリにダウンロードしてアプリBに制御を移す。

    (4) アプリBに制御が移った後は、アプリB内のベクタテーブルを指すようにINTBやEXTBを設定する。

    (5) なお、アプリAは書き換えることなく、同じものを使い続ける。

    (6) RL78にもINTBレジスタやEXTBレジスタに相当するものがあれば良かったのだが、そんなものは存在しておらず、RXマイコンでは何の苦も無くやれていた上記の手段がRL78ではやれなくなって、色々調べたところ、RL78マイコンではブートスワップ機能を使うとどうやら0番地と0x1000番地の2箇所にベクタテーブルを持たせることが出来るらしいということを知って、最初の投稿の質問に至った。

    ひょっとして、そういうことだったりしますか?

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

    質問された内容を何度も読み返しているうちに、私が勘違いしたかも知れない気がしてきました。RL78マイコンで、ブートクラスタとか、各ブートクラスタのベクタ領域とか、ブートスワップとか、そういった言葉が出てくれば、『RL78/G13フラッシュ・セルフ・プログラミング実行編 』の内容をやろうとしているのだと予測してしまうのですが、実はそんな話ではなくて、RXマイコンでやっていた(RXマイコンでは何の苦も無くやれていた)ある手段を同じようにRL78マイコンでやろうとして、でもRL78マイコンでは出来無くて、苦肉の策でブートスワップ機能に辿り付いた経緯なのかな?という気もしてきました。

    (1) RXマイコンでは割り込みベクタテーブル(RXv1,v2,v3)と例外ベクタテーブル(RXv2,v3)の先頭アドレスをCPUのシステムレジスタであるINTBレジスタやEXTBレジスタで自由なアドレスに移せる。

    (2) そこで、起動時は、起動時に実行されるアプリA内のベクタテーブルを指すようにINTBやEXTBを設定して、アプリAを実行していた。

    (3) その後、アプリAがアプリB(もちろんアプリAが使っていないフラッシュメモリ領域に配置)をフラッシュメモリにダウンロードしてアプリBに制御を移す。

    (4) アプリBに制御が移った後は、アプリB内のベクタテーブルを指すようにINTBやEXTBを設定する。

    (5) なお、アプリAは書き換えることなく、同じものを使い続ける。

    (6) RL78にもINTBレジスタやEXTBレジスタに相当するものがあれば良かったのだが、そんなものは存在しておらず、RXマイコンでは何の苦も無くやれていた上記の手段がRL78ではやれなくなって、色々調べたところ、RL78マイコンではブートスワップ機能を使うとどうやら0番地と0x1000番地の2箇所にベクタテーブルを持たせることが出来るらしいということを知って、最初の投稿の質問に至った。

    ひょっとして、そういうことだったりしますか?

Children
No Data