2007年06月15日

DWM付録FPGA基板用USB-JTAGケーブルの構想

デザインウェーブマガジン 2007年7月号 (2480円)には、付録に 250K ゲート相当 のFPGA Spartan-3E XC3S250E 基板が付いて来る。こいつで使え、簡単に作れる USB-JTAG ケーブルを設計してみようと思う。

私にとって簡単なのは、USB910A に JTAG 機能を付けることが最も簡単だ。Spartan-3E の JTAG の電圧は 2.5V だが、前に Spartan-3 がDWM付録になったときのなひたふさんのコメント -- Spartan3 の使い方 によると、3.3V I/O電圧 でも 100Ωぐらいの抵抗を入れれば OK らしい。... USB910A は 3.3V モードがあって、150Ωの抵抗もすでに入っているので改造をする必要がなく、FW のソフトと書き込みソフトだけをなんとかすればよいのだ。

それはもちろんやるとして、部品の入手性に問題がなく、もっと簡単に作れて、さらに速いものにしたい。もちろん AVR を使い、FWは (拡張した)USB910 のサプセットにする。
補足:
JTAG 用なので、速くなければ使いにくい/使えない場合がある。
端的な例がバウンダリスキャンを使っての FLASH 書き込み。以前 玄箱の FW を壊してしまって、簡単な Serial-JTAG ケーブルを作って書き換えたのだが、バスの状態を設定するのに、507 ビットの転送が必要、書き込むために、バスの状態を 3 回変更するので、1500 bit ほどの転送をする。これで FLASH の 1 バイトしか書き込めないのだから、実に 187 倍もの転送量になるのだ。 作ったやつはスループットも出なかったので日が暮れるどころの騒ぎではなく、実に大変な目にあった。

USB910が遅いのは、ひとつには LOW SPEED であることが原因だ。AVR-CDC ではなく、専用のチップを使えば転送速度があがるはずだ。USB-シリアル変換だと シリアル自体が性能ネックになりそうなので、パラレルの FT245RL を使う。データシートによれば、専用ドライバで 1MB/sec 、汎用のシリアルドライバでも 300KB/sec 出るそうだ。もちろんこれだけが速くなっても性能は出ない。プロトコルとか、AVR のコードも最適化する必要がある。がんばりたいとは思うが、AVR の限界もあって、市販のものと比べる程の性能は出ない(かも知れない)。

簡単に作れるようにするために、FT245RL USBパラレル変換モジュールを使う。同種のモジュールと比べても安価な方だと思うし、USB コネクタも付いている。

本体のAVRは、ATtiny2313V を使う。秋月で入手できるし、安価だ。
プログラムメモリは 2KB しかないが、JTAG とI2C の機能だけなら、問題なく移植できる。ATtiny2313V、FT245RL ともに 1.8V まで動作電圧(FT245RL の場合は I/O電圧) を下げることができる。2.5V の場合は 3.3V +抵抗でもなんとかなるが、今後のためにもっと低い電圧もサポートしておきたい。

.. というようなことを考えて回路を考えてみたのが↓



回路図といえるほどのものではなく、配線図という感じだ。ただ、ATtiny2313V のピンは全部使うので、配線は面倒かも知れない。


製作例:

ダイオードは、2個連のところを1つだけにしてみた。あと PWREN# は無接続

書き込みソフトについて

オープンソースで、xilprgというものがある。これは、Digilent の
JTAG-USB
を サポートしていて、コンフィグレーションできるだけではなく、CableServer を使うと Xilinx のツールである iMPACT から直接書き込みできるようなるものらしい。

こいつに作った SERJTAG のコードを追加して、JTAG として使えるようにする予定。(その状況もこのカテゴリに書いていく。)

プロトコルは、Digilent の JTAG-USB用のコードを研究して、決めた。当然ながら、Digilent の プロトコルに(論理的には)似ていて、JTAG-USB用のコードを改造して作るのも容易(なはずだ)。
補足:
Digilent の プロトコルは、バルク転送向けなので同じようにはできない。また AVR で性能を出すために変更しなければならない所もある。さらに、USB910 に組み込む前提なので、USB910 のプロトコルともすり合わせる必要があった。
ちなみに、決めたプロトコルは、シリアル向けのものなので、Serial Jtag という意味で SERJTAG と名づけた。SERJTAG はプロトコル名のつもりなので、USB910 の拡張の話題もこのカテゴリに書くつもり。


(FT245RL版 )SERJTAG は、USB910 の I2C 機能も入れる。なので、I2CSND でも使える予定。
あと、JTAG ケーブルというのは、汎用 SPI にも使えるので、AVR ISP にも対応可能だ。AVRDUDE とか UISP とかの AVRライタソフトにも対応させようと思う。
デバッグ前だが、プログラム → serjtag-0.1.tar.gz
チューニングできるところはしたつもり、サイズは、1.8KB ほどなのでまだ余裕がある。(ちなみに WinAVR の gcc-4.1.1 だと 1654 バイトと 1 割近く小さくなる。)

