USBホストフラッシュブートローダーについて

はじめまして。よし と申します。

過去の投稿内容やメーカーからご提示されている資料を拝読するものの、どうしても分からないことがありご教示をお願い致します。

現在、RX621でUSBホストフラッシュブートローダーを作ろうとしています。

試しに、アプリケーションノート(R01AN0892JJ0100)とサンプルプログラムを入手しまして、

boot側をサブプロジェクト、download側をメインプロジェクトとして環境を用意しました。

ハードは自作の基板になります。

そこで、いくつか御質問が御座います。

1.boot側の動作としては、起動後、R_Fl_Mode_Entry();へ遷移する事は確認できました。

  当該関数内の以下の処理で、指定アドレスが格納されずif文内へ入ってこず、設定の問題なのかサンプルコードのミスなのか、

  判断が出来ずに迷っております、、、

 

  /* ==== Set target reset vector ==== */
  trgt_vctr_tmp = (uint32_t *)FL_TARGET_REST_VECT_ADDR;

  if(*trgt_vctr_tmp != 0xFFFFFFFFu){
   /* ==== Call user function ==== */
   trgt_fnc = (void (*)())(*trgt_vctr_tmp);
   trgt_fnc();
  }
  else{
   while(1);
  }

  0xFFFFFFFFが格納されており、必ずelseに来てしまいます。

   メモリViewで確認するに、以下となっていました。

  trgt_vctr_tmp = 0xFFFE3FFC

  *trgt_vctr_tmp = 0xFFFFFFFF

 

2.上述の1の状態から、trgt_vctr_tmp = 0xFFFE3FFCとなるように設定をして、

  trgt_fnc()の遷移先を0xFFFE3FFC番地にした際、予期しないアドレスへ遷移してしまいます。

  当方が期待する遷移先は、download側のPowerON_Resetなのですが、TrgtPrgDmmy.cに記載されているTrgtPrgDmmy_mainがコメントアウトされているので、

  ユーザー側で処理を追記する必要があるものなのか、あるいは、download側とのリンクが上手く設定できておらず遷移できていないのか、

  お恥ずかしながらサンプルプログラムにどの様な追加設定・処理をすべきか分からない状態にあります、、、

  関係しそうなノートとして、ブート領域、フラッシュ領域の分割方法(R20UT4547JJ0100)は拝読しております。

 

開発環境は以下になります。

統合開発環境:CS+ for CC V7.00.00 [13 Jun 2018]

CPU:R5F56216B(176pin)

ハード:自作基板

お知恵を貸して頂ける方、どうぞ宜しくお願い致します。

