Sun, 24 Jul 2005
shobon-JTAGのプロジェクトには、Serial というフォルダが含まれています。
これは、FTDI社のFT232BM という USB-TTL Serial 変換 LSI を使う際に、メーカから提供されているドライバのうち、仮想シリアルポート方式(COMn でのアクセス。WindowsのシリアルAPI がそのまま使える利点があるが、市販の USB-Serial 製品にくらべると不安定な印象があります)ではなくて、FDTI 製の API を使用するためのダイレクトドライバ、というものを使って、シリアルターミナルを作ってみよう、という目的で過去に作ったものを、shobon-JTAG のプローブに使えないか?ということで引っ張り出してきて、一部ネイティブの API を呼ぶところだけを流用しているものです。
せっかく含まれているのですが、shobon-JTAGの Cable メニューでは 7/22 現在選択不可になっています(過去のバージョンでも "broken" とかかれている。の下のほう、変更履歴 6/29 を参照ください)。
なぜか。速度はともかく、期待したとおりに安定して動かなかったからです。
ちなみに FTDI 社からは、新しいバージョンの LSI(FT2232C) がでており、それはまさに「JTAG のための API」をネイティブでサポートしているものなので、すでに某雑誌の記事にもなっており、いまさら FT232BM でもないだろう、とか調べてる時間がなかった、とか、いろいろあるのですが、とりあえずプロジェクトに入れたものの、つかえないままほってありました。
ようやく気が向いたので、原因を調査してみたところ、これが原因では?と思われるコトがわかったので書いてみます。電子回路のエライ人にはあたりまえなんでしょうが、気づきませんでした。
まず、shobon-JTAG が作り出す3つの波形をご覧ください。
1)FTDI の石でインフラテスト(IR-Capture)に失敗した際の波形
2)FTDI の石でインフラテスト(IR-Capture)に成功した際の波形
3)LPT ポートドライバ(ByteBlaster)のドライブ波形(参考)
オシロスコープのキャプチャ画面ですが、一番上から TCK(青),TDI(緑),TMS(ピンク),TDO (水色)です。TCK,TDI,TMS は FTDI 側(3)はPCのLPTポート)が作っている信号です。ほぼ同じに見えるはずです。TDO は FPGA の応答です。これは別項で取り上げた CSP-004D に搭載されている Altera の FLEX10K10 (EPF10K10LC84-4) が返してきている波形です。
さて、1)と2)の TDO の違いを生んでいる原因はなんなんでしょう。?
ランダムに TDO が 1)だったり(失敗)、2)だったり(成功)するのです。
私には上の3つの波形入力は同じ(まったくではないが)に見えるのに........
おまけに、3)は常に(私の環境では)正常に動作する ByteBlaster を shobon-JTAG で直接 LPT 駆動したときの波形ですが、タイムスケールがほぼ 1000 倍(笑)なのをのぞけば、1)、2)とさほどデジタル的に違うようには思えません。
世の中にはわからないほうがいいこともある。と自分にいいきかせてあきらめかけたのですが、ふと思い立って TCK の立ち上がり波形を比べてみることにしました。
これはあきらかに違っています。
ということで、B)にバッファ(HC244)を通してみたのが下の波形です。
C)FTDI の石で作成した TCK の立ち上がり波形(HC244経由)
キレイに立ち上がるようになりました。立下りは示していませんが、ほぼ同様になまっていたものが、キレイになりました(アタリマエ)。
で、結論ですが、TCK にバッファを入れたとたん、IR-Capture に 100% 成功するようになりました。やっぱりクロックはキレがないといけないんでしょうか?
それにしても、FTDI の石ですが、無負荷の波形を見ても立ち上がりが同様になまっていました。こんなもんなんでしょうか?
リード線は多少(10cm程度)つないで実験してはいますが、あんなになまるものなんですかねぇ。
上の全周期を収めたタイムスケールの画面では一見違いがわからなかったのですが......
私にはもうこれくらいしか違いが思い当たりません。
そういえば ByteBlaster には バッファが入っていますが、レベル変換以外にも、こういう理由のほうが大きいんでしょうか(笑)