DWM付録FPGA基板に関するその他の話題

●クロックについて
ググっていて、Sim's blog というところを見つけた。FPGA の話題も多く参考になりそうだ。FPGA でなにかを作ろうとすれば、クロックは必要だが ... DWM付録基板のクロックによると、SG-645PCP(33MHz) (4個 300円) が使えるそうだ。そういえば、FT245R に OSCO というピンがある。12MHz でよければ 供給できるかも知れない。

OSCO は無接続だったのでクロック供給は、無理そうだ。以前 現品.com で5個200円で入手した KOYO(光陽精密)の KCO-700シリーズ (pdf) 32.000 Mhz を接続した。


●BitBangModeについて
FT245R(など) は、何もつけなくとも I2C/JTAG/SPI として使えるらしい。Programming Guidesに、それらのAPI が載っている。...こんなモノ(SERJTAG)を付けるよりずっと性能が良かったりするかも知れない。それはともかく、SPI もサポートしているから、FT245RL USBパラレル変換モジュールはそのままでAVRライタになるわけか。

訂正:
I2C/JTAG/SPI として使えるのは、the Multi-Protocol Synchronous Serial Engine (MPSSE) を持っている FT2232 だけということが判った。秋月でこのチップを扱っているもののモジュールはない。APIも MPSSE 専用。

補足:
ガセを書いてしまって申し訳ないので、D2XXのプログラミングガイドと FT232R/FT245R の BitBangModes のドキュメントを読んでみた。
これと FT2232 は、同期 BitBangMode というのを持っている。なにが同期かというと、FT_Write で値を変更する前の状態を(自動で)取り込み、FT_Read で読める。WriteとRead が同期しているわけだ。もちろん、入力ピン出力ビンの設定もできるから、I2Cは無理としても、JTAG や SPI には使えそうだ。ちなみに、非同期モードは、同期しないと、正しい状態が読めない。だから更新前の情報が必要な JTAG/SPI は遅い。
あと、転送レートを FT_SetBaudRate で指定する。この値 x 16 のデータが流れる(8bit x 往復?) ので、最大で 500kbps 。CLK 上げ下げとデータセットが必要そうだから、JTAG/SPI のビットレートは最大で 166kbps 。最大性能だと 8Mbps の帯域を使ってしまうから、 80kbps ぐらいが実効性能として妥当だろう。...これぐらいなら USB910版の SERJTAG でも出せそうだ。... といっても AVR のライタとしては十分な性能。avrdude に移植されているか..といえばされていないわけでもないらしい。→ ftbb.c。ただし、非同期モードを使っているので、すごく遅いはずだ。 この ftbb.c を同期モードで書き直せば、一応実用的な速度で動きそうだ。これだけ調べたけれども I2C もサポートする SERJTAGを作りたいので、これには手を出さない(かもしれない)。

追記:設計メモ
FT245R/FT232R は BitBangMode を持っているわけだが、FT232R の方は、入出力の初期状態が決まっている。なので、BitBangMode を使う場合 FT232R にあわせて設計したほうが良い。
ELM COMポート制御ISPアダプタ のピン配置を参考にすると

