【電子工作】安価でFPGAのUSB-JTAGプログラマを作成してみた
はじめに
FPGA(Lattice社, MachXO)の純正プログラマがべらぼうに高かったため、今回は秋月様の力を拝借して自作のUSB-JTAGプログラマを作成しました。用途は書き込みくらいなので、簡易的構成にして約1/10のコストで実現できたので、忘備録を兼ねて記事にしました。
純正プログラマの価格は最安値ではありませんが、私が見たサイトでこのくらい。
Nintendo switchとほぼ同じと考えるとやっぱりお高い!
わざわざ高級な純正品を買わなくとも¥2,500ほどで作成!
私の開発ボードのIFがFFCだったので変換子基板を実装せざるを得なかったのですが、対象がピンヘッダ等であれば¥2,000を切る格安でFPGAプログラマが作成できます。
購入部材
購入部材は下記。ユニバーサル基板や線材は省略。
https://akizukidenshi.com/catalog/g/gM-02990/
回路図
AE-2232DのJTAG IFのピンアサインは下表のようになっていました。
各信号のプルアップ/プルダウンの仕様は接続先の開発ボード/デバイスの仕様に依ります。今回は接続先の回路内でTMSは10kΩで3.3Vにプルアップ、TCKは2.2kΩでプルダウンされていたので、これらはプログラマ回路上ではスルー。TDI, TDOはそれぞれプログラマ側でPUさせる必要があったので、10kΩでプルアップさせました。接続先の仕様によりますが、大体2.2~10kオーダーが目安のようですね。
回路に従ってブレッドボードで組んで動作確認すると、FPGAに正常に書き込みができました。ただし、defaultのTCKの周波数では書き込みNGになったため、プログラマソフト上で分周させて速度を落とすことでPASSさせることができました。まさに下記リンクの対策です。おそらくオシロで見れば波形品質が悪いことが原因なのでしょうが、詳細は追っていません。そのうち観測してみます。
HW-USBN-2Aでは書き込みが成功しますが、HW-USBN-2Bを使用すると書き込みができません。どうすれば良いでしょうか? - 半導体事業 - マクニカ
また、AE-2232DではEEPROMが非実装になっているので一応ペリフェラルを購入して実装しましたが、今回の書き込みではそもそも不要です。どういった時にEEPROMが必要なのかよく分かっていません。分かり次第、この記事に加筆しようと思います。
<2022/4/17追記>
オシロで波形品質を確認しました。
まずは、書き込みに失敗する条件。分周なしDefault周波数6MHzの際の波形は下図。TCKを筆頭に全く追従できておらず、電圧が上がりきっていないことが分かりました。
一方で書き込みに成功した波形は下図。波形品質は良好なので書き込み時間を犠牲に書き込みに成功していたことの裏付けが取れました。
改めてモジュールのデータシートを確認すると、TTLレベルの通信では通信速度最大3Mbpsが保証されていました。Default 6MHzでは無理なはずでした。
ドライバのインストール
FT2232Dを制御するために下記のFTDIのサイトからDriverを入手しました。
"DRIVERS">"VCP Drivers"を選択して、OSに対応したDriverをDLして流れに沿ってインストールすればOKです。
※Windows10 x64は2022/4/2時点で『CDM212364_Setup.zip』でした。
インストールが完了すると、下図のようにデバマネ上で2つのポートが認識されます。
まとめ
今回はFPGAのソフト書き込み用のUSB-JTAGプログラマを作成しました。
用途が限定的であれば、純正品を買わずに格安で治具を作成できることに気付きました。手を動かすことで、JTAGの物理仕様について理解を深める嬉しい効果もあります。そうなるとプロトコルも気になるところです。時間があればオシロで観測したいです。あっ、まだ自宅にはオシロないんだった(すっとぼけ)。そろそろいい加減に買うか…それでは。