付録基板MAX10-JBをUbuntu 14.04(64ビット)のQuartus Prime Programmerで使う

トラ技 増刊号 「FPGA電子工作スーパーキット」に付属する書き込み基板MAX10-JBは、Windows7(64ビット)では確かに動くが、
Ubuntu 14.04(64bit)では、 Quartus Prime Programmerで認識させることは出来ても、接続されたデバイスを認識させることはできない。

(問題点)
Ubuntu 14.04(64bit)では
$cd  ./15.1/quartus/bin
$ ./jtagconfig
1) USB-Blaster [4-2]
  Unable to lock chain. No device detected    <= デバイスが存在しないとエラーがでる。

Windows7(64bit)だと、以下のように、デバイス番号が認識される。
cd \15.1\quartus\bin64\jtagconfig
1) USB-Blaster [USB-0]  
031820DD 10M08SA(.|ES)/10M08SC   <= MAX10-FB基板にあるMAX10のデバイス番号。

そこで、USBの認識と通信の状態を見てみると、まず、シリアル番号が読めていないところで コケテいることが分かった。
MAX10-JBのPIC18F14K50ソフトが、Ubuntu のjtagのソフトに対応していない?ことが問題のようだ。

lsusb -v .
中略
idVendor 0x09fb Altera
idProduct 0x6001 Blaster
bcdDevice 4.00
iManufacturer 1 Altera
iProduct 2 USB-Blaster
iSerial 3 (error)    <= エラーがでる。 ソースファイルをみると 本来は 00000000 と表示されるのが正しいようだ。

/vusb-analyzer      <= USBの通信ログファイルの中身を分析する。
usbmon.mon setup
80 06 01 00 00 00 02 00 12 01 10 01 00 00 00 08 FB 09 01 60 00 40 01 02    GetDescriptor(0x00,1) VID/PID
80 06 03 02 00 00 01 00 18 03 55 00 53.....................                   GetDescriptor(config, 3) USB-Blaster
80 06 03 03 00 00 01 00       
status -32                      GetDescriptor(string, 3) シリアル番号が読めていない


そこで、MAX10-JBのソフトを変更することを考えたてみたが、雑誌付録のDVDの中のにある、PIC18F14K50用のソースとツールを動かしてみたが、上手く、ビルドして、NiosⅡ(メモリー不足?)で合成できないで、断念。

  
(対応方法)
基板MAX10-JBに USB-Blasterもどき (下記の参考となる資料にリンクあり)の ソフトを書き込んでみたところ、
jtagに それなりの 認識されるようになった。 

$cd  /15.1/quartus/bin
$sudo killall -9 jtagd    <= 裏で動いているときは 一旦 停止する
$./jtagd --foreground --debug   <= デバッグモード 表示をコンソール出力で 起動。 やめたいときは ctrl-C を押す。

Using config file /etc/jtagd/jtagd.conf
Remote JTAG permitted when password set
Device  /dev/bus/usb/004/004 add
USB-Blaster "USB-Blaster" firmware version 4.00
USB-Blaster endpoints out=02(64), in=81(64); urb size=1024
USB-Blaster added "USB-Blaster [4-2]"

このソフトの書き込みは、MAX10-FBでは出来ないので、トラ技2008年8月号の付録基板78K0(USB)を使っておこなった(下記の参考となる 資料にリンクあり)。78K0(USB)のI/O電圧は5Vであるが、MAX10-JBのU3 LT1963AEST-3.3は逆流防止付きICなので、PIC18F14K50の電源を5Vで動かしても、壊れないようである。また、書き込み時のVERIFY(確認)でCONFIG2不一致のエラーが出たが無視してそのままにした。

USB-Blasterもどきは
※2011/03/01公開:Ver.0.7では使用するPICが変更になっています。高速化のためピン配置は固定です。
なので、MAX10-JBの回路を USB-Blasterもどきにあわせて 一部改造する必要がある。

