May 23, 2008

Amontec JTAGkey-Tiny (FT2232) を Xilinx iMPACTから使う

FTDIのFTCJTAG.dllの仕様(リード、ライトが最低2bitsから)にブチ切れつつ、漸く完成しました。FPGAのプログラムをダウンロードする際、これまではパラレルポート+自作JTAGアダプタを使ってきたのですが、あまりの遅さについつい、Xilinx純正のダウンロードソフトであるiMAPCTから、純正以外のJTAGケーブルをコントロールできるようなプロキシソフトをこさえてしまいました。完成した現在では、前に購入したFTDIのFT2232を搭載したAmontec JTAGkey-Tiny経由で、iMAPCTからダウンロードをサクサク行えています。

実は世の中には既に便利なSVF Player(JTAG操作を記述したSVFファイルを様々なJTAGケーブルを通して実行するためのソフト、当然データのダウンロードもできる)があるので、ダウンロードを高速にしたいという要望だけみれば、今回作成したソフトはかなり車輪の再発明です。しかしながら、今回こさえたものはXilinxの純正ツールであるiMPACTから直接使えるので、ダウンロードを行う際にわざわざSVFファイルを書き出し、SVF Playerを起動する必要がこれでなくなりました。快適です。

動作原理ですが、リモートケーブルの概念を利用しています。これは書込みを指示するiMPACTが実行されているPCとJTAGケーブルが接続されているPCが異なる場合、操作の指示をTCP/IPでJTAGケーブル側のPCに転送するので、そのプロトコルさえわかれば純正ケーブル以外のJTAGケーブルにも対応できるというわけです。このプロトコルはsourceforge.netで開発が行われているxilprgのcblsrvで実装例がありましたので、これを下地にJTAGkeyに搭載されているFT2232に対応するよう改造を行いました。

プロトコルの構造は単純だったので、改造ポイントはすぐにわかりましたが、ここで冒頭の問題にはまりました。FT2232でJTAGをコントロールするためのFTDIが提供しているFTCJTAG.dllは制御の単位が最低2bitsであったことです。結局可変長のビット配列クラスlong_bits.hを用意してビット単位の切り貼りを行うことで解決しましたが、この制限が何に由来するものなのかよくわかりません。なおlong_bits.hの使い方はlong_bits_test.cppを参考にどうぞ。

ソースとコンパイル済みのバイナリのセット cblsrv-0.1_ft2232.zipを公開します。実行方法は以下のとおりです。指定したポート番号を、iMPACTの[option]->[Cable Setup]-[Cable Location]でlocalhost:(ポート番号)のように指定してください。

cblsrv.exe -c amontec -p (ポート番号)

動作確認はiMPACTの8.2と10.1で行いましたが、いずれも快適に動作しています。

※以下、修正情報です。
2008/05/26 高橋さんのご指摘があり、JTAGkeyのポート割り当てに関するバグを修正し、ファイルを差し替えました。
2008/05/27 long_bits.hでメモリ割り当てをしくじっているバグがありました。修正済みのものと差し替えました。
2008/06/29 もしTCKが早すぎて対象機器が動作しないようでしたら、ft2232jtag.hの49行目dwClockDivisorの値を大きくしてリビルドしてみてください。

※※いえながさんによると、VC2008がインストールされていない環境では、実行に際して『Microsoft Visual C++ 2008 再頒布可能パッケージ (x86)』が必要とのことです。

14:08 fenrir が投稿 : 固定リンク | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | このエントリをドリコムRSSにクリップ | トラックバック
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/641
コメント

SPI用DLLも、妙な制限があるんです。仕方が無いので、MPSSEでしたっけ、あれのマイクロコードのスペックを読んで自分でライブラリを作りました。

Posted by: 酔漢 : May 25, 2008 10:25 PM

monamourさんのところで知りましたが、UrJTAGというものがあるそうです。
http://d.hatena.ne.jp/monamour555/20080525/1211690673

Posted by: 酔漢 : May 26, 2008 07:45 AM

はじめまして。高橋と申します。

すばらしいものを公開してくさりありがとうございます。
まさに私が欲しかったものです。感謝と尊敬の念で一杯です。

