RX71MマイコンのUSB制御について何点か疑問等がありますので質問いたしました
現在アルファプロジェクトさんの製品AP-RX71M-0Aを用いて、「USBメモリに10分間で、400Mバイトのデータを書き込めるか」
検証を行っており、調べてみるとRX71MからのマイコンからUSB2.0 High-Speedに対応したとの記載がありました。
アルファプロジェクトさんが提供していますサンプルソースコードを用いて上記の試験「10分間でデータ400MバイトをUSBメモリに書き込めるか」
実験を行いましたが(書き込みの処理を400Mバイト書き込めるように修正)10分間で終わらず20分ぐらいかかりようやく書き込み動作が
完了いたしました。
そこで質問になりますが、usbのhigh-speedの転送速度を確認すると480Mbps/s(60Mbyte/s)の記載がありましたが上記の結果を見る限り
そこまで速度が出てる風には見えませんでした。上記の仕様「10分間でデータ400MバイトをUSBメモリに書き込めるか」はこのマイコン製品じゃ
無理なんでしょうか。またほかのやり方等がありましたらご教示お願いいたします。
こんにちは
アルファプロジェクトさんに聞いてみては如何でしょうか?
USBは詳しくありませんが、480Mbpsは規格値の最大値であり、実際の速度はそこまでないと聞いたことがあります。
USB-HSの転送速度の480Mbpsってのは瞬間最大としてはでてるので間違いではないとおもいます。
ただ、USB自体が1.1の時代から
1msごとのポーリングをベースとしている
という厳然たる事実があって、この1ms内に行えるデータがすべて使えるわけではないので
注意が必要、というのがあるとおもいます。
実際1.1やFSと混用できるようにするためマイクロパケット(512バイト)を複数詰め込めるように
したり涙ぐましい努力があるうえ、アイソクロナス通信用の空き時間があったりと
高速通信命!みたいなのには向かない構造ではあります。
しかも USBメモリ自体Flashメモリであって、決して高速書き込みに適したメモリでもないので
そこにもオーバーヘッドが存在しますし、ファイルフォーマットを合わせるためにソフトで
行う処理もばかにならないことを考えると、健闘してるほうなんではないですか?
規格も含めて、オーバーヘッドがどこにあるのかを検証するのが先の気がします。
rkshさん、こんにちは。すみません。私の前の投稿の以下の文は無かったことにして下さい。>(RX71M上で擬似的に作成したファイルだと思いますが。)USBメモリというと、つい(パソコン間でのファイル受け渡し用に)内蔵HDDからファイルをコピーするというのをイメージしてしまって、よく分からない文を書いてしまいました。よくよく考えてみれば、きっと、USBメモリ上に直接open()してwrite()してclose()しておられるのですよね。この時、一度open()するだけで400Mbyte分write()してclose()するのか、それともopen()→1Kbyte分write()→close()を40万回繰り返すのか、どちらのタイプか気になります。(パソコンでのUSBメモリやUSB外付けHDDの経験でも、小さなファイルの大量コピーは小数の巨大なファイルのコピーよりも時間が掛かるものですし。)ちなみに、そのUSBメモリにパソコンで400Mbyteの巨大単一ファイルを書き込んで、RX71Mでopen()→400Mbyte分read()→close()した場合は、どれくらいの時間なのでしょうか? (kirin様から読み込み時間についてのリプライがあったのですが、読み込み時間についての測定結果は書かれていませんですよね。)USBマスストレージクラスのプロトコルに関して、tetnoguchi様とflux様からのアドバイスはもっともだとは思うのですが、rkshさんの文面通りの性能だとすると、私は何か違和感を感じます。240MHz動作の32bitマイコンで、(CPU性能では無く)インターフェース速度が大きな比重を占めそうな話題に関して、パソコンでの性能と100倍違うというのは、プロトコルの話とは別次元の何かがあることを疑ってもよいような気がするのですが、、、パソコンのHi Speed転送での場合 → 30Mbyte/sec今回のRX71MのHi Speed転送での場合 → 0.33Mbyte/secもっとも、まだ、1個なのか40万個なのか、どちらのタイプなのかという話がありますが、、、
あぁ、ごめんなさい色々寝ぼけてました。。
流石に実行速度2.7Mbpsは遅すぎますわ。ていうかUSB1.1のFullSpeedより遅い。流石にLowSpeedよりは早いようですが。2.0のHighSpeedじゃなくて、1.1のFullSpeedで接続実行されてませんかね。
各スピードのハンドシェイクに関して、以下のような記載がありました↓
www.renesas.com/.../usb2-e.html
fujitaさん
状況が矛盾しているので、「秒」の書き間違えと仮定した場合の話です。
メインの240MHz動作ではなく、実は低速LOCO 240KHz動作だったりすると矛盾は解決しそうですけど。 CPUが設定通りの動作周波数になっているか、確認したほうがよさそうですね。
> 「秒」の書き間違えと仮定した場合の話です。
Kirinさん、了解です。
USB メモリでも、インターフェースが USB1.1 という製品も世の中には存在するようなので、
参考: http://buffalo.jp/products/catalog/item/r/ruf-q16_4p/?p=spec
試されたメモリについても確認された方が良いですね。PC での速度比較もされると一応の目標数値として参考になるかもしれません。
回答が遅くなり申し訳ございません。
皆様沢山のご意見ありがとうございます。
クロックの設定につきましてはタイマ割り込みの動作確認、レジスタの設定値確認、サンプルソースコードの流用を行った結果
240MHz動作になっていることは間違いないと思われます。
USBメモリの書き込みについての詳細になりますが
使用していますUSBメモリになりますが容量4GのUSB2.0となっておりました。
書き込みの行い方になりますが、
最初一度open()し、その後3byteのデータを120,000,000回(360Mbyte分)1ファイルに書き込み完了する時間が
10分以内に収まるか現在評価してしています。
上記データ書き込み完了後close()を実行いたします。
> 最初一度open()し、その後3byteのデータを120,000,000回(360Mbyte分)1ファイルに書き込み完了する時間が
> 10分以内に収まるか現在評価してしています。
あらー。それ、わざわざ遅くなるようにしてません?
少なくともセクタサイズの512Byte単位にしないと、オーバーヘッドが馬鹿にならないきがします。
rkshさん、こんにちは。生データが3バイト毎に発生するなら、また、セクタ単位のバッファリングぐらいはライブラリでしてくれているだろうという期待感から、更に、240MHz動作のマイコンでコール/リータンのオーバーヘッドを気にする程の事案でもなさそう、ということで、私も同じコードを書くだろうと思います。もし、私が仕事で同じ状況になったら、次は『本当にHi Speedモードに入っているのだろうか』と疑うと思います。もし、会社にUSBバスアナライザがあることが分かったら何とか借りてUMと睨めっこします。なければ、360Mbyteの巨大単一ファイルリード(512byteとか32Kbyteとかの塊でリード)で性能が出ているかどうか、書き込みも(仕様のことは脇へおいて)512byteとか32Kbyteとかの塊でライトして性能が出るかどうか、また、そのUSBメモリがHi Speedに対応していないということが無いかどうか、あと、平行して、実はヘッダファイルの#defineを変更しないとHi Speedが使えないという話があったりしないか、そういったことを調べると思います。納期との兼ね合いもあると思いますが、『秒』では無くて『分』であるならばと気付いた後の皆様(私も含めて)のリプライとしては『それはさすがに遅いのでは?』という反応である感じですので、もう少し時間を割いて調べてみる価値はあるような気がします。
rkshさんシェルティです、こんにちは。
TFATのマニュアルですが、サンプルプロジェクトの奥底に格納されていますね。
SAさんの提示されたURLから以下のように辿れます。https://www.renesas.com/ja-jp/products/software-tools/software-os-middleware-driver/renesas-software-library/m3s-tfat-tiny.html→リンク先の下の方に「オープンソースFATファイルシステム (USBメモリ、MMC接続例)」 →画面左側の「サンプルプログラム」 →「RXファミリ オープンソース FAT ファイルシステムM3S-TFAT-Tiny モジュールを用いたサンプルプログラム Firmware Integration Technology 」 →ダウンロード、解凍
解凍データ:→an-r20an0293jj0101-rx-tfat-storage\workspace\sample\TFAT_sample_RX71M_with_USB\r_tfat_rx\doc\ja →r20uw0078jj0301_tfat.pdf
私も少し性能測定してみました。以下サンプルはRX71MをFTPサーバにして、ネットワーク経由で任意のファイルをUSBメモリにアップロード/ダウンロードできます。https://www.renesas.com/ja-jp/software/D6000403.html
デフォルト設定はフルスピードモードでした。結果は以下の通りでした。700KB/s (5.6Mbps)で、400MBの書き込みに10分位かかりました。
USBの設定を変更してハイスピードモードにしたところ、結果は以下の通りでした。1800KB/s (14.4Mbps)で、400MBの書き込みに4分位かかりました。
FTPサーバのファイルI/O周りのコードを確認したところ、ネットワークからの受信データ長(TCP/IPは1460バイト)単位でファイルに書き込んでいました。大きなデータサイズを指定して一度に書き込む方が早い傾向は確実のようです。
以上です