SH72531にてユーザブートプログラム

はじめまして兎家と申します。

SH72531にてユーザブートプログラムを作成しようとしていますが、

ユーザーズマニュアル ハードウェア編に

組み込みプログラム格納マットのプログラムがRAM上にロードされ、実行されてから

ユーザブートマットのリセットベクタアドレスから実行とあります。

組み込みプログラム格納マットのプログラムが何をしているのかよくわかりません。

CAN を使用したユーザプログラムモードフラッシュ書き換え動作例

というのも見てみましたが、あまり参考にはなりませんでした。

おそらく、RAM上のサブルーチンをユーザブートマットから呼び出して使うような構造だと

推測していますが、参考になるようなユーザブートプログラムのサンプルプログラムなどはあるのでしょうか?

 

よろしくお願いします。

  • わわいです
    組み込みプログラム格納マットのプログラムってのは、単にRAM上にプログラムを展開してそれを実行するだけ、ですね

    まず、なにをするためにユーザブートプログラムを作るんでしょうか。
    それがわかれば、なにをしなければならないか、なにをする必要があるのか、がわかると思います
  • わわい 様、早速の返信ありがとうございます。
    CAN通信でユーザマットを書き換えるような事を考えておりますが、
    以外に情報が少ないですね。
    なぜ組み込みプログラム格納マットのプログラムを前もって動作させるのか気になっております。
  • わわいです
    なら、CPUや必要な周辺デバイス、CANデバイスの初期設定を行い、その通信データをプログラムROMに書き込む、というコードを組んで、ユーザブートエリアに書き込む必要がありますね
    そこらへんの必要な情報はハードウエアマニュアルに載ってると思うんで、よく読んでみましょう
  • わわい 様、返信ありがとうございます。

    ハードウエアマニュアルからの情報でなんとか挑戦してみます。
    ありがとうございました。
  • SHのマニュアルにはフローチャートで丁寧に処理手順が書かれているので、23.7ユーザブートモードをそのまま記述すれば良いと思います。いずれにしても23.ROMを一通り読んでおいた方が良さそうです。
    すでに、RX,RH,RX,RLに主軸が移ってます。現時点でネットからSHのサンプルコード等の情報を得るのは困難だと予想します。
  • kijo 様返信ありがとうございます。
    23.7.1 ユーザブートモードの起動シーケンスの組み込みプログラム格納マットのプログラムをRAMにコピー
    とあるのですが、このRAMの内容使ってプログラムするようですが詳細が見つかりませんでした。
    適当に逆アセンブルしてみると確かにRAM上にMAT切替ルーチンなどのコードが展開されているようですが・・・
  • 兎家さん
    <このRAMの内容使ってプログラムする>
    というのは、
    1.SCIやLANやCANポートの初期化をする
    2.フラッシュROMをイレーズする
    3.SCIやLANやCANポートからデータをもらう
    4.もらったデータをフラッシュROMにプログラムする
    5.データをベリファイして3.から繰り返す
    のような処理ではないかと思います。

    SH72531にこだわらなければ資料は見つかると思いますよ。

  • 兎家さんが全体像をつかめていないような感じがします。

    23.5 ブートモード の 23.5.1 システム構成 を読んでください。
    "ブートモードで起動すると、組み込みプログラム格納マット上のプログラムが実行されます"とあります。図23.5の制御コマンド解析実行ソフト(内蔵)が組み込みプログラム格納マット上のプログラムで良いと思います。
    "組み込みプログラム格納マット上のプログラムは、SCI のビットレートの自動調整と制御コマンド方式でのホスト⇔本LSI 間の通信を実現"とありますが、
    1.ホストから内臓RAMにブート書き込みツールをロード
    2.ブート書き込みツールを起動
    も実行していると予想されます。
    ブート書き込みツールは、FDTなどからのコマンド入力に従って、
    1.ROMのデータを消去
    2.ホストから書き込みデータを内臓RAM経由でROMに書き込み
    3.検証
    を実行していると思います。

    23.4 ROM 関連モード概要に記載がありますが、ユーザブートモードでは任意のIFを使えます。ユーザブートマットに希望するIFの組み込みプログラム格納マット上のプログラムのようなものをブートモードで書き込んでおきます。ユーザブートモードで起動したときは組み込みプログラム格納マットではなくユーザブートマットが実行されるので、"のようなもの"で設定したIFでの通信が実現されます。

  • IKUZO さま
    kijo さま
    返信ありがとうございます。

    ユーザーブートモードで起動するとRAMに展開される”組み込みプログラム格納マットのプログラム”
    に関する資料は未だ発見できていませんが(探し方が悪いのか)、MAT切り替えとかMAT書き込みとか
    書き込み内容の検証などのプログラム”部品”が格納されているっぽいことが分かってきました。
    恐らくはこのプログラム部品をユーザーブートマットから必要な時RAMにジャンプして
    呼び出して利用できるようになっているのだと思います。
    (でないとリセット毎にわざわざRAMにプログラムを展開する意味が分かりません)
    資料がないので今回はこの部品は直接は利用せず、(暇なときに資料を探しつつ)
    自分で全て組んでユーザーブートマットに格納する方向で実装中です。
    手抜きができるかも・・・と思ったのですが^^;

    ちなみに、どうやらユーザーブートマットはE10A-USBではデバッグできないようです。
    ここにも謎な壁が存在しました。
  • >自分で全て組んでユーザーブートマットに格納する方向で実装中です。
    なら釈迦に説法だとは思いますが、一応、他のメンバーのために書き込んでおきます。

    マニュアルの23.5ブートモードの23.5.1システム構成に記載されている通り組み込みプログラム格納マットはRAMとは別物です。”組み込みプログラム格納マットのプログラム”はユーザーブートモードで起動してもRAMに展開されません。また、機能もSCI のビットレートの自動調整と制御コマンド方式でのホスト⇔本LSI 間の通信を実現と明確に書かれています。ビットレートの自動調整方法も記憶にあるので、ドキュメントやソースコードはどこかにあるのかもしれません。FCUが書き込み内容の検証などのプログラム”部品”と呼べそうですが、兎家さんは異なるイメージを持っていると予想されます。FCUに関しては私が使ったことのあるSHに無かったので私の勘違いかもしれません。

    23.4ROM関連モード概要に記載がありますが、MDA~MDD端子の設定値でユーザモード/ユーザプログラムモード/ユーザブートモード/ブートモードの切り替えが行われます。表23.4にそれぞれのモードの比較があります。ユーザモードもユーザマットから起動されます。MAT切り替えとかMAT書き込みはMDA~MDD端子の設定で変わります。書き込み内容の検証などのプログラムはブートモードでFDTなど使う場合は、FDTのパッケージに含まれていて組み込みプログラム格納マットのプログラムでホスト(PC)からターゲットマイコンのRAMに展開されます。ユーザブートモードの場合はこれもホストとのIFや書き込みデータのフォーマットに合わせて自分で用意する必要があります。確かに、ユーザーブートマットは32Kもあるので、すべてをユーザーブートマットや組み込みプログラム格納マットのプログラムに入れた方がすっきりしそうですが、将来的な書き込みデータのフォーマットなどの拡張を考えるとユーザーブートマットや組み込みプログラム格納マットのプログラムは最小にしてその都度書き込みツールをRAMに展開する方が良さそうです。ユーザーブートマットを使う場合は、ホストや作業者などでユーザーブートマットにすべてを組み込むのも良いかもしれません。

    一旦、ユーザーマットで開発しておいて、ユーザーブートマットに最適化したプログラムをロードする方がメモリーサイズの制限などから利点があるように感じます。私は通常のソフトウエア作成でもほとんどデバッガを使わないので、なんとなくですがユーザーブートマットはE10A-USBでデバッグできなくても困らないように感じます。