ch567批量IN数据过程中,突然出现INT_FG=0x00的情况

请教一下,我在批量IN数据的过程中,在IN数据至上位机正常的情况下(CWB命令还没执行完),突然出现USB1_INT_FG=0x00的情况,然后就是USB1_INT_FG=0x01和0x05要求复位,导致数据无法正常上传,这是什么原因造成的呢?

1649310467133584.png

1649310467964615.jpg


主要代码如下:

    USB1_INT_FG = R8_USB1_INT_FG;

    USB1_INT_ST = R8_USB1_INT_ST;

    printf("R8_USB1_INT_FG:%02x;R8_USB1_INT_ST:%02x\n",USB1_INT_FG,USB1_INT_ST);

    if ((USB1_INT_FG & UIF_TRANSFER) && (USB1_INT_ST & (bUIS_TOG_OK|UIS_TOKEN_IN|2))) {

        USB1Dev_EDP2_IN_Deal();

        if(BOTStats == 0){

            //printf("判断BOTStats设置为0。\n");

        break;

        }

    R8_USB1_INT_FG = 0xFF;

    }

    printf("err?\n");

}


按照帖子中描述先检查关于连续IN时ACK状态的处理。

http://www.wch.cn/bbs/thread-86976-1.html


有可能的原因:

1、同步标志出错,主机一直收不到正确的包。

2、ACK状态没有及时的清楚,导致出现意外的包传输,导致包数量出错。

3、USB的中断处理应当完整,仅以贴出代码部分,可能会出现额外的中断状态清除(可能是需要处理的中断)

4、如果是查询法,需要额外注意中断标志的清除,避免误清除


注意事项:尽量缩短printf打印内容,对于处理速度影响较大。

如果条件允许,采用USB分析仪抓包分析,可直接定位到问题所在。

http://www.wch.cn/downloads/USB20Monitor_ZIP.html


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