博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STM32 IAP
阅读量:6566 次
发布时间:2019-06-24

本文共 1041 字,大约阅读时间需要 3 分钟。

  hot3.png

折腾了几天IAP,遇到一些问题,把它记录下来方便后期参考。

IAP:In-Application-Programming 在程序中编程

即在MCU中先写入一段代码(BootLoader),再通过这段代码烧写另一段代码(应用程序APP),相对IAP有ISP

这个工作涉及到三个部分:

- Boot

- APP

- 升级工具(通常是PC软件)

Boot使用一段之前用过的代码,这样进度上比较有保障,在与升级工具的通讯协议上做了些修改直接就拿来用。

工作正式开展之前先明确几个东西:

Boot: 8K   地址从:0x0800 0000 - 0x0800 1fff

APP : FLASH中运行,地址从: 0x0800 2200 - 0x0801E000  (FLASH共128K,注:APP的起始地址必须是0x100的整数倍)

          0x0800 2000 - 0x0800 -2200用于存放APP信息,如:字节数,校验等

升级工具:MFC开发

确定以上信息后开始动手

首先完成升级工具,能与Boot通讯,接下来遇到以下问题:

- APP无法写入到FLASH

        跟踪发现数据写入到FLASH错误,往上跟踪发现原来是FLASH删除失败(FLASH在写入之前必须先删除,即FLASH中的数据必须是FF)。为什么无法删除,调试发现原来是状态参数初始化错误,修改后写入正常。

- 从IAP跳转到APP后无法运行

       查看APP,向量偏低地址设置正常(这个很关键)

                     IROM设置也正常(这个也很关键)

       以上两点正常后APP没有理由不运行,开始怀疑下载是否正常(由于当前只有个帧内校验),因此在APP写入FLASH后立即读出来查看,果真是写入时数据丢失。找原因,原来是升级工具在处理Boot返回异常出现BUG,BUG修改后APP可正常运行。

- APP虽然运行但发现串口3的数据发送异常,其他均正常

      测试发现同样代码ISP模式下运行在0x08000000地址正常但IAP模式下运行在0x08002200则异常,怀疑boot有问题

     因此boot启动后使其不做任何操作直接跳转到APP,测试发现一切正常,处理方式在跳转前进行软重起,并在备份缓冲中设置后标记,重启后可直接跳到APP,这样处理后系统正常

 

总结

采用IAP时需要关注以下几点:

- 确保数据升级的正确性

- APP向量地址

- BOOT与APP互跳时确保环境是干净的

     

转载于:https://my.oschina.net/3wcar/blog/190767

你可能感兴趣的文章
调试逆向分为动态分析技术和静态分析技术(转)
查看>>
业务对象和BAPI
查看>>
微软职位内部推荐-Senior Software Engineer
查看>>
程序中的魔鬼数字
查看>>
SVN高速新手教程
查看>>
session cookie
查看>>
$.extend({},defaults, options) --(初体验三)
查看>>
jQuery hover() 方法
查看>>
android 一步一步教你集成tinker(热修复)
查看>>
到底有多少内存
查看>>
centos7.3 安装ovirt-engine4.0 版本
查看>>
Jenkins+git+tomcat 自动化持续部署
查看>>
项目log日志打印
查看>>
Openstack的环境的Mitaka部署环境服务,实例(1)
查看>>
文档的压缩与打包
查看>>
python3 在不同操作系统安装第三方库方法
查看>>
python编写登录接口
查看>>
MySQL高可用方案之多级复制
查看>>
OVS 中的各种网络设备 - 每天5分钟玩转 OpenStack(128)
查看>>
Trafficserver Cluster模式
查看>>