[原创] LPC1500体验+(5)Usercode的Signature生成

mars4zhu   2014-9-23 13:20 楼主

LPCXpresso1549试用报告——
5UsercodeSignature生成
文档编号
AN-0001-A0
关键字
LPCXpresso1549,  LPC1549, Keil MDK, Usercode Valid, Signature,ELFDWT
摘要
本文记述了LPC15xx系列芯片的启动过程验证UsercodeSignature的方式,并介绍了在Keil中使用ELFDWT程序生成Signature的方法。同时列举了使用与不使用Signature对启动造成的影响。
Mar4zhu

目  录

插图索引

表格索引
错误!未找到目录项。


1 概述
LPC15xx系列芯片的启动过程涉及到ISP引脚状态、FlashROM/RAM0x00地址映射,用户程序代码Usercode的有效性检验等。Boot ROM对用户程序代码Usercode进行校验,确保了用户程序的有效性。防止代码被破坏或者乱码造成芯片的误动作
LPC5xx的启动顺序.png
图 11   LPC5xx的启动顺序
其中用户代码的有效性检验对开发影响较大。Keil软件开发有专用的一个工具软件生成检验的Signature
2 Usercode有效性检验原理
用户代码的有效性检验,是采用Flash区域的特定的地址(保留的中断向量表,0x0000001C)存放一个校验码,称之为Sinature,使得前面8个向量表存储的数据校验和为零,如果在flash0x0000001C这个signature校验和不为零, ROM就会认为usercode无效的(invalide),则将MCU设置USB-MSC设备,等待上位机对其进行DFU,以下是UserManual的说明。
LPC5xx的用户代码有效性检验。.png
图 21  LPC5xx的用户代码有效性检验。
3 Keil生成Signature
Keil提供了一个专门的小工具软件ElfDwt.exe,可用来专门生成NXP芯片所需的Signature并保存在编程文件对应的位置。
ElfDwT程序的设置.jpg
图 31  ElfDwT程序的设置
设置之后,可以再编译器输出栏看到改程序的运行效果。
ElfDwT程序的输出信息.png
图 32  ElfDwT程序的输出信息
则对应的编程文件可以看到该Signature。如果运行该程序,则对应的编程文件没有Signature
使用与不使用ElfDwT程序的区别.png
图 33  使用与不使用ElfDwT程序的区别
以下是ElfDwt的文档说明。
ElfDwT程序的文档说明.png
图 34  ElfDwT程序的文档说明
4 调试区别
调试过程中,如果没有生成Signature,那么在点击KeilReset,复位芯片时,则R15PC)复位后的地址在ROM区(0x0300????),进入ROM的后续程序
而如果存在Signature,则点击Reset后,MCU的复位地址R15PC)为Flash区,也即(0x0000????)。这跟Usermanual的启动流程相符
5 总结
NXPLPC15xx芯片设置了用户代码的有效性校验,提高了芯片工作稳定性。而Keil开发工具提供的软件可以方便的生成Signature。提高开发便利性。


版本历史(Revision History
版本号
发布时间
内容
A0
2013-09-23
初次发布。
LPC1500体验 (5)Usercode的Signature生成.pdf (493.62 KB)
(下载次数: 17, 2014-9-23 13:20 上传)

回复评论 (5)

学习学习~~~~~~~~~~~~~~~~~~~~~~~~~~~
点赞  2014-9-23 15:10
感谢分享。。。。。。。。。。。。。
我的博客
点赞  2014-10-15 08:07
MDK生成有校验码,但是用J FLASH打开缺没有校验码,程序运行偶尔就会失效。求解呀?
  • 111.png
  • 222.png
  • 333.jpg
点赞  2018-3-16 14:19
引用: yaojianyongcq 发表于 2018-3-16 14:19
MDK生成有校验码,但是用J FLASH打开缺没有校验码,程序运行偶尔就会失效。求解呀?

你的第一张图显示,先Creating Hex,再生成的Signature。。。。。。。

手动在命令行里输入      fromelf --i32 --output Lack_cylinder.hex Lack_cylinder.axf

具体请参考fromelf的帮助文件: \Keil_v5\ARM\Hlp\armutil.chm
点赞  2018-3-16 14:40
通过以上方法,终于实现了MDK生成校验码的可执行文件了。用J FLASH V6.1里烧写OK。
  • 444.png
  • 555.png
  • 666.png
  • 7777.png
点赞  2018-3-16 15:20
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复