Parents
  • よし さん、こんにちは。NoMaYと申します。

    アプリケーションノートR01AN0892JJ0100を見てみたところ以下の記載がありますしたので、以下の(1)と(2)の可能性が高く、しかしどちらもOKであるなら、(3)についてデバッグすることになるかな、と私は思いました。(すみません、まだ私は、サンプルプログラムはダウンロードしていなくて、ドキュメントのみ見てみた範囲でのこと、ですが。)

    (1) そもそもdownload側をブートローダでダウンロードしていない
    → これは、よしさんが、したか/しなかったか、ですので直ぐに分かると思います

    (2) download側のプロジェクトのセクション設定に誤りがあってFL_TARGET_REST_VECT_ADDRにdownload側のPowerON_Resetルーチンのアドレスが格納されていない
    → download側のMOTファイルに、FL_TARGET_REST_VECT_ADDR番地にPowerON_Reset番地の値がレコードとして出力されているかどうかですので、エディタで調べれば分かると思います。(MOTファイルの仕様に関してはアプリケーションノートにも記載があります。)

    (3) ブートローダが正常動作しておらず、USBメモリ内のMOTファイルの内容を正しくRX621のフラッシュメモリに書き込めていない。
    → 上記の(1)と(2)がOKであるなら、もうそういうことになってしまうと思いますので、後は地道にデバッグしていくのみかな、と思います。

    R01AN0892JJ0100

    ドキュメント
    www.renesas.com/jp/ja/doc/products/mpumcu/apn/rx/001/r01an0892jj0100_rx62n_621.pdf

    ダウンロード
    www.renesas.com/jp/ja/software/D3007834.html

    ドキュメントの画面コピー


     

  • NoMaY 様 ご指摘ありがとうございます。

    頂いた項目を一つずつ確認して参りました。
    >>(1) そもそもdownload側をブートローダでダウンロードしていない
      ->ブートローダーではダウンロードしておりません。
      download側をメインプロジェクト、boot側をサブプロジェクトにして、E1でデバッグを開始していました。
      どちらのプロジェクトも設定が正しければ、boot側からdownload側へジャンプして、
      download側のリセットベクタへ遷移するものと思っていました。
      つまり、配置アドレスがオーバーラップしていなければ、両方のプロジェクトのプログラムが展開されて、
      然るべき動作になるのだと解釈しておりました。
      ちなみに、両方のプロジェクトはダウンロードした後、HEW->CS+への変換を掛けただけになります。

    >>(2) download側のプロジェクトのセクション設定に誤りがあってFL_TARGET_REST_VECT_ADDRに
      download側の PowerON_Resetルーチンのアドレスが格納されていない
      ->こちらはご指摘の通りでした。
       download側のmotファイルには、0xFFFE3FFC番地が出力されていませんでした。

    この時点で(3)に及ばずとも、見直しをする点がいくつか存在するのですが、download側のvecttbl.cには、
    #pragma section C FIXEDVECTで割り付け処理が掛かれてありました。
    このFIXEDVECTは0x0FFFE3FD0番地に開始セクション設定がされています。
    続いて、vecttbl.c内にはDummyも含めまして12個のVector dataが掛かれており、PowerON_Resetは丁度、0xFFFE3FFCに位置する箇所に存在しています。

    ところが、実際のPowerON_Resetが配置されるアドレスは、resetprg.cで#pragma section ResetPRGとなっているので、0xFFF80000番地に設定されます。

    正に、ここが当方の知見が及んでいない部分だと認識しておりまして、vecttbl.cの記載された処理は、添付頂いたドキュメントの画面コピーにある、「0xFFFE3FFC番地に書かれたアドレスを実行」に相当するものではないのでしょうか?
    FIXEDVECTセクションの0xFFFE3FFC番地にPowerON_Resetのジャンプ先があり、実際のPowerON_Resetの配置番地である、0xFFF80000番地へジャンプする・・・と解釈したのですが、ご指摘頂いた通り出力コードはその様になっていないので、認識が間違っていることは理解ができております。

    初心者の質問で申し訳ございません、、、
Reply
  • NoMaY 様 ご指摘ありがとうございます。

    頂いた項目を一つずつ確認して参りました。
    >>(1) そもそもdownload側をブートローダでダウンロードしていない
      ->ブートローダーではダウンロードしておりません。
      download側をメインプロジェクト、boot側をサブプロジェクトにして、E1でデバッグを開始していました。
      どちらのプロジェクトも設定が正しければ、boot側からdownload側へジャンプして、
      download側のリセットベクタへ遷移するものと思っていました。
      つまり、配置アドレスがオーバーラップしていなければ、両方のプロジェクトのプログラムが展開されて、
      然るべき動作になるのだと解釈しておりました。
      ちなみに、両方のプロジェクトはダウンロードした後、HEW->CS+への変換を掛けただけになります。

    >>(2) download側のプロジェクトのセクション設定に誤りがあってFL_TARGET_REST_VECT_ADDRに
      download側の PowerON_Resetルーチンのアドレスが格納されていない
      ->こちらはご指摘の通りでした。
       download側のmotファイルには、0xFFFE3FFC番地が出力されていませんでした。

    この時点で(3)に及ばずとも、見直しをする点がいくつか存在するのですが、download側のvecttbl.cには、
    #pragma section C FIXEDVECTで割り付け処理が掛かれてありました。
    このFIXEDVECTは0x0FFFE3FD0番地に開始セクション設定がされています。
    続いて、vecttbl.c内にはDummyも含めまして12個のVector dataが掛かれており、PowerON_Resetは丁度、0xFFFE3FFCに位置する箇所に存在しています。

    ところが、実際のPowerON_Resetが配置されるアドレスは、resetprg.cで#pragma section ResetPRGとなっているので、0xFFF80000番地に設定されます。

    正に、ここが当方の知見が及んでいない部分だと認識しておりまして、vecttbl.cの記載された処理は、添付頂いたドキュメントの画面コピーにある、「0xFFFE3FFC番地に書かれたアドレスを実行」に相当するものではないのでしょうか?
    FIXEDVECTセクションの0xFFFE3FFC番地にPowerON_Resetのジャンプ先があり、実際のPowerON_Resetの配置番地である、0xFFF80000番地へジャンプする・・・と解釈したのですが、ご指摘頂いた通り出力コードはその様になっていないので、認識が間違っていることは理解ができております。

    初心者の質問で申し訳ございません、、、
Children
No Data