基于IAP的远程升级设计
- 格式:pdf
- 大小:254.35 KB
- 文档页数:21
微功率无线系统远程升级方案微功率无线系统远程升级方案微功率无线系统远程升级方案1.说明微功率无线系统因为各种原因,如修正程序BUG、增加新功能、改进路由算法、适应新功能等,可能需要对现场正在使用的集中器本地通信模块或从节点模块(采集器和电表模块)进行软件升级。
为便于实施,升级以远程方式为主。
2.适用范围本方案适用于锐拔科技采用STM32F103RC为主控MCU的各型集中器本地通信模块。
暂时只考虑集中器本地通信模块远程升级的实施细节,微功率无线系统中其它模块或芯片的升级只提供协议支持和升级程序文件在集中器本地通信模块中的暂存。
3.程序总体流程为了实现远程升级,集中器本地通信模块主控芯片内部一般存在2个相对独立的程序,一个是应用程序,另一个是IAP(In_Application Program)程序。
这2个程序都应该是可以升级的。
对应用程序的升级可分为两个部分:一部分在应用程序中,用于接收并保存升级数据,升级数据接收完整并校验正确后,设置IAP程序的启动标识。
另一部分是IAP程序,用于更新应用程序。
对IAP程序的升级可以全部在应用程序中完成,包括接收、保存、校验升级数据和更新IAP程序。
应用程序部分IAP程序部分开始接收到程序文件首段保存程序文件标识、版本等信息继续接收并保存程序文件N程序文件接收完整Y程序文件校验正确Y设置IAP启动标识系统软件复位,执行IAP程序IAP启动标识有效Y程序文件校验正确YNN 升级应用程序N N 应用程序校验正确Y清除IAP启动标识跳转执行应用程序结束图1集中器本地通信模块应用程序远程升级流程图2集中器本地通信模块IAP程序远程升级流程4.升级文件的传输协议4.1.主站与旧版国网集中器之间(使用Q/GDW376.1-2009协议)可利用Q/GDW376.1-2009协议的数据转发AFN=10H的F1透明转发来分段下传升级文件,此时终端通信端口号设置为31,透明转发的内容不能是DL/T645格式。
专利名称:一种基于IAP在线升级待升级固件传输校验设计方法
专利类型:发明专利
发明人:姜智,陈华辉
申请号:CN201711403674.6
申请日:20171222
公开号:CN108255510A
公开日:
20180706
专利内容由知识产权出版社提供
摘要:本发明公开了一种基于IAP在线升级待升级固件传输校验设计方法,该方法首先设计IAP范围的最后1k地址用作数据校验区和用户存储特定数据区,IAP传输流程如下:101、主控拉低微处理器的RESET脚,然后拉高,微处理器完成复位;102、主控通过IC向微处理器的0x0000寄存器写入升级命令;103、将待升级的固件进行分组,微处理器将数据写入Flash;104、向0xEC00地址发送固件校验码;105、读APROM版本号,重新上电后进入APP或者发送进入APP命令向微处理器的
0x0000写入相应的字节跳过烧写命令。
本发明确保数据传输正确的基础上提高效率,加强数据正确性、提高系统可维护性。
申请人:芯海科技(深圳)股份有限公司
地址:518067 广东省深圳市南山区南海大道1079号花园城数码大厦A座9层
国籍:CN
代理机构:深圳市凯达知识产权事务所
代理人:刘大弯
更多信息请下载全文后查看。
无线传感器网络节点远程升级设计与实现童世华;李毅;谢磊【摘要】Aiming at the difficult situation of Wireless sensor network node upgrade,a solution based on IAP(In Applica-tion Programming)technology is proposed to realize remote upgrade of wireless sensor network node's own program. Combined with existing microcontroller IAPtechnology,wireless sensor network technology and Ethernet,the scheme uses network controller as a core and designs the wireless sensor network nodes supporting IAP and achieves PC soft-ware based MFC for analysis and distribution of firmware files. The test results show that the scheme solves the diffi-cult problem of wireless sensor network node upgrade and has good application prospects.%针对无线传感器网络节点升级困难的现状,提出了一种基于IAP(In Application Programming)技术实现对无线传感器网络节点自身程序实行远程升级的解决方案.方案结合现有的单片机IAP技术、无线传感器网络技术以及以太网,以网络控制器为设计核心,设计支持IAP的无线传感器网络节点,并实现基于MFC的上位机软件用于解析和下发节点文件.测试结果表明,该方案解决了无线传感器网络节点升级困难问题,具有良好的应用前景.【期刊名称】《电子器件》【年(卷),期】2017(040)005【总页数】5页(P1287-1291)【关键词】物联网;无线网络节点;远程升级;IAP;LwIP【作者】童世华;李毅;谢磊【作者单位】重庆电子工程职业学院,重庆401331;重庆电子工程职业学院,重庆401331;重庆邮电大学,重庆400065【正文语种】中文【中图分类】TP273无线传感器网络(简称WSN)被认为是信息感知与采集的一场革命,是21世纪高新技术领域的四大支柱产业之一。
stm32 iap 例子STM32是意法半导体(STMicroelectronics)推出的一款微控制器系列产品,具有高性能、低功耗、丰富的外设资源等特点,广泛应用于嵌入式系统开发中。
其中,IAP(In-Application Programming)是一种在应用程序运行时对存储器进行编程的技术,可以实现对STM32芯片的固件升级。
下面将列举一些关于STM32 IAP例子的应用场景和实现方法。
1. 在无线传感器网络中的固件升级:无线传感器网络通常由大量分布在不同位置的传感器节点组成,这些节点通常采用STM32微控制器。
通过IAP技术,可以在不中断传感器节点的正常工作的情况下,对节点的固件进行升级,提升系统的可靠性和灵活性。
2. 工业自动化设备的在线升级:工业自动化设备通常长时间运行,为了提高设备的安全性和可靠性,需要定期对设备的固件进行升级。
使用STM32的IAP技术,可以通过网络或串口等方式远程升级设备的固件,减少了维护人员的工作量和设备停机时间。
3. 智能家居设备的固件更新:智能家居设备通常包括智能插座、智能灯泡等,这些设备可以通过手机APP进行控制。
使用STM32的IAP技术,可以通过手机APP远程升级设备的固件,增加新的功能或修复已知bug,提升用户体验。
4. 汽车电子控制单元(ECU)的在线升级:现代汽车中,ECU起着控制发动机、变速器、车身电子等重要功能的作用。
使用STM32的IAP技术,可以通过车载诊断接口(例如OBD-II接口)进行ECU的在线升级,提升汽车性能和安全性。
5. 医疗设备的固件升级:医疗设备通常具有严格的要求,需要定期进行固件升级以修复漏洞或提供新的功能。
使用STM32的IAP技术,可以通过网络或者专有的医疗设备管理软件进行固件的升级,提高设备的可靠性和安全性。
6. 智能电网中的智能电表固件升级:随着智能电网的建设,智能电表作为电能计量和数据采集的终端设备,也需要进行固件的升级。
stciap升级原理
STC单片机的IAP(In-Application Programming)升级原理主要基于IAP功能,允许用户直接在应用程序中对程序进行编程。
STC对整个单片机的FLASH进行分区,以便进行IAP升级。
在IAP准备阶段,STC单片机在上电时检测是否有连续的‘d’字符。
如果检测到,则认为进入ISP(In-System Programming)准备阶段。
根据STC定义的协议,单片机接收数据帧,最后完成程序的擦除、写入。
如果在ISP准备阶段未收到数据帧,则超时退出ISP,执行用户代码区。
使用IAP功能实现程序的远程更新,需要两个程序:一个是boot程序,用来引导启动、接收数据、flash擦除与写入;另一个是app程序,即要运行的程序,也是要升级的程序。
请注意,IAP升级并不是所有芯片都支持,要看芯片是否支持IAP功能。
底层代码和上层应用程序都没有开源,为此宏晶科技推出了IAP系列单片机,即整颗MCU的Flash空间,用户均可在自己的程序中进行改写,从而使得有用户需要开发字节的ISP程序的想法得以实现。
以上内容仅供参考,建议查阅STC官方文档或咨询STC技术支持以获取最准确的信息。
基于IAP的单片机软件远程升级
黄家升
【期刊名称】《舰船电子对抗》
【年(卷),期】2007(030)003
【摘要】阐述了P89C669单片机的在应用中编程(IAP)技术以及利用IAP技术实现软件远程升级的方法,并着重讨论了单片机远程升级的可靠性.
【总页数】4页(P95-97,107)
【作者】黄家升
【作者单位】船舶重工集团公司723所,扬州,225001
【正文语种】中文
【中图分类】TP368.1
【相关文献】
1.基于ATMEGA128单片机的电压监测仪软件远程升级 [J], 王晓莲
2.基于IAP的煤矿安检分站远程升级技术的研究 [J], 卢名哲
3.基于GPRS与IAP技术的监控系统远程升级软件设计 [J], 李富民;周风余;姜志飞
4.基于TCP/IP的单片机软件远程升级 [J], 刘生华;何鹏举;鄢化彪
5.基于ARM的煤矿监控分站IAP远程升级技术 [J], 丁远;刘鹏;邹德东;宁亮;毛红民
因版权原因,仅展示原文概要,查看原文内容请购买。
基于GPRS与IAP技术的监控系统远程升级软件设计李富民;周风余;姜志飞【摘要】基于GPRS无线网络通信技术和IAP(In Application Programming)技术,针对STM32L系列低功耗MCU,设计并实现了一种适用于远程监控系统的无线远程程序升级软件.大量实验及应用表明,该软件能够根据上位机的要求,对终端设备进行快速准确的程序更新,同时最大限度地保证了终端设备不间断运行,避免了传统终端设备需要人到现场进行升级程序的麻烦,有效降低了人工成本.【期刊名称】《单片机与嵌入式系统应用》【年(卷),期】2016(016)008【总页数】4页(P14-16,19)【关键词】STM32L;IAP;无线网络;远程升级【作者】李富民;周风余;姜志飞【作者单位】山东大学控制科学与工程学院,济南250061;山东大学控制科学与工程学院,济南250061;山东大学控制科学与工程学院,济南250061【正文语种】中文【中图分类】TP36由于人工监测存在成本高、效率低、数据的实时性和准确性较差等缺陷,基于无线网络的远程监控系统越来越广泛地被应用到城市燃气输配管线泄露监测、远程电网质量监控等过程中[1]。
并且行业对远程监控终端系统的功能、性能及规模不断提出更高的要求,需要系统能够进行及时的维护和升级。
但是管线监控终端系统分布范围广,并且大部分都安装在地下管道中,恶劣的环境及条件给监控终端系统维护和程序升级带来极大的不便。
针对上述问题,本文对基于STM32L151VCT6微控制器的嵌入式监控终端远程在线升级软件进行了设计,大大提高了设备性能,降低了维护成本。
本文设计的远程监控终端硬件系统整体结构如图1所示。
系统控制核心选用的是ST公司的一款工业级微控制器STM32L151VCT6,它是基于Cortex-M3内核的超低功耗32位MCU,拥有丰富的外设和增强的I/O功能,运行频率为32 MHz;具有256 KB FLASH和32 KB SRAM,内部支持自编程,具有多种boot方式。
基于IAP的远程升级设计写在前面:三个周之前,我突然想写一个远程升级的程序。
那个时候我只是大概知道IAP 的意思是在应用编程,但怎么编,我还一无所知。
我给自己定下一个个阶段目标,从最基础的代码一点点写起,解决一个又一个的问题。
三个周之后,我用自己设计的方法实验了50多次,无一例升级失败。
三个周来,遇到了很多的不解、困惑,甚至是想放弃,但我现在想说的是:很多未知的困难会挡在我们面前,我们会感觉毫无头绪甚至觉得毫无出路忍不住要放弃,但多坚持一下,那些困难不但能烟消云散还能带给我们进步。
本设计是基于LPC2114和Keil MDK(V4.10),但所有支持IAP的处理器都可借鉴本方案,重要的是思想,而不是用什么。
0 引言在应用编程(IAP)技术为系统在线升级和远程升级提供了良好的解决方案,也为数据存储和现场固件的升级都带来了极大的灵活性。
通常可利用芯片的串行口接到计算机的RS232口、通过现有的Internet或、无线网络或者其他通信方式很方便地实现在线以及远程升级和维护。
本文以NXP的LPC2114 ARM微处理器为平台,以Keil MDK为开发工具,阐述IAP的原理、Flash的划分、分散加载机制、中断重映射以及在线升级的实现方案及其优化。
本方案使用多种校验技术,最大限度的保障传输数据的正确性;使用bootloader机制,即使因意外事件(断电,编程Flash失败等)造成升级失败后,程序也能返回到升级前的状态。
1 LPC2114的Flash规划1.1 扇区描述LPC2114共有128KB片内Flash,共分为16个扇区,分别为0扇区~15扇区,每个扇区为8KB存储空间。
其中第15扇区出厂时被固化为Boot Block区,控制复位后的初始化操作,并提供实现Flash 编程的方法。
所以用户可用的Flash空间只有120KB。
IAP程序固化于Boot Block中,IAP操作是以扇区为单位,并占用片内RAM的高32字节。
基于IAP程序远程更新设计在车载乘客信息显示器中的应用李卫红;张凌云;陈天喜;李伦;刘东亮
【期刊名称】《机车电传动》
【年(卷),期】2012()2
【摘要】为克服车载乘客信息显示器的传统程序更新方法的缺点,提出了一种基于IAP远程更新程序的方法,并着重阐述了该方法的原理和运行流程。
该方法很好地解决了传统程序更新方法不灵活,拆卸工作量大的问题。
【总页数】3页(P79-81)
【关键词】IAP;远程更新;片内FLASH;乘客信息显示器;ARM
【作者】李卫红;张凌云;陈天喜;李伦;刘东亮
【作者单位】株洲南车时代电气股份有限公司技术中心
【正文语种】中文
【中图分类】TP311.52;U266.2
【相关文献】
1.基于IAP功能单片机的远程更新系统设计 [J], 朱飞龙;杨鸣
2.基于IAP的ARM7程序在线更新设计 [J], 梁伟
3.利用LPC2214的IAP功能实现程序远程更新 [J], 赵会宾;田庆春
4.基于LTE-M的地铁车载乘客信息系统研究与设计 [J], 张功升;郭秀清;陈永生
5.基于IAP技术的远程固件更新系统设计与实现 [J], 檀朝新; 张杨; 马柱; 徐钧; 梅彬
因版权原因,仅展示原文概要,查看原文内容请购买。
基于IAP的远程升级设计写在前面:三个周之前,我突然想写一个远程升级的程序。
那个时候我只是大概知道IAP 的意思是在应用编程,但怎么编,我还一无所知。
我给自己定下一个个阶段目标,从最基础的代码一点点写起,解决一个又一个的问题。
三个周之后,我用自己设计的方法实验了50多次,无一例升级失败。
三个周来,遇到了很多的不解、困惑,甚至是想放弃,但我现在想说的是:很多未知的困难会挡在我们面前,我们会感觉毫无头绪甚至觉得毫无出路忍不住要放弃,但多坚持一下,那些困难不但能烟消云散还能带给我们进步。
本设计是基于LPC2114和Keil MDK(V4.10),但所有支持IAP的处理器都可借鉴本方案,重要的是思想,而不是用什么。
0 引言在应用编程(IAP)技术为系统在线升级和远程升级提供了良好的解决方案,也为数据存储和现场固件的升级都带来了极大的灵活性。
通常可利用芯片的串行口接到计算机的RS232口、通过现有的Internet或、无线网络或者其他通信方式很方便地实现在线以及远程升级和维护。
本文以NXP的LPC2114 ARM微处理器为平台,以Keil MDK为开发工具,阐述IAP的原理、Flash的划分、分散加载机制、中断重映射以及在线升级的实现方案及其优化。
本方案使用多种校验技术,最大限度的保障传输数据的正确性;使用bootloader机制,即使因意外事件(断电,编程Flash失败等)造成升级失败后,程序也能返回到升级前的状态。
1 LPC2114的Flash规划1.1 扇区描述LPC2114共有128KB片内Flash,共分为16个扇区,分别为0扇区~15扇区,每个扇区为8KB存储空间。
其中第15扇区出厂时被固化为Boot Block区,控制复位后的初始化操作,并提供实现Flash 编程的方法。
所以用户可用的Flash空间只有120KB。
IAP程序固化于Boot Block中,IAP操作是以扇区为单位,并占用片内RAM的高32字节。
下表列出LPC2114器件所包含的扇区数和存储器地址.表1.1 LPC2114 Flash 器件中的扇区1.2 Flash的扇区划分本设计将Flash划分为四个区,扇区0存放跳转程序和升级引导程序(Bootloader)。
分站上电后执行跳转程序,跳转到用户程序处。
用户程序运行过程中,如果接收到升级指令,会从用户程序跳转到引导程序区(Bootloader),接收新程序数据包,完成Flash编程并跳转到新程序区执行程序。
扇区1~扇区7为程序存储低区;扇区8~扇区13为程序存储高区;扇区14存放当前程序运行区域标志,如果当前程序运行在高区,该标志区的最低四个字节为0x00010000,如果当前程序运行在低区,该标志区的最低四个字节为0x00008000。
2 IAP的原理与软件设计2.1 IAP的原理IAP函数是固化在微处理器内部flash上的一些函数代码,最终的用户程序可以直接通过调用这些函数来对内部flash进行擦除和编程操作。
LPC2114微处理器的内部flash有一个块称为Boot Block,位于flash的顶端,可供调用的IAP函数就位于该块中。
上电后Boot Block 被映射到内部地址空间的顶端,同样IAP函数人口地址也被映射到地址0x7ffffff0处。
用户可通过跳转到该地址来调用相应的lAP函数。
2.2 IAP 命令对于在应用编程来说,应当通过寄存器r0 中的字指针指向存储器(RAM)包含的命令代码和参数来调用IAP 程序。
IAP 命令的结果返回到寄存器r1 所指向的返回表。
用户可通过传递寄存器r0 和r1 中的相同指针重用命令表来得到结果。
参数表应当大到足够保存所有的结果以防结果的数目大于参数的数目。
参数传递见图2-1。
参数和结果的数目根据IAP命令而有所不同。
参数的最大数目为5,由“将RAM 内容复制到Flash”命令传递。
结果的最大数目为2,由“扇区查空”命令返回。
命令处理程序在接收到一个未定义的命令时发送状态代码INV ALID_COMMAND。
IAP 程序是thumb 代码,位于地址0x7FFFFFF0。
图2-1 IAP的参数传递表2-1描述了IAP的命令。
表2-1 IAP 命令汇总IAP命令2.3 IAP 编程函数接口IAP 功能可用下面的C 代码来调用。
定义IAP 程序的入口地址。
由于IAP 地址的第0 位是1,因此,当程序计数器转移到该地址时会引起Thumb 指令集的变化。
#define IAP_LOCA TION 0x7ffffff1定义数据结构或指针,将IAP 命令表和结果表传递给IAP 函数unsigned long command[5];unsigned long result[2];定义函数类型指针,函数包含2 个参数,无返回值。
注意:IAP 将函数结果和R1 中的表格基址一同返回。
typedef void (*IAP) (unsigned int [ ] , unsigned int [ ]);IAP iap_entry;设置函数指针iap_entry=(IAP) IAP_LOCA TION;使用下面的语句来调用IAP。
iap_entry (command , result);Flash 存储器在写或擦除操作过程中不可被访问。
执行Flash 写/擦除操作的IAP 命令使用片内RAM 顶端的32 个字节空间。
如果应用程序中允许IAP 编程,那么用户程序不应使用该空间。
3 LPC2114升级实现过程由于在升级程序软件设计中,分散加载机制、中断向量的重映射、软中断等的实现还与所使用的编译器紧密相关,因此,本文结合Keil MDK(V4.10)编译工具,来详细阐述升级程序的实现过程。
3.1 总体思路分站上电后,首先运行位于Flash 0x000~0x3FF中的跳转程序。
跳转程序会读取位于14扇区的当前程序运行标志,如果该扇区的最低四个字节为0x00010000,表示当前程序运行在高区,跳转程序会跳转到Flash的0x00010000处执行用户程序;如果该标志区的最低四个字节为0x00008000,表示当前程序运行在低区,跳转程序会跳转到Flash的0x00002000处执行用户程序。
用户程序正常执行后,会按照设计进行正常的程序采集、数据处理传送。
当接收到升级命令后,用户程序会跳转到Flash的0x00000400处的Bootloader处进行升级的一些操作。
当升级成功后,Bootloader程序更新当前程序运行区标志,程序跳转到新程序处运行,如果升级不成功,返回升级前的程序。
流程图如下所示:3.2 跳转程序的设计跳转程序是分站上电后最先运行的程序,根据当前程序运行区标志,跳转到相应的用户程序区执行。
本段程序占用Flash的最低1K字节空间,与Bootloader同在第0扇区。
跳转程序的启动代码仅初始化堆栈,不使用PLL和存储加速功能。
代码1描述了跳转程序的主要启动代码。
; Enter User Mode and set its Stack PointerMSR CPSR_c, #Mode_USRMOV SP, R0SUB SL, SP, #USR_Stack_Size; Enter the C codeIMPORT __mainLDR R0, =__mainBX R0代码1:跳转程序启动代码当跳转程序确定要跳转到高区用户程序或者低区用户程序后,使用函数指针跳转到0x00010000处(高区用户函数入口地址)或0x00002000处(低区用户函数入口地址)。
定义函数指针:void (*UserProgram)() ;指定入口地址:UserProgram = (void (*)()) (0x00010000);UserProgram = (void (*)()) (0x00002000);实现跳转:(*UserProgram)() ;要将用户代码精确定位到Flash的0x00010000处(高区用户函数入口地址)或0x00002000处(低区用户函数入口地址),需要使用编译器的分散加载机制,将在Bootloader中详细描述实现过程。
另外,跳转程序还在烧录代码的同时初始化当前程序运行区标志,即对Flash的0x0001C000地址处写入0x00008000,表示当前用户程序在低区。
主要使用了编译器的__at关键字:精确定位变量。
需要注意的是,使用该关键字必须包含头文件absacc.h。
const uint32 x __at(0x0001C000)=0x00008000; //初始化用户程序标志区,默认运行低区3.3 升级程序Bootloader的设计升级程序的好坏,在很大程度上取决于Bootloader设计的好坏。
一个优秀的IAP升级Bootloader,必须做好升级中出现故障等异常的处理。
保证系统不会崩溃,即使升级失败,也能返回升级前的程序。
Ø 有升级指令,进行初始化工作(串口、定时器、看门狗)Ø 接收升级数据包,检测帧头、长度、帧号、数据区校验,最大程度的保证升级数据的完整性、正确性。
Ø 实时检测接收状态,10 S内没有接收到数据或接收到的数据包都是错的,则退出升级,返回原程序。
Ø 接收的数据按照512字节一组写入Flash,写入后再读出与原数据进行对比校验,校验成功后,本次编程Flash成功。
允许连续3次编程Flash,三次都不成功,退出升级程序,执行原程序。
Ø 升级成功后,更新当前程序运行区标志,跳转到新程序,同时原程序保存。
本设计的Bootload位于Flash的0x400开始的扇区0存储区内,使用分散加载机制,将程序的入口地址定位到0x00000400处。
当用户程序接收到升级指令后,就会使用函数指针跳转到这个入口处。
3.3.1 使用IAP图3-1 描述了使用IAP编程Flash所必须的步骤。
3.3.1.1 定义系统参数在使用IAP前,需要定义一些系统参数,比如系统时钟、IAP中断入口、输入输出缓存。
#define IAP_CLK 11059200UL#define IAP_LOCA TION 0x7FFFFFF1typedef void(*IAP)(uint32 [],uint32 []); //定义函数类型指针IAP iap_entry=(IAP)IAP_LOCA TION; //设置函数指针unsigned long command[5] = {0,0,0,0,0};unsigned long result[2]= {0,0};代码3-1:定义系统参数3.3.1.2 选择扇区在任何擦除和编程Flash之前,必须选中扇区,可以选中一个或多个。