そもそも、EZ_USB_FX2LP、とは何か?
EZ_USB_FX2LPは、High Speed(480Mbps)の転送速度で外部回路と通信できる
数少ない?マイコンの一つです。
最近はUSB3.0に対応したシリーズ(EZ_USB_FX3)も出てきているようで、FX2は少し時代遅れですが、
それでも現在(一個人が)実現できる中では圧倒的な帯域幅を持っています。
今回は(私の場合は)PCと常時接続する事を前提としているので、ファームウェアを、
起動時に毎回EZ_USB_FX2LPへ転送する事にしました。
参考にした資料:
開発にあたっては、オプティマイズが公開してくれているコードと、
各種マニュアル(ファームウェアの開発環境インストール時にpdfとして展開される)、
その他いろいろなネットの資料を参考にしました。
経緯:
恐らくオプティマイズの開発したパッケージを用いれば、大抵の事はできる……?(らしい)
と思いましたが、自分で理解していないと好き勝手にできないので、
コードを書きなおす事にしました。(ただし、使ったのはストロベリーリナックスのEZ_USB_FX2LP)
開発環境:
windows7 Pro 64bit
Visual Studio 2012 C++
必要なインクルードファイル:2つ
(共にファームウェアの開発環境インストール時に展開されている。)
cyapi.h
CyAPI.lib : 注意として、32bit版と64bit版が存在するが、64bit環境であるにも関わらず、32bit版しか正常に動かなかった……。
(原因は不明。私が使い方を間違えた可能性もある。
(原因は不明。私が使い方を間違えた可能性もある。
それから、ドライバの署名?か何かの問題で、windows7のデバッグモードで無いければ動作しなかった。
winXPではデバッグモードに入れずとも普通に動作した。
winXPではデバッグモードに入れずとも普通に動作した。
ファームウェアの開発環境:
windows7 Pro 64bitでは正常にインストールできなかったので、
諦めてwindowsXP Pro 32bitにインストールした。
諦めてwindowsXP Pro 32bitにインストールした。
今思えばwin7のXPモードで行けたかもしれない。
一部ネットではwin7でのインストールに成功した例もあるようだが、
少なくとも私は失敗した。
インストールしたのは……たしか、
辺りだったと思う。リンクが変わっている場合は、
「ez-usb fx2lp Development Kit」などで検索すればいい。
注意として、「ez-usb fx2」と「ez-usb fx2lp」は別のハードらしい。
(開発環境も違う?)
以下にファームウェアをPCからEZ_USB_FX2LPへダウンロードさせるための関数を示す。
なお、開発したコードを抜粋した関係上、ハンドルの解放などで、おかしな所があるかもしれない。
また、不要なコメントを消去すべきではあったが、開発してから日が経つので、
何を消して良いか判断が付かなかった事を勘弁していただきたい。
消さなかったコメントの部分では、EZ_USB_FX2LPがなんとなくバグっているため、
二回ファームウェアをダウンロードすると?ハングアップする
、、、問題について解決しようとしていた気がする。
オプティマイズのコードを見ても、そのあたりで四苦八苦した形跡が伺える。
……が共に解決していない気がする。orz
//EZ_USB_FX2LPにファームウェアをダウンロードする関数。
上記のDownloadFirmwareToEZ_USB_FX2LP関数の使い方。
始めはEZ_USB_FX2LPのGPIOから3.3vを出力したり、GNDに落としたりするだけのファームウェアを書いて、
正しく動作しているかチェックするのが賢明だと思う。(私はそうした。)
EZ_USB_FX2LPのFIFOを制御するには、以下のようにすればいい。
もちろんEZ_USB_FX2LP側のファームウェアも考えなければいけないのだが、
ここでは触れない。
ここでのコードは、
FIFOをSlaveModeで(外部のFPGAで)制御するファームウェアをEZ_USB_FX2LPに書き込み、
FIFOの先にFPGAを繋げて、FPGAには送信されたデータをそのままEZ_USB_FX2LPに送り返す
ようにコンフィギュレーションしてある状況を想定している。
従って、以下のコードで送信したデータ列
{0xAB,0xCD,0xEF,0x00,0xFE,0xDC,0xBA}
は、受信用バッファINBufferに返ってくる事になる。
コードがチグハグなので、全体としてのコードを上げておく。
(だたし、余分な部分も含まれているので、注意して欲しい。そこまで整理する余裕が無かった。)
正しく動作しているかチェックするのが賢明だと思う。(私はそうした。)
EZ_USB_FX2LPのFIFOを制御するには、以下のようにすればいい。
もちろんEZ_USB_FX2LP側のファームウェアも考えなければいけないのだが、
ここでは触れない。
ここでのコードは、
FIFOをSlaveModeで(外部のFPGAで)制御するファームウェアをEZ_USB_FX2LPに書き込み、
FIFOの先にFPGAを繋げて、FPGAには送信されたデータをそのままEZ_USB_FX2LPに送り返す
ようにコンフィギュレーションしてある状況を想定している。
従って、以下のコードで送信したデータ列
{0xAB,0xCD,0xEF,0x00,0xFE,0xDC,0xBA}
は、受信用バッファINBufferに返ってくる事になる。
コードがチグハグなので、全体としてのコードを上げておく。
MD5 | 3cb3d87d8473a07d24f1097776a9d9cf | 33.0 KB | EZ_USB_FX2LPのPC側のコード
0 件のコメント:
コメントを投稿