一种新的程序在线升级的实现(学习)

本文介绍了一种通过串口进行程序在线升级的方法,适用于嵌入式系统。在运行过程中可升级,并支持失败后的恢复。上位机通过自定义通讯协议将升级文件发送给MCU,MCU解析后存储在Flash中,通过Bootloader重新装载实现升级。该方法节省资源,采用中断方式处理串口数据,确保数据可靠性,并在升级前后进行CRC校验和错误检查。
摘要由CSDN通过智能技术生成

介绍一种新的程序在线升级方法,以及程序在线升级在嵌入式系统中的应用和实现。设计将从系统原理和实现介绍该程序在线升级方法。利用串口作为通讯方式,自定义通讯协议。

上位机将升级文件传给下位机,下位机将数据解析后存储在内部Flash中。解析成功后下位机通过Bootloader重新装置程序实现程序升级。

随着电子技术、计算机技术和通信技术的迅猛发展,嵌入式系统已经广泛应用于工业、军事、通信、消费电子等领域,但是面对新技术的不断涌现和对系统功能、性能以及规模要求的不断提高,开发者必须能够针对客户的需求和软件中存在的Bugs及时对软件进行升级或维护,以延迟设备使用周期,改善设备性能,增强设备适应性。

传统的嵌入式软件升级通常由维护人员到达设备工作现场,并拆卸设备烧写FLASH。当设备数目庞大且分布范围广时,传统的软件升级方法则显得束手无策。设计出了一种使用在线升级程序实现高效的数据下载方法。

系统原理

在这里插入图片描述
系统由上位机软件、串口和MCU终端组成。
上位机软件与MCU终端通过串口进行通信。

与传统的程序升级不同,本设计介绍的程序在线升级方法是嵌入在应用程序中,**在程序运行的过程中可以实现程序在线升级,并且当程序在线升级失败时还可以对程序进行恢复。**而传统的程序在线升级是在BOOTLOADER代码中实现程序升级。

程序升级结构

其中电平转化芯片是TTL转232。上位机软件通过电平转化芯片与MCU连接,用户需要进行程序升级时,先通过上位机软件对要升级的二进制代码文件进行解析,检测该升级代码是否符合MCU的二进制代码。然后读取MCU标志区中的升级标志位,若标志为真,则支持程序升级,否则不支持升级。然后上位机软件将升级代码的二进制解析后下载到MCU临时区中。

利用串口进行程序升级节省了很多外部资源,在数据传输的过程中只需要一个电平转芯片就可以实现,因为PC的串口信号电平与MCU的串口信号电平不匹配,所以需要TTL转232转化芯片实现。

MCU升级工作流程

由于程序在线升级代码是嵌入在应用程序中,所以支持升级程序的代码文件应包含程序升级功能的代码。

通信采用主从方式进行传送和接收,上位机软件作为主机发送命令,MCU作为从机队命令进行响应和回复。

在串口驱动层接收到数据后,将接收到的数据传递给协议层,协议层队数据进行解析后将数据放入缓冲区,待应用层队数据进行各种处理。

应用层将接收到的数据进行处理,并对各种命令按照一定的要求进行回复,应用层将要发送的数据传递给协议层,经协议层进行协议的处理后,协议层将处理后的数据传递给驱动层,并由驱动层队数据进行发送。

上位机软件工作流程

在通信的过程中,上位机作为主机进行命令发送并对命令的回复进行解析。数据的任何传输源自于一个读取或写入文件的连接请求。

将来自于应用层的数据传递给协议层,协议层对数据进行协议上的处理,并传递给物理层发送数据。

由于串口通信无法保证数据传输的可靠性,所以应用中在应用层添加了超时、重传机制来保证数据传输的可靠性。在每一帧数据中又采用CRC校验来保证数据没有出错。

在程序升级之前,上位机软件会对升级文件进行检查,以防误程序升级文件有误。程序升级文件传输完成后,下位机会对接收到的升级文件进行CRC校验,并传输至上位机,上位机通过该校验码判断程序升级文件中是否又数据出错。在上位机软件运行的过程中,上位机软件会打印与程序有关的信息来监控程序升级。

软件实现

因为升级的代码文件是通过串口下载到MCU的内部FLASH中的,所以串口的工作显得尤为重要。
为节省CPU的资源,串口程序的接收和发送都采用中断的方式进行。这样能够保证CPU能够及时的接收串口数据。
当有中断产生时,CPU根据ISQ的中断入口地址跳转到对应的中断服务程序。
当有数据来到后,物理层将接收到的数据存储到缓冲区中。

FLASH擦除
可以通过分页机制来实现对寻址空间的扩展和FLASH页面的使用和管理。所以FLASH的擦除操作可以进行整体擦除,也可以擦除某一地址开始的一个扇区,即擦除FLASH不能擦除某一字节或一次擦除小于512字节。

  1. 设置时钟分频,设置块号和页号
  2. 定位要擦除的扇区
  3. 写扇区擦除命令
  4. 等待命令执行完成

FLASH编程

  1. 设置时钟分频,设置块号和页号
  2. 向指定的地址写若干字数据
  3. 等待上一条命令执行完成
  4. 如果未写完数据,则递增源地址和目标地址,重复2和3步骤

看门狗程序

  1. 上位机将代码文件传输至MCU后,设置相应升级标志,表明升级程序已经成功下载至下位机。
  2. 为了让MCU运行升级后的程序,则需要让MCU重新启动,此时设置的方法是禁止看门狗模块,当看门狗运行时间到,没有清除看门狗标志,则MCU会重新启动运行升级程序。
程序功能: 本程序是检查程序版本并提供HTTP方式在线程序! 支持多个文件、不同目录更。 windows环境通用。 使用: 1.把所有需要更的文件名称和版本号信息添加到更列表XML文件中,XML文件内容格式: <?xml version="1.0" encoding="gb2312"?> BPL\FORM.bpl 2012.6.4.0 main.exe 2012.6.5.0 注意: 1)与XML文件同一个目录的,文件名不要含目录信息。 2)没有版本号的文件,每次发布时,自己编一个不同的版本号填入XML. 3)XML文件清单信息,每次发布都应包含所有的程序文件。 4)更列表XML文件与程序文件一同发布到IIS虚拟目录中(windows环境下的)。 2.手动直接执行UPDATE.EXE文件更时, 需要把更列表XML文件的URL地址写在文本配置文件CLIENTDB.LXH中。 内容格式如下: [UPDATE] XMLURL=HTTP://192.168.0.80/RELEASE/FILELISTS.XML 3.由主控程序调用时,调用代码格式如下: ShellAPI.ShellExecute(0, 'Open', 'UPDATE.EXE', PWideChar(Params), '',SW_SHOWNORMAL); 其中Params参数,字符串内容必须按顺序分别为: 更列表XML文件的URL地址 + 主控程序文件名 + 个性程序标题, 共传入三个入口参数,每个参数之间用空格隔开。 可以不传参数,则默认用CLIENTDB.LXH配置文件中的XML URL地址; 可以只传1个参数,参数此时必须为XML URL地址; 如果传第2个参数,更完毕会自动启动主控程序; 如果传第3个参数,则更程序标题为第3个参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

饼干饼干圆又圆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>