トップブート?ボトムブート?
今夜もMITOUJTAG 2.0用のフラッシュROMライタの移植に励んでいます。
メインのツールバーとの連動や、プロジェクトツリーへの「フラッシュROM設定ファイル」の登録、子ウィンドウの中でのダンプや読み書き、セクタ調査などができるようになり、かなり便利になりました。
さて、ALTERAのDE0のフラッシュメモリで実験していて、変な現象に遭遇しました。
フラッシュROMのセクタ消去を実行しようとしても、消去できないのです。
実は、今までのMITOUJTAGフラッシュROMライタのプログラムに問題があったようです。このプログラムは、フラッシュROMのCFIコードを読んでセクタ構成を調べるようにしています。CFIの規格によれば、CFIコード中に記述されているセクタ(消去ブロック)の構成は、「何キロバイトのセクタが何個並んで、次に何キロバイトのセクタが何個並んで、その何キロバイトのセクタが何個並んで、・・」という形の情報で記述されています。しかし、その並びの順序を最終アドレスから数えるか、それともアドレス0から数えるかは決まっていないようなのです。
どうやら、この順序はボトムブートの場合は先頭から、トップブートの場合は最終アドレスから数えるのが一般的のようです。(ただし、この数え方が厳密な規格かどうかは不明)
つまり、CFIコードを見る限りでは、そのデバイスがボトムブートなのかトップブートなのかを判別できません。CFIの拡張領域(PRIと書かれた場所)の、バージョンが1.1以降なら、P+0x0f番地に、ブートセクタの情報が書かれているというわけです。しかし、書かれていないものもあります。
いま、SpansionやAMD,Intel,numonyxなどのデータシートを読み漁っていますが、古いデバイスとか含めると、なかなか厄介かもしれません。
例えば、numonyxのM29W320DT/M29W320DBはPRIのバージョンは1.0ですが、ブートセクタ判別フラグ(P+0x0f番地)が存在します。
旧Intel系か、旧ST系か、とかそういうのもあまり関係ないようです。
自動でセクタ構成を完璧に把握するのは難しそうです。これは困った。
セクタ構成を手動で選択するか、自動認識するかを設定できるほうがよさそうな気がしてきました。
| 固定リンク



コメント