1、聊一聊

每当你疲惫的时候听一下这首歌曲,或许会重新振奋,其实我们每个人都是"一名soldier"。

2、正文部分

1

前言

IAP升级功能对于一款以MCU为核心的成熟嵌入式产品算是标配吧,采用烧录接口通过烧录盒进行固件写入算是最方便的办法,而且还具备调试功能确实省心,完全不用太担心变“砖头”。

但是如果你的产品位于山顶,水底,国外等等,又或者在一个非常难拆的盒子里面,你还会选择插入烧录盒写入吗?想想都觉得头皮发麻,那么一个安全稳定的IAP在线升级功能就变得尤为重要了。

bug菌很久以前也有写过一些IAP的文章,大家可以在号内搜索,其中这篇是值得一看的 :

☞【重磅】剖析MCU的IAP升级软件设计(设计思路篇)

今天主要是跟大家分享一种灵活且省资源的IAP处理方案。

2

双boot方案的缺点

下图是前面链接文章IAP_V3.0的结构体示意图:

从图中可以看到该方案中瓜分出两部分Flash分别用于boot1和boot2,内部Flash对于MCU是非常宝贵的资源,在MCU内部指令预取等的优化下,程序在Flash上运行程序效率是较高的,所以boot占据太大的Flash确实有点浪费。

同时一旦我们的程序由boot跳转到APP,这就意味着boot的生命周期暂时结束,那么boot所占据的Flash也就没办法得到利用了,所以我们采用一种更为优化的方案来进行IAP升级。

3

灵活且省资源的IAP

其实对于资源的节省无非就是时间换空间、空间慌时间等等之类的,而在整个过程中,boot使用的RAM与APP使用的RAM是分时复用的,一般RAM的大小相对FLash偏小,所以直接加载APP不是特别合适,但是加载boot却是绰绰有余,于是就有了如下设计:

解析一下:

  • 1 ) 该方案通过外部加载相对较复杂的boot2到RAM中运行,从而可以大大节省Flash,那么boot1的功能相对就比较简单,当APP完整且不需要进行升级的时候,直接从boot1跳转到APP执行即可。

  • 2 ) 而当需要进行App更新,那么就需要从外界加载boot2升级控件包,boot1加载boot2的方式有多种,可以通过简单的通信协议接收数据然后写入到RAM,或者是通过驱动外部存储获得boot2.bin加载到RAM,最后在RAM中直接运行boot2。

  • 3 ) boot2相对boot1更加复杂,其可以支持多种协议、多种方式升级和处理, boot2通过更加复杂的协议甚至加密、解密后得到App数据,然后进行Flash的擦写,完成以后跳转执行新的App程序,当跳转到App其RAM重新复位且接管整个RAM,boot2消失,运行App程序。

  • 4)所以这里通过每次升级加载boot2,利用时间换空间充分利用程序在RAM中运行来更加灵活的升级应用程序。

3、结束语

这里bug菌就把今天的IAP升级方案介绍完了,做开发其实主要是思路清晰,相关的技术细节都可以通过各种途径获取到。

好了,这里是公众号:“最后一个bug”,一个为大家打造的技术知识提升基地,您的"点赞""转发"都是对我最大的支持。

推荐好文  点击蓝色字体即可跳转

☞【开源】bug菌把"动态数字显示"开源了!

☞【MCU】可怕,别人把我MCU固件给反汇编了!(逆向)

☞ 【bug菌的文章】你还错过了哪些?

☞ 【C进阶】"最常见"却又"最不常用"的三个预编译