早速ですが、ft2232jtag.h を拝見させていただきました。
コードの内容もよくわからずにコメントさせていただき恐縮ですが、
以下の定義が入れ替わっているように思うのですが。

JTAG_OE_N 19 => GPIOL1
VREF_N_IN 20 => GPIOL0

自分で動かしても見ないうちに大変失礼ですが気になったもので。

Posted by: 高橋 : May 27, 2008 12:01 AM

fenrirです。

>酔漢さん
やはりそうされていましたか。FTCJTAGで検索をかけると酔漢さんのasagaoが引っかかったのですが、『どうしているんだろーな』と横目で眺めつつ、軟弱にライブラリの制約にしたがっている自分がいました(笑) UrJTAG教えてくださりありがとうございます。ドキュメントをさらっと読んだくらいですが、開発が止まってしまっているjtagtoolの後継という位置づけだそうで、期待しております。

>高橋さん
ご指摘ありがとうございます。おっしゃる通りでしたので、zipも含めて修正させていただきました。jtag_oe_nにプルダウンがあり修正前の状態でも動作していたため、全く気づきませんでした。

Posted by: fenrir : May 27, 2008 01:07 AM

はじめまして.いえながと申します.

公開していただいているcblsrvを実行しようとすると.
「このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。アプリケーションを再度インストールすることにより問題が解決する場合があります。」と出てしまい,実行することができません.

解決方法等ございましたら,ご教授くださいm(_ _)m

Posted by: いえなが : June 17, 2008 09:23 PM

>いえながさん
大変申し訳ありませんが、このエラーメッセージ出くわしたことがありません。しかしdllが見つからない類のエラーではないかと考えられます。実行にはFTCJTAG.dllが見えている必要がありますので、DOS窓で(FTCJTAG.dllがある)cblsrv-0.1_ft2232/build/win32/Releaseに移動した後、実行していただくと解決する可能性があります。

Posted by: fenrir : June 17, 2008 11:57 PM

回答ありがとうございます.

DOS窓でcblsrv-0.1_ft2232/build/win32/Releaseに移動して実行してみましたが,指定されたプログラムは実行できませんと出てしまいます(T_T)

Posted by: いえなが : June 18, 2008 05:44 PM

>いえながさん
お役に立てなかってようで、申し訳ありません。現象がこちらでも再現するようにできましたら、何らかのコメントをつけさせていただきます。

Posted by: fenrir : June 19, 2008 10:27 PM

自己解決しました!

自分の環境にVisual C++ 2008のライブラリが無いため実行できなかったようです.
Microsoft Visual C++ 2008 再頒布可能パッケージをインストールしたところ,問題なく使用できるようになりました.

どうもお騒がせしましたm(_ _)m

Posted by: いえなが : June 22, 2008 11:20 PM

>いえながさん
fenrirです。問題解決されたようで、なによりです。また、情報ありがとうございます。

Posted by: fenrir : June 23, 2008 02:51 PM

 お久しぶりです。以前この次のエントリーでコメントさせていただいた中田です。前回は素早い対応、誠にありがとうございました。

 最近になってようやくまとまった時間が取れるようになり、CPLDの動作テストを試みているのですが、iMPACTからCPLDに接続する事ができず途方に暮れております。

 具体的には、公開していただいたcblsrv.exeコンソール上では

 Cable is '(JTAGデバイス名)'

というふうにJTAGデバイスを認識するのですが、iMPACTのCable SetupでCPLDに接続しようとするとiMPACTのConsole上に以下のようなメッセージが表示されてしまうのです。

Enumerating cables. Please wait.
PROGRESS_START - Starting Operation.
Connecting to cable (Usb Port - USB21).
Checking cable driver.
Source driver files not found.
The Platform Cable USB is not detected. Please connect a cable.If a cable is connected, please disconnect
and reconnect to the usb port, follow the instructions in the 'Found New Hardware Wizard', then retry
the Cable Setup operation.
Cable connection failed.
PROGRESS_END - End Operation.
Elapsed time = 0 sec.
// *** BATCH CMD : setCable -port lpt1
Server Name = localhost, Port = 2000.
recv() failed: 10053

