0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

恩智浦MCU加油站 来源:恩智浦MCU加油站 作者:恩智浦MCU加油站 2021-10-20 10:59 次阅读

最近在支持客户的时候遇到这样一个问题:客户在做自己的二级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的时候都计算下校验和即可,这里直接给出计算校验和的代码:

213df384-30e7-11ec-82a8-dac502259ad0.png

adr为编程地址,当adr为0时既编程page0区域,红框内的代码就是计算校验和,并且把校验和填到中断向量表的第8个位置上。

加上这段计算校验和代码后,问题迎刃而解。这个问题普遍存在于除LPC5500系列外几乎所有老的LPC型号上,希望本文章对大家开发LPC MCU有所帮助!

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • LPC
    LPC
    +关注

    关注

    8

    文章

    136

    浏览量

    77601
  • IAP
    IAP
    +关注

    关注

    2

    文章

    163

    浏览量

    24246
  • 代码
    +关注

    关注

    30

    文章

    4742

    浏览量

    68333
  • 编译
    +关注

    关注

    0

    文章

    653

    浏览量

    32803
收藏 人收藏

    评论

    相关推荐

    STM32G0B1VC IAP时flash擦除函数进不去是怎么回事?

    您好,我在使用STM32G0B1VC做IAP功能时遇到一个很奇怪的现象,我为Bootloader分配了0x08000000~0x0800FFFF共64KB的大小,为出厂程序分配
    发表于 11-15 08:06

    cdci6214 eepromsel和refsel都置为MID的时候能否正常工作?

    配置写入寄存器,然后copy到eeprom page0了,第二次上电不是应该自动直接从eeprom page0里面读出数据,然后产生波形吗? 我想知道我们这个流程是正确的吗?
    发表于 11-11 06:39

    TLV320ADC3101可以正确设置和读写PAGE0页的数据,但是读取PAGE4页上的寄存器值都为0,为什么?

    如题,通过csl库提供的程序,可以正确设置和读写PAGE0页的数据,但是读取PAGE4页上的寄存器值都为0,很奇怪,数据手册好像也没有说读取PAGE4与读取其他页面上的寄存器有什么不
    发表于 10-30 08:02

    进行aic3106的配置时,将0x80写入page0/regster25,读出来却是0x86,为什么?

    我在进行aic3106的配置时,将0x80写入page0/regster25,读出来却是0x86,该寄存器的低4位为保留值,请问是否会影响我mic输入的声音?
    发表于 10-15 06:49

    TLV320AIC3254使用SPI进行设置时,如何设置寄存器?

    3254寄存器有两页,PAGE0PAGE1,地址为0x00和0x01,问:使用SPI该如何设置寄存器?
    发表于 10-12 07:19

    TLV320AIC3104-Q1如何设置dac的低通滤波器把高频分量去掉?

    写入page1 de-emphasis N0、N1、D1,再写page0 对codec进行配置好后写寄存器12把de-emphasis enable,但是还是无法去掉高频分量,尝试过先写pag
    发表于 09-29 06:53

    ESP8266配网失败如何返回消息给APP?

    连接将消息发送给APP,但是事实发现,如果8266没有连上AP,则根本收不到UDP广播消息,这就是一个死循环 总结下我的问题,8266可以把配网失败的原因返回给APP吗?
    发表于 07-11 07:53

    USB读写时,调用WriteFile或者ReadFile时总是返回失败,为什么?

    USB读写时,能通过CreateFile获取句柄,调用WriteFile或者ReadFile时总是返回失败,错误码是997,下面是写入HID的代码 if(m_hUsb
    发表于 05-14 06:25

    做usb dfu进行iap升级,固件下载完成后,校验不过,very失败的原因?

    最近在做usb dfu进行iap升级,固件下载完成后,校验不过,very失败,有人遇到过吗??? 比如在0x08020240位置,提示: File byte is 0x5c Re
    发表于 04-24 07:35

    IAP跳转APP开始可以,如果从APP跳回IAP后再跳到APP失败的原因?

    IAP 跳转APP 开始可以,但如果从APP跳回IAP后,再跳到APP失败。 我是按照 下面ST官方文档来的: AN4657 Application note STM32
    发表于 04-23 07:24

    stm32g473 flash擦除失败的原因?

    在跑ucosii的时候进行OTA升级擦除失败,关掉系统调度可以擦除成功。单独建立一个裸机工程,跑page擦除程序,Jlink单步调试概率性出现擦除失败,上电一直跑可以擦除成功。这是芯片的限制么,还是
    发表于 03-26 08:11

    STM32F0 IAP跳转到APP后无法进入中断怎么解决?

    1、IAP跳转到APP 后,Tim中断初始化失败。 2、去掉Tim中断初始化,仅初始化I2C,也无法进入I2C中断 void InterruptRemap(void){uint8_ti
    发表于 03-14 07:54

    关于stm32F4 IAP跳转的疑问求解

    我在做一个IAP, 发现在跳转的时候栈顶指针的值会随着程序的Ram的使用量变化而变化, 多的时候0x20020000多,少的时候0x20010000多.这样就导致完全没法判断了呀, 万一程序一升级
    发表于 03-14 06:46

    GD32 MCU ISP失败的原因

    玩过GD32的小伙伴们都知道,GD32 MCU支持ISP,即在系统编程,前面的常见问题也给大家讲过什么是ISP,什么是IAP?那有没有小伙伴遇到过ISP失败的情况,失败的原因是什么呢?
    的头像 发表于 02-28 09:23 1383次阅读
    GD32 MCU ISP<b class='flag-5'>失败</b>的原因

    单片机编程实例总结

    单片机编程实例总结
    的头像 发表于 01-16 09:17 983次阅读