フラッシュROMの書き込み
この節では、MITOUJTAGを使ったフラッシュROMの読み書き方法について説明します。
なお、フラッシュROMライタの機能の概要については機能紹介のページをご覧ください。
目次
- フラッシュROMライタを使うまでの準備
- フラッシュROMプログラマの設定
- CFIコードを読んでみる
- メモリの内容をダンプする
- メモリに書き込む
- メモリの内容をファイルに読み出す
- メモリの内容をベリファイする
- メモリを消去する
- ブランクチェック/領域サーチ
- まとめ
フラッシュROMライタを使うまでの準備
ここでは例として、XILINXのSpartan-3A/3ANスタータキットを使います。
まず、Spartan-3AスタータキットのJTAGコネクタ(J25)にPocket JTAG Cableからの配線を接続します。
写真1 Spartan-3ANスタータキットのJTAGコネクタにPocket JTAG Cableからの配線をつなぐ
そして、MITOUJTAGを起動して自動認識させると、XC3S700A(AN)とXCF02Sが発見されます。バウンダリスキャンをしてみると、デフォルトのアプリケーションが動いているのが見えます。
図2 自動認識すると、JTAGチェーン上にSpartan-3ANとXCF02Sが検出された
ここでバウンダリスキャンが正常に動作しているのを確認してください(重要)。そうしたら、メインメニューから「ツール→フラッシュROMプログラマ」を起動します。
図3 メインメニューからフラッシュROMプログラマを起動する
図4に示すような表の書かれたウィンドウが起動します。
図4 フラッシュROMプログラマが起動した
フラッシュROMプログラマの設定
フラッシュROMプログラマが起動したら、FPGAとフラッシュROM間の接続を設定します。まず、図5に示すような接続構成と書かれたドロップダウンボックスをクリックして、最も適した構成を選びます。

図5 フラッシュROMの接続方法を指定する
構成1~6がありますが、この意味は機能紹介ページの「フラッシュROM接続の方式」をご覧ください。XILINXのWebサイトからダウンロードしたボードの回路図を見るとROMのBYTE端子がFPGAに接続されていて、16bitのROMを8bit幅で接続できるので「構成2」を選びます。もちろん「構成3」を選んで16bit幅で接続しても構いません。

図6 16bit幅のROMを8bit幅で使うため、構成2を選択する
そして、回路図を見ながら、フラッシュROMのどの端子がFPGAのどの端子につながっているかを調べて、画面上の表に記述していきます。
![]() |
![]() |
図4の表に示したA0や、CEなどの意味は次の表7に示すとおりです。
表7 接続ピンの指定
|
記述 |
機能 |
備考 |
|---|---|---|
|
D? |
データ |
データバス |
|
A? |
アドレス |
アドレスバス |
|
WR |
書き込み制御 |
|
|
OE |
読み出し制御 |
|
|
CE |
チップイネーブル |
|
|
WP |
ライトプロテクト |
|
|
PULLUP |
常に1にする端子 |
データバスを共有している他のデバイスをdisableにするために使う |
|
PULLDOWN |
常に0にする端子 |
データバスを共有している他のデバイスをdisableにするために使う |
|
HIGHZ |
ハイインピーダンスにする端子 |
フラッシュROMの読み書き動作中に、FPGAやCPUが不意に異常な信号を出さないようにするために使用する |
こうして、設定されたピン配置は次のようになります。 この作業が一番大変ですが、根気よく回路図を見ながら設定します。なお、Dev numというのは、JTAGチェーン上の何番目のデバイスにつながっているかということを示しています。この回路ではSpartan3AN→XCF02Sという形でチェーン上に2個のデバイスがあって、すべての信号はSpartan3ANから出ているので、Dev numはすべて1になります。

図8 Spartan-3ANスタータキットとフラッシュROMの間の接続
すべての設定が終わったら、メインメニューから「ファイル→現在編集中のファイルに名前を付けて保存(A)」をやって、設定情報を記録しておきましょう。記録されたファイルの拡張子は.jfcとなります。(Jtag Flashrom writer configurationの意)
CFIコードを読んでみる
信号の接続が入力できたら、ツールバーにあるCFI読み込みボタンを押します。

図9 CFI読み込みボタンを押す
ピンの接続設定が正しくできていれば、CFIコードが読みだされ、自動的にセクタ構成がセットされるはずです。
図10に示すように「'QRY'が確認できません」と表示される場合は、ピンの接続が正しく行われていないか、FPGAが動作していてバウンダリスキャンで端子を自由に変更できないことがあるからです。

