首页 » 互联网 » Cortex-M3内核芯片LPC1778轨范远程进级的实现_法式_终端

Cortex-M3内核芯片LPC1778轨范远程进级的实现_法式_终端

落叶飘零 2025-01-13 14:35:21 0

扫一扫用手机浏览

文章目录 [+]

远程升级功能利用的硬件资源Cortex-M3内核LPC1778、外部Data FLASH、EEPROM、GPRS/4G通信模块,硬件连接示意图如图1所示。

图1 远程升级所需硬件资源方框图

Cortex-M3内核芯片LPC1778轨范远程进级的实现_法式_终端 Cortex-M3内核芯片LPC1778轨范远程进级的实现_法式_终端 互联网

(1)GPRS通信模块,数据透明传输,通过UART接口与LPC1778连接,实现远程通信。

Cortex-M3内核芯片LPC1778轨范远程进级的实现_法式_终端 Cortex-M3内核芯片LPC1778轨范远程进级的实现_法式_终端 互联网
(图片来自网络侵删)

(2)Cortex-M3内核LPC1778,具有96KB RAM、512KB的FLASH,供应IAP接口函数[1],为程序的远程更新供应了必要条件。

(3)I2C接口的EEPROM,用于保存程序远程升级时所需的参数,例如:程序升级标志,数据包总数、数据包吸收标志等,通过这些参数可实现定时升级以及断点续传等功能。

(4)SPI接口的Data FLASH,用于保存吸收到的新版本的程序数据以及备份老版本的程序。
Data FLASH共1M Bytes,个中512K Bytes(留有余量)用于保存新版本的程序,其余512K Bytes用于备份老版本的程序。
Data FLASH容量的选择是跟所利用的MCU的FLASH大小干系的,即Data FLASH的容量要大于即是2倍的MCU 的FLASH大小。
由于本设计中选用的MCU(LPC1778)的FLASH大小为512KB,以是相应的Data FLASH就选1M Bytes。

2 远程升级的程序实现方案

在本方案中,将终端程序分为勾引程序(类似Bootloader,此Bootloader并非固化在LPC1778芯片内部用于支持ISP的代码,而是由用户编写的代码)和运用程序。

个中,勾引程序被定位在LPC1778 FLASH的地址0x0—0x7FFF位置,这样一来,系统一旦复位最先运行的便是勾引程序(ISP模式除外)。
勾引程序的存储空间大小分配为32KB,因此编写勾引程序时,必须不能超过32KB,否则会覆盖到运用程序代码,造成启动非常。
运用程序代码的地址则是从0x8000—0x7FFFF,共480KB,即运用程序的代码量不能超过480KB。
这480KB的运用程序都可以通过GPRS模块进行远程的更新。

2.1 勾引程序(Bootloader)

勾引程序的紧张浸染是在系统复位时,进行一些初始化,然后从EEPROM中读取参数并判断是否要更新运用程序或是跳转到运用程序实行。
如果要进行运用程序的更新,则从Data Flash中读取数据并调用IAP函数完成程序的更新,更新完成并校验通过后跳转到运用程序。
勾引程序流程如图2所示。

图2 勾引程序流程图

须要把稳的是,系统复位时,中断向量表是固定在地址0x00000000,勾引程序正是存放于该位置开始的地方,因此是可以运行的。
但运用程序的代码是从0x8000的地址开始存放的,因此勾引程序在跳转到运用程序之前还须要将中断向量表重新映射到0x8000的位置,否则程序无法正常运行。
当然,中断向量表的重新映射对付LPC1778并非难事,由于该芯片供应了一个向量表偏移寄存器,只须要向该寄存器写入运用程序的起始地址0x8000即可。
其余,勾引程序加载运用程序时须要重新设置堆栈指针及PC指针,这部分最好用汇编措辞实现。
代码如下:

__asm void app_boot_load( uint32 app_address )

{

LDR SP, [R0] ;加载运用程序堆栈指针地址

LDR PC, [R0, #4] ;加载运用程序PC指针地址

}

该函数的入口参数app_address即为运用程序的起始地址0x8000,由于只有一个参数,通过寄存器R0进行通报。
实行完以上程序后,即实现了勾引程序加载运用程序的过程。
此时,勾引程序开释内存并完备让出CPU的利用权,交由运用程序利用。

2.2 运用程序

运用程序即系统的主程序,为实现系统功能而编写。
对付照明监控终端,紧张实现通信、互换采集、开关量采集、掌握输出等功能,而对付热网智能终端则是实现通信、仿照量旗子暗记采集(温度、压力、流量、脉冲旗子暗记)、流量累积、热量累积、数据记录等功能。
其余运用程序还按照订定好的通信协议(见2.3),实现对远程升级数据的吸收、应答、保存等。
运用程序中远程升级数据交互的流程图如图3所示。

图3 运用程序中远程升级数据吸收流程图

主站软件不才发程序数据包时,终端无论是否吸收成功都是不应答的。
这紧张是考虑GPRS通信的特点,网络状况好的时候,可以连续的发数据,提高发送效率,如果采取应答的办法则效率会低落很多。
主站不才发完所有数据包后,从终端读取数据包状态,即可理解哪些包没有发送成功,未发送成功的再次重发。
由于终端保存了所有数据包的吸收状态,这样也就很随意马虎实现通信中断后的数据续传。

其余,为了实现升级时备份老版本的程序,将Data FLASH分了2个区(见第2节第4条),定义为H区和L区。
终端初次运行时,将目前运行的版本的程序备份在Data FLASH的H区(仅在初次运行时备份)。
第一次远程升级时,将吸收到的新版本的程序数据保存在L区,这样在H区的便是老版本的程序,而L区的便是新版本的程序。
再次远程升级时则是将数据保存在H区,L区的程序则变成了老版本的备份程序。
这样循环交替,就始终担保L区,H区一个是新版本程序,一个为老版本程序。
一旦升级涌现问题,勾引程序还能规复老版本的程序,提高了可靠性。

根据本方案,运用程序中仅仅是完发展途升级数据的吸收、保存,并不直接进行程序的更新,即没用调用IAP函数进行代码的更换更新。
以是数据的交互过程对程序正在运行的其它任务没有任何影响,用户乃至觉得不到在进行远程的升级。

2.3 通信协议

为了能可靠的完发展途升级过程,高效、完善的通信协议是必不可少的,在本方案中我们也根据GPRS通信的特点订定了通信协议。

协议的帧格式如表1:

表1

远程升级共须要利用4条命令:

(a)查询终端当前软件的版本信息(可选);

(b)远程升级准备(待升级程序总包数下发);

(c)发送升级程序的数据包;

(d)查询数据包发送状态。

个中发送升级程序数据包的帧格式如表2:

表2

即把经HEX转BIN后的数据每512字节分为一段,加上2字节包号,4字节的起始地址,以及CRC校验组成一包数据。

2.4 远程升级的完全过程

经主站软件合营,一次完全的程序升级流程如下:

a).上位机软件打开准备升级的HEX文件转换为BIN格式并分包;

