May 23, 2008Amontec 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で行いましたが、いずれも快適に動作しています。 ※以下、修正情報です。 ※※いえながさんによると、VC2008がインストールされていない環境では、実行に際して『Microsoft Visual C++ 2008 再頒布可能パッケージ (x86)』が必要とのことです。 ※※※(2009/8/8) この記事は意外と需要があるようなので、メンテナンスを行いました。下記コメントで10.1.2で動かなくなる問題を解決してくださったNakagawaさんのコードをマージし、修正版 cblsrv-0.1_ft2232_r3832.zip を新たに上げておきます。修正箇所はnakatomoの文字列で検出できます。またiMPACTのバージョンが古い場合は、IMPACT_VERSIONを、例えば80200のようにdefineするといいです。 ※※※※(2010/2/4) さらに10.1.3, 11.1でも動くよう改修しました(cblsrv-0.1_ft2232_r4740.zip)。このバージョンはコードを修正することなく8.2でも使えることが確認できています。 ※※※※※(2010/3/3) FTCJTAGのDllバージョンによって問題が発生することを認識しました。FTCJTAGのバージョンは1.9(現時点で最新は2.0ですので少し古い)を使ってください。Dllのバージョンチェックを行うようにしたもの、また1.9を添付したもの(cblsrv-0.1_ft2232_r4788.zip)をリリースします。 ※※※※※※(2010/3/19) FTCJTAGのバグ(詳細はこちら)を解消しました。修正されたdllを添付し、さらにFT2232H/4232Hに対応したcblsrv-0.1_ft2232_r4804.zipをリリースします。PROMだけでなく、FPGAへのダウンロードも成功する確率が飛躍的に高くなりました。 ※※※※※※(2010/4/27) Alpha Projectさんの製品であるUSBマルチJTAGアダプタHJ-LINK/USB と組み合わせて使う方法が紹介されています。 コメント
SPI用DLLも、妙な制限があるんです。仕方が無いので、MPSSEでしたっけ、あれのマイクロコードのスペックを読んで自分でライブラリを作りました。 Posted by: 酔漢 : May 25, 2008 10:25 PMmonamourさんのところで知りましたが、UrJTAGというものがあるそうです。 はじめまして。高橋と申します。 すばらしいものを公開してくさりありがとうございます。 早速ですが、ft2232jtag.h を拝見させていただきました。 JTAG_OE_N 19 => GPIOL1 自分で動かしても見ないうちに大変失礼ですが気になったもので。 fenrirです。 >酔漢さん >高橋さん はじめまして.いえながと申します. 公開していただいているcblsrvを実行しようとすると. 解決方法等ございましたら,ご教授くださいm(_ _)m Posted by: いえなが : June 17, 2008 09:23 PM>いえながさん 回答ありがとうございます. DOS窓でcblsrv-0.1_ft2232/build/win32/Releaseに移動して実行してみましたが,指定されたプログラムは実行できませんと出てしまいます(T_T) Posted by: いえなが : June 18, 2008 05:44 PM>いえながさん 自己解決しました! 自分の環境にVisual C++ 2008のライブラリが無いため実行できなかったようです. どうもお騒がせしましたm(_ _)m Posted by: いえなが : June 22, 2008 11:20 PM>いえながさん お久しぶりです。以前この次のエントリーでコメントさせていただいた中田です。前回は素早い対応、誠にありがとうございました。 最近になってようやくまとまった時間が取れるようになり、CPLDの動作テストを試みているのですが、iMPACTからCPLDに接続する事ができず途方に暮れております。 具体的には、公開していただいたcblsrv.exeコンソール上では Cable is '(JTAGデバイス名)' というふうにJTAGデバイスを認識するのですが、iMPACTのCable SetupでCPLDに接続しようとするとiMPACTのConsole上に以下のようなメッセージが表示されてしまうのです。 Enumerating cables. Please wait. また、このメッセージ表示と同時にSRST_N_INに接続されたLEDが約1秒間隔で点滅します。 JTAGデバイス自体は手持ちのARMマイコンを正常にコンフィグできていることから、動作そのものに問題はないと思われます。また、パラレルポート経由だと正常に書き込めることからCPLD周辺回路の不具合とも考えられません。 こちらで指定するポートを変更したり、dwClockDivisorの値を50程度まで大きくしたりとできる限り手を尽くしたのですが、どうしてもCPLDに接続する事ができなかったため、もしこのようなトラブルの原因としてお心当たりがあればぜひご教授いただきたく、今回投稿させていただいた次第です。 なお、開発環境は 素人質問で大変恐縮ですが、どうぞご指導よろしくお願いいたします。 Posted by: 中田 : August 6, 2008 11:19 PM>中田さん 中田です。お返事が遅れてしまい申し訳ありません。 まずご指摘いただいた点について再度確認してみましたが、ポート番号は正しく指定しており(ポート番号をわざと異なるものに変更すると別のエラーが出る)、またファイヤウォールやウイルスソフトもオフにして実行してみましたが、残念ながら結果は変わりませんでした。 ハード面でもデバイスマネージャ上でUSB Serial Converter A,Bとも認識されており、またドライバの一覧にftd2xx.dllが含まれていることから、こちらも問題ないと思われます。 そもそもJTAGデバイスが某オークションで落札したユーズド品であることが問題かとも考え、DesignWave Magazine 2008.6月号にたまたま載っていたJTAGkey互換の回路というものを組んで実験してみたのですが、やはり同様の症状が出てしまいました(「互換」なのであまり参考にならないとは思いますが…)。 今後何か進展がありましたらまた報告させていただきたいと思います。ありがとうございました。 Posted by: 中田 : August 12, 2008 02:54 PMLinux版作りました。FTCJTAGないのでMPSSE直書きです。 それと、うちでは Windows版でXC18V01Sの旧リビジョンに書けてないんですが、こちらでは書けてますでしょうか? >かみきさん はじめまして。 そこで、デバッグして修正しましたので、お知らせします。 >T.Nakagawaさん MESSAGE 0x06についてはOKをACKするだけでよさそうでした。何もしない場合、iMPACTにエラーログは出ますが、特に大きな問題にはならなかったようです。 私の環境で動かなかった直接の原因は、どうやら二つありました。 一つ目は、Cableの名前として"Parallel III"などを返したり、speedを設定するとiMPACTが無限ループに突入するというもので、これはそれらを設定しないことで回避しました。 二つ目は、DeviceIDが取得できなかったことでした。fixでは、ここをあらゆる場合にJTAG_WriteRead()するのではなく、結果をverifyしないときにはJTAG_Write()のみを発行することで回避しました。 特に一つ目の現象などは、私としても「良く分からない」という感じです。もしかしたら別の環境では動かないことがあるかもしれないので、mergeされるのはOKですが、そこら辺を明記して頂けるとありがたいかもです。 はじめまして、横溝と申します。 >横溝さん ご快諾いただきありがとうございます。 お世話になります。 CQ出版の記事を見てこれは良いと思い、早速 fenrirさんページのやり取りを見させていただき、 尚、別途ARM7デバイスへのアクセスができていますので、 初歩的な質問ですいませんが、何か気づくことがありましたら ●メッセージ >おきさん >手動(Cable Setup)で接続 初歩的な質問、しかもいMPACTの話で申し訳ありませんでしたが、迅速かつ適切に教えていただき誠にありがとうございました。 Posted by: おき : January 23, 2011 01:32 PMコメントする
|
スポンサード リンク
|