« 小学生に電子工作やプログラミングを教えること | トップページ | MAX10のボードがやっと動いた »

2016.05.06

MAX10の付録本を買ったが動かなかった

MAX10のFPGA電子工作スーパーキットを買ったので、遊んでみました。

Max10_1

厳密に言えば、この本が届いたのは木曜日なのですが、USB Blaster基板は基板だけで全く部品が乗っていなく、使うためにはマルツの部品セットを買わないと何もできないので、金曜日にマルツで部品セットを買ってきたというわけです。

組み立てるのは難しくなく、30分くらいあれば完成します。

Max10_2

Max10_3

基板上のコネクタのオスメスやジャンパのどこをどうショートすればよいのかは、本を読まないとわかりません。

FPGAボードのほうは12か所のすべてのはんだジャンパをショートし、JTAGボードのほうは特にショートしなくても良いというのが正解です。

さて、ボードが組みあがったので、早速、USBをつないでみました。

Max10_4

しかし、反応はありません。

どうやら、マルツのセットで買ったとしても、PICはプログラムが書きこまれていない状態らしいです。

thunderthunderthunderthunderthunderthunderthunderthunder

自分で書き込まなければならないので面倒だなと思っていたのですが、本を読むと、どうやらFPGAと接続すると自動で書き込まれるとのこと。一瞬、目を疑ったのですが、FPGAに内蔵されたNIOSか何かのプロセッサで、PICの書き込みシーケンスを出してやっているのでしょう。

ほう、これは新しい仕組みだ。

感心しました。

この本を熟読すると、ピンヘッダにJ1~J4を差し込んだ状態でFPGAとつないで電源を入れると書き込まれるらしい、ということが書いてあります。

で、期待してやってみたのですが、全く書き込まれる気配がありません。

なんかちょっとLEDの点滅が気絶して止まったと思うと、うーん、やっぱり動かないな・・と思い、再び電源を入れてみても次からはFPGAボードのLEDは白の点滅で、つまり、PICが認識されない状態です。

ボードに付録の本を読むと、パソコンにつなぐのではなく、USBの給電ハブやスマホの充電アダプタで給電しないと、書き込みシーケンスが乱されて失敗するようなことが書いてありました。

で、いろいろやってみたのですが、家にあったいろんなアダプタを7種類くらい試したけど、全部だめ。秋月のUSB出力タイプのシンプルなアダプタでもだめっぽいです。

仕方がないので、オシロを使って書き込みシーケンスのデバッグをすることにしました。FPGAがやりたいのですが、PICの書き込みのためなら少しの回り道は仕方ないですね。

coldsweats02

本を読んだところ、このPICの書き込みはVpp(高電圧)を必要としない低電圧プログラムモードというのを使っているようで、MCLRよりも先にPGMをHにしておけばそのモードになるようです。また、PGDとPGCという2本の信号を使ってシリアルでデバッグ用の信号を送って書きこみを行うようです。

というわけで、PICの書き込みに必要な信号は、MCLR、PGM、PGD、PGCの4本です。

オシロでMCLRとPGMを見ると、おそらく正常だろうなという信号になっていました。

Max10_5

青い信号がPGMで、黄色がMCLRです。FPGAが起動するとすぐにこの信号が出ます。

一方、PGDとPGCですが・・

Pdgpgc_ng

明らかにおかしな波形になっていました。

実は、PGCとPGDの信号は、USBのD+とD-と共用されています。D+とD-は差動信号ですから、間に終端抵抗があってもおかしくありません。終端抵抗があるとD+とD-の信号は互いに漏れます。だから、ACアダプタの中でD+とD-の間に抵抗が入っているのではないかと想像されます。

rain

そこで、安定化電源から5Vを取ってUSBのVBUSとGND間に与えてやると、綺麗な波形になりました。

Pdgpgc_ok

クロックが20発なので、20bitのデータをFPGA→PICに送っています。

最初の4ビットが0000で、後のビットが1111 1100 0111 0000なので、0x0e3fと読めます。どうやら最初の4bitが0000だと、デバッグポートから送り込んだ機械語をPICに1ワードずつ実行させるという意味だそうです。きっとMOVLFか何かの命令なのでしょう。

全部で6ワードの命令が送り込まれて、最後の2ワードが0x9なのでここでPICからデータを読み出しているように思われます。

※ 実際にはIDCODEを読み出しているようだ

で、このIDCODEが正しい値でないとFPGAは白点滅をするというものだそうです。

付録基板で遊びたいだけなのに、ここまで頑張ったのは初めての経験です。

Max10_6

今日わかったことをまとめると、

  • one マルツのパーツセットが両方(FBとJB)必要
  • two パーツセットのPICは未書き込みだ(そのままつないでも何も起きない)
  • three FPGAボードとつながると自動的に書き込まれるらしい(PICライタは不要)
  • four FPGAボードのはんだジャンパは全部盛るべし
  • five PCやACアダプタからの給電だと、D+、D-の波形が乱れて正常に書き込めない(どんなアダプタならOKなのか、逆に知りたい)

感想としては、VCCIOの電源を細かく切り離せるジャンパは12個もいらないから、D+とD-をPGD,PGCから切り離すジャンパが欲しかった。

|

« 小学生に電子工作やプログラミングを教えること | トップページ | MAX10のボードがやっと動いた »

コメント

私も何個かのモバイルバッテリーで給電してみて全く同じ現象でした。
筆者のページhttps://sites.google.com/site/max10fpga/trouble
をみるとiPhoneの純正充電器でいけるとあったので試してみたらあっさり成功しました。

こちらの情報がなければ1日くらい悩みそうなトラブルでした。ありがとうございます。

投稿: hpkk | 2017.02.10 10:04

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



« 小学生に電子工作やプログラミングを教えること | トップページ | MAX10のボードがやっと動いた »