SH-4AのJTAGバウンダリスキャン
MITOUJTAGが、SH-4Aのバウンダリスキャンに対応しました。
SH-4Aは、ルネサステクノロジのRISCプロセッサ「SuperH」ファミリの最上位製品です。速度も速く、キャッシュやSuperHywayや浮動小数点やPCIやDDR SDRAM、とにかくすごいCPUです。何がすごいかは一言では言い表せませんが、とにかくSHの最上位機種です。
このCPUはSH2とはちがい、内部にROMやRAMを持っていない、いわゆる普通のCPUです。したがって、プログラムを走らせるには、外付けのROMやRAM上にあらかじめ書き込んでおかなければなりません。
ですが、「・・・ROMに書き込むには、あらかじめROMにブートコードを書いておいて、シリアルで・・」これでは、卵が先か、鶏が先かという問題になってしまいます。
そんなとき、JTAGが便利です。
ところで、一口にJTAGといっても、マイコンに対して2つの使い方があります。
一つは、ICEといって、CPUのレジスタやコアに対するアクセス方法。
もう一つは、バウンダリスキャンといって、CPUのI/O端子だけを操作する方法です。
市販のJTAGデバッガの99.9%はICEといわれているもので、CPUのコアを直接刺激してプログラムのダウンロードやメモリの操作を行います。確かにこの方法は強力な方法なのですが、CPUの品種によってコアにアクセスするためのシーケンスが全く異なるため、異なる品種のCPUに対しては100%使えません。いわゆる特定のCPU専用のソフトウェアになります。
一方、MITOUJTAG BASICがサポートしているのは、バウンダリスキャンという方法です。バウンダリスキャンは、どのような品種のICに対しても同じシーケンスでアクセスすることができるため、たとえCPUの品種が変わっても同じソフトウェアで対応することができます。
さて、実際にMITOUJTAGでバウンダリスキャンをおこなってみます。
MITOUJTAGで、SH-4AのSH7780のバウンダリスキャンを行うには、MITOUJTAGサポートページから、「サービスパック3」と「パッケージファイル」をダウンロードして、インストールしておいてください。SH7780のバウンダリスキャンは少々特殊な部分があるので、「サービスパック3」を適用しないと正しくバウンダリスキャンが出来ません。
サービスパックをインストールしたら、ルネサステクノロジのWebサイトへ行き、登録を済ませてSH7780のBSDLファイルをダウンロードします。
普通ならBSDLファイルはダウンロードするだけでMITOUJTAGから使えるようになるのですが、私の手元にあるSH7780は、ちょっと型番が古いためか「IDCODE相違」と、エラーが出てしまいます。
そこで、BSDLファイルの929行目
"1000000000001010"&
を
"10000000000X1010"&
と書き換えます。
これをMITOUJTAGで読み込ませてもエラーが出なくなります。SH7780は、MITOUJTAGで自動認識することができます。自動認識したら、「デバイスの変更」と「パッケージの変更」の2つの操作を行います。SH7780のパッケージは449ピンBGAという特殊な形状なので、手動で指定しなければなりません。SH7780用に「sh7780.pkg」というファイルを用意しています。
この操作をおこなうと、下の図のようにバウンダリスキャンを行うことができるようになります。

MITOUJTAGでバウンダリスキャンを行うと、SH7780が入出力する信号が、パソコンの画面上に「赤:H」「青:L」で表示されます。上の図の画面では、ICの上側の方がデータバスとアドレスバスです。CPUが動くと、これらの端子の色がピカピカと変わります。
表示されたSH-4Aの絵の右下にある灰色の部分は、DDR SDRAM用の接続ピンです。DDR SDRAMの接続ピンはバウンダリスキャンできないので、灰色になっています。
バウンダリスキャンは非常に強力なデバッグ方法です。MITOUJTAGのバウンダリスキャンは、CPUのコアを介さず、CPUの端子だけを操作するので、CPUが動作していなくても使うことができます。つまり、一般的な話ですが、CPUのモード設定が間違っていたり、リセットがかかりっぱなしだったり、CPUにクロックが入っていなくても、バウンダリスキャンはできてしまいます。バウンダリスキャンは単純なので、とても安定しています。CPUがどんな状態でもバウンダリスキャンは安心して使えます。
それに対してJTAG ICEはとても複雑なシーケンスで制御しているため、これほど安定はしていません。CPUの動作がとまっていたり、クロックが入っていなかったり、モード設定が間違っていたりすると使えないことがありますし、不用意にリセットをかけると同期が外れて反応が返ってこなくなることも多いでしょう。JTAG ICEは極めて微妙なバランスの上で動いていますので、あまり変な操作はしないほうがいいでしょう。
さて、最後に、バウンダリスキャンでCPUのピンを操作して、CPUにつながったフラッシュROMを書き換えてみます。MITOUJTAGのフラッシュライタを起動し、SH7780とフラッシュROMの接続方法を入力します。すると、簡単なGUI操作でフラッシュROMの内容が読めるようになります。

上の図は、フラッシュROMのCFIコードというものをよみ、セクタ構成を図示したものです。
ここで、適当なデータを書き込んでみましょう。
SH7780は、リセット後、0xA0000000番地から起動します。この領域はROMの0000番地につながっていることが多いでしょう。したがって、ROMの0番地に適当なコードを書き込めばSHはそれを実行してくれるはずです。
適当なバイナリエディタで、次のような内容のファイルを作ります
> 0009 0009 0009 0009 0009 0009 0009 0009
> 0009 0009 0009 0009 0009 0009 0009 0009
> 0009 0009 AFF8 0009 0009 0009 FFFF FFFF
> FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF
0009 は、SHにとってのNOPコードです。AFF8は遅延分岐で、少し前のアドレスに戻ります。
このコードを実行すればCPUは無限ループしてくれるはずです。
実際に、MITOUJTAGのフラッシュROMライタを使って書き込んでみると、アドレス端子のA1~A5は激しく動くものの、A6以上のアドレス端子はLのままで止まっています。つまり、CPUは+00~+3E番地の間で動いているといえるでしょう。

SH4はキャッシュを積んでいるので、アドレスバスが実行している番地を指しているとは限りませんが、どうやら0x40番地以降は読みに言っていないことは、少なくとも推測できます。
JTAGロジックアナライザで波形をみてみても、A1~A5が動いていてA6以上は動いていないことがわかります。これは想定した動作です。つまり、CPUは全く動いていないということはなく、少なくとも何らかのプログラムを実行していることが推測されます。
まとめ
・MITOUJTAGのJTAGバウンダリスキャンを使うと、SH4の入出力端子を見たり操作することができます。
・バウンダリスキャンを使えば、プログラムを組むことなしに、CPUが動くのを確認できます。
・MITOUJTAGのバウンダリスキャンは、非常に強力で汎用性の高いデバッグ方法です。
今回はバウンダリスキャンを使って「CPUが動いていること」を確認しました。次はSH4A用のJTAG ICEを作ってみることにします。お楽しみに。
| 固定リンク



コメント