RL78G14,G13でUARTでセルフプログラミングする方法

懸命の内容を調べています。 参考になる資料、サンプルコードを教えてください。
G22,G23,G24ではファームウェアアップデートモジュールというのがありますが、
G14やG13は対応していないからです・

Parents Reply
  • 類似の資料がいくつかあったと思いますが、サンプルコードは分かりません。

    なお、上記の資料を元にファーム更新はできました。
    ブートセクタに実行時コードを置く必要があり、溢れないように注意した記憶があります。

    参考までに。

Children
  • ありがとうございます。
    ご紹介頂いた、
     ・RL78/G13 セルフ・プログラミング(UART受信データ)CC-RL
      www.renesas.com/.../rl78g13-self-programming-received-data-uart-cc-rl-rev101

    以外に下記の①と②があります。
     ①RL78/G22, RL78/G23, RL78/G24 ファームウェア アップデート モジュール
      www.renesas.com/.../rl78g22-rl78g23-rl78g24-firmware-update-module

     ②RL78/G23 UART通信とブート・スワップを使用したファームウェアアップデート
      www.renesas.com/.../rl78g23-updating-firmware-using-uart-communication-and-boot-swapping-rev100

    それぞれの違いは何でしょうか?
    「アップデート モジュール」、「ブート・スワップ」、「セルフプログラミング」は同じ意味でしょうか?
    恐れ入りますが教えていただけないでしょうか。
    よろしくお願いします。

  • ①と②は、CPUが違うので、メモリマップとかも違うようですね。そのままでは使えないかと。

    自分は、以下のようにしました。

      1. ブートセレクタ0(0x0nnn) にFlash更新に必要なコードを配置
        UART送受信などの割込み処理も必要
      2. Flash更新処理
        実際は、PCからコマンド送信で、以下の処理実行
      2.1 書換え用準備
        使用関数: FSL_Init(), FSL_Open(), FSL_PrepareFunctions(), FSL_PrepareExtFunctions()
        UART送受信は、別途
      2.2 ブートセレクタ0以外の領域をクリア
        使用関数: FSL_Erase()
        (書込み前のクリアで OK)
      2.3 UARTから、更新データ受信とFlash書込み
        ただし、一括は無理なので、行単位(Hexファイル 1行)
        ブートセレクタ0 は、ブートセレクタ1 (0x1nnn) のアドレスに書き込む
        使用関数: FSL_Write()
      2.4 書き込み終了で、ブートセレクタ 0/1の入れ替えと、リセット実行
        使用関数: FSL_InvertBootFlag(), FSL_ForceReset()

    あと、更新中に余計な割込みとかが、入らないように注意が必要なことでしょうか。

    他の人はどうしてるのでしょうか?
    書込みに時間が掛かるので、すぐに返信できなくてすみません。

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

    私の中で混乱しているのは、
    ①がすでにあるのに、何故②で「ブート・スワップを使用した」ものが開示されているのかです。
    ①と②の差異が分からないのです。
    ①と②で手法が異なるということでしょうか?

    それと、御紹介の 「RL78/G13 セルフ・プログラミング(UART受信データ)CC-RL」は、
    ②に近いものですか?
    よろしくお願いします。

  • ①、②は、RL78/G23向けのようなので、G13には使えませんね。別物と思った方が良いかもです。
    というより、メモリが少ないので同じ方法は取れないでしょう。

    (似たようなことはしていますが) 

  • お返事ありがとうございます。
    ここで言われている「メモリ」とはどこの部分を示していますか?

  • セルフプログラミングって、いくつか方法があるのですが、ROMサイズに余裕がある場合、書き込み先を余分にもたせることで書き換え中の電源断などによる更新失敗でも書き換えまのプログラムで起動できるってメリットがあります。

    スワップのやり方はおそらくこのROMに余裕がある品番向けで「ブートプログラム+アプリ2つ分」のROM構成が実現できる。スワップタイプができないROMが足りない場合は、書き換え処理失敗で最悪文鎮化ということになります。ブートローダが賢ければアプリ部分が異常になったら書き換えだけの機能を実行するようにするなどで対応するのかな。

  • 今、使ってる G13は、Flash ROM 64KBで、ブート部 4KBx2 で ブート部のスワップができる。
    ただし、ブート部を除いた Flashサイズは、56KB(64KB - 4KB x2)で余裕は少なく、メインのスワップは無理(というより、このクラスはそんな余裕のあるのを選ばない) それで、ブートスワップを使った書換え。

    G23の方は、最小でも フラッシュ 96KB 余裕があります(G13に比べ) それをどう使うかでしょう。

    書換え失敗の場合の対応を考えてるのですが、ちょっとトリックみたいな方法かなぁ、と。
    あと、IOとか増えたら、ツール(CS+)の自動生成部分にも手をいれる必要(section変更)が発生して、ちょっと困ってます。

  • 書換え失敗時の対応としては、ブート部が生きているとして、全体のチェックサムをチェックするとかあるのですが、課題として、書込みファームにチェックサムを用意する方法が必要、起動時にチェックサムを計算する時間が必要など、、、、昔にやったことはあるけど、今の環境だとちょっと課題あり。
    代わりにどっかにフラグ立ててそれがなかったら、不正とみなす方が簡単かと。

    どっちにしてもブート部に置くしかないので、ちょっと容量が心配。

  • 貴重なご意見、参考になります。
    ありがとうございます。