查看: 4357|回复: 2

[其他] 解决AN2295不能烧写部分S19文件的方法(转)

[复制链接]

该用户从未签到

10

主题

40

帖子

0

注册会员

Rank: 2

积分
96
最后登录
2018-5-11
发表于 2015-11-18 09:57:42 | 显示全部楼层 |阅读模式
转一篇,原作者:FSL_FAE_ConstYu

问题提出:
在当前的AN2295中,有客户反馈使用GUI只能烧写部分S19文件,而同样的配置,修改代码后,生成的S19文件烧写却不成功,如下图,总是出现程序烧写98%左右后,编程失败。

解决AN2295不能烧写部分S19文件的方法 1.jpg


问题分析:
分析前后两个S19文件发现,添加代码前后S19的长度出现变化,能正常下载的S19的都是4字节对齐的。于是结合AN2295的MCU端程序代码,可以看到如下红色代码,其强制性的将S19文件进行了4字节截断,从而导致了最后的不满4个字节数据被丢弃,于是出现了编程错误。
case BOOT_CMD_WRITE:
          ReadAddress();
          length = UART_GetChar();          // Read length
          ………
          // Load the data to write
          for(i = 0;i<length; i++)
          {
            write_buffer =  UART_GetChar();
        ………
          }
          length >>= 2;    // divide by four
          …………         
          if(FLASH_PROGRAM(address.complete, (LWord*)write_buffer, length))
          {           
            SendResultCRC(1);
            break;
          }

问题解决:
针对这个问题有两种解决方式,
1. 强制修改工程生成的S19文件补充0xFF,使之4字节对齐,修改前后对比如下图。

解决AN2295不能烧写部分S19文件的方法 2.png


2. 在AN2295代码中将未4字节对齐的最后一帧数据,使用0xFF填充,使之4字节对齐。需要在bootload.c函数中,添加如下图红色方框中代码。

解决AN2295不能烧写部分S19文件的方法 3.png


总结:
对于很多新用户来说,遇到这个问题,会不确定是上位机PC端GUI代码的问题还是下位机MCU的问题,而且调试时需要GUI和MCU配合起来,特别是如何判断最后一帧数据的长度,所以比较难定位问题。但一旦找到问题点,就比较好修改了。推荐使用第二种修改方法,能帮助用户对AN2295代码的执行流程有比较深入的了解。

延伸:
如下截图,在当前AN2295代码中决定是否执行APP的条件是指定的跳转首地址是不是0xFFFFFFF。而如果在更新过程中出现中断,由于首地址已经不是0xFFFFFFFF,在重启后,程序依然会执行不完整的APP代码,从而有可能产生意外的结果。这种情况,在一些对安全性要求比较高的应用场合需要特别注意,有必要的话,用户可以修改这个判别条件,做特别的优化处理。
目前两个可行的办法是:
1. 使用特定的Flash地址存放bootloader更新完成标志,并以该标志作为进入APP的判断标准;
2. 修改GUI传送的烧写MCU的S19文件的顺序,从后向前烧写Flash sector,如果更新过程中出现中断,首地址来不及更新,将会是默认的0xFFFFFFF,从而可使用该条件作为判断是否在重启后进入APP的标准。


解决AN2295不能烧写部分S19文件的方法 4.png
我知道答案 目前已有2人回答
回复

使用道具 举报

该用户从未签到

2

主题

65

帖子

0

注册会员

Rank: 2

积分
153
最后登录
1970-1-1
发表于 2015-11-18 10:19:12 | 显示全部楼层
学习了,顶一个
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

15

帖子

0

注册会员

Rank: 2

积分
62
最后登录
2015-12-18
发表于 2015-11-18 11:17:07 | 显示全部楼层
也可以自己做个上位机呀!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-21 10:48 , Processed in 0.089669 second(s), 24 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表