usb vcom只能收一次,第二次收不到

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

usb vcom只能收一次,第二次收不到

Jump to solution
967 Views
SSFG1992
Contributor I

调试环境:IAR,rt1064EVB,usb例程dev_cdc_vcom_bm

原例程可正常调试,数据收发正常,echo back功能正常。如果把APPTask中的USB_DeviceCdcAcmSend函数注释掉,即只收不发,第二次无法接收,程序进不了USB_OTG1_IRQHandler中断。

请问是什么原因?难道收到后必须发送才能继续接收?

Tags (1)
0 Kudos
1 Solution
959 Views
kerryzhou
NXP TechSupport
NXP TechSupport

Hi SSFG1992,

  楼主你好!
你这个问题和我之前在与非网上答得一样:

https://www.nxpic.org.cn/module/forum/thread-621709-1-1.html

你参考下。

-------------------

今天我分析了下,发现在USB_DeviceCdcVcomCallback  event=kUSB_DeviceCdcEventSendResponse的时候,有个:
                    /* User: add your own code for send complete event */
                    /* Schedule buffer for next receive event */
                    error = USB_DeviceCdcAcmRecv(handle, USB_CDC_VCOM_BULK_OUT_ENDPOINT, s_currRecvBuf,
                                                 g_UsbDeviceCdcVcomDicEndpoints[0].maxPacketSize);
用于准备下次接收的代码。
所以你可以把你APPTask里面,接收到数据之后,加一个准备下次接收的代码,如下:



  1. <p>        if ((0 != s_recvSize) && (USB_CANCELLED_TRANSFER_LENGTH != s_recvSize))
  2.         {
  3.             int32_t i;
  4.  
  5.             /* Copy Buffer to Send Buff */
  6.             for (i = 0; i < s_recvSize; i++)
  7.             {
  8.                 s_currSendBuf[s_sendSize++] = s_currRecvBuf[i];
  9.             }
  10.             s_recvSize = 0;
  11.             s_sendSize = 0;//kerry add</p><p><em>//Kerry add, used for Schedule buffer for next receive event</em>
  12.                 error = USB_DeviceCdcAcmRecv(s_cdcVcom.cdcAcmHandle, USB_CDC_VCOM_BULK_OUT_ENDPOINT, s_currRecvBuf,
  13.                                                                  g_UsbDeviceCdcVcomDicEndpoints[0].maxPacketSize);
  14.  
  15.         }</p>
复制代码



Wish it helps you!

Best Regards,

Kerry

View solution in original post

0 Kudos
1 Reply
960 Views
kerryzhou
NXP TechSupport
NXP TechSupport

Hi SSFG1992,

  楼主你好!
你这个问题和我之前在与非网上答得一样:

https://www.nxpic.org.cn/module/forum/thread-621709-1-1.html

你参考下。

-------------------

今天我分析了下,发现在USB_DeviceCdcVcomCallback  event=kUSB_DeviceCdcEventSendResponse的时候,有个:
                    /* User: add your own code for send complete event */
                    /* Schedule buffer for next receive event */
                    error = USB_DeviceCdcAcmRecv(handle, USB_CDC_VCOM_BULK_OUT_ENDPOINT, s_currRecvBuf,
                                                 g_UsbDeviceCdcVcomDicEndpoints[0].maxPacketSize);
用于准备下次接收的代码。
所以你可以把你APPTask里面,接收到数据之后,加一个准备下次接收的代码,如下:



  1. <p>        if ((0 != s_recvSize) && (USB_CANCELLED_TRANSFER_LENGTH != s_recvSize))
  2.         {
  3.             int32_t i;
  4.  
  5.             /* Copy Buffer to Send Buff */
  6.             for (i = 0; i < s_recvSize; i++)
  7.             {
  8.                 s_currSendBuf[s_sendSize++] = s_currRecvBuf[i];
  9.             }
  10.             s_recvSize = 0;
  11.             s_sendSize = 0;//kerry add</p><p><em>//Kerry add, used for Schedule buffer for next receive event</em>
  12.                 error = USB_DeviceCdcAcmRecv(s_cdcVcom.cdcAcmHandle, USB_CDC_VCOM_BULK_OUT_ENDPOINT, s_currRecvBuf,
  13.                                                                  g_UsbDeviceCdcVcomDicEndpoints[0].maxPacketSize);
  14.  
  15.         }</p>
复制代码



Wish it helps you!

Best Regards,

Kerry

0 Kudos