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

    文章

    137

    浏览量

    79371
  • IAP
    IAP
    +关注

    关注

    2

    文章

    169

    浏览量

    26171
  • 代码
    +关注

    关注

    30

    文章

    4975

    浏览量

    74349
  • 编译
    +关注

    关注

    0

    文章

    696

    浏览量

    35271
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于纳芯微实时控制MCU NS800RT5039的IAP固件升级指南(2)

    。本篇将聚焦实操落地,以 MDK 开发环境为依托,展示如何基于 NS800RT5039, 从 0 开发一个简单的 IAP 项目。
    的头像 发表于 02-06 09:18 9962次阅读
    基于纳芯微实时控制MCU NS800RT5039的<b class='flag-5'>IAP</b>固件升级指南(2)

    在CW32F030的IAP应用介绍

    IAP 是 In Application Programing 的首字母缩写,在应用编程,即在程序运行的过程中进行编程(升级程序, 更新固件)。 IAP 是用户自己的程序在运行过程中对
    发表于 01-22 07:20

    如何用好 C 语言函数的返回值?

    的重点,本文更关心的是,该以何值表示“成功”,何值表示“失败”。 按照C语言语法, 0 表示假,非零(常常用 1)表示真,那是否函数也用 0 返回值表示“
    发表于 12-25 07:17

    CAN被动错误恢复后为什么rt_device_write还会返回异常呢?

    1、系统启动,给CAN总线发送数据,总线设备通讯正常 2、制造总线错误,当总线设备错误帧达到128之后,总线进入被动错误,总线数据发送失败,rt_device_write函数返回0 3、恢复总线设备,CAN总线错误帧降低到
    发表于 12-22 16:29

    AS32A601型MCU芯片如何进行IAP升级?

    一、什么是IAPIAP(In Application Programming,在应用编程)是一种技术,旨在实现用户应用程序的动态更新,而无需使用专门的编程工具或硬件。
    的头像 发表于 12-19 11:39 2146次阅读
    AS32A601型MCU芯片如何进行<b class='flag-5'>IAP</b>升级?

    检查函数返回值的错误和异常处理方法

    检查函数返回值:这是最常见也最基本的错误处理和异常处理方法,就是在调用一个函数后,检查其返回值是否符合预期或是否表示出错或失败。如果出错或失败,则根据
    发表于 12-11 06:48

    如何在CW32F030上实现IAP功能实现远程升级?

    IAP 是 In Application Programing 的首字母缩写,在应用编程,即在程序运行的过程中进行编程(升级程序,更新固件)。IAP 是用户自己的程序在运行过程中对 F
    发表于 12-11 06:15

    ‌LMK61E0M可编程振荡器技术文档总结

    LMK61E0 系列超低抖动 PLLatinum^TM的^可编程振荡器使用带有集成VCO的小数N频率合成器来生成常用的参考时钟。该LMK61E0M支持3.3V LVCMOS输出。该器件具有从片内
    的头像 发表于 09-13 09:46 1380次阅读
    ‌LMK61E<b class='flag-5'>0</b>M可<b class='flag-5'>编程</b>振荡器技术文档<b class='flag-5'>总结</b>

    请问什么是ISP、ICP 和 IAP

    什么是 ISP、ICP 和 IAP
    发表于 08-19 06:52

    AT32 MCU如何使用IAP

    AT32 MCU使用IAP的方法涉及在微控制器上创建特定固件,以实现在应用编程(In-Application Programming,简称IAP)功能,主要通过USART通信接口进行固件更新操作
    发表于 08-08 17:13

    AT32 IAP using the USART

    对于AT32 MCU,除了出厂固化的bootloader,用户也可以在应用程序中编写自己的bootloader程序,用于最终产品的固件更新。此功能称为应用程序内编程IAP)。 本应用笔记的目的
    发表于 07-11 10:51

    rtt only系统下程序运行失败: [FATAL ERROR] Exception 13:Load Page Fault,怎么解决?

    Executable-only Pagesatp = 0x80000000000047d2Current Page Table(Physical) = 0x00000000047d2000Current ASID
    发表于 06-20 07:30

    请问CY68013上位机发送的返回值到底代表什么意思?

    ,为0时代表发送失败,刚开始一直没问题,FPGA端接收也正常,上位机返回值也是1, 最后返回值一直是0,所以我一直认为发送
    发表于 05-22 07:16

    FX3 RAM编程因定制板而失败怎么解决?

    USBBulkSourceSink.img 写入 RAM 时,控制中心显示编程失败。 ・我已确认该图像在评估板上成功。 ・我已将 PMODE[2:0] 设置为 z11。 ・我确认时钟是26MHz。 ・确认电源正常。 请查看以下
    发表于 05-15 08:22

    I2C EEPROM编程失败的原因?

    我尝试使用 Cy Control Center 实用程序将固件下载到我的 EVM 中, 第一天,我尝试了很多次,但都失败了,比如下面的错误, I2C EEPROM 编程失败。 我搜索了英飞凌社区
    发表于 05-06 07:25