HEWの外部フラッシュメモリ設定について(E10A+H8SX1651)

このたび、10年ぶりくらいに組み込みソフトを作成する事になりました。
が、さっそく行き詰まってしまい、どなたかご教授していただけますよう、お願いいたします。

 

過去に製作された開発ボードと開発機材(E10A+HEW)がありまして(製作者は不明です)、そのソフトを開発する事になりました。(残念ですが、ハード技術者はいませんし、当事者もおりません)


(完動する?)HEWプロジェクトは残っているのですが、外部フラッシュメモリの設定部分は残っておりません。

動作確認をしたのですが、フラッシュROMにプログラムを送り込まず(めず?)、フラッシュROM上に残っている過去のプログラムが動いている確認に留まっています。(CPUの停止やリセットはHEWからコントロールできます。)

そして質問なのですが、HEWでプロジェクトを起動した時に表示される、
「エミュレータモード選択」(デバイスはH8SX/1651を選択。外部フラッシュメモリを選択にチェック)
の後に続く、


「外部フラッシュメモリ設定」の設定値群はどのように設定したらよろしいでしょうか


乏しい知識で回路図等を見て調べて判った事は
・フラッシュROM:MX29GL256FHMI-90Q(256MBit。JEDEC準拠)
・WP#/ACC=3.3V(ワードアクセスを指定?)
・CPU:A0端子がフラッシュROM:A1端子へ接続
・CPU:P60端子がフラッシュROM:A23端子へ接続(プログラムからバンク切り替えを行なう?)
・CPU:動作モード4
・CPU:XTALへは12.5MHzが入力されてます

気がかりなのが、バンク切り替えを制御するっぽい感じの設計になってますので、フラッシュROMでの書き込み方法も手間が必要かと想像してます。

どちらかというとフラッシュROMの質問でスレッド違いかもしれませんが、どなたかご教授してくださいますよう、よろしくお願いいたします。

