ST39VF801CというROMのCFIは間違っている
あるお客様から、MITOUJTAGのフラッシュROMプログラマ機能でSST社のFlashROM、「ST39VF801C」への書き込みができないというご指摘がありました。
SSTは以前から標準規格を無視した仕様のICを出していて、JTAG通じたフラッシュメモリの書き込みでは問題が発見されていました。
例えば、
- SST39VF3201(https://nahitafu.cocolog-nifty.com/nahitafu/2013/05/sstrom-5abf.html)
- SST38VF6404(https://nahitafu.cocolog-nifty.com/nahitafu/2012/04/01/index.html)
XILINXのアンサーによれば、「Flashwriter では、SST フラッシュ デバイスはサポートされていません 」と、あきらめられています。
そんな定評のあるSSTですが、ST39VF801Cも同様におかしなCFIをもっていました。
そこで、このROMを取り寄せ、変換基板と万能基板に乗せてSpartan-6ボードにつなぎ、バウンダリスキャンでフラッシュROMの端子を1つずつ操作をしてみました。
JTAGバウンダリスキャンでCFIを読みだしてみると、ブロックが65536個あると表示されてしまいます。
![]()
データシートによれば、SST39V801Cのセクタは19個、ブロックは4個であるはずです。
同じサイズのセクタの塊をブロックというのですが、内訳として、16Kセクタが1個、8Kセクタが2個、32Kセクタが1個、64Kセクタが15個の、4つのブロックでできています。
しかしながら、SST39V801CのCFIコードには、ブロックが5個あると記されています。
この先にはCFIコードがなく、FFFFFFFF・・・が読み出されるので、そのまま読むと、変なことになってしまうのです。
さて、SST39V801CのCFIの間違いはこれだけではありません。
CFIのブロックの情報の上位16bitはセクタサイズ(256バイト単位)が、下位16bitはセクタの数が書かれているのですが、ここには実際に存在するセクタの数は-1された値が書かれることになっています。
したがって、16Kセクタが1個、8Kセクタが2個、32Kセクタが1個、64Kセクタが15個という構成であれば、0、1、0、14となっていなければなりませんが、このROMのブロック情報では・・
となっていて、最後のブロックにセクタが16個あることになってしまいます。
このため、普通に解釈するとセクタ構成がおかしくなります。
なので、SST39VF601Cの場合は最後のセクタの数を-1するような修正を加えなければなりません。
これでようやくセクタ情報が正しく表示されるようになりました。
![]()
なお、このROMは1ワード書くたびにプロテクトを解除しなければなりません。FUJITSUやAMD、Spansionに比べると、書き込み手順が長くなり、非常に遅くなります。
SSTのエンジニアには、規格をちゃんと理解してからICを作ってほしいと切に願います。
| 固定リンク










コメント