CH567收到UIF_BUS_RST的问题

请问一下,我在使用CH567开发板的过程中,使用官方的例程,在程序开发的过程中,开发板经常出现“USB1 Reset!”的情况出现,例如下面这样子的情况。偶尔重新开发板重启就能解决、偶尔是重新编译程序就能解决,请问出现这种情况的原因在哪里呢:


USB1 Device Init!

USB1 Reset!

USB1 Reset!

USB1 Reset!

USB1 Reset!

USB1 Reset!

USB1 Reset!

USB1 Reset!

USB1 Reset!

USB1 Reset!

USB1 Reset!

USB1 Reset!


源代码:

void USB1DevIntDeal(void){

    if (R8_USB1_INT_FG & UIF_TRANSFER) {

        //R8_UEP0_TX_CTRL1 = UEP_T_RES_NAK;

        R8_UEP0_TX_CTRL1 = UEP_T_RES_ACK;

        R8_UEP0_RX_CTRL1 = UEP_R_RES_ACK;

        //R8_UEP1_TX_CTRL1 = UEP_T_RES_NAK | bUEP_AUTO_TOG;

        R8_UEP1_TX_CTRL1 = UEP_T_RES_ACK | bUEP_AUTO_TOG;

        R8_UEP1_RX_CTRL1 = UEP_R_RES_ACK | bUEP_AUTO_TOG;

        R8_UEP2_TX_CTRL1 = UEP_T_RES_ACK | bUEP_AUTO_TOG;

        R8_UEP2_RX_CTRL1 = UEP_R_RES_ACK | bUEP_AUTO_TOG;

        R8_USB1_DEV_AD = 0;

        DevAddr = 0;

        R8_USB1_INT_FG = UIF_BUS_RST;

        printf("USB1 Reset!\n");


USB枚举阶段或者USB通讯出错、不符合协议交互逻辑、无响应等异常情况时,通常主机会进行USB总线复位来试图纠正,总线复位本身只是一种总线的状态,出现总线复位是正当的。

如果不是在枚举阶段出现,更多的可能是对代码的修改导致通讯过程中的错误引起。

如果是总线上的错误,采用硬件抓包仪器分析会更有效。


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