余っているAndroidスマホをオシロにしよう!
performance tuningって好きなんです.STM32-スマホとのUSB2.0接続で転送レート向上に取り組み中.
なのですが、滅亡しかかっています.
STM32 hostの送信条件「DMA、511Byte転送、single packet」で900kBytes/Sec しか出ない.5MBytes/Secぐらい出て欲しいのだけど.(今はメインスレッドでUSB readしてます.サブスレッドでやったら高速化できるかもしれない)
STM32をDMA→非DMAに変更すると500kBytes/Secに落ちる.まぁこれは仕方ない.
律速はスマホだと判っています.スマホの内部処理が遅いのはさもありなん.
ちなみにスマホのUSB送受信はIO stream方式です.
一方、STM32はこの10倍で送出できるとの感触は得ています.
こうゆう状況でさらにレートを上げようとしたらやれることは、multi packet転送にすることです.すなわち、1つのUSBヘッダに連なるdataを増やすことです.「DMA、2000Byte転送、multi packet」に条件を変えてみる.
ところがバグってこれがいて動きません.multi packetが動かない.multi packetだとエラーIRQが立ちまくる.この現象はSTM32シリーズに偏在するバグらしく、海外サイトで多く取り沙汰されています.「STM32はmulti packetに対応してますか?」「STM32をmulti packetにするには?」みたいなスレが立っている有様です.なんという絶望の香り.
hardwareにこんなプアなバグがあるとは考えにくいです.かといってsample programにいつまでもこんなバグが残ってるっていうのもどうかと思う.なにが起きてるんだかねー
DMAでワード境界が悪さしてたりしないかと非DMAも試してみました.
「DMA、511Byte転送、1packet」 これよりByte数を増やすと死ぬ
「非DMA、768Byte転送、2packet」 これよりByte数を増やすと死ぬ
なんだか微妙.
先へ進む目途が全然たたないっす.滅亡.
かしこ
0 件のコメント:
コメントを投稿