引き続き EZ-USB FX2LP です。
こんどは、IN方向のベンチマークを行う bench_inを試してみました。(単に記載されている通りにやっただけです)
1.Examplesを試してみる
usb-fx2-io-examples-0.4.tar.gzをダウンロードしてきて、展開します。
slave FIFOを動作させるため、以下の通り結線します。
- PA2/SLOE, PA5/FIFOADR1, RDY0/SLRDを3.3Vへ
- PA4/FIFOADR0, RDY1/SLWRをGNDへ
接続するとこんな感じです。
接続したらPCに接続して、「make run」でテストが実行されます。
~/EZUSB-FX2/usb-fx2-io-examples-0.4/bench_in $ make run
cycfx2prog prg:bench_in.ihx run bench_bulk:6,16777216
Using ID 04b4:8613 on 001.007.
Putting 8051 into reset.
Programming 8051 using "bench_in.ihx".
Putting 8051 out of reset.
Read 16777216 bytes in 513 msec (chunk size 65536): 31.194 Mb/sec ( 256 calls, 65536 bytes/call)
ということで、16Mバイトの転送が513msで実行され、31.194Mb/secの速度が出ていたことがわかります。
ちなみに環境は、
- CPU : Celeron G530
- Mother : ASRock H61M-ITX (Intel H61 Chipset)
- Memory : 8GB
- OS : LinuxMint11 64bit
です。EZUSB-FX2とマザーの前面USBポートの間にUSB2.0のHUBが入っています。
2.FX2Pipeを試してみる
前回インストールしておいた、FX2pipeも試してみました。FX2pipeではEZUSB側のF/Wを指定しなければならないのですが、これに今回のbench_inのF/Wを使ってみます。
さっきと同じディレクトリで、「fx2pipe -fw=bench_in.ihx -i -0」として動作させて、適当なところで CTRL-cで中止させます。
~/EZUSB-FX2/usb-fx2-io-examples-0.4/bench_in $ fx2pipe -fw=bench_in.ihx -i -0
Firmware config: 0x12 0xc3 0xe0 0x0d 0x12
IO loop running...
Downloading firmware "bench_in.ihx"...
Submitting max. 16 URBs to fill pipeline... 16 submitted
fx2pipe: 45063323648 bytes in 1100.455s (avg 39990 kb/s, curr 39777 kb/s)^Creap_rv=-1, errno=Interrupted system call
OOPS: ProcessEvents: ec=4
IO loop exited
Cancelled 16 pending URBs (npending=16), reaping... done reaping (16): npending=0
fx2pipe: 45069058048 bytes in 1100.596s (avg 39990 kb/s)
ということで、1100秒間で45069058048バイト=45Gバイトの転送を行って、平均はほぼ40MB/sということになりました。
<追伸>fwにbench_inを指定しなくても動作は一緒でした。あとはGPIFの使い方を調べないといけないですね。