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ケーブルをつなぎます。

先日、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
とコマンドを入力すると・・
SPI ROMのIDCODEである
1F 26 00 00 00 00
やステータスレジスタ、セキュリティレジスタの内容が読めました。
このボードの外付けATMELフラッシュになら、書き込みやベリファイがOKで、FPGAも起動でした。
では、内蔵フラッシュ(ISF)を読んでみましょう。
このISFはSPI互換のようです。
まず、IDCODE。
「1F 25 00 00 00 00」
おおっ、それらしきものが読めているではないですか!!
しかもATMELと同じようなセキュリティレジスタまである!?
次に、iMPACTでISFに書き込んだデータをこのツールで読んで、先頭をダンプしてみると、

おおっ、コンフィギュレーションデータが読めているではないですか!!
どうやら、メモリアレイのリードや、IDCODEのリード、チップ消去はできるようです。書き込みはできませんでした。
今日の成果をまとめると、Spartan-3ANスタータキットに対して
・外付SPI(ALTEL) 書き込み…○ 読みだし…○ 消去…○
・外付SPI(ST) 書き込み…× 読みだし…○ 消去…×
・内蔵ISF 書き込み…× 読みだし…○ 消去…○
でした。
きっと、書き込みや消去ではSPIのコマンドが違うのでしょう。
あと1~2日でJ-Writerが、内蔵・外付けSPIに対応できるでしょう。
その2~3日後に、MITOUTJAGが、内蔵・外付けSPIに対応できるでしょう。
快適なFPGA開発環境を目指して、鋭意開発中です。
--
追記
Spartan-3ANの内蔵フラッシュへの書き込みも正常にできるようになりました。AT45DB081Dと全く同一の手順で書き込みができました。
| 固定リンク




コメント