↓わたしがやりたかったコトはこういうブロック図でした(過去形). PCとUSBを使わない.CPU8051がFIFOにincrementalデータを一度だけ積む(512BYTE).あとはグルグルと永久にGPIF→DACへ出力させてみよう.上手く行けばDACの出力にはノコギリ波が出てくるはず.
ところが、わたしのdocument理解力によると、CPUがFIFOにブタ積みしたところで無限loopで出力し続けるコトは出来ないっぽい.1BYTE毎にCPUが介在すれば処理できるらしいけど、今はCPUが介在するデータフローには興味がないのでさておく.
↓CPUを介さずにデータを流そうとすれば、このようにUSB経由でPCから大量のデータをバルク転送するなら出来ました.FIFOが満杯になると(512BYTE)自動的に出力し、、、を繰り返す(AUTOMODE)わけです.
たったこれだけを動かすにもback ground知識がいろいろと必要になりました.
EP2とFIFOの構成
上図のEP2というのはエンドポイント2の略称です.
EZ-USB FX2LPには、6ヶのエンドポイントが内蔵されています.
EP0 コマンド制御
EP1 コマンド制御
EP2 PC→FIFO→外部 へのデータフロー (EP2OUT)
EP4 PC→FIFO→外部 へのデータフロー (EP4OUT)
EP6 外部→FIFO→PC へのデータフロー (EP6IN)
EP8 外部→FIFO→PC へのデータフロー (EP8IN)
必ずしもこういう使い方をしなくちゃイケナイわけではありませんが、サンプルプログラムではこういう構成がありがちです.EP2~EP8を全部OUTにすることもできます.
↓USBケーブルを流れるデータはパケット化されています.EZ-USB FX2LPを使う限りにおいては、パケットの構造を詳しく知る重要度は高くないように思います.OUTデータがエンドポイントにたどり着くまでには、さしずめ電車の操車場のような壮絶なポイント切替がうじゃうじゃと在って、最終的にユーザーデータのみがエンドポイントにたどり着く、というのがOUTデータフローのイメージかと.INデータフローはその逆かと.
それにしてもどうしてEP3とかEP5が抜けているんでしょうねぇ? そっちの方が気にかかるけどdocumentには何も書かれていません.奇数が嫌いなのだろうか?
エンドポイントというと、FIFOも含んでエンドポイントと呼ばれるみたいです.FIFOの仕様はどうなってるんでしょうか?
EZ-USB FX2LPの場合、FIFOは全部で4kB+αが内蔵されています.この「全部で」というところがクセ者です.αの部分はEP0,EP1のための小サイズのFIFO(下図上段)なのでさておくとして、4kBはEP2,EP4,EP6,EP8に割り振られます.
↓下図下段の1~12は割り振りパターンです.分かり易いのは12番目.EP2が4kBを全部占有して、他のEPはお休みという構成です.さらに1024BYTEが4つに分割されている理由は、FIFOが4バンク構成という意味です.バンク1つがOUT中に、2バンクはお休みで、1バンクがデータ積み込み中というゴージャスな使い方をします.
割り振りパターン1番目は、EP2,4,6,8が仲良く512BYTEの2バンク構成で分け合います.
割り振りパターン2~11は折衷案がいろいろ提供されています.
EP2~EP8のFIFOは、アドレスF000~FFFFの4kBに剥き出しになって見えます.FIFOなのにランダムアクセスができます.
あまりにハンパですが、今宵はこれまでにしとうございます.
その8へ その10へ
かしこ
INDEXページへ
https://hirasakausb.blogspot.com/2019/03/ez-usb-fx2lp-index.html
0 件のコメント:
コメントを投稿