b).查询终端当出路序的版本信息;(可选)

c).上位机软件发送本次要升级程序的总包号,并作为远程升级的要求命令;

d).等待终端应答;

e).收到应答后,开始发送所有本次远程升级的数据包(每包之间的韶光间隔应在500mS—1S之间),不必等待终端应答;

f).所有数据包发送完后,上位机发送升级完成状况查询。
终端返回数据包吸收状态表(表格中为1的位解释该包数据已吸收并保存成功,为0解释吸收或保存失落败);

g).上位机根据数据包吸收状态表连续发送未保存成功的数据包,不必等待终端应答;

h).重复f—g步骤,直到终端返回所有数据包吸收并保存成功。

i).终端吸收完所有数据包后,检讨升级韶光是否到,如果升级韶光到则停滞喂狗,复位系统,进入勾引程序中,开始程序的更新。
如果设置的是数据包吸收完后立即升级,则在数据包吸收完后,延时30S复位系统,进入勾引程序开始升级。

以上看似繁琐的过程,实在对付操作职员来说只须要完成步骤a)、b),其它步骤均由主站软件完成。
测试软件的界面图4所示。

2.5 HEX文件的合并

由于在本方案中把程序分为了勾引程序和运用程序,这就一定导致编译后会产会生2个HEX文件,对付生产部门来说,就意味着同一个芯片要烧写2次程序,如果大批量生产,这是无法接管的。
因此我们考虑将编译后的Bootloader.hex文件和APP.hex文件合并,实际证明这是可行的。
通过查阅HEX文档存储格式的干系文档,终极找到理解决办法。

经由合并后,终极就只有一个HEX文件,这样不但办理了影响生产效率的问题,同时也便于管理。
对付主站软件来说,升级时只须要跳过32KB的勾引程序空间从地址0x8000开始解析数据即可。
HEX文件的合并过程请参阅有关HEX格式的文档,这里不再阐述。

图4 远程升级主站测试软件

3 远程升级测试结果

该远程升级方案实现后,进行了测试,如图4所示。

(1)HEX文件被分为126个包,每帧数据的发送间隔为800ms,第一次发送,126包数据有3包没有发送成功,即一次丢包率只有2.3%,一样平常只需重复一次即可百分百完成升级。
多次测试结果基本相同,在网络状况良好的情形下,也有一次就完成升级的。

(2)一次升级所花费韶光问题。
这个当然跟所要升级的程序大小有关,也与网络状况有一定的关系。
按照上述测试,126包(126×521 Bytes=63KB的程序)所耗韶光为126×800ms+3×800ms=1.72min,即所耗韶光为1.72分钟。

(3)由于在数据帧下发的过程中不须要被升级终端应答,因次可以同时对多台终端升级,这样效率更高。

(4)协议中许可一帧数据包含多个程序数据包,但是实际测试中创造每帧数据包含2个以上数据包(1024字节以上)时,丢包的概率就会增加很多。
缘故原由是数据帧太长,被分割开了,可能是GPRS通信做事器分割的也可能是网络运营商的系统分割的,目前还没有找到缘故原由。
如果能实现一帧数据中包含多个程序包,将能大大的提高程序升级的效率。

(5)远程升级的可靠性。
通信过程中的数据是保存在外部Data FLASH中,并没进行程序的更新,因此纵然涌现通信中断,也不会影响当前运行的程序。
当程序复位并运行勾引程序进行更新时,全体过程是很快的,因此涌现问题的概率也很小,纵然涌现复位等非常情形,由于没有更新成功,复位后还会连续更新,直至程序更新成功。
如果保存在Data FLASH中的程序数据涌现非常,更新失落败,那么还会读取备份的程序规复到更新前的状态。
其余程序中也考虑多种非常情形的处理方法,确保升级过程可靠。

标签:

相关文章

教你玩单片机之DS1302_字节_数据

DS1302简介DS1302是一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采取SPI三线接口与CPU进行通信,并可采...

互联网 2025-01-15 阅读0 评论0

什么是幻彩灯珠_彩灯_像素

幻彩LED灯条有哪些种类Led幻彩灯条又叫Led全彩灯条、led梦幻灯条、led数字灯条等多种叫法,该产品采取恒流IC进行单点掌握...

互联网 2025-01-15 阅读0 评论0