- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
USBFSを用いてUSBUARTを実現しようとしています。
USBUART_DataIsReady()の戻り値をチェックしてから
USBUART_GetAll()でデータを取得しようとしていますが、
前段からデータが送られている最中(複数バイトのパケットを送っているそのパケットの途中で)
USBUART_DataIsReady()を呼ぶと、戻り値は0以外になる、という認識で正しいでしょうか。
どのタイミングで「受信データ」の有無を内部で決めているか、が本質だと思いますが、
データシート上ではZero-length packetにも言及されているので、
何かしらの受信をした瞬間にもうそこで受信データと判断して戻り値は0以外になる、
と判断しました。
以上です。
解決済! 解決策の投稿を見る。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
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
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
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
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
素早いご返信ありがとうございます。
挙動について、理解できました。