chip pin# BitBang bit
( = FT245R D#)
MISO RxD 5 1
SCK RTS 3 0
MOSI TxD 1 2
RESET DTR 2 4

あたりが妥当か。ただし、avrdude では、avrdude.conf で ピンの配置を自由に設定できるので、単にデフォルトと思えばよい。

●オプション5Vレギュレータについて
DWM付録FPGA基板を5Vで使うときは、LM317系の可変型3端子レギュレータを付けられるが、秋月で扱っているのは、どれも大きい。ひょっとして、AZ1117H−ADJ (表面実装型、10個300円)が付くのではないだろうか? FT245Rを注文したついでに買ったので、試してみたい。

追記:接続はできるようだ↓。(ただし未通電)


posted by すz at 18:46| Comment(14) | TrackBack(0) | SERJTAG
この記事へのコメント
FT2232Cは利用可能な唯一のデバイスFTCI2C
FTCJTAG
FTCSPI
のdllがあるらしい
http://www.ftdichip.com/Projects/MPSSE/FTCJTAG.htm
Posted by N at 2007年11月19日 12:27
「Mprog」というのを使いますと
FT232RLはCBUS0-TXLED、CBUS1-RXLED、CBUS2、CBUS3、CBUS4を
TXDEN、PWREN#、TXRXLED、SLEEP、
48MHz、24MHz、12MHz、6Hz-CLKOUTにプログラムできます。
D2XXとVCPは統一されました。
http://www.ftdichip.com/Support/Knowledgebase/index.html?jtagintroduction.htm
http://www.ftdichip.com/Documents/AppNotes.htm
Posted by N at 2007年11月19日 13:10
情報ありがとうございます。

Mprog と ドキュメントは、http://www.ftdichip.com/Resources/Utilities.htm からダウンロードできました。

FT245RL は、C4 しか空いていませんが、 CLKOUT にできるとなにかと便利かも知れませんね。

FT232RL は、CBUS BitBang Modeがあるようなので、C0-C3をファームウェア書き換え用に使って、C4 をやはり CLKOUT にするのが良いのかも知れません。

..といっても、CBUS BitBang Mode は、非同期なので、avrdude などでサポートされたとしても、すごく遅いものになりそうです。
Posted by すz at 2007年11月20日 08:09
ビットバンは非同期モード?
ボーレートで決まり16ビット1ワードらしい、16Xボーと言う記述もありどちらか不明。
62バイトの整数倍〜63488バイト以下?
一度オープンして後は連続にアクセスしないとWinのスケジュールに引っかかって遅くなるようです。

VCPは仮想COMモードでも遅いようですが、(LatencyTimerで速度が決まる?1は駄目で2以上16がデフォルト)
D2XXは同期モードでもビットバンモードでも使えるのでしょうか?
(ここが不明です)
Posted by N at 2007年11月20日 18:14
FT232RL は、ビットバンモードに、同期と非同期、そしてCBUS の3種類があります。どれを使うかは、FT_SetBitMode の第三パラメータで指定します。ヘッダーファイルにdefineされていなくて分かりにくいのですが、0x1 = 非同期 , 0x4 = 同期 , 0x20 = CBUS です。ドキュメントは、D2XX Programmer's Guide 。 ちなみに、VCPドライバをダウンロードして使っています。
Posted by すz at 2007年11月20日 20:22
VCP ドライバのリンクからダウンロードしたのですが、D2XX ドライバのリンクでも同じ CDMなんとか をダウンロードすることになるのですね。統合されたという意味がやっとわかりました。

...だとすると FTD2XX.dll を使っているので、D2XX で使用していることになるようです。
Posted by すz at 2007年11月20日 20:34
FT_SetBaudRate と 実際の転送速度について

実は私もよくわかりませんが、同期モードで実験した限りは、どうも ボーレート x 4 が 実際の転送速度のようです。ただし、2400, 4800... と ヘッダーに定義されているボーレートを選択する必要があるようでした。
Posted by すz at 2007年11月20日 21:00
次にJTAGのマニュアルを見つけたのですが英文なので良くわかりません。
以前読まれたものと同じでしょうか?
FT2232CはFT232BM and FT245BMを複合したもののようですか?


http://www.ftdichip.com/Projects/MPSSE/FT2232C-Proj03_v11.pdf
Posted by N at 2007年12月01日 00:30
Posted by N at 2007年12月01日 17:39
速度は次まで出るらしい。
MPSSE is capable
of a maximum sustained data rate of 5.6 Mega bits / s.
しかし  トラ技12月号、p211にFT232RLの場合は
変化のたびにビット情報を送らず
63488バイト以下でひとまとめにして送ると早いそうです。
Posted by N at 2007年12月02日 18:29
本文にも書きましたが、MPSSE(the Multi-Protocol Synchronous Serial Engine)を持っているのは、FT2232 だけのようです。APIも MPSSE 専用。

なので AM(BM) や RL と 別物と思ったほうが良いと思います。
Posted by すz at 2007年12月03日 20:28
最近はJTAGと言うインターフェースでPICやAVR、果てはCPLDやFPGAまで操作プログラムできるらしい。(まだ解らないことばかり)
そのJTAGにはFT232RLやFT245RL、FT2322、R8C、AVRなどが使えるらしい、(これも極めていません)
これらのうち共通互換性や高速性を満足できるものを作ろうと検討しています。
(あんましたくさん作っても直ぐ何処かへ行ってしまう?ので)
まだこれに決定というのがないのですが、決まったら作ろうと思っています。
Posted by N at 2007年12月04日 10:49
JTAGアダプタに2322が使われているのが見つかりました。USB 2.0 (最大12Mbit/sec)
最大バウンダリスキャンレート6Mbit/sec
らしいです。
ソフト関係のことも載っていました。
http://www.besttechnology.co.jp/download/INETPDF/BTE067%20TINY%20JTAG-ICE.pdf
Posted by N at 2007年12月05日 00:55
こんにちは avrdude-serjtag04e を使わせて頂きました。

さて気がつきましたのは D2XX 動作では
FT232RL を使っていたのですが 表示には FT245R に表示されていましたが、
これはそれであって居ましたでしょうか?

また、(こちらでの問題ではないのですが)FT232R でも FT245R でも
「USBシリアルコンバーター」のプロパテイ、詳細に「VCP」をロードするという項目があり、チェックすると「ポート」に
両方とも、COMポートとして認識されます。
最近はこのようになったのかご存じ有りませんか。
それではよろしくお願い致します。

Posted by nekonoko at 2012年11月25日 11:03
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

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


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

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