2014年11月26日水曜日

EZ_USB_FX2LPへPCからファームウェアのダウンロード、及び、SlaveFIFOの制御。

そもそも、EZ_USB_FX2LP、とは何か?

EZ_USB_FX2LPは、High Speed(480Mbps)の転送速度で外部回路と通信できる
数少ない?マイコンの一つです。
最近はUSB3.0に対応したシリーズ(EZ_USB_FX3)も出てきているようで、FX2は少し時代遅れですが、
それでも現在(一個人が)実現できる中では圧倒的な帯域幅を持っています。

EZ_USB_FX2LPは、外部ROMを用意しておけばスタンドアローンで動作する事も可能ですが、
今回は(私の場合は)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ではデバッグモードに入れずとも普通に動作した。

ファームウェアの開発環境:
windows7 Pro 64bitでは正常にインストールできなかったので、
諦めて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に返ってくる事になる。







コードがチグハグなので、全体としてのコードを上げておく。
(だたし、余分な部分も含まれているので、注意して欲しい。そこまで整理する余裕が無かった。)


MD5 | 3cb3d87d8473a07d24f1097776a9d9cf | 33.0 KB | EZ_USB_FX2LPのPC側のコード

0 件のコメント:

コメントを投稿