« トラ技78K基板でUSB-JTAGを作ってみた | トップページ | MITOUJTAG1.5サービスパック2リリース »

2008.07.25

78K基板によるUSB-JTAG安定化

今日は78Kマイコンを使ったUSB-JTAGの動作安定化作業を行いました。

昨日作ったUSB-JTAGは動作が不安定で、しかも毎秒0.4回しかサンプリングできませんでした。

その原因は、trg_getc()という関数の仕様にありました。
この関数はテキスト処理に特化してあるため、USBの通信で'\r'というコードを受け取ると'\n'に変換し、'\n'を受け取ると破棄するようになっています。
USBの上でバイナリデータを流した場合に、この関数が悪さをしていたようです。
受け取ったデータが正しくないのでアプリケーションレベルで何度もリトライし、それで遅くなっていたようです。

trg_getc()のかわりに下記のようなバイナリの1文字受信関数を作ったところ、
BYTE usb_getbin()
{
 BYTE uc;
 trg_recvdata(&uc,1);
 return uc;
}
ちゃんと安定してUSB-JTAGが動くようになりました。

しかし、まだ動作速度が目標のレベルに達していません。
Spartan3ANの動作をロジアナモードでサンプリングしてみると、毎秒18回程度しか出ていないようです。
Trg78kjtaglogiana

現在のトラ技78KによるUSB-JTAGは、TCK速度は65kHzくらいで、ロジアナモードでのサンプリング速度は実測毎秒18回程でした。
XC3S700AN FG484のバウンダリスキャンレジスタ長は1005ビットなので、計算上は毎秒60回程度のスキャンはできるはずです。

予想より遅かった原因は、8bitマイコンだから・・と遠慮してしまって、JTAGの1回のデータサイズを240bitに制限してしまったことがあります。そのため、1005ビットのデータシフトにUSBのパケットを5個(往復で10個)使ってしまっています。また、TAPをCapture-DRへ動かす処理や、データのシフト後からUpdateステートへ動かす処理用に1個のUSBのパケットを使ってしまいます。

これらのパケット間の待ち時間により、一層無駄な時間が生じてしまっていました。
しかも、パケットを1個送ったら、応答文字列とチェックサムが返るまで待つようになっています。

(1). ホスト: コマンド送信
(2). 78K: コマンド受信と解釈
(3). 78K: JTAG処理
(4). 78k: 結果送信
(5). ホスト: 結果文字列受信
(6). ホスト: チェックサム確認

このハンドシェイクはRS232C時代の名残なので、不要でしょう。ハンドシェイクやチェックサムはUSBが内部でやってくれているのですから。

78K版USB-JTAG高速化のためには、まずJTAGのデータ入出力を行う部分をアセンブラ化してTCK速度を上げ、それからUSBのデータを一括で送り、アプリケーションレベルでのハンドシェイクをしないように改良する必要がありそうです。

|

« トラ技78K基板でUSB-JTAGを作ってみた | トップページ | MITOUJTAG1.5サービスパック2リリース »

コメント

コメントを書く



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




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/72023/41963474

この記事へのトラックバック一覧です: 78K基板によるUSB-JTAG安定化:

« トラ技78K基板でUSB-JTAGを作ってみた | トップページ | MITOUJTAG1.5サービスパック2リリース »