arm芯片,远程空中升级程序技术

背景

产品上线之后,若程序存在bug或者需要增加新功能模块,在现场升级维护特别困难,需要维护人员取出控制板,来升级程序。为了方便维护人员在现场升级产品,我们做这个升级产品。不用拆装设备,实现远程升级产品。

需求分析

所谓远程空中升级,就是利用无线网络给指定MCU更新程序。在这里的无线设备我使用的是蓝牙(CC2541芯片或者CC2542芯片),使用的MCU是arm核的一款芯片。升级工具的终端设备是手机。当然了,手机中装了专门升级的apk。

系统介绍

将keil或者iar软件生产的hex文件,加载到手机的apk软件,apk通过手机蓝牙发生给中转器蓝牙设备,蓝牙设备接受到手机发生过来的数据,通过usb、spi、iic或者uart中的某个接口再将数据发送给mcu芯片,mcu芯片接受到数据后,将数据依次烧写到flash指定的位置,待到hex文件全部烧写到mcu芯片后,重启mcu芯片,下次上电,若满足一定的条件,则运行新的程序,这就完成了整个空中升级的过程。

手机(升级APK)

这个升级apk实现的主要功能很简单,就是将编译生成的hex文件,分成几百个小块数据包,然后将这些小块数据包封装成规定的帧格式,发送给中转器蓝牙设备。

当然了,在产品中,升级apk还包括一些和产品相关的功能,比如不允许每个客户随便升级产品,必须有权限才能升级,就算允许客户升级产品,外界环境也必须是安全才能升级,这就涉及到安全模式,普通模式切换等等。作为学习的demo,不需要了解这么多。了解主要功能就行了。

中转器(蓝牙)

中转器的主要功能就更简单了,就是透传数据,它就是一个中介的角色。它负责将手机上的数据,发送给MCU芯片。

实际中,这个中转器,配有电池,不使用的情况下,保持低功耗,耗电很少,要使用的时候,通过按键去唤醒低功耗,操作结束后,又会进入低功耗。所以,这个中转器也是一个低功耗的可穿戴设备。哈哈。

MCU(ARM芯片)

升级过程中,MCU实现的功能也很简单,就是将接收到的升级数据,烧写进指定的flash里面,然后重启,校验刚烧写进去程序的正确性,如果正确则运行新程序。

虽然mcu升级的过程简单,但是明白MCU升级的原理,就不是很容易了。

在这里我将详细的对这个过程进行说明,会解答一些困惑。

一般情况下,我们更新程序,都是通过jtag接口或者SWD接口在线烧写程序,这个烧写程序的过程,就是将keil或者iar软件编译生成的hex文件烧写进flash指定的位置。所以swd烧写工具里面,一般带有先擦除flash,再写flash的操作。更新程序的原理,大家要懂的。

(说个题外话,有些人会通过jtag接口,读取flash里面的数据,从而获取你的程序代码,你的东西轻而易举的就被别人复制了,所以一些加密芯片没有jtag接口。防止窃取。而且加密芯片里面flash数据是加密的,就算你读取了,也是乱码。这里推荐北京同方公司的加密芯片)

明白了,更新程序原理之后,现在讲如何升级。

大家要知道实现升级程序的功能,MCU芯片必须有两套程序,比如运行程序A的时候,可以通过烧写flash更新程序B,同理,运行程序B的时候,可以通过烧写flash更新程序A,是不是有些人会疑问,为什么不能运行程序A的时候,就更新程序A,这当然是不行的,芯片正在运行程序A,你却重写了程序A区域对应的flash数据,这就会使程序跑飞的。其实对于我们来说,没有必要用两套一模一样的用户代码程序,这会增加flash占用空间的,我们只需要一套用户代码程序,另一套是简单的操作flash的程序代码就行(行业中叫bootloader)。升级过程中会涉及到两套程序进行切换。

MCU芯片一上电,就是从首地址开始运行的,所以首地址存的是异常中断向量表,运行了向量表,向量表里面存的是程序执行的地址,运行了相应的向量表,就会运行相应的程序代码。

下面的就是设计的升级过程,

如图1的初始态,flash首页地址存的是uart bootloader的向量表,flash地址区[0x0003 8000 - 0x0003 D000]存的是uart bootloader的代码,所以一上电,就运行的是uartbootloader的程序。flash地址区[0x0000 0200 - 0x0000 0400]存的是用户cos的向量表,flash地址区[0x0000 0400 - 0x0001 0000]存的是用户cos的代码,当运行uart bootloader程序的时候,如满足一定条件,则会跳转到用户cos区域运行。相对于要升级的用户新cos,初始态的用户cos是Old User cos, 将要更新的cos是New User cos。

下面详细介绍一下升级时候,各个状态。

1.       初始态:出厂后的设备中,芯片运行着用户程序,flash首页[0x0000 0000 - 0x0000 0200]的向量表指向old user ‘ s cos区。这是出厂态。芯片出厂的时候,UARTbootloder已经烧写在fash地址区[0x0003 8000 - 0x0003 D000]。

芯片一上电,根据首地址的向量表指向,运行uartbootloader程序,如箭头1。若        满足条件,uartbootloader程序重新映射启动向量表,如箭头2。更改后的向量表        指向新的程序区域,运行新程序,如箭头3。

2.       下载态:要烧写新的用户程序(new user ‘s cos)就得先处于下载态,下载态的时候,芯片运行uartbootloader程序。芯片一上电就处于下载态,如果900ms内,接受到升级请求,就能升级芯片。如果芯片运行用户程序,先通过升级命令重启thk88,使其在下载态。当MCU芯片被复位后,MCU芯片就运行UART bootloader程序。因为UART bootloader程序的功能是通过串口接口,操作flash擦除 and 读写。所以通过串口接口,按照规定的协议发送新cos的代码部分给MCU芯片的flash区,更新数据。

