介绍一种新的程序在线升级方法,以及程序在线升级在嵌入式系统中的应用和实现。设计将从系统原理和实现介绍该程序在线升级方法。利用串口作为通讯方式,自定义通讯协议。
上位机将升级文件传给下位机,下位机将数据解析后存储在内部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字节。
- 设置时钟分频,设置块号和页号
- 定位要擦除的扇区
- 写扇区擦除命令
- 等待命令执行完成
FLASH编程
- 设置时钟分频,设置块号和页号
- 向指定的地址写若干字数据
- 等待上一条命令执行完成
- 如果未写完数据,则递增源地址和目标地址,重复2和3步骤
看门狗程序
- 上位机将代码文件传输至MCU后,设置相应升级标志,表明升级程序已经成功下载至下位机。
- 为了让MCU运行升级后的程序,则需要让MCU重新启动,此时设置的方法是禁止看门狗模块,当看门狗运行时间到,没有清除看门狗标志,则MCU会重新启动运行升级程序。