最近在支持客户的时候遇到这样一个问题:客户在做自己的二级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有所帮助!
编辑:jq
-
LPC
+关注
关注
8文章
137浏览量
79081 -
IAP
+关注
关注
2文章
165浏览量
25804 -
代码
+关注
关注
30文章
4941浏览量
73150 -
编译
+关注
关注
0文章
688浏览量
34945
发布评论请先 登录
把qspi0配置成了普通的fifo模式,读什么都返回0xff,这是怎么回事?
LMK61E0M可编程振荡器技术文档总结
AT32 MCU如何使用IAP
AT32 IAP using the USART
rtt only系统下程序运行失败: [FATAL ERROR] Exception 13:Load Page Fault,怎么解决?
请问CY68013上位机发送的返回值到底代表什么意思?
FX3 RAM编程因定制板而失败怎么解决?
I2C EEPROM编程失败的原因?
点焊型应变计焊接失败怎么办?5步排查法+3个防护技巧
使用mbedtls进行ECDSA签名验证失败的原因?
使用STM32L476RCT6 HAL_FLASHEx_Erase()函数,擦除失败的原因?
2024年AI编程技术与工具发展总结

IAP编程page0返回失败的问题总结
评论