3.       用户态:当用户cos的代码部分下载结束后,将最后更新0x0000 0400地址处的向量表,当MCU芯片被复位后,满足一定条件后,MCU芯片将从flash中的新程序(new user ‘s cos)运行,芯片运行在用户态。

状态图

升级还涉及到了稳定通信,安全模式and代码续传问题。比如像这些敏感的操作必须在安全模式下进行。还有升级升到一半的话,断电了,下次上电,准备继续升级,又如何操作。下一篇博客再讲。

arm芯片,远程空中升级程序技术方案相关推荐

  1. 乐鑫esp8266学习rtos3.0笔记第6篇:esp8266-12模块基于rtos3.1版本ota功能远程空中升级固件,官网之上增加dns域名解析!(附带demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. Esp8266之 搭建开发环境,开始一个"hello ...

  2. 无线远程模块的应用,手机APP远程监控PLC数据技术方案

    无线远程模块的应用,手机APP远程监控PLC数据技术方案 (巨控何工_原创) 无线远程模块用途:广泛,遍及智能交通.环境保护.政府工作.公共安全.智能消防.工业监测.环境监测.路灯照明管控.景观照明管 ...

  3. 中小学、幼儿园远程视频监控系统技术方案

    中小学.幼儿园远程视频监控系统技术方案 行业背景 近年来,随着我国教育事业的发展.高校扩招以及中小学合并等趋势,学校规模的扩张伴随着安全防范需求增大,科技的发展也推动着教学手段的更新,除了视频监控防范 ...

  4. H5与小程序技术方案比较

    记录下H5与小程序技术方案的主要差异 H5 小程序 运行环境 浏览器/webview 三种环境: IOS(JSCore+WKWebView) 安卓(JSCore+Chrome57/V8+Chrome6 ...

  5. 关于ARM芯片中内存架构的疑惑记录

    前言 最开始我疑惑的点是很混乱的,有的ARM芯片在跑裸机程序时候是不需要外置内存的,但是在跑LINUX系统时候,所用的开发板是需要外置RAM与ROM的.这是为什么呢,下面记录下对这个问题的梳理,同时也 ...

  6. 滴滴青桔单车跨端技术方案和业务技术架构,及框架设计和性能提升实践

    导读:经过将近两年的发展,小程序已经深入用户的日常生活,小程序应用数量超过了百万量级,覆盖众多细分行业,日活用户达到两个亿.青桔单车是日活相对较高的小程序,这也要求我们对小程序的性能.稳定性及安全有较 ...

  7. 01-STM32+Air724UG远程升级篇OTA(自建物联网平台)-STM32如何实现的升级程序

    说明 这节提供给用户一份实现更新STM32的程序(兼容STM32f103全系列) 主要说明STM32是如何实现的升级程序.后面的章节都是在这节的基础上进行优化. 该节源码开源: https://git ...

  8. 01-STM32+BC26丨260Y远程升级篇(自建物联网平台)-基础知识-STM32如何实现的升级程序

    说明 这节提供给用户一份实现更新STM32的程序(兼容STM32f103全系列) 主要说明STM32是如何实现的升级程序.后面的章节都是在这节的基础上进行优化. 该节源码开源: https://git ...

  9. 解读最佳实践:倚天 710 ARM 芯片的 Python+AI 算力优化 | 龙蜥技术

    编者按:在刚刚结束的 PyCon China 2022 大会上,龙蜥社区开发者朱宏林分享了主题为<ARM 芯片的 Python+AI 算力优化>的技术演讲.本次演讲,作者将向大家介绍他们在 ...

最新文章

  1. C#面向集合的扩展(讨论)
  2. 腾讯技术直播间 | 轻量产品思维!手把手教你搭建在线甲醛监测系统
  3. SAP Spartacus Organization Unit List三个按钮的技术实现
  4. Java线程:创建与启动
  5. subclipse用法
  6. java生成world文件_HelloWorld.java文件如何创建?
  7. @Transactional事务生效条件与样例
  8. linux fcntl 设置阻塞,Linux fcntl函数设置阻塞与非阻塞
  9. 基金投资需要注意什么?
  10. 力扣--189旋转数组(中等)
  11. 写博客一年多的一些感想
  12. 能测电机温度和振动在线测量工具——温振变送器
  13. 超详细的四类数据库去重实现方案汇总(转载)
  14. 微博如何快速批量取消关注脚本教程
  15. 编码解码 Base64 Base32 Base16
  16. 图基(Tukey)检验
  17. 前端偶数行有底纹怎么写_如何在Excel中的替代行上应用底纹
  18. CAD 坐标转经纬度(Arcgis)
  19. kali Linux 2020.1B 最详细安装教程
  20. 第八部份:Bless安装

热门文章

  1. 云计算平台 python_云计算开发 python
  2. 机器学习: Metric Learning (度量学习)
  3. iOS 15Beta5版本更新变化,这些细节你发现了吗?
  4. CF1631F. Flipping Range dp **
  5. wait()、notify()、notifyAll()使用详解
  6. ERROR 1062 (23000): ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '1'
  7. Leetcode_206_Reverse Linked List
  8. FPGA进行数字信号处理通过DAC转化为波形的初步理解
  9. Perl脚本语言(一)
  10. 作为一名视觉工程师该怎么学习?