フラッシュROM書き込み機能
この節では、MITOUJTAGのフラッシュROMライタの機能を紹介します。
実際の使用手順はチュートリアル1-7 フラッシュROMの書き込みをご覧ください。
MITOUJTAGのフラッシュROMライタ機能は次のような特徴を持ちます。
- Intel(現Numonyx)系とSpansion系(富士通、AMD、ST等)のNOR型フラッシュROMに対応
- FPGAやCPUとフラッシュROMの間の接続は任意
- 8bit、16bit、32bitのフラッシュROMに対応
- セクタ構成を自動判別
- メモリ読み出し、ダンプ、書き込み、ベリファイ、消去が可能
- デバイス消去のほか、セクタを選んで消去することが可能
- データが書き込まれた領域を検索する機能(領域サーチ機能)を搭載
- わかりやすいGUIインタフェースで直感的な操作
図1 MITOUJTAGのフラッシュROMライタの画面
フラッシュROM書き込みの原理
フラッシュROMライタは、MITOUJTAGからFPGAやCPUに接続されたNOR型パラレル・フラッシュメモリにプログラミングを行うことができる機能です。
通常のフラッシュROMはJTAGに対応していないので、フラッシュROMにJTAG信号を与えて直接書き込みを行うことはできません。そこで、MITOUJTAGにはフラッシュROMに接続されているFPGAやCPUの入出力端子を操作して、間接的にアクセスする機能があります。
その原理を図2に示します。通常の組み込みシステムにおいて、フラッシュROMはFPGAやCPUの入出力端子に接続されていると考えられます。
図2 FPGAやCPUと、フラッシュROMとの接続の例
このようなフラッシュROMの内容を読み書きするためには、図3のように、FPGAやCPUを介してフラッシュROMのアドレスバスやデータバスに値を設定し、CEやWE、OEなどの制御信号を上げ下げすることで行います。
図3 フラッシュROMのアクセス方法
JTAGを使ってフラッシュROMを読み書きするためには、バウンダリスキャンを用いてFPGAやCPLDまたはCPUの入出力を操作し、アドレスバスやデータバスに必要なデータを乗せ、WEやCEにLのパルスを作り出すことによって行います。1ワードの書き込みを行うためには、何回か入出力の状態を更新しなければならないので、複数回のバウンダリスキャンを行うことになります。
図4 フラッシュROMの書き込みには複数回のバウンダリスキャンが行われる
MITOUJTAGには、このようなシーケンスを生成する機能があります。
フラッシュROM接続の方式
MITOUJTAG V2.40cでは、現在、下の図5に示すような6つのパターンでの接続に対応しています。
図5 MITOUJTAGのフラッシュROM接続パターン
JTAGデバイスとフラッシュROMは、8bit、16bit、32bitのいずれの幅でもよく、16bit幅のフラッシュROMを2個使って32bitの幅にした場合にも対応しています。また、A-1を使用して32bitフラッシュROMを16bit幅で使ったり、16bit幅のフラッシュROMを8bit幅で使うこともできます。
フラッシュROMのコマンド
フラッシュROMではWEに書き込みパルスを与えても、スタティックRAMのようにそのアドレスで示されたメモリのセルに書き込まれるわけではありません。フラッシュROMでは、アドレスとデータバスは合わせて「コマンド」として解釈されます。特定のアドレスとデータの組み合わせの書き込み操作を行うことにより、消去や書き込み、さらには書き込みプロテクトなどの複雑なコマンドが実行される仕組みになっています。
コマンドには、Intel系とSpansion系の2種類があり、MITOUJTAGはいずれのコマンド体系にも対応しています。
表6 Spansion系のフラッシュROMコマンドの例
フラッシュROMのセクタ構成
フラッシュROMは消去する単位が1バイトではなく、8kバイト~64kバイト程度の大きなブロックでまとめて消去します。これをセクタといいます。消去されたセクタはすべてFFFF…になります。
セクタ構成はフラッシュROMの種類ごとにみな異なっていて、さらにトップブートとボトムブートの区別があります。トップブートとボトムブートというのは、細かいサイズのセクタがアドレスの上位にあるか下位にあるかの違いです。
図7 フラッシュROMのセクタ構成の例(Spansion社のデータシートより引用)
データが書き込まれたフラッシュROMを消去するには、このセクタ構成を調べなければなりません。MITOUJTAGにはそのための機能が備わっています。下の図7は、自動的に調べられたセクタ構成です。型番はST社のM29DW323DTで、アドレスの高い方に細かいセクタが配置されています。
図8 フラッシュROMのセクタ構成の例(Spansion社のデータシートより引用)
フラッシュメモリの制御線とFPGAの端子を関連づける
MITOUJTAGのフラッシュROMライタは、図9に示すようにフラッシュROMの制御信号の1つ1つと、JTAGデバイスの端子の1つ1つを自由に対応付けることができます。これゆえ、ターゲットとなるJTAGデバイスとフラッシュメモリが接続されてさえいれば、バウンダリスキャンを用いて間接的にフラッシュメモリに書き込むことができます。
図9 MITOUJTAGのフラッシュROMライタのピン関連付け設定
上の図9の画面では、フラッシュROMの各端子が、JTAGデバイスのどの端子につながっているかを指定します。Aで示された信号はアドレス線なので、FPGAの該当するピン番号を指定します。OEと表示された信号はフラッシュROMのOE(出力イネーブル・リード)に、CEはチップイネーブルに、WEはライトイネーブル信号につなぎます。
具体的には、例えば、フラッシュROMのA9(アドレスの9番)がFPGAのK22番端子につながっている場合であって、FPGAがJTAGチェーンの1番目にある場合には、Node nameはA9、Dev numは1、Pin numはK22と指定します。
図10 A9(アドレス9)をFPGAのK22番端子につなぐ記述の例
フラッシュROMの端子とFPGAの端子の関連付けは表11のとおりです。このようにして、各端子がFPGAやCPUのどの端子に接続されているかを1つ1つ指定します。
表11 接続ピンの指定
記述 |
機能 |
備考 |
---|---|---|
D? |
データ |
データバス |
A? |
アドレス |
アドレスバス |
WR |
書き込み制御 |
|
OE |
読み出し制御 |
|
CE |
チップイネーブル |
|
WP |
ライトプロテクト |
|
PULLUP |
常に1にする端子 |
データバスを共有している他のデバイスをdisableにするために使う |
PULLDOWN |
常に0にする端子 |
データバスを共有している他のデバイスをdisableにするために使う |
HIGHZ |
ハイインピーダンスにする端子 |
フラッシュROMの読み書き動作中に、FPGAやCPUが不意に異常な信号を出さないようにするために使用する |
PULLUP、PULLDOWN、HIGHZの使い方
なお、CPUやFPGAのデータバスに、フラッシュROM以外にRAMやI/Oチップが接続されている場合、これらのデバイスはフラッシュROMの読み書き中にディぜーブルにしておかなければなりません。
図11 バウンダリスキャン中、フラッシュROM以外のデバイスはDisableにしたい
このようなとき、PULLUPやPULLDOWNといった記述を使います。PULLUPで指定された端子は、フラッシュROMの読み書き中は常に'1'になります。例えば、SRAMのCE信号や、SDRAMの#RAS、#CAS、#WEN、#CSなどはPULLUPにしておくのがよいでしょう。そうすると、バウンダリスキャン中はそれらのデバイスはDisableになるからです。
逆に、FPGAやCPUが何らかの異常な信号を出すのを防止するためにHIGHZを使います。この指定が行われた端子は、読み書き中にはHIGHZになります。
CFIを読み込み機能
昨今のフラッシュROMにはCFIといって、セクタ構成や書き込みパラメータがIDとともに、特別な領域に格納されています。
MITOUJTAGはCFIを読み出すことができます。この機能を使うと、フラッシュROMのセクタ構成が瞬時に判別でき、また、フラッシュROMとFPGAやCPLDが正しく接続されているかを確認することができます。
使い方は簡単で、接続方法を指定したら、ツールバーにあるCFI読み込みボタンを押すだけです。
図12 CFI読み込みボタンを押す
CFIコードが読みだされて、セクタ構成が表示されれば成功です。このとき、デバイスサイズや書き込みタイミングなどのパラメータも同時に取得されます。
図13 CFIコードが読みだされ、セクタ構成が設定された
読み書きベリファイ・消去
CFIコードが読みだされたら、読み書き消去が可能になります。目的のセクタを選択して、ツールバーの操作ボタンを押せば、読み書き消去などの動作ができます。
図14 ツールバーのフラッシュROM操作ボタン
まとめ
本機能はXILINX/ALTERA製のFPGAや、TI製DSP、SH4やARMなど多くのデバイスで動作が確認できています。まさに万能のJTAGフラッシュROMライタです。
一般のJTAG ICEとはちがい、CPUやFPGAと、フラッシュROMの接続方法は標準的な接続でなくても構いません。どのような接続であっても、ROMの端子がFPGAやCPUと接続されていて間接的にバウンダリスキャンで操作できれば、フラッシュROMの読み書きができます。
動作速度はICEに及びませんが、バウンダリスキャンに対応してさえいればどのようなデバイスであっても適用することができます。ICEのように、ターゲットICの品種が変わるたびに買い換えるという無駄な出費もありません。ただし、JTAGバウンダリスキャンによるフラッシュROMの書き換え速度は遅いため、ブートローダのような短いコードのみを書き込むようにして、フラッシュROM全域の書き換えはソフトウェア的に行うことがベストです。詳しくはご相談ください。
実際の使用手順はチュートリアル1-7 フラッシュROMの書き込みをご覧ください。