环境:
单片机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);
con
tinue;
}
else
{
errNums = 0;
return err;
}
}
else
{
errNums = 0;
}