« Pythonを使ってZYNQをコントロール | トップページ | ZYNQのPSからのDDR3メモリアクセス速度 »

2017.10.06

ST39VF801CというROMのCFIは間違っている

あるお客様から、MITOUJTAGのフラッシュROMプログラマ機能でSST社のFlashROM、「ST39VF801C」への書き込みができないというご指摘がありました。

SSTは以前から標準規格を無視した仕様のICを出していて、JTAG通じたフラッシュメモリの書き込みでは問題が発見されていました。

例えば、

XILINXのアンサーによれば、「Flashwriter では、SST フラッシュ デバイスはサポートされていません 」と、あきらめられています。

そんな定評のあるSSTですが、ST39VF801Cも同様におかしなCFIをもっていました。

そこで、このROMを取り寄せ、変換基板と万能基板に乗せてSpartan-6ボードにつなぎ、バウンダリスキャンでフラッシュROMの端子を1つずつ操作をしてみました。

Sst_top

Sst_bot

JTAGバウンダリスキャンでCFIを読みだしてみると、ブロックが65536個あると表示されてしまいます。

Sst1_2

sun

データシートによれば、SST39V801Cのセクタは19個、ブロックは4個であるはずです。

Sst2

同じサイズのセクタの塊をブロックというのですが、内訳として、16Kセクタが1個、8Kセクタが2個、32Kセクタが1個、64Kセクタが15個の、4つのブロックでできています。

しかしながら、SST39V801CのCFIコードには、ブロックが5個あると記されています。

Sst3

この先にはCFIコードがなく、FFFFFFFF・・・が読み出されるので、そのまま読むと、変なことになってしまうのです。

さて、SST39V801CのCFIの間違いはこれだけではありません。

CFIのブロックの情報の上位16bitはセクタサイズ(256バイト単位)が、下位16bitはセクタの数が書かれているのですが、ここには実際に存在するセクタの数は-1された値が書かれることになっています。

したがって、16Kセクタが1個、8Kセクタが2個、32Kセクタが1個、64Kセクタが15個という構成であれば、0、1、0、14となっていなければなりませんが、このROMのブロック情報では・・

Sst4

となっていて、最後のブロックにセクタが16個あることになってしまいます。

このため、普通に解釈するとセクタ構成がおかしくなります。

Sst5

なので、SST39VF601Cの場合は最後のセクタの数を-1するような修正を加えなければなりません。

これでようやくセクタ情報が正しく表示されるようになりました。

Sst6

sun

なお、このROMは1ワード書くたびにプロテクトを解除しなければなりません。FUJITSUやAMD、Spansionに比べると、書き込み手順が長くなり、非常に遅くなります。

SSTのエンジニアには、規格をちゃんと理解してからICを作ってほしいと切に願います。

|

« Pythonを使ってZYNQをコントロール | トップページ | ZYNQのPSからのDDR3メモリアクセス速度 »

コメント

コメントを書く



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




« Pythonを使ってZYNQをコントロール | トップページ | ZYNQのPSからのDDR3メモリアクセス速度 »