嵌入式技术论坛
直播中

张国厚

8年用户 1472经验值
私信 关注
[经验]

使用ymodem_ota命令级进度条经常无故卡死的解决办法

环境:单片机F407 串口1 波特率115200 中断接收 rbl文件大小约260k
故障现象:之前使用ymodem_ota命令更新时,就发现升级进度条经常无故卡死。升级成功率非常低。
最近有时间重新调试了下,故障原因在于,串口接收大数据时,会出现丢字节现象。当串口一旦丢失字节后,ymodem就会出错退出了。
仔细查看ymodem协议后发现,本身是带出错处理的,当接收帧出错后,发送NAK响应,主机即会重发出错的数据帧
将代码做如下更改即可解决此类问题
函数_rym_do_trans内部更改如下:
err = _rym_trans_data(ctx, data_sz, &code);
        if (err != RT_EOK)
        // return err;
        { //如果数据帧接收错误,则发送NAK,请求主机端重复发送
            errNums++;
            if (errNums < 10)
            {
                _rym_putchar(ctx, RYM_CODE_NAK);
                continue;
            }
            else
            {
                errNums = 0;
                return err;
            }
        }
        else
        {
            errNums = 0;
        }

更多回帖

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