図10 CFIコードが読みだせなかった場合の表示
昨今のFPGAは、I/O端子が出力または入力に固定されているようなデザインでコンフィグされると、その端子はバウンダリスキャンで自由に入出力できなくなる場合がある。ALTERAとXILINXで違うし、ファミリによっても挙動が異なる。
そのため、できればFPGAは未コンフィグ状態で行うのが望ましいといえます。なお、図10のような画面ですべてのデータ部分が00またはFFの場合は、接続が間違っていてROMが全く反応していない場合。同じ文字が2個ずつ繰り返す場合はデータバスの幅とBYTE端子があっていない場合。図10のように何らかのデータが読みだされる場合は、QRYを読み出すためのコマンドが正しく送られていない場合です。
Spartan-3ANスタータキットの場合は、ジャンパJ16をはめるか、コンフィグROMを消去してPROG=Lに固定すれば、正しく読みだされます。

図11 CFIコードが読みだせた場合の表示。各種のタイミングやセクタ構成が読みだされる
図12 セクタ構成がグラフィカルに表示される
ここまでくれば、フラッシュROMは接続や設定は問題ないといえます。
メモリの内容をダンプする
メモリの内容をダンプするには、まず読み出したいセクタをクリックしてください(図13)。
図13 読み出したいセクタをクリックすると、アドレスがセットされる
開始アドレスや終了アドレスが自動的にセットされるので、ツールバーにあるダンプボタン
を押してください。

図14 ダンプボタンを押すと、メモリダンプが開始される
図14のようにメモリの内容が表示されます。停止したい場合はツールバーにある停止ボタン
を押してください。
メモリに書き込む
ファイルの内容をメモリに書き込む場合は、図13に示したように書き込みセクタをクリックし、ツールバーにある書き込みボタン
をクリックしてください。ダイアログが開くので書き込みたいファイルを選択します。(図15)
図15 書き込みたいファイルを選択する
図16のようなダイアログが表示されます。「はい」を押すと、複数のセクタにまたがってファイル全体を書き込みます。「いいえ」を押すと、選択されたセクタだけに書き込みます。

図16 書き込みたいセクタと、書き込みサイズが図示される
書き込みたいファイルの大きさと、書き込む領域が図17のように示され、書き込みプロセスが進んでいきます。
|
図17(a) ファイル全体を書き込み |
図17(b) 選択されたセクタのみ書き込み |
メモリの内容をファイルに読み出す
メモリの内容を読みだしてファイルに保存する場合は、読み出したいセクタを選択した後、読み出しボタン
を押します。メモリに書き込む場合は、図13に示したように書き込みセクタをクリックし、ツールバーにある書き込みボタン
をクリックしてください。ダイアログが開くので書き込みたいファイルを選択します。(図18)
図18 保存するファイル名を設定する
あとは、書き込み時と同様に進んでいきます。
メモリの内容をベリファイする
フラッシュメモリの内容と、ファイルの内容を照合することができます。ベリファイを行うには、読み出したいセクタを選択した後、ツールバーのベリファイボタン
を押します。読み出し時と同様にダイアログが開くので、ファイルを選択します。
メモリを消去する
フラッシュメモリの内容を消去するには、ツールバーの消去ボタン
を押します。図19のようなダイアログが開きます。

図19 消去モードの設定
ここで、「セクタ消去」を選択すると現在選択されているセクタのみが消去され、「チップ全体」を選択するとチップ全体を消去します。
セクタ消去の場合は、選択された各セクタを数百msで消去していきます。チップ消去は1分程度かかる場合があります。

図20 セクタ消去を行った
ブランクチェック/領域サーチ
フラッシュROMの中に何かが書き込まれているか、もしくは、書き込まれている領域はどこか、を調査する機能があります。
ツールバーのブランクチェックボタン
を押すと、図21のダイアログが表示されます。

図21 ブランクチェックの方式選択
「詳細チェック」を押すと、1バイト単位でFFになってない領域を探します。
「領域検索」を押すと、FFになってない領域を探します。このとき1バイトごとに調べるのではなく、詳細設定画面の中の「領域検索の際のアドレスの増分」で示された量だけアドレスを増やします。すなわち、アドレス0,0x400,0x800,0xc00,0x1000,0x1400…と、粗く、チップ全体を高速に調べます。

図22 領域検索の際のアドレスの増分設定
まとめ
MITOUJTAGのフラッシュROMライタ機能を使うと、わかりやすいGUI操作でFPGAやCPUに接続されたフラッシュROMの内容を読み書きすることができます。このときFPGAやCPUには何のプログラムもされていない状態でも使うことができるので、ブートファームウェアを消してしまったような場合でもフラッシュROMが操作できるので、開発の初期段階では非常に便利です。











