« PCI Expressの本が出版されました | トップページ | いちごを育ててます »

2013.05.01

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ステップいるわけです。

Sst39vf_1

具体的に見て見ましょう。

例えば、アドレス27hに16と書かれています。これはROMのサイズを示します。2の24乗ということで、このROMのサイズは16Mバイトというわけです。それから、アドレス28hの01は16bitのバス幅専用であることを示しています。8bitとの切り替えはできません。

こういった感じでROMの書き込み方法が調べられます。

問題はアドレス2C以降に記述されたセクタ構成です。SST39VF3201のは次のように書かれています。

Sst39vf_2

MaxBlockが2なので、4096バイトのセクタが1024個と、65536バイトのセクタが64個あるということを示してしまっています。

おそらく、SSTの人は、次のように言いたかったのかもしれません。

Sst39vf_4

1つのブロックを大きなサイズで消去することもできるし、小さな単位で消去することもできるよ・・と。しかし、上のCFIのコードを解釈すると、こんな感じになってしまいます。

Sst39vf_3

つまり、メモリのサイズが容量をオーバーしてしまうのです。

こんな特徴を持つSST社のROMですが、MITOUJTAGではどう扱えばよいのか悩み中です。とりあえず、SST社のROMを(ベンダIDで識別して)見つけたら、ブロック1の情報は無視するのが良いかなと思っています。

◆ 追記

① この記事を書いてみたら、1年前にも同じようなことで悩んでいました

② XILINXのアンサーにもこんなのがあります。

③ JEDECの規格書JEP137Bを読んでも、SSTのこの仕様については書かれていないようです。つまり標準ではなさそう。

④ アルテラフォーラムというところによると、SST社のフラッシュはCFIインタフェースは持っているが、富士通とAMDとインテルとシャープが作ったCFI規格には従っていないということ。

⑤ 他にも4kセクタの扱いについてLinuxやブートローダの話題がいくつか

みんな苦労しているんですね。

|

« PCI Expressの本が出版されました | トップページ | いちごを育ててます »

コメント

コメントを書く



(ウェブ上には掲載しません)




« PCI Expressの本が出版されました | トップページ | いちごを育ててます »