WCH沁恒单片机
直播中

苹果派派

11年用户 629经验值
私信 关注
[问答]

ch567批量IN数据过程中,突然出现INT_FG=0x00是为什么?

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




主要代码如下:
    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
",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。
");
        break;
        }
    R8_USB1_INT_FG = 0xFF;
    }
    printf("err?
");
}



回帖(1)

李兰英

2022-6-29 10:11:24
按照帖子中描述先检查关于连续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
举报

更多回帖

发帖
×
20
完善资料,
赚取积分