2 Replies Latest reply on Jul 6, 2020 11:09 PM by TeMa_2997106

    PSoC5LPのUSBFSについて

    TeMa_2997106

      USBFSを用いてUSBUARTを実現しようとしています。

       

      USBUART_DataIsReady()の戻り値をチェックしてから

      USBUART_GetAll()でデータを取得しようとしていますが、

      前段からデータが送られている最中(複数バイトのパケットを送っているそのパケットの途中で)

      USBUART_DataIsReady()を呼ぶと、戻り値は0以外になる、という認識で正しいでしょうか。

       

      どのタイミングで「受信データ」の有無を内部で決めているか、が本質だと思いますが、

      データシート上ではZero-length packetにも言及されているので、

      何かしらの受信をした瞬間にもうそこで受信データと判断して戻り値は0以外になる、

      と判断しました。

       

      以上です。

        • 1. Re: PSoC5LPのUSBFSについて
          NoriakiT_91

          USBUART の実装をご覧になるとわかりますが、 USBUART_DataIsReady() では、 End-Point (EP) の状態をチェックしているにすぎません。 EP にデータパケットが到着していれば、 non-zero を返します。

           

          USB では、 EP にパケットが到着した状態では、次のホストのデータ送信要求に対しては NAK を返し、パケットの受け取りを拒否します。そして、次のデータの受信が可能になったら要求に対して ACK を返すようになります。この ACK を返すようにするための操作は、 USBUART_GetAll() で呼び出されている USBUART_ReadOutEP() に有ります。

           

          従って、データが送られている最中に USBUART_DataIsReady() が呼び出された場合、データが到着していないので USBUART_DataIsReady() は zero を返します。この状態は、データを受信し終わるまで続き、パケットを受信し終わったときに non-zero を返すようになります。

           

          Regards,

          Noriaki

          1 of 1 people found this helpful
          • 2. Re: PSoC5LPのUSBFSについて
            TeMa_2997106

            素早いご返信ありがとうございます。

             

            挙動について、理解できました。