« 特電の勉強会は、ほぼ毎週やっています | トップページ | Artix-7で作るUSB3.0 CMOSカメラでAXI-Interconnectを使ってみた »

2014.05.05

XILINXのPlatform USBを自分のプログラムからコントロールする

XILINXのPlatform USBはいろいろなところに既にあるし、XILINXの純正評価ボードにも最初から組み込まれています。

これを自分のプログラムから自由にコントロールできたら素晴らしいことです。その方法を探ってきました。

やり方は3つ思いつきます。

  1. USBプロトコルアナライザで解析し、汎用USBドライバ(libusb)でアクセスする
  2. XILINXのデバイスドライバを呼び出す方法を探る
  3. リモート接続を使う

まず、1の方法ですが、この方法だと、INFファイルを新たに作って、PlatformUSBケーブルがつながれたときにXILINXのドライバではなく、libusbが読み込まれるようにしなければなりません。これはユーザの環境を変えてしまうのでNGとします。

2の方法ですが、XILINXのPlatform USB CableはWinDriver6というドライバを使っています。CreateFileとDeviceIoControlとWriteFile、ReadFileで頑張ればできなくはないかもしれません。ですが、不確実性やライセンスの面で懸念が残ります。

そのため、ここでは3の方法を探ってみることにしました。

XILINXのiMPACTは、実は、TCP/IPを持ちいてリモート接続することができます。ISEの環境が設定されたコマンドプロンプトからcse_server.exeを起動すると、ポート50001で待ち受けが始まります。

Cse_1

ここで、iMPACTを起動して、CableのSetupでRemoteを選ぶとTCP/IPで通信が行われ、他のマシンにあるPlatform USBケーブルに接続できるというわけです。

ここで、重要なことがあります。ISE10かISE11の頃に、cse_serverの仕様が変わりました。古いcse_serverはテキストベースで端子の上げ下げを通知していたのですが、新しいcse_serverはバイナリデータ化され、プロトコルは複雑なものに変わりました。

新旧のcse_serverでプロトコルは全く異なります。

Interface誌の2010年で紹介されているcse_serverの記事は古いプロトコルのものなので、まったく役に立ちません。だから、改めて解析しなおす必要があるのです。

そこで、cse_serverを使っているときのTCP/IPのパケットをダンプして、解析しました。

Csejtag_analyze

その結果、わかってきたことは、

  • ファイルの転送やデバイスプログラミングなど、かなり高レベルなコマンドを与えて、リモート操作している
  • 一応、低レベル(TMSやTDIの上げ下げ、SCANの実行)な操作もできる
  • 要するに、コマンド体系はJTAGのそれではなく、iMPACTのものである

ということです。

とりあえず、自分で作ったプログラムからSCAN DRコマンドを発行して、Artix-7のIDCODEを読み出すことまではできました。

Cse_3

上の画面に出ている13631093というのが、XC7A100TのIDCODEです。

一応、接続や、初期化、TMSやTDIなどの低レベル操作、SCANの実行まではやり方がわかってきました。もう、自由にJTAGの波形は作り出せます。

Cse_4

まだよくわかっていないのが、TAPの操作方法です。TAPを任意のステートに動かしたり、SCAN_DRやSCAN_IRの終了後にどこに動かすか、という方法が解明できていないでいます。

まぁ、でもあと1週間もあればMITOUJTAGからPlatform USBを操作できるようになっていると思います。

|

« 特電の勉強会は、ほぼ毎週やっています | トップページ | Artix-7で作るUSB3.0 CMOSカメラでAXI-Interconnectを使ってみた »

コメント

コメントを書く



(ウェブ上には掲載しません)




« 特電の勉強会は、ほぼ毎週やっています | トップページ | Artix-7で作るUSB3.0 CMOSカメラでAXI-Interconnectを使ってみた »