« 2012年3月28日 | トップページ | 2012年4月2日 »

2012.04.01

SST社のパラレルフラッシュROM

MITOUJTAGには、パラレル接続のフラッシュROMに書き込む機能があります。
JTAGバウンダリスキャンで操作できるデバイスを媒介して、任意のパラレル接続フラッシュROMを操作することができます。

この機能を使って、SST社のパラレルフラッシュROMに書き込みを行ってみました。
Mjflash_1
SST社はおそらく、最近出てきたフラッシュROMベンダーで、激安のSPIフラッシュROMで存在を知りました。最近はパラレルフラッシュでも見かけるようになってきました。

JTAGバウンダリスキャンを使うと、JTAGデバイス(例えばFPGAやCPU、CPLD)の端子をパソコンから自由に操作することができるので、それにつながったフラッシュROMに、アドレス信号やデータバス、書き込み制御信号(WR,OE,CE)を与えることができます。
いわば、ROMにつながったJTAGデバイスを汎用のパラレルポートのように動かして、ROMにアクセスする波形を与えてやることでフラッシュROMを読み書きしようというわけです。

そういうわけで、バイト君に作ってもらったのがこの下の写真の装置。Spartan-6ボードのFPGAのI/O端子からSST社のSST38VF6404の端子に1本1本配線をつないでいます。タタリガミのようでいい感じに仕上がっています。

Mjflash_2

そして、FPGAのどの端子に、フラッシュROMのどの端子をつないだかを、GUIの画面で設定していきます。
Mjflash_3

さて、最近のフラッシュROMにはCFI(Common Flash Interface)という領域に、セクタ構成や書き込み時間などのパラメータが書かれています。MITOUJTAGのフラッシュROMプログラマは、このCFIコードを解釈することで自動的にセクタ構成を調べます。

ID CFIと書かれたボタンを押すと・・・
Mjflash_4

よっしゃ、セクタ構成が読み出せた!・・と思いきや、アドレスが変です。
7E000000Hなんていう番地から始まっていますし、1152個ものセクタが見つかっています。

かれこれ1時間くらい調べていて、原因がわかりました。

なんと、このSST社のROMは、CFIコードが間違っていたのです!!

まず、このROMの構造はどうなっているかというと、64Mbit(4Mワード)の領域を128個のブロック、もしくは1024個のセクタに等分しています。128個のブロックはそれぞれ32kワードです。1024個のセクタに分割するときにはそれぞれ4kワードになります。
Mjflash_5

つまり、1ブロック=8セクタの構成で、同一のアドレスをセクタかブロックかどちらかの方法でアクセスできるようになっています。消去するときはブロック単位でざっくり消すか、またはセクタ単位で細かく消すことができます。

このような構成なのですが、CFIコードは次のようになっています。
Mjflash_6

なんと、「Number of Erase Sector/Block sizes supported by device」が2になっています。
おそらくSSTの設計者は、ブロックでもセクタでもアクセスできるよ、という意味で2にしたのだと思いますが、この数字はリージョンの数を示すものです。

上のCFIコードだと、ブロック(青)とセクタ(紫)が別々に存在してしまうことになり、総アドレスがデバイスサイズをオーバーしてしまいます。

しかも、「Sector Information」の項目のアドレス30Hが0001Hになっています。これだと1セクタが64kBytesという計算になってしまいます。(実際のデバイスは8kBytes)

要するにCFIコードが目茶目茶なのです。

そこで、MITOUJTAGではSST社のROM(マニュファクチャコードとデバイスコードで識別)を発見したら、128ブロックのみを見るよう、得られたCFIを修正するようにしました。

これによって、SST社のROMに対しても問題なく、読み書き消去ができるようになりました。
Mjflash_7

MITOUJTAGのこのSST社のパラレルROMへの対応は、次回のバージョンアップ時に行います。
JTAGって、ほんとにいろいろありますね・・。そこが面白いところです。

| | コメント (0)

« 2012年3月28日 | トップページ | 2012年4月2日 »