2012年05月24日

JTAGツールとSYNCBB

前記事で MPSSE についてちょっと調べてみたわけだが ... 自分のツールで対応してみたいというのが理由だった。だが、結局は 機能が増えるわけではなく、性能が改善されるだけだ。それはそれで興味深くはあるのだが ... 後回しでも良いだろう。

MPSSE はちょっと置いておいて ... 他のことを考えてみよう。

一般に JTAG Cable は、けっこう高価だ。自作なんかも 行われているわけで、JTAGkey clone が人気がある。ただ、これにしても 部品も揃えないといけないし、それなりにはコストがかかる。なにより作るのが面倒で、お試しでちょっと使うには敷居が高い。

であれば...

  • AE-UM232R を使って、配線だけで 広範囲な電圧(1.8V-5V)に対応。ただし遅い
     -- VCCIO を ターゲットから貰えば良い。配線だけで済むが、接続の手順というものがあるかも。
  • UM232H を使って、3.3V 固定なものの 配線だけで高速に 使える。
     -- UM232H は、3.3V 専用。またシリアルの設定のままだと基本 MPSSE は使えない

こういう風になれば、少しは敷居が下がるのではないだろうか?

    SYNCBB でも FT2232H で 3.87 Mbps までは出た。MPSSE の 1/5 ぐらいの性能だが、常に最高性能を出せるとは限らないわけで、使い物にはなるはず。FT232R だと 随分(ひとけた)落ちると思うが、お試し用と割り切れば悪くないはず。

でも、なかなかこうならないのは、ツールの対応が進まないからだと思う。それについて考察してみる。

OpenOCD

    まずはこれ。FT232R のドライバは標準ではない。誰かパッチを作っていないか調べてみると ...

    なんとあった。
    FT232R based JTAG with OpenOCD patch

    これである。ただし、

    I do not have FT232R. I just feel this might be interesting.

    なんてことが書いてあって、ちょっと心もとない。コード自体はしっかりしているようなので、まぁこれベースで 改造していけば、使えそうな感じはする。ちなみに、OpenOCD-0.5.0 に対してパッチを当ててみたら 2 ヶ所だけ reject された。手で直すのは簡単ではあった。

    ちょっと見た範囲では、ピンアサインがいまいち

    * Bit 7 (0x80): unused.
    * Bit 6 (0x40): /SYSRST output.
    * Bit 5 (0x20): unused.
    * Bit 4 (0x10): /TRST output.
    * Bit 3 (0x08): TMS output. (CTS)
    * Bit 2 (0x04): TDO input. (RTS)
    * Bit 1 (0x02): TDI output. (RXD)
    * Bit 0 (0x01): TCK output. (TXD)

    Bit2 が RTS だから もともと出力。これに TDO を割り当ててしまうと 出力がぶつかり、配線だけで 使うわけにいかなくなる。ピンアサインについては、後で検討してみよう。

UrJTAG

    OpenOCD ほどではないが、次ぐらい? に有名なツール。これのパッチ があるのかどうか 調べてみたが見つからなかった。

    対応するのにどれぐらい大変なのか? ちょっと見てみた。

    まず、UrJTAG は、FT245 ベースの USB-Blaster と FT2232(MPSSE) ベースの各種 Cable に対応している。ドライバは二段構成で ftd2xx , libftdi に対応した 下位ドライバ2 種類と、上位ドライバの構造をしている。

    で、FT2232 ドライバは 2000行ほどあるのだが、各種 Cable に対応している部分が 半分を占める。Cable を1つだけにすると 1000 行弱で、それをベースに すれば、それほどは難しくないかも知れない。USB-Blaster のコードもあり 500行ぐらいとさらに小さい。でも FT2232 ドライバベースの方が良さそうな気がする。

    ただ、ちょっと問題がある。下位ドライバで FT_SetBitMode して SYNCBB(Synchronous BitBang) モードにしたいわけだが、そのときに Direction の パラメータが必要なのだ。MPSSE だと read/write で Direction を変更できるから良いのだが ... SYNCBB だと なにか API を追加しないといけなさそう。

