CH32F208R USBFS 发送数据 丢帧问题

在usb中断处理函数里面设置了发送完成标志,但是我不确定这样是否正确请指教,程序现在出现有时候上一帧数据丢帧现象,也就是实际上上一帧并没有发送出去,直接就发送下一帧了,也就是第一帧丢失,请教一下到底如何判断usb已经上传发送数据完成。


                    case USBHD_UIS_TOKEN_IN | 3: 

                        USBOTG_FS->UEP3_TX_CTRL ^= USBHD_UEP_T_TOG;

                        USBOTG_FS->UEP3_TX_CTRL = (USBOTG_FS->UEP3_TX_CTRL & ~USBHD_UEP_T_RES_MASK) | USBHD_UEP_T_RES_NAK;

    USBFS_Endp_Busy[ DEF_UEP3 ] = 0;

uep3_sendok=0;

                        break;

在发送函数里面 判断发送完成标志,发送完成才能发送接下来的数据。


if(bEpNum == ENDP3) 

{

//if(USBOTG_FS->UEP3_TX_CTRL & USBHD_UEP_T_RES_MASK == USBHD_UEP_T_RES_ACK) return FAILURE; 

   //while(USBOTG_FS->UEP3_TX_CTRL & USBHD_UEP_T_RES_MASK == USBHD_UEP_T_RES_ACK);

    while((uep3_sendok!=0)&&(i>0)){--i;delay_us(150); }// 发送完成标志,如果连续延时5次发送失败 超时

//USBFS_Endp_DataUp(DEF_UEP3, data, dataNum, 1 );

memcpy( pEP3_IN_DataBuf, data,dataNum);   

DevEP3_IN_Deal(dataNum); //设置NAK表示端点3正忙。

// delay_ns(250);

uep3_sendok=1;

   return SUCCESS;


现在是每帧最大传输32字节,当需要上传的数据包长度大于32字节时,会将数据包拆分成若干帧发送。有时候会出现丢帧的情况


还有请教一下,有时候出现usb上传不知道什么原因崩溃了,无法在上传任何数据,这个时候必须从启芯片才可以恢复请问该如何排查问题


你好

大致机制:USB装载数据,设置长度,设置ACK,busy标志位置1,等主机下发IN包之后,数据发送成功,进入IN中断,设置NAK,清除busy标志位。

具体可以参考这里面

https://www.cnblogs.com/wchmcu/p/17508110.html



 我是在官方的例程里面修改到自己的应用的。当大部分usb是好的,就是有时候发送不出去任何数据不知道怎么处理是什么原因导致的。


你好,可以把工程发我邮箱

zc@wch.cn


因为我这个是配合上位机调试的,不知道是否和上位机的驱动存在配合上的问题还有帮我看下发送完成标志这样置位对吗

  case USBHD_UIS_TOKEN_IN | 3: 

                        USBOTG_FS->UEP3_TX_CTRL ^= USBHD_UEP_T_TOG;

                        USBOTG_FS->UEP3_TX_CTRL = (USBOTG_FS->UEP3_TX_CTRL & ~USBHD_UEP_T_RES_MASK) | USBHD_UEP_T_RES_NAK;

    USBFS_Endp_Busy[ DEF_UEP3 ] = 0;

uep3_sendok=0;

                        break;



这个没问题,FS的收发可以参考一下这个https://www.cnblogs.com/wchmcu/p/17913838.html


只有登录才能回复,可以选择微信账号登录