2022年5月13日金曜日

【Android USB oscilloscope】(31) STM32-スマホのUSB転送レートが上がらない

余っている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数を増やすと死ぬ
なんだか微妙.

先へ進む目途が全然たたないっす.滅亡.

30へ     32へ

かしこ

0 件のコメント:

コメントを投稿