cblsrv-0.1_ft2232

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

    URL はここ。どれだけ知られているのか分からないのだが、JTAGkey clone を iMPACT から直接使えるようにするもの。ただ、Linux では使えないし、MinGW の環境でビルドできなくなっている。そのままでは、(私が)いじるのには向いていない。

    ところで cblsrv は、ネットワーク経由で iMPACT から司令を受けて JTAG の処理をする サーバ。で、司令がどういうものか ... ちょっと見てみたところ、どうも JTAG の STATE 設定 と TDI へ bit ストリームを送り込む (+ TDO から受け取ったストリームを 返す) 構造のようだ。

    ちょうど JTAG のツールを作っているところだから、上位レイヤーと自作のコードを くっつけた方が (私には)扱いやすそうな感じ。いっそのこと 上位レイヤーのロジックをコピーして re-write しても良いかも知れない。

というわけだ。このなかでは パッチが既にある OpenOCD の改造が 一番敷居が低い。ピンアサインを決めるだけなのかも知れない。( 作った人は FT232R は持っていないものの、ピンアサインは MPSSE に準じているところから見て FT2232X でデバッグ済みのような気がする。)

なら、まずはピンアサイン。avrdude-serjtag で基本のアサインは 2 つある。やはり TXD/RXD は空けておきたいから
 
TMS = D7/RI
TCK = D5/DSR
TDI = D6/DCD
TDO = D3/CTS

これが基本か。 あとは 2 pin だが、

/SYSRST = D4/DTR
/TRST = D2/RTS

これで良いのじゃないか?

あと、JTAGkey clone では、SYSRST は双方向 が基本みたいだが、このピンアサインだと 出力専用 にせざるをえない。(これで良いのだろうか?)

cblsrv の調査

    どんなコマンドがあるか調べてみた。

    MSG_COMMANDS:
    CMD_DONE
    CMD_SET_CABLE_OPTION
    CMD_GET_CABLE_OPTION
    CMD_IS_CONNECTED
    CMD_READ
    CMD_WRITE
    CMD_SET_PIN
    CMD_PULSE_PIN
    CMD_START_OPERATION (open みたいなもの)
    CMD_NAVIGATE_TAP (from to の STATE遷移)
    CMD_WAIT_TIME (sleep)
    CMD_WAIT_TCK (N 個のクロック送出)
    MSG_GET_INFO:
    MSG_SET_CABLE_MODE:

    MSG_CLOSE_CABLE:
    MSG_CHECK_SERVER:
    MSG_0x06:

    これで全部。MSG_XXX で、ひとつのコネクション。違う MSG を送るたびに一旦コネクションを切る。MSG_COMMANDS だけは、他のと違って CMD_XX がひとつのコネクションのなかで連続して発行される。

    まず重要なのが、 CMD_NAVIGATE_TAP -- 簡単なものだとしても JTAG のレイヤーを 持っていないといけない。

    CMD_WRITE は、TDI ストリームを送り込む司令で、CMD_READ は、最後の CMD_WRITE に対する TDO ストリーム を返す。常に read しておかないといけないので、ちょっと嫌らしい。

    MSG_GET_INFO/MSG_SET_CABLE_MODE は対になっていて、ケーブル名 や ケーブルタイプ , port , speed を GET/SET する。

    CMD_SET_CABLE_OPTION/CMD_GET_CABLE_OPTION は、オプション名 に値(文字列) を読み書きするもの。これも 汎用的すぎてちょっと嫌なかんじ。

    cblsrv 自体は、C++ だが、クラスを使ってなくて、C に変更するのは容易。これを書き換えていくというのは、ひとつの手なんだが、書き方が自分の趣味に合わない。MSG_XX や CMD_XX に対して関数が割り当てられていて、case 文 と処理するコードが離れている。関数作る分だけ冗長だし、流れを読みにくい。

    やっぱり、re-write したいような ...

自作のツール

  • rtavr_tools-0.10.tar.gz

    一応 作っているものの最新版。ただし 前記事の MPSSE 対応とか この記事に関係するところをいじっている最中。あと、ちゃんと書いておくと もともと汎用的なものは目指していない。自分が使う範囲で便利なものを目標としている。
posted by すz at 20:06| Comment(0) | TrackBack(0) | artemis
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/56055439
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック