KEIL生成的bin文件如何通过代码有效性检测?

woshi_ziyu 2015-01-11 07:54:39
我参加 CSDN2014 博客之星大赛,请大家多多支持,投票网址如下(每天都可以投一票的哦):
http://vote.blog.csdn.net/blogstar2014/details?username=woshi_ziyu#content
——————————————————————————————————
本文的示例是基于LPC1768
项目中使用的是NXP的MCU,在实现IAP的过程中,发现生成的bin文件不能通过代码有效性检测。
然后在"大三巴科技" 博客里面看到了一篇文章中介绍了该问题的解决方法:
利用ElfDwT.exe先把axf格式的进行修正,让后再把axf 转换成bin
使用方法如下:
keil-project-options for target-user-run user programs after build -  run #2  
RUN#1: $K\ARM\BIN\ELFDWT.EXE #L
RUN#2: fromelf --bin ".\obj\@L.axf" --output ".\obj\@L.bin"


经过测试,发现这条指令只对以0x0为首地址的bin文件有效。而对于以非0x为首地址的无效。

在官网中找到一个方法是:
$K\ARM\BIN\ELFDWT.EXE !L BASEADDRESS(0x1A000000)

添加到工程中,编译不通过。提示解析错误,BASEADDRESS参数非法。

向同事寻问,说是有可能是KEIL版本问题。工程使用的是MDK420,经测试,在MDK4.72A中,程序可以正常编译。于是使用高版本中的KEIL\ARM\BIN\ELFDWT.EXE直接将低版本中的文件覆盖,问题得到解决。


附1:有效用户代码判定标准:
保留的 Cortex-M3 微控制器异常向量单元 7(在向量表中的偏移量为 0x0000 001C)应当包含表入口 0~6 的校验和的 2 的补码。这样就使前 8 个表入口的校验和为0。引导装载程序代码校验 Flash 扇区 0 中的前8 个单元。如果结果为 0,执行控制权便转移给用户代码。 如果符号无效,那么自动波特率程序通过串口(UART)与主机进行同步,或从 USB 端口启动(PIO0_3 管脚的采样为高电平)。
附2:KEIL MDK生成 bin 文件 for nxp MCU : http://bbs.ednchina.com/BLOG_ARTICLE_3000052.HTM
附3:ARM: LPC18xx/43xx On-chip Flash Loader Vector Checksum Calculation: http://www.keil.com/support/docs/3592.htm.

博客地址:http://blog.csdn.net/woshi_ziyu/article/details/42554467
...全文
808 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

1,075

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