« FPGAへの信号注入でメモリのデバッグ | トップページ | Spartan-3EのSPI ROMにもJTAG書き込み »

2010.07.07

Spartan-3ANの内蔵フラッシュへの書き込み

Spartan-3ANはフラッシュROMを内蔵しています。

このフラッシュROMはInternal Serial Flash(ISF)と呼ばれるもので、SPI方式のシリアルフラッシュROMです。

現時点では、このROMに書き込むためにはiMPACTを使わざるを得ないので、そのやり方はとても複雑で面倒です。
iMPACTでやる方法を簡単に説明すると、まずiMPACTをPROMファイルモードで立ち上げてBitファイルからMCSファイルに変換し、再度iMPACTを初期化してバウンダリスキャンモードにしてデバイスを認識させ、FPGAに先ほど作ったMCSを追加して書き込むというものなのですが、この手順はとても大変です。
FPGA初心者には「???」の連続となるでしょう。

だから、MITOUJTAGや、J-Writerで、手軽に書き込みができるようにしたいと思っています。bitファイルをわざわざMCSに変換することなく、コマンド一発で直接ROMに書き込めるのが理想です。

ターゲットボードは、「Spartan-3AN スタータキット」。このボードは、XC3S700AN FG484のほか、ATMELのSPI ROMと、STのSPI ROMが載っています。

まず、このボードのJTAGコネクタに、JTAGケーブルをつなぎます。
Sp3anspi

先日、Spartan-6の外付けSPI ROMにJTAG経由で書き込むツールを開発したので、そのテクノロジをJ-Writerに移植したツールを作りました。

JTAG経由でSPI ROMに書き込むための原理を簡単に説明すると、最初にFPGAにあるデザインを書き込みます。そのデザインとは、JTAGポートとSPIのポートをつなぐもので、JTAGのポートを通じてSPIの信号をやりとりできるようになるというものです。
最初にそのようなデザインでFPGAをコンフィギュレーションした後、FPGAに用意されたJTAG通信機能を使って、ソフトウェアからFPGA内部に信号を送り込み、SPIのポートを叩くというわけです。

まずは、外付けのシリアルROMからです。
jwriter -pockj -spi -getid any -bypass any
とコマンドを入力すると・・

Sp3anspi_1

SPI ROMのIDCODEである
1F 26 00 00 00 00
やステータスレジスタ、セキュリティレジスタの内容が読めました。
このボードの外付けATMELフラッシュになら、書き込みやベリファイがOKで、FPGAも起動でした。

では、内蔵フラッシュ(ISF)を読んでみましょう。
このISFはSPI互換のようです。

まず、IDCODE。

Sp3anspi_2

「1F 25 00 00 00 00」
おおっ、それらしきものが読めているではないですか!!
しかもATMELと同じようなセキュリティレジスタまである!?

次に、iMPACTでISFに書き込んだデータをこのツールで読んで、先頭をダンプしてみると、
Sp3anspi_3

おおっ、コンフィギュレーションデータが読めているではないですか!!

どうやら、メモリアレイのリードや、IDCODEのリード、チップ消去はできるようです。書き込みはできませんでした。

今日の成果をまとめると、Spartan-3ANスタータキットに対して

・外付SPI(ALTEL) 書き込み…○ 読みだし…○ 消去…○
・外付SPI(ST)  書き込み…× 読みだし…○ 消去…×
・内蔵ISF 書き込み…× 読みだし…○ 消去…○

でした。
きっと、書き込みや消去ではSPIのコマンドが違うのでしょう。

あと1~2日でJ-Writerが、内蔵・外付けSPIに対応できるでしょう。
その2~3日後に、MITOUTJAGが、内蔵・外付けSPIに対応できるでしょう。

快適なFPGA開発環境を目指して、鋭意開発中です。

--

追記

Spartan-3ANの内蔵フラッシュへの書き込みも正常にできるようになりました。AT45DB081Dと全く同一の手順で書き込みができました。

|

« FPGAへの信号注入でメモリのデバッグ | トップページ | Spartan-3EのSPI ROMにもJTAG書き込み »

コメント

コメントを書く



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




« FPGAへの信号注入でメモリのデバッグ | トップページ | Spartan-3EのSPI ROMにもJTAG書き込み »