NXP Cortex-M系列MCU用户代码有效性验证问题
问题描述
用Jflash烧写LPC程序时提示错误:Your program data does not contain a valid checksum. Without a valid checksum your application will not run. 如果选否,不添加校验和,则烧录校验失败。 选择是,则会自动补上校验和。
原因分析
查阅NXP Cortex-M系列MCU用户手册,有这么一段对用户代码有效性验证的描述: NXP Cortex-M系列MCU的Boot Block在芯片的控制权交给用户程序之前,要先判断用户程序是否有效,否则不运行用户程序。 中断向量表中第8个双字节(Dword7,位于0x001C)保存前7个双字节(Dword0-6)之和的二进制补码Checksum,Boot Block判断到Checksum和前7个双字节的和为0是判断用户代码有效,否则无效。
解决方法
Checksum可人为添加,也可通过软件自动添加,比如以上Jflash烧写时弹框提醒后点击“是”自动添加。 使用Keil编译程序时可通过调用用户命令添加,操作方法为: 在After Build/Rebulid Run#1添加命令 $K\ARM\BIN\ELFDWT.EXE !L BASEADDRESS(0x1A000000)
注意事项
-
建议引用相对路径 程序地址从0开始时,无需BASEADDRESS(0x1A000000),即 $K\ARM\BIN\ELFDWT.EXE !L 不推荐用一些教程使用的 $K\ARM\BIN\ELFDWT.EXE #L 因为!L引用的是.axf文件的相对路径,而#L引用的是.axf文件的绝对路径 -
绝对路径名称不能有空格 当引用绝对路径时,允许路径名称中有中文,但不允许有空格,否则用户命令执行会报错
延伸阅读
- 校验和计算方法
- ELFDWT.EXE用法
详见Keil里的Books->Complete User’s Guide Selection - 命令行中的特殊符号定义
详见Keil里的Books->Complete User’s Guide Selection
参考资料
- 校验和自动填充实现方法
- KEIL生成的bin文件如何通过代码有效性检测
- 用J_Flash Arm烧写程序时提示错误
- 解决mdk生成bin烧录lpc1343无法运行问题
|