新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 嵌入式设备远程在线升级技术的研究

嵌入式设备远程在线升级技术的研究

作者: 时间:2012-07-06 来源:网络 收藏

2.2 系统软件设计
2.2.1 Bootloader工作原理
Bootloader位于FLASH的起始处,主要是用来启动系统,并且装载用户程序执行,如果没有Bootloader,硬件启动成功后,将直接运行用户应用程序。反之,Bootloader的启动代码将先被执行,进行一系列的初始化操作后,根据预先设定的条件,选择执行用户应用程序或升级控制程序。
Bootloader包含两种不同的操作模式:“启动加载”模式和“下载”模式。启动加载模式:这种模式也称为“自主”模式。也就是Bootloader从目标机上的某个固态存储上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是Boodoader的正常工作模式。下载模式:在这种模式下,目标机上的Bootloader将通过串口连接或网络连接等通信手段从PC下载文件,比如:下载内核映像和根文件系统映像等。从主机下载的文件通常首先被Bootloader保存到目标机的RAM中,然后再被Bootloader写到目标机上的FLASH类固态存储中。Bootloader工作原理流程图如图3所示。

本文引用地址:https://www.eepw.com.cn/article/148804.htm

d.JPG


2.2.2 FLASH存储器编程及升级流程
终端的升级主要是对ARM芯片内部的FLASH存储器的原始数据进行擦除以及新数据的下载的过程。本采用IAP(In-Application Programming)进行FLASH编程,在应用编程IAP是从结构上将FLASH存储器映射为两个存储体,当运行一个存储体上的用户程序时,可对另一个存储体重新编程,之后将程序从一个存储体转向另一个;同时还可以在应用程序控制下,对程序某段存储空间进行读取、擦除和写入操作。IAP的实现极为灵活,可利用单片机的串行口接到计算机的RS232口,通过专门设计的固件程序来编程内部存储器,可以通过现有的Inte rnet或其他通讯方式很方便地实现升级和维护。
为了实现升级将ARM芯片内部的FLASH存储器划分为Bootloader区(程序启动区)、升级处理区、用户代码0区、用户代码1区。如图4所示。

e.JPG


启动区主要用于存放系统初始化代码以及引导程序Boofloader,当CPU复位后,自动执行该段程序代码,该程序的主要功能是读取片外EEPROM中相关标志,判定系统的运行模式,若是工作模式,则根据片外EEPROM中其他标志,跳转到规定的应用程序区的首地址;若是升级模式,则进入软件升级处理部分的首地址。
升级处理区主要是负责接收程序代码数据包、校验、固化程序代码等;当升级完毕后,将修改片外EEPROM中相关标志,指示CPU复位后的运行模式和复位后应运行的程序区。
用户代码0区和用户代码1区用于交替存放当前用户代码以及升级代码,若当前用户代码放在0区,则将接收到的升级代码存放在1区,此时用户代码1区便成为当前终端指向的用户程序,而用户代码0区则用于存放下次升级时的新代码。
终端上电后首先进入Bootloader区进行系统的初始化,接着终端从片外的EEPROM中读取升级配置,包括升级标志位,已收到的最后一个数据包的ID等,若终端处于升级状态,则发出向服务器索要升级数据的指令,此时指令中将包含终端上次已接收到的最后一个数据包的ID,这样可以避免服务器重复发送数据包,实现续传的功能。终端通过Internet接收数据包并对数据包进行校验判断以保证接收到正确的数据。由于FLASH中进行编程的最小单位是页,当接收到的数据达到一页后,通过IAP进行编程,编程结束后将最后一条数据包的ID保存在EEP ROM中,所有升级数据发送结束并编程成功后,通过IAP指示CPU复位后应运行的应用程序区域。具体的软件升级流程图如图5所示。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)


评论


相关推荐

技术专区

关闭