私にとって簡単なのは、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を注文したついでに買ったので、試してみたい。
追記:接続はできるようだ↓。(ただし未通電)
FTCJTAG
FTCSPI
のdllがあるらしい
http://www.ftdichip.com/Projects/MPSSE/FTCJTAG.htm
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
Mprog と ドキュメントは、http://www.ftdichip.com/Resources/Utilities.htm からダウンロードできました。
FT245RL は、C4 しか空いていませんが、 CLKOUT にできるとなにかと便利かも知れませんね。
FT232RL は、CBUS BitBang Modeがあるようなので、C0-C3をファームウェア書き換え用に使って、C4 をやはり CLKOUT にするのが良いのかも知れません。
..といっても、CBUS BitBang Mode は、非同期なので、avrdude などでサポートされたとしても、すごく遅いものになりそうです。
ボーレートで決まり16ビット1ワードらしい、16Xボーと言う記述もありどちらか不明。
62バイトの整数倍〜63488バイト以下?
一度オープンして後は連続にアクセスしないとWinのスケジュールに引っかかって遅くなるようです。
VCPは仮想COMモードでも遅いようですが、(LatencyTimerで速度が決まる?1は駄目で2以上16がデフォルト)
D2XXは同期モードでもビットバンモードでも使えるのでしょうか?
(ここが不明です)
...だとすると FTD2XX.dll を使っているので、D2XX で使用していることになるようです。
実は私もよくわかりませんが、同期モードで実験した限りは、どうも ボーレート x 4 が 実際の転送速度のようです。ただし、2400, 4800... と ヘッダーに定義されているボーレートを選択する必要があるようでした。
以前読まれたものと同じでしょうか?
FT2232CはFT232BM and FT245BMを複合したもののようですか?
http://www.ftdichip.com/Projects/MPSSE/FT2232C-Proj03_v11.pdf
http://www.ftdichip.com/Documents/DataSheets/DLP/dlp2232m-v14-ds.pdf
MPSSE is capable
of a maximum sustained data rate of 5.6 Mega bits / s.
しかし トラ技12月号、p211にFT232RLの場合は
変化のたびにビット情報を送らず
63488バイト以下でひとまとめにして送ると早いそうです。
なので AM(BM) や RL と 別物と思ったほうが良いと思います。
そのJTAGにはFT232RLやFT245RL、FT2322、R8C、AVRなどが使えるらしい、(これも極めていません)
これらのうち共通互換性や高速性を満足できるものを作ろうと検討しています。
(あんましたくさん作っても直ぐ何処かへ行ってしまう?ので)
まだこれに決定というのがないのですが、決まったら作ろうと思っています。
最大バウンダリスキャンレート6Mbit/sec
らしいです。
ソフト関係のことも載っていました。
http://www.besttechnology.co.jp/download/INETPDF/BTE067%20TINY%20JTAG-ICE.pdf
さて気がつきましたのは D2XX 動作では
FT232RL を使っていたのですが 表示には FT245R に表示されていましたが、
これはそれであって居ましたでしょうか?
また、(こちらでの問題ではないのですが)FT232R でも FT245R でも
「USBシリアルコンバーター」のプロパテイ、詳細に「VCP」をロードするという項目があり、チェックすると「ポート」に
両方とも、COMポートとして認識されます。
最近はこのようになったのかご存じ有りませんか。
それではよろしくお願い致します。
「追記 2011/1/22 ft232r0 を使ってくれている人を発見。」
この方の情報は正しいのかどうか知りませんが、上記一文の「発見」のリンクは、IEブラウザではクリックしてはいけません。
ハッキングはされませんが、強制終了を余儀なくされます。
強制終了させる前にフリーダイヤルに電話してウィルス駆除方法を尋ねるアナウンスが流れますが、050から始まるIP電話番号でした。
この書き込みが出来ていると言う事は、ウィルス感染しません。
たまたまこのPCには個人情報が入っていないので、ハッキングされていても被害はないが、Win10Proのセキュリティでブロックされているだろう。