本篇文章是《LPC技术小贴士-自动添加中断向量校验位》的番外篇。
最近在支持客户的时候遇到这样一个问题:客户在做自己的二级boot loader,并且在使用LPC54608 IAP功能,编程sector0中的page0时候总是失败(返回0x21错误码),但是编程任何其他page的时候,都没有问题(客户的代码在最后一个sector里,不编程)。
问题乍一看比较诡异,因为只有page0会出问题,对其他page的操作都是没有问题的,并且擦除page/sector也没有问题,只有编程操作会出错。
经过了一段短暂的讨论,最后把问题锁定在了LPC中断向量表的check sum校验机制上:LPC(除比较新的LPC5500系列外)基本都需要在中断向量表的第8个位置上填入前7个中断向量的校验和,关于校验和的具体内容可以参考开篇提到的文章。
在Keil编译出来的.bin文件中,默认并没有自动添加这个校验和,所以每当调用IAP变成page0的时候,IAP程序内部都会检查这个校验和,一旦校验和错误(比如全0) 就会返回失败。
解决方法也很简单,就是在每次编程page0的时候都计算下校验和即可,这里直接给出计算校验和的代码:

adr为编程地址,当adr为0时既编程page0区域,红框内的代码就是计算校验和,并且把校验和填到中断向量表的第8个位置上。
加上这段计算校验和代码后,问题迎刃而解。这个问题普遍存在于除LPC5500系列外几乎所有老的LPC型号上,希望本文章对大家开发LPC MCU有所帮助!
责任编辑:haq
-
plc
+关注
关注
5011文章
13297浏览量
463295 -
编程
+关注
关注
88文章
3615浏览量
93722
原文标题:LPC工程小贴士:IAP编程page0返回失败的问题
文章出处:【微信号:NXP_SMART_HARDWARE,微信公众号:恩智浦MCU加油站】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
Master读取tca8418时候,发送寄存器地址没有ACK是什么原因呢?
ADS1263获取ID总是失败,为什么?
cdci6214 eepromsel和refsel都置为MID的时候能否正常工作?
TLV320ADC3101可以正确设置和读写PAGE0页的数据,但是读取PAGE4页上的寄存器值都为0,为什么?
使用TLV320AIC3256时候,当音乐暂停时候,耳机可以听到“滋滋”的声音,为什么?
TLV320AIC3106配置执行完之后,读寄存器94值为0XC0,结果与理论不一致是哪里出了问题?
进行aic3106的配置时,将0x80写入page0/regster25,读出来却是0x86,为什么?
TLV320AIC3254使用SPI进行设置时,如何设置寄存器?
在imotion解决方案设计器中使用不同的参数集,为什么总是加载参数集0吗?
三菱串口 fx0N编程口如何使用?

编程sector0中的page0时候总是失败问题
评论