ColdFire MCF52233 基板 (5)

今回の記事のテーマは「予備基板なしでのリカバリ処理の可能性」ということです。
この ColdFire 基板は、特別な装置 / 環境を用意しなくても、正常に動作している基板が1枚あれば、それを利用して、フラッシュ上のシステム・ソフトウェアが壊れてしまった別の基板をリカバリできるように工夫されています。
正常に動作している基板を「マスタ基板」と呼び、リカバリ対象の基板を「ターゲット基板」と呼ぶと、マスタ基板とターゲット基板を 10 ピンのコネクタで接続し、マスタ基板側でリカバリ処理のためのコマンドを発行するだけで、ターゲット基板のフラッシュ ROM の内容をマスタ基板の完全なコピー (クローン) とすることができます。
マスタ基板がすでに MAC アドレス構成ずみだと、ターゲット基板は全くのクローンになりますから、同じ MAC アドレスを持つ基板が2つ存在することになってしまいます。
そのため、マスタ基板は購入時のまま、何も変更していないものが良いのですが、ターゲット基板のシステムが回復さえすれば、あとは何らかの方法で MAC アドレスの変更も可能です。
インターフェース誌を複数冊購入し、そのうちの1枚の基板をリカバリ用のマスタ基板専用として確保しておけば安心です。
この方法の利点は、リカバリの必要が生じるまでは、マスタ基板については何もする必要がないということです。
包装袋の封も切らず、保管しておくだけで OK ということです。
追加部品の実装も、リカバリが必要になった時点で行えば十分で、コマンド入力を Ethernet 経由ではなく、シリアルで行うことにすれば、入手難 / 高価なパルストランス付き RJ-45 ジャックを実装する必要もありません。
基板は複数枚あるが、すべて使ってしまったという場合でも、ひとつでも正常動作している基板があれば、その基板をマスタ基板として、その時点でのクローンとしてリカバリすることはできます。
問題は基板が1枚しかない場合です。
その1枚しかない基板のシステムが壊れてしまったら、手軽に回復する手段がありません。
マスタ基板からのクローン作成では、

  1. マスタ基板自身のフラッシュ ROM の全ての内容を対象として
  2. EzPort モードに設定したターゲット基板に SPI EEPROM としてのプロトコルで書き込む

という処理をしています。
ターゲット基板1枚しかない場合のリカバリ処理では、2. の SPI EEPROM としての書き込み作業は、ホスト PC あるいは他のマイコンを使用して行う必要があります。
SPI EEPROM 書き込みをどうやって実現するかは問題ですが、実際にリカバリの必要が生じる時点までに何とかなっていればすむ話です。
1. については、まだターゲット基板が健全なうちにフラッシュ ROM の内容を読み出して、ファイル化し、保存しておく必要があります。
SilentC や GDB スタブの新バージョンのバイナリファイルが公開されていれば、わざわざ ROM から読み出す必要はありませんが、現時点では、まだ新バージョンの公開はないようです。
Ethernet が使えれば、「tftp」コマンドで「SILENTC.BIN」、「FILEDATA.BIN」、「COLDFIRE.BIN」を「get」しておけば、256 Kバイト内蔵フラッシュ ROM 全域を読み出したことになります。
シリアルしか使えない場合には、ROM の内容を読み出して S フォーマットに変換して表示するSilentC プログラムを作成し、実行させ、ターミナルソフトで出力をキャプチャしてファイル化しておく必要があります。
2. の SPI EEPROM 書き込みプログラムがあるならば、当然、読み込みプログラムもあるはずですが、現時点では利用できるものはないようです。
SilentC プログラムを作成/実行するには、当然フラッシュ ROM 上のファイルシステム上にセーブする必要があり、「購入時のまま手付かず」の状態ではなくなります。
「プログラム」としてセーブせず、コマンド・ラインからの「ダイレクト実行」で読み出せば、フラッシュの内容に影響を与えません。
その代わり、複雑な処理は記述できません。
たとえば、コマンドラインに次のように (1行で) 入力します。

{long*a=0,i;while(1){PrHex(a);for(i=0;i<4;i++){PrHex(*a++)}PrStr("\r\n");}}

これは、先頭にアドレスを付けて、1行に 16 バイトずつ、アドレス 0x00000000 からフラッシュ ROM の内容を読み出すものです。
終了アドレスのチェックもできないので、最終的にはメモリが実装されていない 0x00040000 番地をアクセスした時点で SilentC が停止 (ctrl+C も効かない) するので、その時点でターミナル・ソフトのテキスト・キャプチャを停止してファイルをセーブします。
アドレス+データの最低限の情報しかないので、ホスト PC 側でチェックサムを付加するなどの加工をして、モトローラ S フォーマットなり、インテル HEX フォーマットなりのファイルにします。