激安版 USB Blaster について

Amazon で 購入できる USB Blaster のうち、1万円未満の安価なものは、
値段相応で、それなりに訳ありっぽい感じです。
Quartus II 13.0sp1 環境にて実際に使ってみて把握できた内容を自分自身の為にメモしておく。

USBデバイスとしての情報

VID: 0x09FB
PID: 0x6001
Product: “USB-Blaster”
Manufacturer: “Altera”
SerialNumber: “FYDK2020”
※このシリアルナンバー FYDK2020 というのが大量に出回っているっぽい(つまり正式な「シリアルナンバー」じゃない時点で嫌な予感はする)

実際に使えるかどうか

Windows: 使える(自分は古いノートPC Windows 7 で確認)
Linux: Hardware not attached というエラーにより 使えない(自分が確認したのは VirtualBox上の Lbuntu 16.04.7 LTS)
※USB-Blaster自体は認識できるが、接続されている FPGA ボードを認識できないという状態だった

メモ)jtagconfigを実行した時のメッセージ

【メッセージ】
 Error (Server error) when scanning hardware

【経験則による状況】
 jtagd が動いていない(jtagdと通信できなかった)

【想定される原因】
 bin ディレクトリ側の jtagconfig を実行せずに、直接 linux ディレクトリもしくは linux64 ディレクトリ側の jtagconfig を実行したことで、jtagd が動いていない → binディレクトリ側の jtagconfig を実行すればよい


【メッセージ】
 No JTAG hardware available

【経験則による状況】
 USB機器としての USB-Blaster 自体を認識していない

【想定される原因】
 1. 物理的に未接続 → PCに接続する
 2. USBケーブルが断線 → USB-Blaster 側のPowerLEDが赤く光っていることを確認
 3. 仮想環境側のPCに接続し忘れ → Linuxであれば lsusb コマンド で機器を認識しているか確認
 4. Windowsであればドライバをインストールしていない → ドライバをインストールする


【メッセージ】
 1) USB-Blaster variant [1-2]
  Unable to lock chain (Insufficient port permissions)

【経験則による状況】
  (Linuxのみ) USB-Blaster は 認識できているものの、jtagd が動作している ユーザーから、USBデバイスを操作するパーミッションが不足している。

【想定される原因】
 手法1. jtagd を root 以外で動かしている場合(通常時) ・・・ /etc/udev/rules.d にルールファイルを配置して root 以外でも読み書きできるようにする
 手法2. 一般ユーザで動いている jtagd を終了させてから、 root で動かす
 手法3. lsusb コマンドで Bus と Device の番号を確認し、 /dev/bus/usb/Busの番号/Deviceの番号 で表現されるデバイスを 666 になるように権限変更。

 要は jtagd のプロセスから USB デバイスが操作できれば良いので、jtagd 自体の権限を強くするか、デバイス側の権限を下げれば良いという話。


【メッセージ】
 1) USB-Blaster [1-2]
  Unable to read device chain (JTAG chain broken)

【経験則による状況】
 FPGA側とのやりとりに失敗している

【想定される原因】
 1. ターゲット側の電源が入っていない → JTAG経由で電源は供給されないので、ターゲット側の電源必須
 2. JTAGケーブル不良 → 別のケーブルに変えてみる
 3. FPGA自体の不良 → 別のボードに変えてみる
 

【メッセージ】
 1) USB-Blaster variant [1-2]
  Unable to lock chain (Hardware not attached)

【経験則による状況】
 USB-Blasterの ACT ランプが赤く点灯していない場合は、USB-Blaster自身がターゲットからの情報取得に失敗している

【想定される原因】
 1. USB-Blaster側のファームウェアの問題 → 別の USB-Blaster (高価版) を購入する
 2. Linux 版の jtagd の問題 → jtagd をどうにかする


【メッセージ】
 1) USB-Blaster [1-2]
  020B10DD   EP2C5

【経験則による状況】
  USB-Blasterも認識できて、パーミッション問題も大丈夫で、FPGAとのやりとりも成功した、全てOKの状態

調べてわかったこと

Linux版 の jtagd だと、デバイスと接続した後で、 interface 0, alt 0 を要求する コントロールメッセージを飛ばしていて、このメッセージを 激安版 USB-Blaster が受けると、ポンコツになるようだ。
Windows版 の jtagserver では、このメッセージを飛ばしていないので、ポンコツにならずに使えるようだ。 よって、どうにかして Linux版の jtagd で interface 0, alt 0 を要求するコントロールメッセージが飛ばなくすることで、Windows版と同様に、何の問題もなく使えるようになる。

メモ) Linux における USB の扱い

lsusb コマンドで認識しているUSBデバイスを確認できる。
→ Bus と Device の番号を確認できる

/dev/bus/usb/Bus番号/Device番号 の場所にデバイスがある
→ パーミッション適用状況の確認で使える

sudo udevadm control --reload のコマンドで、ルールファイルを再読み込みできる。

jtagd の中で ioctl の USBDEVFS_SETINTERFACE (0x80085504) が呼ばれると都合が悪い。
→ どうにかして、jtagdの中で この ioctl が呼ばれないようにすればいい

VirtualBox 6.1 で作った Lubuntu 16.04.7 LTS 環境だと、USB のバスが異常を起こして、ぶら下がっているデバイスも一緒に「なかったこと」になってしまい、仮想環境自体の再起動が必要になってしまうことがある。
→ VirtualBoxの仮想環境側の設定で USB3.0 (xHCI) にすると、再発しなくなり、いい感じに。(詳細不明)

一般ユーザーでUSBデバイスにアクセスさせるためのルールファイル記述

Ubuntu 16.04.7 LTS (Lubuntu 16.04.7 LTS) で jtagd Version 13.0.1 Build 232 との組み合わせでの実績あり

SUBSYSTEM=="usb", ATTR{idVendor}=="09fb", ATTR{idProduct}=="6001", MODE="0666

コメントを残す

メールアドレスが公開されることはありません。