【MCU】一种灵活且省资源的IAP升级方案相关推荐

  1. 一种灵活可靠的工作方式:组件化设计与开发

    一种灵活可靠的工作方式:组件化设计与开发 2017/03/20阅读 6.9k 评论 3收藏 174 零基础学产品,BAT产品总监带,2天线下集训+1年在线课程,全面掌握优秀产品经理必备技能.了解详情 ...

  2. 痞子衡嵌入式:RT-MFB - 一种灵活的i.MXRT下多串行NOR Flash型号选择的量产方案

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是一种灵活的i.MXRT下多串行NOR Flash型号选择的量产方案. 对于以 i.MXRT 这类没有内部 NVM (Non-Volati ...

  3. 一种灵活,坚固且无凝胶的脑电图电极,可用于无创脑机接口

    点击上面"脑机接口社区"关注我们 更多技术干货第一时间送达 脑机接口(BCI)能够在大脑和电子设备之间实现直接和近乎即时的通信.目前最大的挑战之一是开发一种有效的无创BCI,它能使 ...

  4. 什么是Nib文件?(Nib文件是一种特殊类型的资源文件,它用于保存iPhone OS或Mac OS X应用程序的用户接口)...

    Nib文件是一种特殊类型的资源文件,它用于保存iPhone OS或Mac OS X应用程序的用户接口.Nib文件是Interface Builder文档.通常您会使用Interface Builder ...

  5. Android之Android Studio三种方式导入外部资源 以及 报错处理

    Android Studio三种方式导入外部资源 以及 报错处理 android studio提供了三种方式导入外部资源: 1. Library dependency – 在线添加.需联网下载 . 2 ...

  6. 【5种灵活有效方式】如何从死机手机中恢复内部数据?

    我的手机掉在地上,现在无法开机.我丢失了所有联系人.图片和重要文件.无奈之下,我需要恢复数据.但是如何从死机中恢复内部数据呢? 我们使用移动设备的最重要原因之一是打电话和发送消息.但有时,我们使用相同 ...

  7. Notion Like 笔记软件使用教程·学习资源汇总·知识管理方案

    Notion Like 笔记软件使用教程·学习资源汇总·知识管理方案:深度评测.辅助工具.信息管理.时间管理.任务管理.思维管理.项目管理.文件管理.笔记方法.记忆方法.写作方法 关于 Notion ...

  8. 剖析MCU的IAP升级软件设计思路

    关注.星标公众号,不错过精彩内容 转自公号:最后一个bug 二次整理:strongerHuang 做软件开发的人,都知道程序升级.升级的方式有很多,今天就来讲讲升级的软件的设计思路. 一.ISP/IC ...

  9. arm板telnetd为什么运行不了_一种基于ARM的嵌入式系统开发的方案详细讲解

    背景介绍 在日益信息化的社会中,各种各样的嵌入式系统已经全面渗透到日常生活的每一个角落.嵌入式系统的功能越来越复杂,这就使得一个嵌入式系统产品从市场需求立项到方案选择.样机研制.定型量产所需要的开发费 ...

  10. 一种基于区块链的数字身份认证方案

    一种基于区块链的数字身份认证方案 0 摘要 1 概要介绍 1.1 企业化 1.2 联盟式 1.3 用户中心化 1.4 本文创新点 2 方案基础知识介绍 2.1 密码学工具与算法 2.1.1 随机数 2 ...

最新文章

  1. (C++)输入3个字符串,按从小到大的顺序输出。
  2. 学好机器学习必备这12条经验 !(附资料)
  3. Just for fun——写个爬虫抓取whois信息
  4. 【mysql】mysql的数据库主从(一主一从)
  5. [SQL] SQL 基础知识梳理(三) - 聚合和排序
  6. 金蝶凭证序时簿在哪_来了!金蝶日常账务处理大全
  7. rust tpa_Rust(腐蚀)怎么tp求大神指教。请写在下面
  8. 如何用vc6编译ffmpeg, 并单步调试。
  9. C语言,后门程序,C语言CGI编程二 - 编写cmd后门
  10. 新版python安装包(直接提取安装)
  11. SpringCloud项目:实现推送消息到RabbitMQ消息中间件
  12. error) DENIED Redis is running in protected mode because protected mode is enabled报错
  13. cent7中kickstart
  14. springboot+宿舍管理小程序 毕业设计-附源码171008
  15. 网络抓包工具Wireshark下载安装使用详细教程
  16. 如何成为一名数据科学家?
  17. 计算机cpu最高温度,详解电脑cpu温度过高几种常用处理方法
  18. SNMP学习笔记之SNMP 原理与实战详解
  19. 普通人如何在5年内赚到1000万
  20. CocoaMQTT v2.0:首个支持 MQTT 5.0 的 iOS 客户端

热门文章

  1. hpsocket java代码_java版本调用HP-Socket服务端代码
  2. Flex实现栅格布局
  3. 最常用的数据分析方法
  4. dpi和css,DPI和像素、厘米、英寸之间的关系和换算及CSS中的长度单位
  5. java基于ssm三大框架的小区物业收费报修管理系统
  6. 毕业设计3-BME280温湿度大气压传感器调试记录(STM32F103C8T6 + STM32CubeMX + BME280)
  7. 共享单车数据集_共享单车数据的数据可视化
  8. 本地计算机的硬件基本配置信息,Windows7系统如何查看硬件的基本配置
  9. android webview capturepicture,Android WebView 调用系统拍照和相册
  10. jenkins下载安装及环境搭建