USBホスト通信時の受信バイト数について

皆様はじめまして。

現在、GR-SAKURA(RX63N)を使用して、HCDC通信(nonOS)を行おうとしております。

 

FIT Modulesのr_usb_hcdc、および、サンプルプログラム「R01AN2235JJ0124 」

(USB ホストコミュニケーションデバイスクラスドライバ(HCDC)による CDC デバイスとの USB 通信を行うサンプルプログラム Firmware Integration Technology )

を元にして、通信対象のデバイスとの送受信を確認しておりますが、受信バイト数、および受信データがうまく取得できません。

 

こちらからの送信(6バイト)は正常に送信できています。

しかし、受信応答を確認(「R_USB_GetEvent」の戻り値が「USB_STS_READ_COMPLETE」のときの状態)すると、以下のようになっています。

 usb_ctrl_t.status→6( USB_ERR_SHORT)

 usb_ctrl_t.size→32(送信されるデータは36バイトです)

 受信バッファの内容→送信データ36バイト中の32バイトまでバッファに入っている

 

そこで、教えていただきたいのですが

・「R_USB_Read」にて、受信サイズに「CDC_DATA_LEN(64)」を指定しているのに、32バイトしか受信しないのはなぜでしょうか。

 (こちらの想定では、36バイトを受信、かつUSB_ERR_SHORTになるのでは?と考えていましたが・・・)

・パイプマックスパケットサイズレジスタ(PIPEMAXP)にも040h(64バイト)が設定されているのに、32バイトしか受信しないのはなぜでしょうか。

・32バイト以降のデータを読み取る方法が、何か用意されているのでしょうか?

 

ヒントだけでもよいので、アドバイスいただければと思います。

よろしくお願いします。

Parents

  • よー@名古屋さん、こんにちは。NoMaYと申します。

    相手側機器が送信データ36バイトを32バイトと4バイトの2つのパケットに分割しているということはありませんでしょうか? もしそうであれば、プロトコルの仕様でもって相手側機器から何バイト送信されるかを明確に定義しておき、そのバイト数受信するまで受信関数を繰り返し呼ぶようにしないといけない、ということだったりするのではないだろうか?ということです。

  • NoMaYさん

    こんにちは!お返事ありがとうございます。

    すみません、前提をすべて書ききれておりませんでした。
    今回の通信対象は36バイトを連続で送信してくるので、「USB_STS_READ_COMPLETE」を確認して値を読み取った後、再度「R_USB_Read」を行って連続受信できるようにプログラムしているのですが、受信は常に32バイトで、4バイトが受信できていません。(捨てられている・・・?)

    なので、ご教示いただいたような状況ではないと考えておりました。
    他になにか心当たりがあれば、教えていただければと思います。
    ありがとうございました。
Reply
  • NoMaYさん

    こんにちは!お返事ありがとうございます。

    すみません、前提をすべて書ききれておりませんでした。
    今回の通信対象は36バイトを連続で送信してくるので、「USB_STS_READ_COMPLETE」を確認して値を読み取った後、再度「R_USB_Read」を行って連続受信できるようにプログラムしているのですが、受信は常に32バイトで、4バイトが受信できていません。(捨てられている・・・?)

    なので、ご教示いただいたような状況ではないと考えておりました。
    他になにか心当たりがあれば、教えていただければと思います。
    ありがとうございました。
Children
  • よー@名古屋さん
    コンフィグレーションのパイプサイズを32Byteに設定しているのではないですか?
  • IKUZOさん

    アドバイスありがとうございます。
    コンフィグレーションのパイプサイズとは、PIPEMAXPレジスタの設定値のことでしょうか。
    こちらは設定箇所、およびR_USB_Readの前に、R_USB_GetPipeInfoを使用して確認しましたが、
    どちらも64Byteでした。
    確認したパイプはBULK_IN(パイプ1)と、BULK_OUT(パイプ2)のみですが、他にパイプサイズを設定する箇所はありますでしょうか。
  • よー@名古屋さん
    64Byteであれば64Byteで送信するのがベストではないかと思いますが。