MAX10-JBをUSB-Blasterもどき相当に(ソフトとハードの両方)変更改造することで、 Ubuntu 14.04(64bit)上の Quartus Prime Programmeから
MAX10-FB基板のMAX10を認識できるようになり、 sof ファイルとpofファイル ともに書き込めるようになった。 
書き込みアプリは ./15.1/quartus/bin/quartus_pgmw  である。


USB-Blasterもどき  と MAX10-JB の結線の比較
Pin I/O Name
No.  USB-Blasterもどき        MAX10-JB
13  RB4  I  TDO(SPI/PIO)     TDO
12  RB5  I  ASDO             nc
11  RB6  O  TCK(SPI)         TCK
10  RB7  O  Active LED       nc

16  RC0  O  TCK(PIO)         nc    *(改造3)100Ωの抵抗を介してU1のNo.11とつなぐ。
15  RC1  O  TMS              nc
14  RC2  O  nCE              LED    *(改造1)R2のU1側とU1のNo.14ピンの間をカットして、U1のNo.10ピンにつなぐ。
 7  RC3  O  nCS              pgm
 6  RC4  O  TDI(PIO)         nc  *(改造4)100Ωの抵抗を介してU1のNo.9とつなぐ。
 5  RC5  O  OPE              nc
 8  RC6  O  n.c.             TMS    *(改造2)J7をオープンにして、J7の2番側と、U1のNo.15ピンにつなぐ。
 9  RC7  O  TDI(SPI)         TDI




改造の様子

max10-jb-fb-1

max10-jb-fb-2

max10-jb-fb-3


******************************************
以下を、事前に準備しておくこと。

(準備1)
Ubuntu で USB Blaster を認識させるためには、USB-Blasterをアクセスできるように permissionsを設定し直す必要がある。
そのために、xxx.rules を追加するのであるが、記述の仕方はいろいろあるみたいだが、以下の内容にしてみた。

$cat /etc/udev/rules.d/51-usbblaster.rules
# USB-Blaster
SUBSYSTEM=="usb",ENV{DEVTYPE}=="usb_device",ATTRS{idVendor}=="09fb",ATTRS{idProduct}=="6001",MODE="0666",SYMLINK+="usbblaster/%k" SUBSYSTEM=="usb",ENV{DEVTYPE}=="usb_device",ATTRS{idVendor}=="09fb",ATTRS{idProduct}=="6002",MODE="0666",SYMLINK+="usbblaster/%k" SUBSYSTEM=="usb",ENV{DEVTYPE}=="usb_device",ATTRS{idVendor}=="09fb",ATTRS{idProduct}=="6003",MODE="0666",SYMLINK+="usbblaster/%k"

# USB-Blaster II
SUBSYSTEM=="usb",ENV{DEVTYPE}=="usb_device",ATTRS{idVendor}=="09fb",ATTRS{idProduct}=="6010",MODE="0666",SYMLINK+="usbblaster2/%k" SUBSYSTEM=="usb",ENV{DEVTYPE}=="usb_device",ATTRS{idVendor}=="09fb",ATTRS{idProduct}=="6810",MODE="0666",SYMLINK+="usbblaster2/%k"


(準備2)最新のデバイス番号の情報が書いてあるファイルpgm_parts.txtを以下のデイレクトリーを作成して コピーして  permissionsを設定する。
$cd /etc
$sudo mkdir jtagd
$cd jtagd

$sudo cp ~/中略/15.1/quartus/linux64/pgm_parts.txt    /etc/jtagd/jtagd.pgm_parts
$sudo chmod 666 jtagd.pgm_parts

もしかしたら、こちらは やらなくても 動くかもしれない。


参考となる資料


警告
もし、MAX10-JB基板の改造をする場合は、電気的なことをよく理解した上で改造し、電気を入れましょう。そうしないと、PCやその基板と接続した相手などを破壊する危険があります。改造による動作保障はありません。

免責
(1)MAX10-JB基板の変更・改造により
使用者に損失が生じたとしても、その責任 を負いません。もし、変更・改造される場合、自己責任でお願いします。
(2)回路図やプログラムやデータの使用により、使用者に損失が生じたとしても、その責任 を負いません。
(3)回路図やプログラムやデータにバグや欠陥があったとしても、修正や改良の義務を負い ません。