说明:本文的实践是基于lpc1343;
要想在keil中直接生成bin文件一般需要加用户命令调用fromelf工具:
如下图在Options for Target 中 加上编译后的命令;
fromelf --bin ".\obj\@L.axf" --output ".\obj\@L.bin"
这样build or rebuild之后就会生成 bin 文件了;
在NXP CM0 CM3上应用存在的问题:
这样生成的bin文件却不能通过nxp的代码有效性检测;
原因如下:
在nxp CM0 或CM3 的UM 中有对有效用户代码的判断标准作出说明:
有效用户代码判定标准:
保留的 Cortex-M3 微控制器异常向量单元 7(在向量表中的偏移量为 0x0000 001C)应当包含表入口 0~6 的校验和的 2 的补码。这样就使前 8 个表入口的校验和为0。引导装载程序代码校验 Flash 扇区 0 中的前8 个单元。如果结果为 0,执行控制权便转移给用户代码。 如果符号无效,那么自动波特率程序通过串口(UART)与主机进行同步,或从 USB 端口启动(PIO0_3 管脚的采样为高电平)。
查看用keil直接生成的bin文件(推荐用ULtraEdit查看),发现其地址0x1c处并不是对前面6个向量的校验和的2的补码;
用lpc1343的usb isp(u 盘方式)把bin文件烧入进去,复位启动后,其bootloader会对其有效性进行检查,此时发现其代码无效而不会允许已经更新的用户程序;如果条件允许则会自动usb端启动或者通过uart与主机通信;
但是用Flashmagic等工具下载的代码则不会出现该问题,因为FlashMagic软件会自动计算0x1C处开始的四字节的内容,修改后写入。
解决方法
MDK410已经解决了这个问题。描述如下:
[Checksum Utility]
Added: ELFDWT utility creates boot checksum for NXP LPC11xx, LPC13xx, and LPC17xx device series. Usage is:
C:/Keil/ARM/BIN/ELFDWT elf_file.AXF
利用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"
如下图:
这样问题就得到了解决;直接把生成的bin文件拷贝的lpc1343的u盘中,程序就得以了更新;
用户377235 2014-4-16 17:01
用户377235 2013-5-29 17:21