嵌入式技术william hill官网
直播中

李华

7年用户 1379经验值
私信 关注
[问答]

ymodem_ota下载固件丢失第一个字节请问谁遇到过这个问题吗?

使用Qboot时,用ymodem_ota下载固件,重启提示:
Qboot firmware check fail. firmware infomation check fail.

然后定位到strcmp((const char *)(fw_info->type), "RBL")出错;
然后用fal probe downlaod 和 fal read 0 16 命令读了一下download分区的前16个字节:

Offset (h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
[00000000] 42 4C 00 00 00 01 00 4C 7D 5C 56 61 70 70 00 00 BL.....L}\Vapp..

发现RBL少了个R,用winhex查看了源文件,文件上有这个RBL;
初步估计是ymodem_ota程序在传输时,丢了第一个字节;
请问,谁遇到过这个问题吗?
怎么解决?

回帖(3)

李华

2023-4-3 14:54:07
问题解决
定位到ymodem_ota.c中ymodem_on_data函数中的数据都是正常的,写到MCU flash上时就不正常,初步考虑是字节对齐的问题,在该函数中临时申请一定内存做字节对齐,就buf拷贝到该段内存中,再基于该段内存做写MCU flash 操作,就没这个问题了;
举报

王飞

2023-4-3 14:54:14
学习了!
不过你这只能算99%定位到问题。
建议深入查下,非拷贝方式时,传入的buf是多少,是否未对齐,然后FLASH这边写入要求对齐到多少?这样才能100%确认。
举报

李华

2023-4-3 14:54:20
源buf是rt_malloc申请的133字节,到该函数的buf时,偏移了3个字节,*code = ctx->on_data(ctx, ctx->buf + 3, data_sz);
也就是没有对齐了
而MCU flash确认需要4字节对齐
举报

更多回帖

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