Parents
  • 当事者がいないとは、これは大変そうですね。

    先の回答の通り、HEWでは外部フラッシュへの書込アルゴリズムは持っておらず、ターゲットマイコンのRAM上で動作するフラッシュ書込プログラムを別途作成する必要があります。

    E10AのJTAGを通してHEWから送られてくる書込データとアドレスを受信して、外部フラッシュに書き込むというプログラムです。

    使用するフラッシュROMの書込アルゴリズムに合わせたプログラムを作成する必要があります。

    HEWでは、この書込プログラムのバイナリを指定して、フラッシュ書込に先立ってこのプログラムがターゲットマイコンのRAMに書き込まれて実行されるという仕組みです。

    ターゲット基板では、ポートでフラッシュのバンク切り替えまで行っているという事で、これに対応するのはかなり難儀しそうですね。

    まずは、対象ソフトのプロジェクトにフラッシュ書込プログラムらしき物がないか探すと良いと思います。

  • なるほど見えてきました。
    先は長そうですが、挑戦してみます。
    ありがとうございます!!
  • 大変遅くなりましたが、中間報告(と、ご相談)をさせていただきます。
    (すみません、会社の引越し中で総務作業にかかりっきりで、超スローペースになってます(汗))

    無事、フラッシュROMのセクタイレースを行なう事ができました。
    皆様から教えていただいたサンプルコード「FMTOOL」に少しの修正を加え動作しております。
    自力でたどり着ければ、皆様の手を煩わす事なく進めたのですが、何卒ご容赦ください。


    何点か、気が付いた点や追加処理を備忘録として記載させていただきます。
    -------
    ・Windows64ビットオペレーティング用のドライバをインストール(確か作業した覚えが)
    ・こちらの独自基板にはフラッシュROMのバンク切り替え(アドレス選択)が存在し、CPUのポートが接続されているので、その操作の為、初期化モジュールを有効とし、I/Oポートのイニシャライズとバンク選択処理を追加
    ・上記プログラム追加の結果、デフォルトのモジュール転送先RAMエリアをオーバーしてしまったので、転送RAMエリアの配置修正(ExternalFlashMemorySettingダイアログボックスとFMTOOLソース中アドレス指定)
    ・初期化モジュールをバンク0用、バンク1用と個別に用意(状況によっては、片方のみクリアして時間短縮ができるかと思い)
    ・フラシュメモリの「ブロック数=最大99」という表記に、「128ブロックは消去モジュールを2つ用意して分割して消すのかなぁ」と思っていたところ、「ブロック数=最大1024」という表記の別マニュアルを発見。
    ・「TopAddressOfBlock」の記述アドレスの対応を間違えていた(ワードアクセスで0x20000ではなく0x10000でバウンドさせていた(ブロックサイズIC固有)。それぞれバイトアドレスなのか、ワードアドレスなのか理解していなかった。)
    -------備忘録、以上です

    そして、ここから転送(ライト)を作成するのですが、それはさておき、
    本来の目的の、プログラム製作(プロジェクト?ソリューション?)なのですが、バンク切り替えが問題で、どう扱えばいいのか、どうやってコードというか、HEW上のプロジェクトを構成すればいいのか発想できません。
    (私の知識は、1ファイルで完結した昔のアセンブラ時代です(汗))

    規定として、
    ・バンクは0と1の計2つ(アドレスは0x000000~0xfdffffを計2面(0xfd0000~は未使用)。バンク用窓が特定エリアに存在する状態ではなく全エリアが切り替わります)
    ・内蔵RAMによるRAMプログラム走行は一部の割り込みプログラムのみ使用し、通常プログラムはROMを走行します
    ・プログラムコードとデータの比率は1対10位で、データ量の方が多いです
    ・コード+データ量は全ROMエリアの半分くらいで収まる予定です。だったらバンク0で完結したらOKというのはナシな方向で(汗)
    ・処理スピードは意外と重視
    とした場合で、

    漠然としてますが、方法として
    バンク0とバンク1の両方共に同一プログラムを同一アドレスに重複配置(ミラー状態)し、データ部分のみを各々のバンクに配置する。
    データアクセス時は、ポート操作によるバンク切り替えを行なうが、アドレスが切り替わっても走行部分は同一コードなので動くであろう、くらいの発想しかできないです。
    上記をHEWとしてまとめると、プロジェクトが2つ(こんな事になる?)になって、ROMに転送するファイルは2つ(以上?)になって、ラベル(アドレス)のプロジェクト間の共有とかの方法は???といった状態でもはや漂流中です。
    どなたか、よきアドバイスを。
  • わわいです
    簡単な方法としてはおっしゃるように、両バンク同一の位置にバンク切り替えルーチンを置くというのでいいんじゃないでしょうか。これにはバンク切り替えルーチンが完全に同一という保証、というか管理をどうするのかという問題がありますが、同じバージョンのツールチェインで同一の設定でコンパイルする限りはあんまし心配はないと思います。

    まー、オイラがそういうことをするとすれば、バンク切り替えルーチン中で切り替えのコア部分をRAMに転送して実際の切り替え操作はRAM上で行う、ということをしますね。
    この場合は切り替えコアルーチンを別セクションに切り出し、RAMのアドレスにマッピングするという設定が必要となりますんでちとややこしくなりますが。

    ラベルの共有に関しては、リンカの設定>セクション>シンボルアドレスファイル で、指定したセクションのアドレス設定ファイルが生成されますんで、(プロジェクト名.fsy)それを別プロジェクトの方に含めれば共有できます
  • いつもお世話になっております。ももです。
    とてもとても早いご返答、ありがとうございます。
    方向性は間違ってなかった感じですかすね。ちょっとホっとしました。
    シンボルアドレスファイルの生成と別プロジェクトへの組み込みが出来るのですね!!
    糸口がつかめました!!

    また、フラッシュ書き込みも含めまして、経過、ご報告いたします。
    でも、事務作業が(汗)
Reply
  • いつもお世話になっております。ももです。
    とてもとても早いご返答、ありがとうございます。
    方向性は間違ってなかった感じですかすね。ちょっとホっとしました。
    シンボルアドレスファイルの生成と別プロジェクトへの組み込みが出来るのですね!!
    糸口がつかめました!!

    また、フラッシュ書き込みも含めまして、経過、ご報告いたします。
    でも、事務作業が(汗)
Children
No Data