SST社のフラッシュROM
SST社の(パラレル型)フラッシュROMはちょっと変です。
普通、この手のフラッシュROMにはIDCODEやCFIコードというのがあって、CPUやFPGAのバスに何がつながっているかを自動的に調べることができます。
CFIコードには、書き込み時の電圧や書き込み・消去時間などのパラメータや、セクタ構成などが書かれていて、そのデータシートを持っていなくてもROMライタが書き込みできるようになっています。そういう重要なデータなので、どのROMのCFIコードも同一の手順で読み出しができるというわけです。
具体的に言うと、CFIコードを読み出すには、ROMの55h番地に98hを書き込んで、メモリの10h番地からの数百バイトを読み出せばよいのです。もしフラッシュROMが16bit接続ならば0098hを書き込み、32bit接続ならば00000098hを書き込めばよいのです。
つまり、目の前に謎のフラッシュROMがあっても、55h番地に98hを書き込めば、そのIDCODEやセクタ構成が読みだせるのです。それがCFIです。
しかし、SST社のROMは違います。
特にSST39VF1601、SST39VF1602、SST39VF3201、SST39VF3202。
こいつはCFIを読むために、5555番地にAAhを書いて、2AAA番地に55hを書いて、5555番地に98hを書かないといけません。つまり3ステップいるわけです。
具体的に見て見ましょう。
例えば、アドレス27hに16と書かれています。これはROMのサイズを示します。2の24乗ということで、このROMのサイズは16Mバイトというわけです。それから、アドレス28hの01は16bitのバス幅専用であることを示しています。8bitとの切り替えはできません。
こういった感じでROMの書き込み方法が調べられます。
問題はアドレス2C以降に記述されたセクタ構成です。SST39VF3201のは次のように書かれています。
MaxBlockが2なので、4096バイトのセクタが1024個と、65536バイトのセクタが64個あるということを示してしまっています。
おそらく、SSTの人は、次のように言いたかったのかもしれません。
1つのブロックを大きなサイズで消去することもできるし、小さな単位で消去することもできるよ・・と。しかし、上のCFIのコードを解釈すると、こんな感じになってしまいます。
つまり、メモリのサイズが容量をオーバーしてしまうのです。
こんな特徴を持つSST社のROMですが、MITOUJTAGではどう扱えばよいのか悩み中です。とりあえず、SST社のROMを(ベンダIDで識別して)見つけたら、ブロック1の情報は無視するのが良いかなと思っています。
◆ 追記
① この記事を書いてみたら、1年前にも同じようなことで悩んでいました。
② XILINXのアンサーにもこんなのがあります。
③ JEDECの規格書JEP137Bを読んでも、SSTのこの仕様については書かれていないようです。つまり標準ではなさそう。
④ アルテラフォーラムというところによると、SST社のフラッシュはCFIインタフェースは持っているが、富士通とAMDとインテルとシャープが作ったCFI規格には従っていないということ。
⑤ 他にも4kセクタの扱いについてLinuxやブートローダの話題がいくつか
みんな苦労しているんですね。
| 固定リンク






コメント