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

    浏览量

    79081
  • IAP
    IAP
    +关注

    关注

    2

    文章

    165

    浏览量

    25804
  • 代码
    +关注

    关注

    30

    文章

    4941

    浏览量

    73150
  • 编译
    +关注

    关注

    0

    文章

    688

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    把qspi0配置成了普通的fifo模式,读什么都返回0xff,这是怎么回事?

    我把qspi0配置成了普通的fifo模式,不是xip模式,但是现在读什么都返回0xff,读id也返回0xff,也不是没有数据,RXDATA寄
    发表于 11-06 06:57

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

    LMK61E0 系列超低抖动 PLLatinum^TM的^可编程振荡器使用带有集成VCO的小数N频率合成器来生成常用的参考时钟。该LMK61E0M支持3.3V LVCMOS输出。该器件具有从片内
    的头像 发表于 09-13 09:46 1051次阅读
    ‌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

    点焊型应变计焊接失败怎么办?5步排查法+3个防护技巧

    ?如何快速修复?南京峟思工程师结合多年的经验,为大家总结5步故障排查法和3个防护技巧,助您从“焊接小白”变身“焊点专家”。一、焊接失败的5大常见原因焊接能量不匹配能量过
    的头像 发表于 04-17 15:19 509次阅读
    点焊型应变计焊接<b class='flag-5'>失败</b>怎么办?5步排查法+3个防护技巧

    使用mbedtls进行ECDSA签名验证失败的原因?

    ); if(ret != 0) { PRINTF(“公钥验证失败rn”); 转到 cleanup_mpi; } mbedtls_mpi r, s; mbedtls_mpi_init(&r
    发表于 04-14 06:57

    使用STM32L476RCT6 HAL_FLASHEx_Erase()函数,擦除失败的原因?

    HAL_FLASHEx_Erase(),返回 0 = 擦除成功,但是擦除后返回去读,却发现并没有真正的被擦掉,不是0xFF。 下面是我的代码,各位大侠指点一下,非常感谢! voi
    发表于 03-10 06:14

    2024年AI编程技术与工具发展总结

    数据进行多方位的总结和梳理。 在第二章《TOP 101-2024 大模型观点》中,同济大学特聘教授、CCF 杰出会员 朱少民 对 2024 年 AI 编程技术与工具发展进行了总结。 全文如下
    的头像 发表于 02-13 09:11 1479次阅读
    2024年AI<b class='flag-5'>编程</b>技术与工具发展<b class='flag-5'>总结</b>

    移植vi-&gt;venc时提示VA and PA must be page aligned. va=0x70000000, pa=0x10823300,是什么问题?

    移植vi-&gt;venc时出现以下提示 VA and PA must be page aligned. va=0x70000000, pa=0x10823300 编译时正常的,在
    发表于 02-08 07:18

    如何把两个数据返回给调用函数

    函数的处理结果包含两个数据,如何把两个数据返回给调用函数? 第一种,把两个数据封装成一个结构体,函数返回结构体。 调用函数的地方同样用结构体去接收函数的返回值。 第二种,把返回值保存在
    的头像 发表于 01-08 10:15 678次阅读