热度 16
2011-11-1 10:50
6479 次阅读|
2 个评论
说明: 本文的实践是基于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已经解决了这个问题。描述如下: 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盘中,程序就得以了更新;