FTDI と Vivado の Jtag

Vivado で JTAG 認識しなくなった時のリカバリー方法。hw_manager まではつながるけど、その先。陥った©状態は、USB-UART は動くのに JTAG を認識してくれない。

PYNQ や ARTY-Z7 では USB-UART に FTDI の 2232HQ というのをつかっている。Zybo も同じ。このチップ、USB のインタフェースとして2つもっているみたいだ。UltraZed は 232HQ で微妙に違う。

ここの blog だと
http://www.hmwr-lsi.co.jp/fpga/fpga_1.htm
FT2232D(微妙に違うな)、片方をJTAG、片方を UART にできそうな感じ。

Windows で PYNQ を USB に接続して見るとデバイスマネージャだと USB-UART が動いているので、安心してしまう。でもこれは実はインタフェース1のほうなのだ。JTAG として動くのはインタフェース0 。なので、USB-UART は動くけど、JTAG が動かないという状況があり得る。

おそらく、ちょっと前に FreeScale(じゃなくなったんだっけ) の i.MX6 をデバッグするときに、OpenOCDをつかっていた。 zadig-2.3.exe というツールをつかってドライバを入れ替えたのが今回のトラブルの元の気がする。zadig はよくできていて、インストーラもない(だからダウンロードしたらウィルスチェックすること)。

もどしかたはデバイスドライバを元に戻せばいいのだけど、どういうわけか、JTAG のドライバはデバイスマネージャで見えない。あるかもしれないけど、すぐに探せない。ここはもう Windows 10 の使い方の問題。デバイスとプリンタになぜか現れる。Digilent Adept USB Device。

f:id:ryos36:20171007140326p:plain

うまくうごいている状態の記録しかのこっていないのがお粗末だが、上の絵になれば OK。ここに winusb とかが見えているとだめ。winusb 自身は MS だからちょっと安心したりするけど、JTAG 的にはだめ。ダブルクリックして、プロパティを見るとドライバの状態を見ることが出来る。この時点では”見る”だけなので(管理者権限で動いていない)、設定の変更を更にクリックする。あとはドライバの更新で FTDI の USB Serial Conveter にすればよい。私の場合、バージョンは 2.12.24.0 (現時点の最新は 2.12.28 かな?)

f:id:ryos36:20171007140719p:plain

そうこうしていると USB-UART が動かなくなることがあるので、USB Serial Converter B をダブルクリックして詳細設定の TAG を開くと VCP をロードするがあるので、これをロードすると USB-UART が使える。

f:id:ryos36:20171007140854p:plain

これでひとまず終了なのだが、PC の再起動とかなんとかしていると、また、元に戻ったり、あるいはデバイスドライバに不具合があります。とか出てきて、問題を修正すると、元に戻ってしまったりとすることがある。これは、おそらく inf ファイルが残っているから。

そこでコマンドプロンプトからどんな inf があるかチェックする。pnputil.exe というこまんどがそれ。MS 製でもとからついてきている。-e オプションで表示。-d で削除ができる。libusb に関連する inf を削れば(おそらく)元に戻ったりすることはなくなる(と思う)。

c:\Temp>pnputil -e > inf6.txt

c:\Temp>explorer .

c:\Temp>explorer -d oem55.inf

c:\Temp>pnputil -d oem55.inf
Microsoft PnP ユーティリティ

ドライバー パッケージが正常に削除されました。

c:\Temp>pnputil -d oem141.inf
Microsoft PnP ユーティリティ

ドライバー パッケージが正常に削除されました。

c:\Temp>pnputil -e > inf7.txt