PICでUSBを!(知識ゼロからのスタートです)
PIC18F14K50のUSB機能を100%自前のソフトで制御する試みです。しかもアセンブラで!
当記事は2009年12月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 2011.7.12

前へ
次へ
目次へ戻る
ホームページトップへ戻る
☆HIDの送信速度について

[第70回]

●HIDの送信速度

HIDの送信速度については、何回も書いております。
書くたびに、値が変わってしまいます。
もともとは、1msecごとに64バイトのデータを送出するというルールなのですから、理屈の上では、64000バイト/秒の送信速度ということになります。
しかしHIDなるものがだんだんと見えてきますと、どうもそのように計算通りにはいかないぞ、ということがわかってきました。
HIDでは送信だけをしていても、その間にやっぱり1msecに1回、受信(INトランザクション)も実行されてしまうのです。
ですから、そうすると、実際の送信速度は最高でも32000バイト/秒ということになってしまいます。

ところで、その速度は、WindowsパソコンからPIC18F2550に一方的に連続してデータを送信した場合の速度です。
しかし実際は、そのようにしてWindowsパソコンから送られてきたデータを、PIC18F2550は今度はZ80CPUに送らなければなりません。
そしてZ80はPIC18F2550から受け取ったデータを順番にメモリに格納していかねばなりません。
今回動作テスト中のZ80版TK80ボード(ND80ZH)の試作基板では、1バイトのデータをPIC18F2550から受け取ってメモリに格納するのに、約50μsecかかります([第68回])。

1000000/50=20000ですから、HID送信だけなら32000バイト/秒の速度が得られるとしても、実際にPIC18F2550をZ80版TK80ボードに組み込んだ場合には、PIC18F2550からZ80が受け取ったデータをメモリに書き込む速度が20000バイト/秒ですから、結局ここがネックになってしまって、それ以上の通信速度は期待できないことになります。

そのことは十分わかった上で、でもせっかく送信プログラムもできたことでありますから、そのテストも兼ねてちょっと大きなデータを送信して、その時間を測定してみました。

毎度のことなのですが、実際にやってみると、頭の中で考えていたことと、現実に起こる事柄とは異なる意外な結果になってしまうことがしばしばあって、驚いてしまいます。

HID送信プログラムに時間測定を組み込んで実行してみました。

アドレス8000〜BFFFのデータ16KB(アドレスデータも含めて16388バイト)を送信してみました。
かかった時間は1392msecでした。
16388/1.392=11773バイト/秒の送信速度です。

あれ?
てっきりPIC18F2550とZ80との間のデータ渡しの速度(20000バイト/秒)がネックだとばかり思っていたのですけれど…。
以外な結果になってしまいました。
うーん。多分ですけれど、Windowsでは途中にシステムの処理が割って入ってきて、そのために処理がときどき中断させられて、そのために余分なロスタイムが発生しているのではないでしょうか。

まま。それにしても、11KB/秒の送信速度なら、まあまあ使えるのではありませんか。
CPUをつくろう!第497回(2010.5.9upload)を再編集

PICでUSBを![第70回]
2011.7.12upload

前へ
次へ
目次へ戻る
ホームページトップへ戻る