また、このメッセージ表示と同時にSRST_N_INに接続されたLEDが約1秒間隔で点滅します。

 JTAGデバイス自体は手持ちのARMマイコンを正常にコンフィグできていることから、動作そのものに問題はないと思われます。また、パラレルポート経由だと正常に書き込めることからCPLD周辺回路の不具合とも考えられません。

 こちらで指定するポートを変更したり、dwClockDivisorの値を50程度まで大きくしたりとできる限り手を尽くしたのですが、どうしてもCPLDに接続する事ができなかったため、もしこのようなトラブルの原因としてお心当たりがあればぜひご教授いただきたく、今回投稿させていただいた次第です。

 なお、開発環境は
《platform》 ISE10.1.02
《OS》 Windows XP Professional SP2
《target device》 XC9536 10PC44C
《language》 Verilog-HDL
となっております。

 素人質問で大変恐縮ですが、どうぞご指導よろしくお願いいたします。

Posted by: 中田 : August 6, 2008 11:19 PM

>中田さん
fenrirです。iMPACTと自作したソフトの通信がうまくいっていないような印象を受けております。
基本的なことをいくつか確認していただきたいのですが、貼り付けてくださったログのポート番号(2000)とこちらの自作ソフトを起動する際に-pで指定したポート番号は同じでしょうか?
ファイアウォール系のソフト(ノートン先生等)が邪魔をしているということはないでしょうか? これらを一時的にきって試していただくとどうでしょうか?
最後にハード的な問題は皆無だと思いますが、念のため、JTAGKeyを接続した際に[マイコンピュータ]-(右クリック)-[システムのプロパティ]-[ハードウェア:デバイスマネージャ]で表示されるUSBの項目にFT2232の2ch分が認識されていますでしょうか? またそのドライバはFTD2XXを使用していますでしょうか?
今のところ僕の方で思いついたのはこれくらいです。うまくいけばよいのですが、もしそうでなければ力不足です、すいません。

Posted by: fenrir : August 7, 2008 10:05 PM

 中田です。お返事が遅れてしまい申し訳ありません。

 まずご指摘いただいた点について再度確認してみましたが、ポート番号は正しく指定しており(ポート番号をわざと異なるものに変更すると別のエラーが出る)、またファイヤウォールやウイルスソフトもオフにして実行してみましたが、残念ながら結果は変わりませんでした。

 ハード面でもデバイスマネージャ上でUSB Serial Converter A,Bとも認識されており、またドライバの一覧にftd2xx.dllが含まれていることから、こちらも問題ないと思われます。

 そもそもJTAGデバイスが某オークションで落札したユーズド品であることが問題かとも考え、DesignWave Magazine 2008.6月号にたまたま載っていたJTAGkey互換の回路というものを組んで実験してみたのですが、やはり同様の症状が出てしまいました(「互換」なのであまり参考にならないとは思いますが…)。

 今後何か進展がありましたらまた報告させていただきたいと思います。ありがとうございました。

Posted by: 中田 : August 12, 2008 02:54 PM

Linux版作りました。FTCJTAGないのでMPSSE直書きです。

それと、うちでは Windows版でXC18V01Sの旧リビジョンに書けてないんですが、こちらでは書けてますでしょうか?

Posted by: かみき : October 19, 2008 11:39 AM

>かみきさん
fenrirです。
Linux版お疲れ様です。こちらはMPSSEを直接叩くことに挫折して、FTCJTAGでお茶を濁してきたわけですが、どなたかがそこの部分を解消してくれればいいなぁ、なんて思っていたところでしたので、大変ありがたいです。
なお、こちらのフラッシュのテストデバイスはXCF01とXCF02を試したのみです。もっと様々なデバイスで試験をする必要があるとは思っているのですが、何分手持ちのデバイスがあまりないものなので、有益な情報を提供できず申し訳ない限りです。

Posted by: fenrir : October 20, 2008 08:15 PM
コメントする









名前、アドレスを登録しますか?
(次回以降コメント入力が楽になります)
  • 匿名でのコメントは受け付けておりません。
  • 名前(ハンドル名可)とメールアドレスは必ず入力してください。
  • メールアドレスを表示されたくないときはURLも必ず記入してください。
  • コメント欄でHTMLタグは使用できません。
  • コメント本文に日本語(全角文字)がある程度多く含まれている必要があります。
  • コメント欄内のURLと思われる文字列は自動的にリンクに変換されます。