• ベストアンサー

H8マイコンで、ファームウェアの更新

H8マイコンを使い(シリーズの選定はまだです。)、同じ基板上のコンパクトフラッシュに保存されている最新ファームウェアを取得し、自分自身のファームウェアを更新し、その後自動起動するというような事は、できますでしょうか? コンパクトフラッシュへのアクセスは、FATファイルシステムを使えば何とかなると思うのですが、自分自身のファームウェアを書き換える方法がまったくわかりません。 ITRONなどのOSをつめば、可能でしょうか? アドバイスをよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Interest
  • ベストアンサー率31% (207/659)
回答No.1

私はそのようなものを作ったことがありませんが、技術的には可能だと思います。マイコン用のOSは関係ありません。 まず、H8マイコンの内蔵FlashROM領域を「書き変え対象領域」と「書き変え禁止領域」に分けます。そして、書き変え対象領域には通常のプログラムを配置し、書き変え禁止領域には「ファームを更新する処理を行うプログラム」(ブートローダー)を配置します。さらに、H8のI/Oポートに通常のプログラムを起動するかブートローダを起動するか切り替えるためのスイッチを接続しておきます。 H8のプログラムでは、パワーオン・リセット後のスタートアップルーチンが終わったあたりで先ほどの切替スイッチを読んで、どちらのプログラムを立ち上げるか処理を切り替えます。そして、ブートローダではコンパクトフラッシュからデータを読み出して、先ほどの「書き変え対象領域」を書き換える処理を行います。H8のプログラムでH8の内蔵FlashROMを書き換える方法はH8のハードウェアマニュアルに書いてありますからそちらを参照してください。 > 自分自身のファームウェアを更新し、その後自動起動する そういう仕様でしたら、タクトスイッチのようなスイッチにして、押しっぱなしでH8を起動したらブートモードで立ち上がるようにしておき、起動したらスイッチから手を離して、FlashROM書き換え後はファーム内でソフトウェアリセットをかければできそうですね。 あとで更新したプログラムのサイズがどんどん大きくなっていくことを考えると、「書き変え禁止領域」を前に持ってきて、「書き変え対象領域」を後に配置した方が良いんじゃないかと思います。

tad_
質問者

お礼

Interest様、早速のご回答ありがとうございます。 なるほど、ブートローダー方式を使って、ファームウェアを書き換えれば良いわけですね。 ちなみにこの辺りの内容は、C言語でも書けるのでしょうか?アセンブラになるのでしょうか?(あまり知らない・・・) ちなみに、ホスト(上位)からのコマンド(更新指令)より、変更するなどの仕様の場合は、 1、ファームウェア起動 2、更新コマンド受信 3、ROMに更新フラグなどをセット 4、ソフトウェアリセット 5、更新フラグがセットされている為、更新プログラム起動 6、更新後、更新フラグをリセットし、ソフトウェアリセット 7,ファームウェア起動 で、可能でしょうか? 以上、よろしくお願いします。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.3

>ブートローダについて、あまりよく知らないのですが調べてみます。 >ルネサスのホームページにもこのような情報は、あるのでしょうか? ブートローダは単なるプログラムです。ブートローダについてワザワザ記載することでは無いのでルネサスのホームページには何もないかも知れません(調べてません)。 >FATファイルシステムの論理層なのでハード層は自分で実装するのですか? >デバイスドライバ部は、FATファイルシステムを購入すれば某かのサンプルは手に入りそうです。 >zwiさんは、FATファイルシステムを利用せずに自力で実装されたのでしょうか? OSを使っていなかったので全部自分で書きました。 FATも別に難しい構造ではないです。 >Windowsアプリのように、コピーなどコマンド一発でで可能なのでしょうか? そもそもITRONなどのOSにシェルは無いのでコマンド一発の意味が分かりません。LinuxOSでも使えば別ですが。 コンパクトフラッシュの内容を読んで自分自身のROMを書き換えたいんですよね?なら自分でプルグラムを書くことになると思います。 >起動時に、起動するプログラムを選定する必要がありそうですから、先頭アドレスの指定などが、必要そうなのですが、可能なのでしょうか? そちらの書き込みから通常はROMのファームからの起動で、コンパクトフラッシュの情報はファームの書き換え用だと思ったんですが違うんですか? なんにしても、H8のフラッシュROMは100回程度しか書き換えできませんのでむやみに書き換えるものではありません。ファームのバグ時の更新用と考えてください。 もし、ファームを常にコンパクトフラッシュ上に置いて置いて、それを選択して起動したいならH8のフラッシュROM上にあるべきなのはブートローダだけです。 >何か勘違いしてますでしょうか? 少なくとも今の知識レベルでファーム更新方式の設計をすべきでは無いです。とりあえずマイコンを手に入れて、ブートローダやファームの更新方法、コンパクトフラッシュの扱いなどを学んでください。 Interestさんへのお礼で書かれているファームの更新の流れも無駄があります。

tad_
質問者

お礼

zwiさんご回答ありがとうございます。 >FATも別に難しい構造ではないです。 自分でも調べてみます。 >そちらの書き込みから通常はROMのファームからの起動で、コンパクトフラッシュの情報はファームの書き換え用だと思ったんですが違うんですか? 説明が悪くて、すみません。その通りです。 もう少し、勉強します。情報ありがとうございました。

すると、全ての回答が全文表示されます。
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.2

SHマイコンでフラッシュの読み書きしたことがありますが、特別なことはありませんよ。手順に従ってIOポートからデータを送受信するだけです。 フラッシュからブートするにはブートローダが必要です。自分で書くかほかの人が書いたものを使います。 >同じ基板上のコンパクトフラッシュに保存されている最新ファームウェアを取得し、自分自身のファームウェアを更新し、その後自動起動するというような事は、できますでしょうか? 全然問題ないです。 と言うかマイコンでは、自分で書けばなんとでも出来ますよ。 >コンパクトフラッシュへのアクセスは、FATファイルシステムを使えば何とかなると思うのですが FATファイルシステムの論理層なのでハード層は自分で実装するのですか? >自分自身のファームウェアを書き換える方法がまったくわかりません。 自分自身のファームも単なるファイルです。なのでFATシステムの作法でファイルを書き換えるだけです。

tad_
質問者

お礼

zwiさん、早速のご回答ありがとうございます。 ブートローダについて、あまりよく知らないのですが調べてみます。 ルネサスのホームページにもこのような情報は、あるのでしょうか? >FATファイルシステムの論理層なのでハード層は自分で実装するのですか? デバイスドライバ部は、FATファイルシステムを購入すれば某かのサンプルは手に入りそうです。 zwiさんは、FATファイルシステムを利用せずに自力で実装されたのでしょうか? >自分自身のファームも単なるファイルです。なのでFATシステムの作法でファイルを書き換えるだけです。 Windowsアプリのように、コピーなどコマンド一発でで可能なのでしょうか? 起動時に、起動するプログラムを選定する必要がありそうですから、先頭アドレスの指定などが、必要そうなのですが、可能なのでしょうか? 何か勘違いしてますでしょうか? 以上、お手数をお掛けしますが、ご回答頂けますと幸いです。

すると、全ての回答が全文表示されます。

関連するQ&A