EZ−USB FX2LPのSlaveFIFO
サイプレスのサイトからSlaveFIFOに関するアプリケーションノートを見つけました。
本ページではこの資料を元に実験をしていきたいと思います。
|
参考資料(サイプレスのサイトからAN6077の資料をダウンロード) |
|
Application Note AN6077 Implementing an 8-Bit Asynchronous Interface with FX2LP |
アプリケーションノートに以下のブロック図が載っていました。FX2LP同士で通信するものです。
一方をMasterFIFO(GPIF)とし、もう一方をSlaveFIFOとします。IFCLKクロックが無いので非同期通信のようです。データは8ビットのみです。
アプリケーションノートにあるブロック図は、アプリケーションノートの他の文章やGPIFの記述と照らし合わせるとRDYとCTLの矢印の向きが逆のようです。正確には以下の図のようになります。またEP2とEP6のHost(PC)からみた使い方の概略はその下の図のようになります。

ブロック図(上)とHostから見たEP2,EP6の使い方図(下)

GPIF Designer図
左:MasterFIFO側のFX2LP 、 右:SlaveFIFO側のFX2LP
ソフト考察
アプリケーションノートを読むと、Slaveは単にIFCONFIGレジスタでSlaveFIFOに設定するするだけで、なにも動作内容をプログラムされていませんでした。これはSlaveのAUTOOUT/AUTOIN機能がONになっていて、Host(PC)とSlaveのEndPointとMaster間通信が自動でおこなわれることを意味します。
Master側もAUTOOUTやAUTOIN機能がONなので、Host(PC)とMasterのEndPointとGPIF間通信が自動でおこなわれますが、MasterはGPIFによってSlaveと接続する必要があります。GPIFとは相手と接続するためのバス(信号線の集合)そのもののことで、ハード的な信号タイミングチャートは、GPIF Desigerというソフトで簡単に作ることができます。今回はアプリケーションノートどおりに作ります。
FX2LPにはSlaveFIFOモードがあるのに対し、MasterFIFOモードがないので、MasterのファームはHost(PC)からのデータを監視したり、SlaveからのFLAGを監視しながら、GPIFを操作する必要があります。以下のその手順を示します。
Master OUTの手順(Host(PC)→Master(EP2)→GPIF , TD_Pollにておこなう処理)
1)GPIFがIDELなら次へ、IDELでなければLOOPENDへ
2)EP2にパケットがあれば次へ、パケットがなければLOOPENDへ
3)SlaveがFULLでないなら次へ、FULLならLOOPENDへ
4)EP2からGPIFへデータをWRITEし、GPIFがIDELになるのを待つ(転送終了待ち)
5)GPIF転送したデータが512バイト未満ならPKTENDをSlaveへ出力する
LOOPEND)手順1へ戻る
Master INの手順(Host(PC)←Master(EP6)←GPIF , TD_Pollにておこなう処理)
1)GPIFがIDELなら次へ、IDELでなければLOOPENDへ
2)SlaveがEMPTYでないなら次へ、EMPTYならLOOPENDへ
3)EP6がFULLでないなら次へ、FULLならLOOPENDへ
4)GPIFからデータをREADしてEP6へ転送、GPIFがIDELになるのを待つ(転送終了待ち)
5)GPIF転送されたデータが512バイト未満ならINPKTENDをHostへ出力する
LOOPEND)手順1へ戻る
以下、作成中。。。 しばらくおまちください。